Projeto

Geral

Perfil

Ações

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ícolimais de 7 anos · 12 revisões