Controle pid da roda » Histórico » Revisão 11
Revisão 10 (Renan Pícoli, 01/05/2017 21:12 h) → Revisão 11/12 (Renan Pícoli, 01/05/2017 21:18 h)
h1. 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 presc) Na prática, isso equivale a SYSCLK/AHB prescaler = 168MHz/1/(168000000/20000000) 168MHz/1 (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 1k /roboime-firmware/src/control/TimerTime.cpp TIM_TimeBaseStructure.TIM_Prescaler=83; TIM_TimeBaseStructure.TIM_Period=1000; resposta do motor de velocidade 2.5m/s !roboime.PNG!