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! |