PWM.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 S0:
  19. HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3);
  20. break;
  21. case S1:
  22. HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);
  23. break;
  24. case S2:
  25. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
  26. break;
  27. case S3:
  28. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2);
  29. break;
  30. case S4:
  31. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
  32. break;
  33. case S5:
  34. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
  35. break;
  36. case S6:
  37. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);
  38. break;
  39. case S7:
  40. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2);
  41. break;
  42. case S8:
  43. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3);
  44. break;
  45. case S9:
  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 S0:
  53. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
  54. break;
  55. case S1:
  56. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
  57. break;
  58. case S2:
  59. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
  60. break;
  61. case S3:
  62. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
  63. break;
  64. case S4:
  65. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
  66. break;
  67. case S5:
  68. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
  69. break;
  70. case S6:
  71. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
  72. break;
  73. case S7:
  74. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
  75. break;
  76. case S8:
  77. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
  78. break;
  79. case S9:
  80. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
  81. break;
  82. }
  83. }
  84. uint16_t PourcentageToValue(uint8_t val){
  85. HAL_Delay(1);
  86. return (uint16_t)val * PWM_MAX;
  87. }
  88. uint8_t PWMPourcentage(Heure *heure, Sortie *sortie){
  89. Heure hd,he;
  90. HeureAjout(hd,sortie->Demmarage,sortie->Pente);
  91. HeureSuppr(he,sortie->Extinxtion,sortie->Pente);
  92. if ((CompareHeure(*heure,sortie->Demmarage)>=0) & (CompareHeure(*heure,hd)<0)){
  93. return (DiffHeure(*heure,sortie->Demmarage)/sortie->Pente)*sortie->PuissanceMax;
  94. }
  95. else if ((CompareHeure(*heure,hd)>=0) &(CompareHeure(*heure,he)<=0)){
  96. return sortie->PuissanceMax;
  97. }
  98. else if ((CompareHeure(*heure,hd)>0) & (CompareHeure(*heure,sortie->Extinxtion)<=0)){
  99. return (DiffHeure(sortie->Extinxtion,*heure)/sortie->Pente)*sortie->PuissanceMax;
  100. }
  101. else{
  102. return 0;
  103. }
  104. }