#include "DCMotor.h" #include "math.h" const int MOTOR_PWM_FREQ = 50; void DCMotor_conf(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpioPwm, int pinPwm, GPIO_TypeDef * gpioDirection, int pinDirection) { // On regle la vitesse en valeur absolue, ici a 0 Timer_pwmo_conf(timer, channel, MOTOR_PWM_FREQ, 0); // Configuration du GPIO GPIO_conf(gpioPwm, pinPwm, LL_GPIO_MODE_ALTERNATE, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_UP); // On regle le sens du moteur GPIO_conf(gpioDirection, pinDirection, LL_GPIO_MODE_OUTPUT, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_DOWN); GPIO_setPin(gpioDirection, pinDirection, 0); Timer_start(timer); } void DCMotor_setSpeed(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin, float speed) { const int dir = speed > 0.0; Timer_pwmo_setDutyCycle(timer, channel, fabs(speed)); GPIO_setPin(gpio, pin, dir); } float DCMotor_getSpeed(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin) { const float speedAbs = Timer_pwmo_getDutyCycle(timer, channel); const int dir = GPIO_readPin(gpio, pin); return dir ? speedAbs : -speedAbs; }