Controle pid da roda¶
Tutorial - criando um modelo: https://www.mathworks.com/help/simulink/gs/create-a-simple-model.html
Tutorial - modelando um motor: https://www.mathworks.com/videos/modeling-a-dc-motor-68852.html
Design PID: http://www.mathworks.com/help/control/pid-controller-design.html
frequência do contador do pwm (amostragem do pwm)= 20MHz
período da onda do pwm é 1/20kHz
Cálculo da frequência de amostragem do pwm (TIM1 e TIM8): 20MHz = SYSCLK/AHB prescaler/APB2 prescaler/(1/APB2 presc)/TIMx prescaler
Na prática, isso equivale a SYSCLK/AHB prescaler = 168MHz/1/(168000000/20000000) (conforme tabela abaixo)
página 152 e 640 do reference manual (RM0090 - revisão 14?)
pwm.cpp, contrutor de PWM:
TIM_TimeBaseStructure.TIM_Prescaler=(SystemCoreClock/20000000)-1;
TIM_TimeBaseStructure.TIM_Period=168000000/168000;
com isso, o contador do PWM conta até 1000 e o precaler é ajusta do para dar uma frequência de 20MHz
portanto, a onda que aciona o motor terá período de 20MHz/1000=20kHz
/roboime-firmware/src/boot/system_stm32f4xx.c fornece valores default de SYSCLK e prescalers após inicialização
System Clock source | PLL (HSE)
*---------------------------------------------------------------------------
* SYSCLK(Hz) | 168000000
*---------------------------------------------------------------------------
* HCLK(Hz) | 168000000
*---------------------------------------------------------------------------
* AHB Prescaler | 1
*---------------------------------------------------------------------------
* APB1 Prescaler | 4
*---------------------------------------------------------------------------
* APB2 Prescaler | 2 System Clock source | PLL (HSE)
*---------------------------------------------------------------------------
* SYSCLK(Hz) | 168000000
*---------------------------------------------------------------------------
* HCLK(Hz) | 168000000
*---------------------------------------------------------------------------
* AHB Prescaler | 1
*---------------------------------------------------------------------------
* APB1 Prescaler | 4
*---------------------------------------------------------------------------
* APB2 Prescaler | 2
Interrupção do timer de controle do motor a 1kHz (TIM6)
/roboime-firmware/src/control/TimerTime.cpp
TIM_TimeBaseStructure.TIM_Prescaler=83;
TIM_TimeBaseStructure.TIM_Period=1000;
resposta do motor de velocidade 2.5m/s
Atualizado por Renan Pícoli há mais de 7 anos · 12 revisões