Controle pid da roda » Histórico » Versão 10
Renan Pícoli, 01/05/2017 21:12 h
| 1 | 1 | Carlos Gabriel Oliveira Freitas | h1. Controle pid da roda |
|---|---|---|---|
| 2 | |||
| 3 | 2 | Carlos Gabriel Oliveira Freitas | Tutorial - criando um modelo: https://www.mathworks.com/help/simulink/gs/create-a-simple-model.html |
| 4 | |||
| 5 | 1 | Carlos Gabriel Oliveira Freitas | Tutorial - modelando um motor: https://www.mathworks.com/videos/modeling-a-dc-motor-68852.html |
| 6 | 3 | Carlos Gabriel Oliveira Freitas | |
| 7 | 7 | Onias Castelo Branco | Design PID: http://www.mathworks.com/help/control/pid-controller-design.html |
| 8 | 4 | Renan Pícoli | |
| 9 | frequência do contador do pwm (amostragem do pwm)= 20MHz |
||
| 10 | período da onda do pwm é 1/20kHz |
||
| 11 | 1 | Carlos Gabriel Oliveira Freitas | |
| 12 | 10 | Renan Pícoli | Cálculo da frequência de amostragem do pwm (TIM1 e TIM8): 20MHz = SYSCLK/AHB prescaler/APB2 prescaler/(1/APB2 presc) |
| 13 | Na prática, isso equivale a SYSCLK/AHB prescaler = 168MHz/1 (conforme tabela abaixo) |
||
| 14 | 7 | Onias Castelo Branco | |
| 15 | 1 | Carlos Gabriel Oliveira Freitas | página 152 e 640 do reference manual (RM0090 - revisão 14?) |
| 16 | 5 | Gustavo Claudio Karl Couto | |
| 17 | 10 | Renan Pícoli | pwm.cpp, contrutor de PWM: |
| 18 | 5 | Gustavo Claudio Karl Couto | |
| 19 | 1 | Carlos Gabriel Oliveira Freitas | TIM_TimeBaseStructure.TIM_Prescaler=(SystemCoreClock/20000000)-1; |
| 20 | TIM_TimeBaseStructure.TIM_Period=168000000/168000; |
||
| 21 | 10 | Renan Pícoli | com isso, o contador do PWM conta até 1000 e o precaler é ajusta do para dar uma frequência de 20MHz |
| 22 | portanto, a onda que aciona o motor terá período de 20MHz/1000=20kHz |
||
| 23 | 5 | Gustavo Claudio Karl Couto | |
| 24 | 10 | Renan Pícoli | /roboime-firmware/src/boot/system_stm32f4xx.c fornece valores default de SYSCLK e prescalers após inicialização |
| 25 | 5 | Gustavo Claudio Karl Couto | |
| 26 | System Clock source | PLL (HSE) |
||
| 27 | *----------------------------------------------------------------------------- |
||
| 28 | * SYSCLK(Hz) | 168000000 |
||
| 29 | *----------------------------------------------------------------------------- |
||
| 30 | * HCLK(Hz) | 168000000 |
||
| 31 | *----------------------------------------------------------------------------- |
||
| 32 | * AHB Prescaler | 1 |
||
| 33 | *----------------------------------------------------------------------------- |
||
| 34 | * APB1 Prescaler | 4 |
||
| 35 | *----------------------------------------------------------------------------- |
||
| 36 | * APB2 Prescaler | 2 System Clock source | PLL (HSE) |
||
| 37 | *----------------------------------------------------------------------------- |
||
| 38 | * SYSCLK(Hz) | 168000000 |
||
| 39 | *----------------------------------------------------------------------------- |
||
| 40 | * HCLK(Hz) | 168000000 |
||
| 41 | *----------------------------------------------------------------------------- |
||
| 42 | * AHB Prescaler | 1 |
||
| 43 | *----------------------------------------------------------------------------- |
||
| 44 | * APB1 Prescaler | 4 |
||
| 45 | *----------------------------------------------------------------------------- |
||
| 46 | * APB2 Prescaler | 2 |
||
| 47 | |||
| 48 | Interrupção do timer de controle do motor a 1k |
||
| 49 | |||
| 50 | /roboime-firmware/src/control/TimerTime.cpp |
||
| 51 | |||
| 52 | TIM_TimeBaseStructure.TIM_Prescaler=83; |
||
| 53 | TIM_TimeBaseStructure.TIM_Period=1000; |
||
| 54 | 6 | Gustavo Claudio Karl Couto | |
| 55 | |||
| 56 | resposta do motor de velocidade 2.5m/s |
||
| 57 | !roboime.PNG! |