| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /*
- * PWM.c
- *
- * Created on: 14 janv. 2019
- * Author: e_rcluze
- */
- #include "PWM.h"
- #include "tim.h"
- #include "gpio.h"
- void PWMSetDutyCycle(uint8_t sortie, uint8_t pourcentage) {
- TIM_OC_InitTypeDef sConfigOC;
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.Pulse = PourcentageToValue(pourcentage);
- HAL_Delay(1);
- switch (sortie) {
- case S1:
- HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3);
- break;
- case S2:
- HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);
- break;
- case S3:
- HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
- break;
- case S4:
- HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2);
- break;
- case S5:
- HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
- break;
- case S6:
- HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
- break;
- case S7:
- HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);
- break;
- case S8:
- HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2);
- break;
- case S9:
- HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3);
- break;
- case S10:
- HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4);
- break;
- }
- }
- void PWMStart(uint8_t sortie) {
- switch (sortie) {
- case S1:
- HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
- break;
- case S2:
- HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
- break;
- case S3:
- HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
- break;
- case S4:
- HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
- break;
- case S5:
- HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
- break;
- case S6:
- HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
- break;
- case S7:
- HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
- break;
- case S8:
- HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
- break;
- case S9:
- HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
- break;
- case S10:
- HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
- break;
- }
- }
- void PWMStop(uint8_t sortie) {
- switch (sortie) {
- case S1:
- HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3);
- break;
- case S2:
- HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_4);
- break;
- case S3:
- HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
- break;
- case S4:
- HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
- break;
- case S5:
- HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
- break;
- case S6:
- HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4);
- break;
- case S7:
- HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);
- break;
- case S8:
- HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_2);
- break;
- case S9:
- HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3);
- break;
- case S10:
- HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_4);
- break;
- }
- }
- uint16_t PourcentageToValue(uint8_t val) {
- float t = (val * PWM_MAX) / 100;
- return (uint16_t) t;
- }
- void GerePWM(uint16_t listeSortie, uint8_t pourcentage) {
- if (listeSortie & MASKS1) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S1, pourcentage);
- PWMStart(S1);
- } else
- PWMStop(S1);
- }
- if (listeSortie & MASKS2) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S2, pourcentage);
- PWMStart(S2);
- } else
- PWMStop(S2);
- }
- if (listeSortie & MASKS3) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S3, pourcentage);
- PWMStart(S3);
- } else
- PWMStop(S3);
- }
- if (listeSortie & MASKS4) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S4, pourcentage);
- PWMStart(S4);
- } else
- PWMStop(S4);
- }
- if (listeSortie & MASKS5) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S5, pourcentage);
- PWMStart(S5);
- } else
- PWMStop(S5);
- }
- if (listeSortie & MASKS6) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S6, pourcentage);
- PWMStart(S6);
- } else
- PWMStop(S6);
- }
- if (listeSortie & MASKS7) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S7, pourcentage);
- PWMStart(S7);
- } else
- PWMStop(S7);
- }
- if (listeSortie & MASKS8) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S8, pourcentage);
- PWMStart(S8);
- } else
- PWMStop(S8);
- }
- if (listeSortie & MASKS9) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S9, pourcentage);
- PWMStart(S9);
- } else
- PWMStop(S9);
- }
- if (listeSortie & MASKS10) {
- if (pourcentage != 0) {
- PWMSetDutyCycle(S10, pourcentage);
- PWMStart(S10);
- } else {
- PWMStop(S10);
- }
- }
- }
- uint8_t PWMPourcentage(Sortie *s, uint16_t heure) {
- if (s->Status == ENALLUME) {
- int r = (float)s->PuissanceMax / ((float)s->Pente / (float)(heure - s->Demmarage));
- return r;
- } else {
- return s->PuissanceMax / (s->Pente / (s->Extinxtion - heure));
- }
- }
|