From 9b1fa9e11390d87c698915095b1a28c1171fc075 Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Fri, 6 Nov 2020 09:06:28 +0100 Subject: [PATCH] add timer encoder functions --- MyDrivers/Timer.c | 21 ++++++++++++++++----- MyDrivers/Timer.h | 45 +++++++++++++++++++++++++++++++++++++-------- 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/MyDrivers/Timer.c b/MyDrivers/Timer.c index eda5cae..ee67375 100644 --- a/MyDrivers/Timer.c +++ b/MyDrivers/Timer.c @@ -176,7 +176,7 @@ int getArrFromFreq(float freq_khz) return (72000 / freq_khz) - 1; } -void PWMo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle) +void Timer_pwmo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle) { const int arr = getArrFromFreq(freq_khz); Timer_conf(timer, arr, 0); @@ -190,7 +190,7 @@ void PWMo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle LL_TIM_OC_Init(timer, channel, &init_struct); } -void PWMo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle) +void Timer_pwmo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle) { int compare = dutyCycle * getArrFromFreq(freq_khz); if (channel == LL_TIM_CHANNEL_CH1) LL_TIM_OC_SetCompareCH1(timer, compare); @@ -203,12 +203,23 @@ void PWMo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float d * ENCODER ***************************************************************************/ -void Timer_encoder_conf(TIM_TypeDef * timer, int arr, int psc) +void Timer_encoder_conf(TIM_TypeDef * timer) { + Timer_conf(timer, 359, 0); + LL_TIM_ENCODER_InitTypeDef init_struct; + LL_TIM_ENCODER_StructInit(&init_struct); + init_struct.EncoderMode = LL_TIM_ENCODERMODE_X2_TI1; + + LL_TIM_ENCODER_Init(timer, &init_struct); } -int Timer_encoder_get(TIM_TypeDef * timer) +int Timer_encoder_getAngle(TIM_TypeDef * timer) { - return 0; + return LL_TIM_GetCounter(timer); +} + +int Timer_encoder_getDirection(TIM_TypeDef * timer) +{ + return LL_TIM_GetDirection(timer); } diff --git a/MyDrivers/Timer.h b/MyDrivers/Timer.h index a1583eb..b92cfd7 100644 --- a/MyDrivers/Timer.h +++ b/MyDrivers/Timer.h @@ -60,24 +60,53 @@ int PWMi_getDutyCycle(TIM_TypeDef * timer, int channel); * PWM OUTPUT ***************************************************************************/ -void PWMo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle); - /** - * @brief Arrêt le timer considéré + * @brief Configure le timer en mode PWM output à la fréquence donnée * @note * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 - * int channel : Le channel utilisé par la PWM - * float dutyCycle : Valeur entre 0 et 1 + * int channel : Le channel utilisé par la PWM + * float freq_khz : Fréquence en KHz + * float dutyCycle : Valeur entre 0 et 1 * @retval None */ -void PWMo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle); +void Timer_pwmo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle); + +/** + * @brief Modifie le duty cycle de la PWM + * @note + * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 + * int channel : Le channel utilisé par la PWM + * float dutyCycle : Valeur entre 0 et 1 + * @retval None + */ +void Timer_pwmo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle); /**************************************************************************** * ENCODER ***************************************************************************/ -void Timer_encoder_conf(TIM_TypeDef * timer, int arr, int psc); +/** + * @brief Configure le timer en mode encoder + * @note + * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 + * @retval None + */ +void Timer_encoder_conf(TIM_TypeDef * timer); -int Timer_encoder_get(TIM_TypeDef * timer); +/** + * @brief Récupère l'angle, en degrès + * @note + * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 + * @retval None + */ +int Timer_encoder_getAngle(TIM_TypeDef * timer); + +/** + * @brief Récupère la direction + * @note + * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 + * @retval None + */ +int Timer_encoder_getDirection(TIM_TypeDef * timer); #endif