PWM.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /*
  2. * PWM.c
  3. *
  4. * Created on: 14 janv. 2019
  5. * Author: e_rcluze
  6. */
  7. #include "PWM.h"
  8. #include "tim.h"
  9. #include "gpio.h"
  10. void PWMSetDutyCycle(uint8_t sortie, uint8_t pourcentage) {
  11. TIM_OC_InitTypeDef sConfigOC;
  12. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  13. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  14. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  15. sConfigOC.Pulse = PourcentageToValue(pourcentage);
  16. HAL_Delay(1);
  17. switch (sortie) {
  18. case 1:
  19. HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3);
  20. break;
  21. case 2:
  22. HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);
  23. break;
  24. case 3:
  25. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
  26. break;
  27. case 4:
  28. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2);
  29. break;
  30. case 5:
  31. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
  32. break;
  33. case 6:
  34. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
  35. break;
  36. case 7:
  37. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);
  38. break;
  39. case 8:
  40. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2);
  41. break;
  42. case 9:
  43. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3);
  44. break;
  45. case 10:
  46. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4);
  47. break;
  48. }
  49. }
  50. void PWMStart(uint8_t sortie) {
  51. switch (sortie) {
  52. case 1:
  53. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
  54. break;
  55. case 2:
  56. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
  57. break;
  58. case 3:
  59. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
  60. break;
  61. case 4:
  62. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
  63. break;
  64. case 5:
  65. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
  66. break;
  67. case 6:
  68. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
  69. break;
  70. case 7:
  71. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
  72. break;
  73. case 8:
  74. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
  75. break;
  76. case 9:
  77. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
  78. break;
  79. case 10:
  80. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
  81. break;
  82. }
  83. }
  84. void PWMStop(uint8_t sortie) {
  85. switch (sortie) {
  86. case 1:
  87. HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3);
  88. break;
  89. case 2:
  90. HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_4);
  91. break;
  92. case 3:
  93. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
  94. break;
  95. case 4:
  96. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
  97. break;
  98. case 5:
  99. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
  100. break;
  101. case 6:
  102. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4);
  103. break;
  104. case 7:
  105. HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);
  106. break;
  107. case 8:
  108. HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_2);
  109. break;
  110. case 9:
  111. HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3);
  112. break;
  113. case 10:
  114. HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_4);
  115. break;
  116. }
  117. }
  118. uint16_t PourcentageToValue(uint8_t val) {
  119. float t = ((100-val) * PWM_MAX) / 100; //Logic inverse (si 0 alors allumé si 1 alors eteint)
  120. return (uint16_t) t;
  121. }
  122. uint8_t POWMAX(uint8_t sortie){
  123. switch (sortie) {
  124. case 1:
  125. return 50;
  126. break;
  127. case 2:
  128. return 50;
  129. break;
  130. case 3:
  131. break;
  132. case 4:
  133. return 50;
  134. break;
  135. case 5:
  136. return 10;
  137. break;
  138. case 6:
  139. return 10;
  140. break;
  141. case 7:
  142. return 0;
  143. break;
  144. case 8:
  145. return 0;
  146. break;
  147. case 9:
  148. return 0;
  149. break;
  150. case 10:
  151. return 0;
  152. break;
  153. default :
  154. return 0;
  155. break;
  156. }
  157. }