PWM.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * PWM.c
  3. *
  4. * Created on: 14 janv. 2019
  5. * Author: e_rcluze
  6. */
  7. #include "PWM.h"
  8. #include "Tab.h"
  9. #include "tim.h"
  10. #include "gpio.h"
  11. extern Sortie tabSortie[10];
  12. extern uint8_t gl_Stop;
  13. extern uint8_t gl_Essai;
  14. void PWMSetDutyCycle(uint8_t sortie, uint8_t pourcentage) {
  15. TIM_OC_InitTypeDef sConfigOC;
  16. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  17. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  18. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  19. sConfigOC.Pulse = PourcentageToValue(pourcentage);
  20. //HAL_Delay(1);
  21. switch (sortie) {
  22. case 0:
  23. HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3);
  24. HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3);
  25. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
  26. break;
  27. case 1:
  28. HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_4);
  29. HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);
  30. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
  31. break;
  32. case 2:
  33. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
  34. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
  35. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
  36. break;
  37. case 3:
  38. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
  39. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2);
  40. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
  41. break;
  42. case 4:
  43. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
  44. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
  45. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
  46. break;
  47. case 5:
  48. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4);
  49. HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
  50. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
  51. break;
  52. case 6:
  53. HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);
  54. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);
  55. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
  56. break;
  57. case 7:
  58. HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_2);
  59. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2);
  60. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
  61. break;
  62. case 8:
  63. HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3);
  64. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3);
  65. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
  66. break;
  67. case 9:
  68. HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_4);
  69. HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4);
  70. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
  71. break;
  72. }
  73. }
  74. uint16_t PourcentageToValue(uint8_t val) {
  75. float t = ((100-val) * PWM_MAX) / 100; //Logic inverse (si 0 alors allumé si 1 alors eteint)
  76. return (uint16_t) t;
  77. }
  78. void GerePWM(uint16_t heure) {
  79. for(int i = 0; i<10;i++){
  80. if ((heure >= tabSortie[i].Demmarage) & (heure < tabSortie[i].Extinxtion)) {
  81. if (heure < tabSortie[i].Demmarage + tabSortie[i].Pente)
  82. PWMSetDutyCycle(i,PWMPourcentageAll(i,heure));
  83. else if(heure > tabSortie[i].Extinxtion - tabSortie[i].Pente)
  84. PWMSetDutyCycle(i,PWMPourcentageExt(i,heure));
  85. else
  86. PWMSetDutyCycle(i,tabSortie[i].PuissanceMax);
  87. } else
  88. PWMSetDutyCycle(i,0);
  89. }
  90. }
  91. void Stop(){
  92. for(int i = 0; i<10;i++){
  93. PWMSetDutyCycle(i,0);
  94. }
  95. }
  96. void Essai(){
  97. for(int i = 0; i<10;i++){
  98. PWMSetDutyCycle(i,tabSortie[i].PuissanceEssai);
  99. }
  100. }
  101. uint8_t PWMPourcentageAll(uint8_t sortie, uint16_t heure) {
  102. return (float)tabSortie[sortie].PuissanceMax / ((float)tabSortie[sortie].Pente / (float)(heure - tabSortie[sortie].Demmarage));
  103. }
  104. uint8_t PWMPourcentageExt(uint8_t sortie, uint16_t heure) {
  105. return tabSortie[sortie].PuissanceMax / (tabSortie[sortie].Pente / (tabSortie[sortie].Extinxtion - heure));
  106. }