add timer encoder functions

This commit is contained in:
Arnaud Vergnet 2020-11-06 09:06:28 +01:00
parent 99c0fef486
commit 9b1fa9e113
2 changed files with 53 additions and 13 deletions

View file

@ -176,7 +176,7 @@ int getArrFromFreq(float freq_khz)
return (72000 / freq_khz) - 1; 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); const int arr = getArrFromFreq(freq_khz);
Timer_conf(timer, arr, 0); 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); 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); int compare = dutyCycle * getArrFromFreq(freq_khz);
if (channel == LL_TIM_CHANNEL_CH1) LL_TIM_OC_SetCompareCH1(timer, compare); 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 * 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);
} }

View file

@ -60,24 +60,53 @@ int PWMi_getDutyCycle(TIM_TypeDef * timer, int channel);
* PWM OUTPUT * 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 * @note
* @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
* int channel : Le channel utilisé par la PWM * int channel : Le channel utilisé par la PWM
* float dutyCycle : Valeur entre 0 et 1 * float freq_khz : Fréquence en KHz
* float dutyCycle : Valeur entre 0 et 1
* @retval None * @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 * 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 #endif