Browse Source

add timer encoder functions

Arnaud Vergnet 3 years ago
parent
commit
9b1fa9e113
2 changed files with 52 additions and 12 deletions
  1. 16
    5
      MyDrivers/Timer.c
  2. 36
    7
      MyDrivers/Timer.h

+ 16
- 5
MyDrivers/Timer.c View File

@@ -176,7 +176,7 @@ int getArrFromFreq(float freq_khz)
176 176
 	return (72000 / freq_khz) - 1;
177 177
 }
178 178
 
179
-void PWMo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle)
179
+void Timer_pwmo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle)
180 180
 {
181 181
 	const int arr = getArrFromFreq(freq_khz);
182 182
 	Timer_conf(timer, arr, 0);
@@ -190,7 +190,7 @@ void PWMo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle
190 190
 	LL_TIM_OC_Init(timer, channel, &init_struct);
191 191
 }
192 192
 
193
-void PWMo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle)
193
+void Timer_pwmo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle)
194 194
 {
195 195
 	int compare = dutyCycle * getArrFromFreq(freq_khz);
196 196
 	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
203 203
   *																ENCODER
204 204
 	***************************************************************************/
205 205
 
206
-void Timer_encoder_conf(TIM_TypeDef * timer, int arr, int psc)
206
+void Timer_encoder_conf(TIM_TypeDef * timer)
207 207
 {
208
+	Timer_conf(timer, 359, 0);
209
+	LL_TIM_ENCODER_InitTypeDef init_struct;
210
+	LL_TIM_ENCODER_StructInit(&init_struct);
208 211
 	
212
+	init_struct.EncoderMode = LL_TIM_ENCODERMODE_X2_TI1;
213
+	
214
+	LL_TIM_ENCODER_Init(timer, &init_struct);
215
+}
216
+
217
+int Timer_encoder_getAngle(TIM_TypeDef * timer)
218
+{
219
+	return LL_TIM_GetCounter(timer);
209 220
 }
210 221
 
211
-int Timer_encoder_get(TIM_TypeDef * timer)
222
+int Timer_encoder_getDirection(TIM_TypeDef * timer)
212 223
 {
213
-	return 0;
224
+	return LL_TIM_GetDirection(timer);
214 225
 }

+ 36
- 7
MyDrivers/Timer.h View File

@@ -60,24 +60,53 @@ int PWMi_getDutyCycle(TIM_TypeDef * timer, int channel);
60 60
   *																PWM OUTPUT
61 61
 	***************************************************************************/
62 62
 
63
-void PWMo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle);
63
+/**
64
+	* @brief  Configure le timer en mode PWM output à la fréquence donnée
65
+  * @note   
66
+	* @param  TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
67
+	*					int channel 			: Le channel utilisé par la PWM
68
+	*					float freq_khz  	: Fréquence en KHz
69
+	*					float dutyCycle 	: Valeur entre 0 et 1
70
+  * @retval None
71
+  */
72
+void Timer_pwmo_conf(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle);
64 73
 
65 74
 /**
66
-	* @brief  Arrêt le timer considéré
75
+	* @brief  Modifie le duty cycle de la PWM
67 76
   * @note   
68 77
 	* @param  TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
69
-	*					int channel 		: Le channel utilisé par la PWM
70
-	*					float dutyCycle : Valeur entre 0 et 1
78
+	*					int channel 			: Le channel utilisé par la PWM
79
+	*					float dutyCycle 	: Valeur entre 0 et 1
71 80
   * @retval None
72 81
   */
73
-void PWMo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle);
82
+void Timer_pwmo_setDutyCycle(TIM_TypeDef * timer, int channel, float freq_khz, float dutyCycle);
74 83
 
75 84
 /****************************************************************************
76 85
   *																ENCODER
77 86
 	***************************************************************************/
78 87
 
79
-void Timer_encoder_conf(TIM_TypeDef * timer, int arr, int psc);
88
+/**
89
+	* @brief  Configure le timer en mode encoder
90
+  * @note   
91
+	* @param  TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
92
+  * @retval None
93
+  */
94
+void Timer_encoder_conf(TIM_TypeDef * timer);
95
+
96
+/**
97
+	* @brief  Récupère l'angle, en degrès
98
+  * @note   
99
+	* @param  TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
100
+  * @retval None
101
+  */
102
+int Timer_encoder_getAngle(TIM_TypeDef * timer);
80 103
 
81
-int Timer_encoder_get(TIM_TypeDef * timer);
104
+/**
105
+	* @brief  Récupère la direction
106
+  * @note   
107
+	* @param  TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
108
+  * @retval None
109
+  */
110
+int Timer_encoder_getDirection(TIM_TypeDef * timer);
82 111
 
83 112
 #endif

Loading…
Cancel
Save