Escolar Documentos
Profissional Documentos
Cultura Documentos
FEDERAL DO PARANA
ENGENHARIA DE COMPUTAC
AO
APS DE MICROCONTROLADORES
CURITIBA
Fevereiro de 2015
GUSTAVO TEIXEIRA RUDIGER
RINALDI MASSUDA SEGECIN
CURITIBA
Fevereiro de 2015
LISTA DE FIGURAS
1
Esquematico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sinal PWM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Circuito do sensor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SUMARIO
1 Projeto
1.1
Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
Lista de componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
Esquemativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Desenvolvimento
2.1
Controlando ESCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Leitura RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
Energia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Conclus
ao e Relatos Finais
A C
odigo em C
REFERENCIAS
BIBLIOGRAFICAS
17
Projeto
1.1
Objetivo
O objetivo deste projeto e controlar os 4 motores tipo brushless atraves de ESCs
(Eletronic Speed Controllers), e que tambem seja possvel fazer a leitura das velocidades
dos motores em rpm usando sensores infra-vermelhos.
1.2
Lista de componentes
Para a realizacao do projeto foram utilizados os seguintes equipamentos:
Fonte de tensao
Osciloscopio
Multmetro
Componentes
1. 4 ESCs
1
2. 4 Motores Brushless
3. 1 Placa P51USB
4. 1 AT89C5131A 24MHz
5. Resistores: 200, 1K, 10k, 17k
6. Capacitores de 100nF
1.3
Esquem
ativo
Figura 2: Esquematico
3
2.1
Desenvolvimento
Controlando ESCs
2.2
Leitura RPM
Na leitura do sensor infra-vermelho, os motores foram pintados de preto com
uma listra branca ao longo de seu eixo, para que seja possvel detectar a reflexao da luz
IV pelo sensor quando o motor gira. Os sensores foram acoplados de forma que pudesse
incidir a luz IV diretamente no motor, e que pudesse detectar a sua rotacao da melhor
forma possvel. Devido a poucas portas de interrupcao fornecida pelo microcontrolador,
foi dividido o tempo para utilizacao da mesma interrupcao para cada sensor, tambem
conhecido como TDM (Time Division Multiplexing). Para tanto e necessario ativar cada
sensor por vez num intervalo de tempo, e para isto um outro circuito e utilizado como
2.3
Energia
A energia utilizada pelos componentes foram provenientes do regulador de tensao
7805 acoplado junto ao quadricoptero, com entrada e sada dc de 12 e 5 Volts respectivamente. Como mostra a figura 8.
Conclus
ao e Relatos Finais
A ideia inicial do nosso projeto era utilizar o microcontrolador para fazer a funcao
do ESC em si. Entretando tivemos grandes dificuldades em fazer com que o circuito
MOSFET responsavel por fazer o chaveamento da corrente que vai para o motor. Assim
decidimos por utilizar o microcontrolador para controlar cada motor de forma independente e medir a sua rotacao em RPM que seria mostrada em um display LCD. Mesmo
assim tivemos duas barreiras que tiveram que ser superadas. A primeira foi de como
gerar 4 sinais PWM com tempos de alta e baixa diferentes utilizando apenas um dos dois
timers disponveis no 8051. A segunda foi o circuito necessario para que os quatro sensores infravermelhos fossem lidos separadamente utilizando apenas uma das interrupcoes do
microcontrolador ja que a outra estava sendo usada por um botao. A solucao para estes
problemas ja foram demostradas no codigo e no esquematico disponveis neste relatorio.
Este projeto nos forneceu um conhecimento que ainda nao tnhamos sobre o
funcionamento dos ESCs e de como e o sinal enviado aos motores para que os mesmos
funcionem de acordo com o PWM enviado ao ESC. Por mais simples que nos pareca
agora, tivemos grande dificuldade em encontrar essa informacao antes de fazermos os
experimentos que nos proporcionaram esse conhecimento. Assim esperamos que esse
relatorio tambem sirva para ajudar aqueles que buscam mais informacoes sobre estes
controladores de velocidade que sao tao populares em aeromodelismo.
C
odigo em C
main.c
1 # include < at89c5131 .h >
2 # include < lcd .h >
3 # include < stdio .h >
4
5 # ifndef NULL
6 # define NULL (( void *) 0)
7 # endif
8
9 # ifndef bool
10 typedef unsigned char bool ;
11 # define true 1
12 # define false 0
13 # endif
14
15 // liga ou desliga os sensores para que cada um seja lido de cada vez
16 # define PWRSensor1 P1_4
17 # define PWRSensor2 P1_5
18 # define PWRSensor3 P1_6
19 # define PWRSensor4 P1_7
20
21 # define Botao P3_2
// varia de 0 = 1 ms a 100 = 2 ms
while ( Botao == 0) {}
53
operation_mode ++;
54
operation_mode %= 7;
55
flag_int_0 = true ;
56 }
57
58 // timer 0 responsavel por geral os 4 PWMs
59 void timer0 ( void ) interrupt 1 {
60
if ( counter20ms == 200) {
61
counter20ms = 0;
62
PWM1 = 0;
63
PWM2 = 0;
64
PWM3 = 0;
65
PWM4 = 0;
66
} else {
67
68
counter20ms ++;
}
69
70
71
72
PWM1 = 1;
}
73
74
10
75
76
PWM2 = 1;
}
77
78
79
80
PWM3 = 1;
}
81
82
83
84
PWM4 = 1;
}
85
86
87 }
88
89 // interrupcao 1 - aumenta a contagem do RPM toda vez que ativada
90 void int1 ( void ) interrupt 2 {
91
counterRPM ++;
92 }
93
94 // timer 1 conta de 20 em 20 ms e quando timer1_loop
95 // chega a 50 1 segundo se passou entao ele calcula o RPM do motor
96 void timer1 ( void ) interrupt 3 {
97
if ( timer1_loop == 50) {
98
99
counterRPM = 0;
100
timer1_loop = 0;
101
flag_int_1 = true ;
102
// rpm_switcher ++;
103
// rpm_switcher %= 4;
104
// 20 ms * 50 = 1 s
} else {
105
timer1_loop ++;
106
107
TH1
= 0 xF63 ;
108
TL1
= 0 xBF ;
// 0 x63BF = 20 ms
109 }
110
111 void main ( void ) {
112
113
PWRSensor1 = 0;
11
114
PWRSensor2 = 0;
115
PWRSensor3 = 0;
116
PWRSensor4 = 0;
117
118
init_lcd () ;
119
120
TMOD
= 0 x02 ;
121
TH0
= 0 x37 ;
122
TL0
= 0 x37 ;
123
EX0
= 1;
124
ET0
= 1;
125
EX1
= 1;
126
ET1
= 1;
127
EA
= 1;
128
TR0
= 1;
129
130
131
TH1
= 0 x63 ; // 0 x63BF = 20 ms
132
TL1
= 0 xBF ;
133
IT1
= 1;
134
TR1
= 1;
135
136
137
138
while (1) {
if ( flag_int_0 ) {
139
string [0] = \0 ;
140
141
case 0:
142
143
PW1_Duty_Cycle = 0;
144
PW2_Duty_Cycle = 0;
145
PW3_Duty_Cycle = 0;
146
PW4_Duty_Cycle = 0;
147
break ;
148
case 1:
149
150
PW1_Duty_Cycle = 50;
151
PW2_Duty_Cycle = 0;
12
152
PW3_Duty_Cycle = 0;
153
PW4_Duty_Cycle = 0;
154
break ;
155
case 2:
156
157
PW1_Duty_Cycle = 0;
158
PW2_Duty_Cycle = 50;
159
PW3_Duty_Cycle = 0;
160
PW4_Duty_Cycle = 0;
161
break ;
162
case 3:
163
164
PW1_Duty_Cycle = 0;
165
PW2_Duty_Cycle = 0;
166
PW3_Duty_Cycle = 50;
167
PW4_Duty_Cycle = 0;
168
break ;
169
case 4:
170
171
PW1_Duty_Cycle = 0;
172
PW2_Duty_Cycle = 0;
173
PW3_Duty_Cycle = 0;
174
PW4_Duty_Cycle = 50;
175
break ;
176
case 5:
177
178
PW1_Duty_Cycle = 50;
179
PW2_Duty_Cycle = 50;
180
PW3_Duty_Cycle = 50;
181
PW4_Duty_Cycle = 50;
182
break ;
183
case 6:
184
185
PW1_Duty_Cycle = 25;
186
PW2_Duty_Cycle = 50;
187
PW3_Duty_Cycle = 75;
188
PW4_Duty_Cycle = 100;
189
break ;
190
13
191
lcd_cmd (0 x01 ) ;
192
delay (1) ;
193
lcd_cmd (0 x80 ) ;
194
delay (1) ;
195
string_to_lcd ( string ) ;
196
delay (1) ;
197
flag_int_0 = false ;
198
199
200
if ( flag_int_1 ) {
201
string [0] = \0 ;
202
203
lcd_cmd (0 xc0 ) ;
204
delay (1) ;
205
string_to_lcd ( string ) ;
206
delay (1) ;
207
flag_int_1 = false ;
208
209
210 }
src/main.c
lcd.h
1 # define dataport P0
2 # define str_len 16
3 sbit rs = P2 ^5;
4 sbit rw = P2 ^6;
5 sbit e
// enable pin
= P2 ^7;
6
7 void delay ( unsigned int msec )
msec .
8 {
9
int i , j ;
10
11
12 }
13
14 void lcd_cmd ( unsigned char item )
14
15 {
16
dataport = item ;
17
rs = 0;
18
rw =0;
19
e =1;
20
delay (1) ;
21
e =0;
22 }
23
24 void lcd_data ( unsigned char item )
25 {
26
dataport = item ;
27
rs = 1;
28
rw =0;
29
e =1;
30
delay (1) ;
31
e =0;
32 }
33
34 void string_to_lcd ( unsigned char * s )
35 {
36
unsigned char i , l ;
37
l = str_len ;
38
39
40
if (* s == 0)
41
break ;
42
lcd_data (* s ) ;
43
s ++;
44
45 }
46
47 void init_lcd ( void )
48 {
49
lcd_cmd (0 x38 ) ;
50
delay (20) ;
51
lcd_cmd (0 x38 ) ;
52
delay (20) ;
53
lcd_cmd (0 x0D ) ;
//
15
54
delay (20) ;
55
lcd_cmd (0 x01 ) ;
56
delay (20) ;
57
lcd_cmd (0 x06 ) ;
58
delay (20) ;
// clear screen
// display ON
59 }
src/lcd.h
16
Refer
encias
[1] M.Sc. Hugo Vieira Neto. Microcontroladores mcs51. 2002.
17