Estoy usando esta guia para instalar el programa
La placa que usamos es la STM32F446RETx.
Libro que me ha recomendado el profesor de STM32
Se me ha instalado el programa en esta ruta: /opt/st/stm32cubeide_1.5.0/stm32cubeide
El shield utiliza este componente.
No he tenido éxito instalando el componente.
El componente del puente en H es este.
Del puente en H la tabla de la verdad es la siguiente:
Para poder controlar el motor los pines en el shield están en:
-
EN_A está en el pin 3 de arduino PA10
-
IN1_A está en el pin 5 de arduino PB5
-
IN2_A está en el pin 6 de arduino PB4
-
EN_B está en el pin 5analog de arduino
-
IN1_B está en el pin 1analog de arduino
-
IN2_B está en el pin 2analog de arduino
Para saber que preescaler tengo que poner, tengo que coger el reloj del sistema y ponerle el valor. Resulta que necesito el pwm con más de 20 KHz.
El reloj de la placa es de 84 MHz.
Para calcular la frecuencia del PWM he seguido esto: $$ \text{Square wave de } 40 \ KHz \quad \text{50% duty cycle} \\ \frac{84 \ MHz}{40 \ KHz} = 2100 \ \text{cycles} \\ \text{prescaler } \cdot \text{ overflow } = \text{ period cycles} \\ \frac{2100}{2100} = 1 $$
Siguiendo el link de la docu random el preescaler se hace así: $$ f_{PWM} = \frac{84 \ MHz}{\text{Prescaler}} \cdot \text{Counter Period}\\ 20 KHz \Rightarrow \text{Counter Period} = 100 \qquad \text{Prescaler} = 42 \\ 30 KHz \Rightarrow \text{Counter Period} = 100 \qquad \text{Prescaler} = 28 $$
—
CORRECCIÓN
$$ f_{PWM} = \frac{FreqClock}{(CounterPeriod+1)(Prescaler+1)} $$
$$ f_{PWM} = \frac{84 \cdot 10^6}{(2)(2101)} \approx 20 \ KHz $$
$$ f_{PWM} = \frac{84 \cdot 10^6}{(2)(42000) = 1000} \\ T = 1 \ ms $$
$$ \text{Función error} \Rightarrow e(t) = r(t) - y(t) \\ \text{Función tensión realimentación} \Rightarrow u(t) = K_p \cdot e(t) $$
$$ y(t) = \frac{2 \cdot \pi \cdot npulsos}{CPR} $$
$$ CPR = 48 \cdot 75 = 3600 $$
De esta forma estos serán los valores de los timers en nuestra placa.
- Timer2 -> Muestreo del encoder:
- T_PWM = 1 ms -> 1 KHz
- Prescaler = 1
- CounterPeriod = 41999
Cada lectura 10 veces. Desde 0 a 12V por cada voltio. Y 1200 valores.