Você está na página 1de 56

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO

CENTRO TECNOLÓGICO
DEPARTAMENTO DE ENGENHARIA ELÉTRICA
PROJETO DE GRADUAÇÃO

ACIONAMENTO MICROCONTROLADO DE UM MOTOR CC


COM FRENAGEM REGENERATIVA

EDUARDO LEANDRO DEL-PUPPO

VITÓRIA – ES
AGOSTO/2007
EDUARDO LEANDRO DEL-PUPPO

ACIONAMENTO MICROCONTROLADO DE UM MOTOR CC


COM FRENAGEM REGENERATIVA

Parte manuscrita do Projeto de Graduação


do aluno Eduardo Leandro Del-Puppo,
apresentado ao Departamento de
Engenharia Elétrica do Centro
Tecnológico da Universidade Federal do
Espírito Santo, para obtenção do grau de
Engenheiro Eletricista.

VITÓRIA – ES
AGOSTO/2007
EDUARDO LEANDRO DEL-PUPPO

ACIONAMENTO MICROCONTROLADO DE UM MOTOR CC


COM FRENAGEM REGENERATIVA

COMISSÃO EXAMINADORA:

___________________________________
Prof. Dr. Gilberto Costa Drumond Souza
Orientador

___________________________________
Prof. Dr. Paulo Faria Santos Amaral
Co-orientador

___________________________________
Prof. Dr. José Luiz de Freitas Vieira
Examinador

___________________________________
Eng. Alex Teixeira Prado
Examinador

Vitória - ES, 31 de agosto de 2007


AGRADECIMENTOS

Agradeço a todos que de alguma forma ajudaram e acreditaram na realização


deste projeto, por mais complicado que tenho sido. Agradeço ao professor Gilberto
pela orientação e aos professores Paulo Amaral, José Luiz, Aragão e todos que de
alguma forma contribuíram com dicas e material didático. Agradeço ao Engenheiro
Pedro Federici Coelho pela grande ajuda no entendimento de microcontroladores.
Agradeço também a todos na empresa onde trabalho que sempre incentivaram
e me apoiaram em todos os momentos que eu precisava sair para fazer meu projeto.
Enfim, agradeço a Deus por mais essa etapa vencida, e à minha família pelo
apoio em todos os momentos difíceis.
LISTA DE FIGURAS

Figura 2-1- Circuito do motor CC de excitação separada .........................................12


Figura 2-2 - Característica Velocidade x Torque ......................................................13
Figura 3-1 – (a) Chopper abaixador com carga RLE. (b) Circuitos equivalentes. .....15
Figura 3-2 –Formas de onda para condução contínua de corrente.............................16
Figura 3-3 – Potência média na carga normalizada em função da razão cíclica. .......18
Figura 3-4 – Chopper elevador – circuito equivalente. .............................................18
Figura 3-5 – Formas de onda...................................................................................19
Figura 3-6 – Chopper classe C - circuito básico .......................................................21
Figura 3-7 – Chopper classe C – formas de onda e condução das chaves e diodos....22
Figura 4-1 – Circuito simplificado para controle do acionamento.............................26
Figura 4-2 – Diagrama de blocos .............................................................................28
Figura 5-1 – Algoritmo ............................................................................................33
Figura 6-1 - Bancada com protótipo em funcionamento ...........................................34
Figura 6-2 - Protótipo – 1) Placa de força 2) Placa de controle ................................35
Figura 6-3 - Operação em modo “buck” – ciclo de trabalho em 50% (carga RL)......36
Figura 6-4 - Operação em modo “buck” – ciclo de trabalho em 100% (RL) .............37
Figura 6-5 - Operação em modo “buck” – ciclo de trabalho em 50% (carga motor) .38
Figura 6-6 - Operação em modo “buck” – ciclo de trabalho em 100% (carga motor)38
Figura 6-7 - Operação em modo “boost” – frenagem ...............................................39
SIMBOLOGIA

Φ = fluxo por pólo, Webers


I a = corrente de armadura, A

V = tensão de armadura, V
Ra = resitência do enrolamento de armadura, Ω

ω m = velocidade da armadura, rad/seg

Te =torque desenvolvido pelo motor, N.m


K e = constante construtiva do motor

VS = tensão de alimentação

VO = tensão média na carga

I = corrente na carga
TCH = período de chaveamento

CH = chave
t1 = dT = t on = intervalo de tempo com CH fechada

t 2 = intervalo de tempo com CH aberta

I O = corrente média na armadura

d = razão cíclica
GLOSSÁRIO

CC – Corrente contínua, DC: Direct Current.


“Chopper” CC – conversor de corrente contínua
“Chopper” elevador – conversor de corrente contínua que produz na saída uma
tensão que é maior que a tensão de alimentação, baseado na carga e desgarga de um
indutor.
“Chopper” abaixador – conversor de corrente contínua que produz uma tensão na
saída que varia de 0 a 100% da tensão de entrada através de uma chave comandada.
Conversor “buck” - “Chopper” abaixador
Conversor “boost” - “Chopper” elevador
RESUMO
O objetivo deste trabalho foi projetar e construir um protótipo de um
conversor CC-CC microcontrolado, capaz de produzir na saída uma tensão variável de
0 a 100% da tensão de entrada, produzindo ação motora direta, e que seja capaz de
realizar frenagem regenerativa direta, ou seja, operação em dois quadrantes. O
conversor utiliza um microcontrolador para receber os sinais de referência e de
controle, para então controlar a tensão na saída do conversor que resulte na corrente de
armadura desejada. O circuito utiliza semicondutores do tipo MOSFET, e a estrutura
de controle empregou, para permitir desenvolvimento e testes com segurança, uma
malha externa de velocidade, com malha interna de corrente. Numa aplicação real de
um veículo elétrico, é usual que o controle seja de torque, o que corresponderia a
malha de corrente, e neste caso, quem fecha a malha de velocidade é o usuário.
O processamento de informações foi feito por um microcontrolador da
Microchip®, e o software foi desenvolvido em linguagem C utilizando o compilador
PIC C compiler® para transformar o programa em arquivo .hex compatível com o
microcontrolador.
Com o projeto concluído, obteve-se o controle de torque, e consequentemente
a velocidade de um motor CC, e realização de frenagem regenerativa com o máximo
possível de recuperação de energia.
SUMÁRIO

1. INTRODUÇÃO...........................................................................................11
2. O MOTOR CC ............................................................................................12
2.1. Equações de velocidade e torque .........................................................12
2.2. Métodos de Controle de Velocidade....................................................13
3. CONTROLE POR TENSÃO DE ARMADURA – “CHOPPERS” ..........14
3.1. Chopper Abaixador (Buck) com carga RLE - Princípio de Operação ..14
3.1.1. Normalização: ..................................................................................17
3.2. Chopper elevador (Boost) – Princípio de Operação .............................18
3.3. Chopper abaixador/elevador – Operação em dois quadrantes ..............20
4. O ACIONAMENTO PROPOSTO .............................................................25
4.1. O circuito simplificado ........................................................................25
4.1.1. Drive de tensão:................................................................................27
4.1.2. Filtros passa-baixa (FPB):.................................................................27
4.1.3. Amplificador: ...................................................................................27
4.1.4. Somador: ..........................................................................................27
4.1.5. “Gate-drive” IR2104:........................................................................27
4.2. O sistema de controle ..........................................................................28
4.3. Operação do conversor........................................................................29
4.3.1 Acelerando – Operação “Buck”............................................................29
4.3.2 Velocidade de cruzeiro - “Cruise control” ............................................29
4.3.3 Desacelerando – Operação “Boost” (frenagem)....................................29
5. O “SOFTWARE” DE CONTROLE ..........................................................31
6. O PROTÓTIPO ..........................................................................................34
6.1. Formas de onda ...................................................................................35
6.1.1 Modo “Buck” com carga RL ................................................................35
6.1.2 Modo “Buck” com motor operando a vazio..........................................37
6.1.3 Modo “Boost” (frenagem) ....................................................................39
7. CONCLUSÃO.............................................................................................40
ANEXO A...............................................................................................................41
ANEXO B ...............................................................................................................53
ANEXO C...............................................................................................................54
REFERÊNCIAS BIBLIOGRÁFICAS..................................................................56
1. INTRODUÇÃO

O motor de corrente contínua é muito usado em aplicações onde ocorrem


freqüentes partidas e paradas, e que requerem um bom controle de velocidade. Por
esses motivos e pela possibilidade de variar o torque de 0 a 100% do torque nominal
em quaisquer faixas de velocidade, o motor CC é muito utilizado em tração elétrica,
em aplicações tais como: locomotivas, carros elétricos, bondes, bicicletas elétricas,
walk machines e outros.
Neste projeto foi desenvolvido um protótipo de um conversor CC-CC que
opera em dois quadrantes: ação motora direta e frenagem direta. O projeto utiliza uma
configuração clássica desse tipo de conversor (“buck-boost”), e um sistema de controle
baseado na operação simultânea das duas chaves tipo MOSFETS, possibilitando uma
transição suave entre a ação motora e a frenagem.
Inicialmente foi feito um apanhado geral sobre o motor CC de excitação
separada com fluxo de campo constante, pois é o caso que se assemelha a um motor
CC de ímã permanente muito utilizado em veículos elétricos de baixa potência. Em
seguida foi mostrado as formas de controle do motor CC por variação da tensão,
mostrando a operação dos dois tipos básicos de conversores, “buck”-abaixador e
“boost”-elevador, e do terceiro tipo (“buck-boost”) que incorpora os dois tipos citados.
O “buck-boost” compõe o conversor proposto no capítulo3.
No capítulo 4 é apresentado o software de controle, que utiliza um PIC16F876
como processador de informações. O software foi desenvolvido utilizando o conceito
de aritmética fracionária e controle por ponto fixo.
No último capítulo são mostrados os resultados obtidos e as formas de onda. O
conversor deverá ser capaz de controlar o torque e por conseqüência a velocidade
desenvolvida pelo motor, e deverá fazer frenagem regenerativa e dissipar a potência da
frenagem em um resistor através do chaveamento de um MOSFET, pois não há
disponibilidade de uma fonte receptora para utilizar nos testes. Os testes foram feitos
com uma carga RL e com um motor de 220 Vcc /0,9A/1800rpm.
2. O MOTOR CC

2.1. Equações de velocidade e torque

Tomou-se como base um motor CC de excitação separada (fig.2.1), mas com


o fluxo de campo mantido constante para simular um motor CC de ímã permanente,
muito usado em bicicletas elétricas e “walk machines”. A seguir serão apresentadas as
equações do motor CC sob esta condição de operação.
A fig. 2.1 mostra o circuito do motor CC de excitação separada.

Ra La
Ia If

V E Vf

Figura 2-1- Circuito do motor CC de excitação separada

As equações básicas são:


E = K e Φω m (2.1)
V = E + Ra I a (2.2)
Te = K e ΦI a (2.3)
Para o motor de excitação separada considerando-se fluxo constante, tem-se:
K e Φ = K (constante) (2.4)
Das equações (2.1), (2.3) e (2.4), resulta:
E = Kω m (2.5)
Te = KI a (2.6)
Usando as equações (2.2), (2.5) e (2.6), obtém-se:
V Ra
ωm = − Ia (2.7)
K K
13

V Ra
ωm = − Te (2.8)
K K2
De acordo com (2.8) pode-se observar que a característica Velocidade x Torque
do motor CC com excitação separada é uma linha reta, como mostrado na fig. 2.2. Na
equação (2.6), pode-se observar que o torque varia linearmente com a corrente,
portanto a característica Velocidade x Corrente é equivalente à característica
Velocidade x Torque. Pode-se então ter ampla variação de torque numa pequena faixa
de velocidade.

Wmx Te
Motor CC de excitação
Velocidade, p.u.

1 separada

0.5

0 0.5 1
Torque, p.u.

Figura 2-2 - Característica Velocidade x Torque

2.2. Métodos de Controle de Velocidade


A relação de Velocidade x Torque para fluxo constante, equação (2.8) mostra
que a velocidade pode ser controlada de duas formas:
- Controle por tensão de armadura.
- Controle por resistência de armadura.
O controle por resistência de armadura apesar de ser simples e barato, não é
muito utilizado, pois dissipa muita potência e, portanto, tem baixa eficiência. O
controle por tensão de armadura é o mais utilizado, já que a dissipação de potência é
mínima e existem diversas técnicas de controle.
14

3. CONTROLE POR TENSÃO DE ARMADURA – “CHOPPERS”

Para a aplicação pretendida, onde a fonte de potência é uma bateria, faz-se


necessário o uso de um conversor CC-CC, denominado “chopper”. Um chopper pode
ser considerado um equivalente do transformador em corrente contínua, porém com
uma variação contínua da tensão de saída. Assim como o transformador, um chopper é
usado para abaixar ou aumentar a tensão.
Os “choppers”, muito usados em controle de motores CC, possibilitam um
controle de aceleração suave, têm alta eficiência, rápida resposta dinâmica, são leves e
de tamanho reduzido, e possibilitam realizar a frenagem regenerativa mesmo em
baixas velocidades. São muito usados em frenagem regenerativa de motores CC,
devolvendo energia para a fonte nas freqüentes paradas, e nas acelerações forçadas por
agentes externos. Também são usados em reguladores de tensão CC (fontes
chaveadas).
Para o controle de motores CC em malha aberta e em malha fechada, o
chopper oferece uma grande vantagem em relação aos retificadores controlados: a alta
freqüência de chaveamento da tensão de saída faz com que o “ripple” na corrente de
armadura seja pequeno, e a região de condução descontínua no gráfico Velocidade x
Torque (proporcional à tensão x corrente) também seja muito pequena.

3.1. Chopper Abaixador (Buck) com carga RLE - Princípio de Operação


O “chopper” abaixador, também conhecido como “chopper” classe A, produz
uma tensão na saída que varia de 0 a 100% da tensão de entrada e é muito usado em
fontes reguladas de potência e principalmente no controle de velocidade de motores
CC. O circuito do conversor “buck” é mostrado na fig. 3.1. Quando a chave CH está
fechada (intervalo de tempo t1) a tensão Vs alimenta a carga, e a corrente I1 cresce.
Quando a chave CH está aberta (intervalo de tempo t2) a tensão na carga é igual a zero,
e a corrente (I2) de descarga do indutor flui pelo diodo de roda-livre. A figura 3.2
mostra as formas de onda para condução contínua. Imín e Imáx são determinadas em
função do máximo “ripple” de corrente desejado.
A Tensão média na saída é dada por:
15

1 t1 t1
VO =
T ∫v O
O dt =
T
VS = kVS (3.1)

Mas também pode ser escrita da seguinte forma:


VO = E + R.I O (já que a tensão média no indutor é zero) (3.2)
Corrente média:
IS
IO = (3.3)
k
IS I
+ +
CH
L
VS VO D R
+
- E
- -

(a) Chopper abaixador com carga RLE

I1 I2
+

L L
VS D R
R
+ +
E - E
-
-
Modo 1 Modo 2
(b) Circuitos equivalentes
Figura 3-1 – (a) Chopper abaixador com carga RLE. (b) Circuitos equivalentes.

Máximo ripple de corrente:


∆I = I máx − I mín (3.4)
VS
∆I máx = (3.5)
4 fL
Razão cíclica:
t1 VO
k= = (3.6)
T VS
16

VO

VS T
t1 t2

0 t
kT T

IS = I1
I máx
I mín

0 t
kT T
I2
I máx
I mín

0 t
kT T
I
I máx
I mínI O

0 t
Figura 3-2 –Formas de onda para condução contínua de corrente.

A razão cíclica k, pode variar de 0 a 1 variando-se t1 ou T. Consequentemente, a


tensão de saída Vo pode variar de 0 a VS através da variação de k, controlando o fluxo
de potência.
Existem duas formas de variação da razão cíclica k: operação com freqüência
constante e operação com freqüência variável.
Freqüência constante  a freqüência f (ou período T ) de operação do chopper
é mantida constante, e o tempo de chave fechada (t1) é variado. A largura de pulso é
variada e esse tipo de controle é chamado Pulse-Width-Modulation (PWM).
17

Freqüência variável  a freqüência f de operação do chopper é variada, e


ambos os tempos t1 e t2 são mantidos constantes. É chamada modulação por
freqüência. Esse tipo de controle gera muitas harmônicas e a implementação de filtros
é dificultada.
Neste projeto será utilizado o método de modulação por largura de pulso-PWM.

3.1.1. Normalização:

Dividindo a equação 3.2 por Vs:


Vo E R.I o
= + (3.7)
V S VS VS

Onde:
Vo E V
=k ; = a ; S = I N ; I N  corrente média de normalização (3.8)
VS VS R

Daí:
Io
=k −a (3.9)
IN

Da equação de potência (P=VI) e das equações 3.8 e 3.9, a potência média


normalizada pode ser escrita da seguinte forma:
Po V .I
= o o = k (k − a) (3.10)
V S .I N V S .I N

Com base na análise das equações 3.7 a 3.10, conclui-se que:


• a ≤ 1  para funcionamento correto do circuito. (3.11)
• k ≥ a  Para que se tenha corrente média no circuito. (3.12)
Portanto:
a ≤ k ≤1 (3.13)
E a potência média na carga satisfaz a seguinte equação, que é representada
graficamente na figura 3.3:
Po
0≤ ≤ (1 − a ) (3.14)
V S .I N
18

Po/Vs.In

1,0
a
(1-a)

k
a 1,0

Figura 3-3 – Potência média na carga normalizada em função da razão cíclica.

3.2. Chopper elevador (Boost) – Princípio de Operação

O Chopper elevador da figura 3.4, também conhecido como chopper classe B


ou “boost”, produz na saída uma tensão que é maior que a tensão de alimentação,
baseado na carga e descarga do indutor L através do chaveamento da chave CH. As
formas de onda são mostradas na figura 3.5.

IS L a I D D1 Io
+
ICH
+
VS CH C1 Va Carga
_

-
b
Figura 3-4 – Chopper elevador – circuito equivalente.
19

IS
T
I2
IS
I1
t1 t2

0 t
kT T
I CH
T
I2

I1
t1 t2

0 t
kT T
ID
T
I2

I1
t1 t2

0 t
kT T
VCH
T
Vo

VS
t1 t2

0 t
kT T
Figura 3-5 – Formas de onda.

Durante o intervalo de tempo t1, a chave CH está fechada e ICH = IS é a corrente


de magnetização do indutor. Durante o intervalo de tempo t2, a chave CH está aberta e
IS=ID é a corrente que flui pelo circuito formado pelo capacitor e pela carga. Devido às
características da indutância, a tensão se eleva rapidamente no momento que a chave
CH abre, e a corrente decai de acordo com uma exponencial. No instante que a chave
CH estiver abrindo, a corrente da fonte IS e a corrente da carga não são iguais. Na
20

ausência do capacitor C1, o turn-off da chave CH forçará as duas correntes terem o


mesmo valor, ou seja, durante o turn-off o capacitor drena essa diferença de corrente.
O capacitor C1 também serve para reduzir o ripple de tensão na carga. O diodo D1
previne contra correntes reversas que possam vir da carga para a fonte ou para a chave
CH.
Para entender melhor a ação step-up (elevador), o capacitor C1 assume um valor
suficientemente grande para manter constante a tensão Va na carga.
A tensão média na carga será dada por:
VS
Va = (3.15)
(1 − k )
De acordo com a equação 3.15, teoricamente a tensão de saída Va pode ser
escolhida de VS até ∞ , variando k de 0 a 1. Na prática Va pode ser controlado de VS
até uma tensão muito superior a VS, e este limite máximo para a tensão Va vai
depender do capacitor C1, das características da carga e do próprio chopper (chaves,
diodos, etc.).
A ondulação de corrente é dada por:
VS .t1 VS .T .k
∆I = = (3.16)
L L
Uma das grandes vantagens do chopper elevador é o baixo ripple na corrente da
fonte. É muito utilizado nos carregadores de baterias de veículos elétricos, no
acionamento de motores de corrente contínua de tensão maior que a da fonte
disponível, e em freios regenerativos de veículos elétricos como carros de golfe,
trolleys, bicicletas elétricas e outros.

3.3. Chopper abaixador/elevador – Operação em dois quadrantes

Também conhecido como chopper classe C, o chopper abaixador/elevador é


muito utilizado no controle de servo motores e nas situações que requerem uma
transição suave entre a ação motora e a frenagem, e vice-versa. Uma estrutura muito
utilizada é a mostrada na figura 3.6. A chave CH1 e o diodo D2 constituem um
“chopper” abaixador (“chopper” classe A) que opera durante a ação motora direta. A
21

chave CH2 e o diodo D1 constituem um “chopper” elevador (“chopper” classe B) que


opera durante a frenagem regenerativa direta. Portanto o “chopper” classe C opera em
dois quadrantes: ação motora direta (+V e +I) e frenagem regenerativa direta (+V e -I).
Ambos os choppers são controlados simultaneamente, de forma que o fluxo de
potência pode ser invertido suavemente. Para isso as chaves CH1 e CH2 são fechadas
alternadamente. As principais formas de onda são mostradas na figura 3.7, onde
também são mostrados os intervalos de condução de cada chave e de cada diodo.
Durante o período T de chaveamento, CH1 está fechada no intervalo de tempo
que vai de zero a kT, e a chave CH2 está fechada no intervalo de tempo que vai de kT
a T. Para que não ocorra curto-circuito, as chaves CH1 e CH2 nunca poderão estar
fechadas no mesmo instante, por esse motivo é introduzido um atraso (delay) entre o
“turn-off” da chave CH1 e o “turn-on” da chave CH2, e vice-versa.

+
-

Figura 3-6 – Chopper classe C - circuito básico

Na figura 3.7, foi desconsiderado o intervalo de tempo entre o “turn-off” de


uma chave o “turn-on” da chave complementar, visto que é muito pequeno para ser
representado nesta figura. Os sinais de controle das chaves CH1 e CH2 são
respectivamente Vc1 e Vc2 , e é assumido que as chaves conduzem somente quando o
sinal de controle está em nível alto. Esta figura mostra as formas de onda para
operação motora (corrente positiva), e frenagem (corrente negativa) senda esta última
22

causada por um aumento de velocidade do motor, por exemplo, durante um declive, o


que resulta numa diminuição da razão cíclica.

Vc1
T T T T
t2
t1 t3
0 t
kT T
Vc2

0 t
kT T
Ia

0 t
kT

Vo

VS VS
E E
t
Condução dos diodos
CH1 D2 CH1 D2 D2 D1 e das chaves
Figura 3-7 – Chopper classe C – formas de onda e condução das chaves e diodos

Com relação ao chopper classe C, para este modo de controle PWM, pode-se
destacar quatro pontos:

1) Neste circuito a condução descontínua não acontece, independentemente


da freqüência de operação. A circulação da corrente de roda-livre se dá no
momento que CH1 está desligada e o diodo D2 está conduzindo, e isto é
esperado no intervalo de tempo kT ≤ t ≤ T , que também é o intervalo de
tempo que a chave CH2 recebe o sinal de controle. Se a corrente Ia chegar
23

a zero no intervalo de roda livre, a força contra-eletromotriz irá


imediatamente fazer com que a corrente flua na direção reversa passando
pela chave CH2. Similarmente, quando CH2 está desligada e D1
conduzindo e a corrente chegar a zero, CH1 conduzirá imediatamente
porque Vc1 está em nível alto e VS > E.
2) Desde que não exista condução descontinua, a corrente estará fluindo todo
o tempo. Assim, durante o intervalo de tempo t1, a armadura estará
conectada à fonte através de CH1 ou D1, consequentemente, a tensão
aplicada nos terminais do motor será igual a Vs e a taxa de variação de Ia
será positiva porque VS > E. Similarmente, durante o intervalo de tempo
t3, a armadura do motor estará conectada a CH2 ou D2, consequentemente,
a tensão aplicada nos terminais do motor será zero e a taxa de variação de
Ia será negativa. Isso explica a natureza das formas de onda de VO e Ia.
3) Durante o intervalo de tempo t1, a corrente Ia que é positiva flui por CH1,e
quando D1 está em condução a corrente é negativa. A corrente na fonte
flui somente nesses intervalos de tempo e é igual a Ia. Durante o intervalo
de tempo t3, a parte da corrente Ia que é positiva flui por D2 e a parte que é
negativa flui por CH2.
4) A partir das formas de onda da figura 3.7:
Vo = kVS (3.21)
E da equação básica Vo = E + Ra I a , pode-se obter:
kVS − E
Ia = (3.22)
Ra

A equação 3.22 pode ser expressa da seguinte forma:


I a × Ra E
=k−
VS VS

( I a ⋅ Ra ) + E
k= (3.23)
VS
24

A equação 3.22 mostra que a operação motora direta ocorre quando


E E
< k , e que a frenagem regenerativa ocorre quando > k . A operação
VS VS

E
a vazio acontece quando k = .
VS

O máximo ripple de corrente pode ser dado pela equação 3.5, e não depende
da velocidade do motor. Uma mudança na velocidade para um dado valor de k,
somente muda o valor da corrente e não muda o ripple.
Supondo que o conversor esteja operando a vazio, então Ia médio será zero e
sua forma de onda será simétrica ao eixo do tempo. Um decréscimo na velocidade
causará um acréscimo na corrente e a forma de onda de Ia se deslocará para cima.
Quando Ia for maior que o máximo ripple, Ia será sempre positiva e somente D2 ou
CH1 estarão conduzindo. Embora CH2 esteja recendo sinal de controle em nível alto,
CH2 não conduzirá devido à polarização reversa aplicada pelo diodo D2 em condução.
Desde que o ripple seja até 5% da corrente nominal, CH2 e D1 terão que conduzir
somente quando o motor estiver operando em carga baixa.
Similarmente, um incremento na velocidade poderá produzir uma corrente Ia
negativa e a forma de onda da corrente se deslocará para baixo. Enquanto a corrente
for negativa, esta estará fluindo por CH2 e D1, e então, CH1 e D2 não tem nenhuma
chance de conduzir (após o intervalo de tempo t3 – fig.3.7).
A discussão precedente mostra que durante a ação motora direta a corrente flui
por CH1 ou por D2, e durante a frenagem regenerativa a corrente flui por CH2 ou D1.
25

4. O ACIONAMENTO PROPOSTO

O acionamento CC-CC proposto é uma implementação do “chopper”


abaixador/elevador ou chopper classe C, sendo as chaves do tipo MOSFETs, e o
controle destas, feito pelo microcontrolador PIC16F876 da microchip. O
microcontrolador recebe o sinal de referência de velocidade e os sinais dos sensores de
corrente e de tensão, previamente filtrados por filtros passa - baixa, para então, usando
um controlador PI digital, comandar o chaveamento dos MOSFETs via saídas PWM
do PIC, fechando assim as malhas do circuito.

4.1. O circuito simplificado


Na figura 4.1 é mostrado o circuito simplificado do acionamento proposto. O
capacitor C1 alisa a tensão da fonte. Os resistores R1 e R2 formam um divisor de
tensão para monitoração da tensão no capacitor C1, de forma que a energia a ser
transferida do motor para a fonte, durante a frenagem, possa ser dissipada pelo resistor
Rd através do comando da chave CH3. Esta monitoração da tensão no capacitor e
dissipação de potência pelo resistor R6 se dá pelo fato da não disponibilidade de uma
fonte receptora para testes do conversor. No momento que a tensão começar a subir
além da tensão na fonte, o divisor de tensão formado por R1 e R2 manda um sinal
analógico que equivale a uma tensão ligeiramente acima da tensão da fonte e desta
forma o microcontrolador comanda o fechamento da chave CH3 via saída digital a ser
amplificada pelo drive de tensão.
Os MOSFETs CH1 e CH2 possuem diodos intrínsecos D1 e D2, e constituem o
conversor abaixador/elevador (chopper classe C) mostrado na figura 3.6 e descrito no
item 3.3.
Os resistores R3 e R4 formam um divisor de tensão para leitura da tensão nos
terminais do motor (sensor de velocidade), que proporciona uma boa estimativa da
velocidade como mostrado na equação 2.5.
26

R8

CH1 D1
R6 C2
Vs + C1
+
-
M Vo
CH3 D3 CH2 D2 +
CC
-
-
- +

Drive de Gate drive


tensão IR2104

FPB3

FPB2

PWM1
+5V 21 13 0-5V FPB1
5 4 AMPLIFICADOR
Referência de 0-5V
velocidade R7 PIC16F876
POT1 FPB4 3 0-5V
2 SOMADOR
20 8,19 9 10

+5V CLK

Figura 4-1 – Circuito simplificado para controle do acionamento.

O resistor R5 é um resistor “shunt” de 0,05 Ohms e 3W, que constitui o sensor


de corrente. Ele produz uma queda de tensão proporcional à corrente, que devidamente
amplificada e filtrada, proporcionará uma boa precisão quanto à leitura da corrente.
O capacitor C2 filtra as altas freqüências que podem influenciar no
funcionamento dos MOSFETS CH1 e CH2.
O resistor R8 é utilizado para fins de teste do conversor durante o
desenvolvimento do protótipo, limitando a corrente que pode fluir pelos MOSFETS
protegendo o circuito contra altas correntes de falta. No entanto para uma boa
proteção, se faz necessário o uso de um circuito que detecte o curto-circuito e desligue
a fonte num intervalo de tempo suficientemente pequeno, para que não ocorra a
queima de algum componente. Essa proteção não foi implementada neste projeto.
27

4.1.1. Drive de tensão:


O drive de tensão é constituído por um transistor BC548 pnp, funcionando
em corte ou em saturação. Quando em corte o transistor aplica 15V de uma fonte
externa, no gate do MOSFET CH3 e este entra em saturação. Quando em saturação, o
transistor aplica 0V e o MOSFET entra em corte. Desta forma, será necessária uma
lógica invertida para comandar o MOSFET CH3. D3 é o diodo intrínseco do MOSFET
CH3.

4.1.2. Filtros passa-baixa (FPB):


Os filtros passa-baixa utilizados têm freqüência de corte de 1,2kHz, e são
necessários para filtrar as altas freqüências da tensão e da corrente, de forma que o
microcontrolador leia apenas a componente CC.

4.1.3. Amplificador:
É usado para amplificar o sinal de corrente (na forma de tensão) para um
patamar compatível com o microcontrolador, já que o sinal lido nos terminais do
resistor R5 varia de zero a aproximadamente 130mV e amplificado este varia de -2,5 a
+2,5V.

4.1.4. Somador:
Utilizado para somar cerca de 2,5V ao sinal de corrente, já que este pode ter
valores negativos, e o microcontrolador não recebe sinais negativos. O sinal de
corrente que pode variar -2,5 a +2,5V, passa a variar de 0 a 5V, que agora é
compatível com o microcontrolador e passa a ser tratado em software, em que 2,5V
significa que a corrente é igual a zero.

4.1.5. “Gate-drive” IR2104:


O “gate-drive” utilizado para acionamento dos “MOSFETS” é o IR2104 da
“International Rectifier”, que comanda os dois “MOSFETS” de uma só vez,
permitindo nesse caso específico, gerar o segundo sinal PWM que vai comandar o
28

“MOSFET” CH2 a partir do PWM1 e de uma entrada “shutdown” que estará sempre
em nível alto. Isso se deve ao fato que o segundo PWM é simplesmente o
complementar do primeiro com um tempo morto introduzido entre a descida de um e a
subida do outro. O tempo morto é introduzido pelo “gate drive” IR2104 e tem um
valor fixo típico de 520ns.

4.2. O sistema de controle


O sistema de controle será composto de uma malha interna de corrente e uma
malha externa de velocidade, como mostra a figura 4.2.

mf Ke
Ec

*m + e m
I*a Imáx
I*a + eIa + V*
a
Vmáx
Va m
Kp+Ki/s Kp Kc MOTOR
- 1 - 2
Imin Vmin

mf I af Ia
H1(s)

H 2(s)

Figura 4-2 – Diagrama de blocos

Ω*m é a referência de velocidade e Ωmf é a velocidade medida na forma de


tensão nos terminais do motor, filtrada por um filtro passa-baixa ativo de segunda
ordem H2(s). O erro de velocidade eΩm passa por um controlador PI e produz a
corrente de referência I*a , que é devidamente limitada por software. Iaf é a corrente
medida em forma de tensão na saída do motor através de um resistor “shunt” de alta
precisão, e filtrada por um filtro passa-baixa ativo de segunda ordem H1(s). Kp2 forma
um controlador proporcional, que a partir do erro de corrente eIa somado à tensão de
armadura calculada, produz a tensão de referência, que é devidamente limitada via
software e com a qual é calculada a razão cíclica de operação do conversor. Kc é o
ganho do conversor.
29

4.3. Operação do conversor


A principal aplicação do conversor proposto é o acionamento de veículos
elétricos, portanto, serão apresentadas a seguir as várias situações de operação do
conversor de acordo com a figura 4.2 e com as situações possíveis para veículos
motorizados.

4.3.1 Acelerando – Operação “Buck”


Ω *m > Ω m e I a ≥ 0

Neste caso, o erro de velocidade eΩm será positivo e a corrente de referência I a*


será positiva, indicando assim operação motora direta. O erro de corrente e Ia também
será positivo e multiplicado por uma constante determinará a tensão de referência a
partir da qual é calculada a razão cíclica.

4.3.2 Velocidade de cruzeiro - “Cruise control”


Ω *m = Ω m e Ia > 0
Nesta situação o erro de velocidade eΩm é zero e o conversor opera com razão
cíclica constante.

4.3.3 Desacelerando – Operação “Boost” (frenagem)


0 < Ω *m < Ω m

Neste caso, a velocidade de referência (controlada pelo usuário) é trazida para


um patamar inferior à velocidade do motor, fazendo com que o erro de velocidade seja
negativo. No entanto a corrente de referência I a* calculada pelo controlador PI a
princípio será positiva, mas decresce podendo sofrer inversão, e volta a subir para
então estabilizar de acordo com a razão cíclica calculada, conforme descrito em 3.3
itens 1 e 4. Isso acontece porque a velocidade varia lentamente, ao passo que a
corrente varia rapidamente.
A mesma situação para o conversor acontece quando há um aumento de
velocidade acima da velocidade de referência (por exemplo: descendo uma ladeira),
30

porém essa situação é fisicamente distinta daquela descrita anteriormente. Neste caso
não é a referência que é trazida para um patamar inferior à velocidade do motor, mas
sim a velocidade do motor que aumenta, aumentando a força contra-eletromotriz e
invertendo o fluxo de potência.
31

5. O “SOFTWARE” DE CONTROLE

O “software” foi implementado em linguagem de programação C, utilizando o


compilador “PCW C compiler IDE” versão 3.32, próprio para programação de
microcontroladores das famílias 16F e 18C da “microchip”. Para a descarga do
programa .hex no microcontrolador foi utilizado o software “MPLAB IDE” versão 7.5
e o programador PIC START Plus. A figura 4.1 mostra o algoritmo do software
implementado.
Inicialização  Parte do software que inicializa o PIC configurando as saídas
PWM, as entradas analógicas, saída digital e o timer de interrupção, além de zerar
todas as variáveis e fazer uma pré-leitura das portas analógicas. A pré-leitura analógica
é necessária na inicialização, pois ao inicializar o programa propriamente dito é feito
uma média dos valores analógicos lidos anteriormente com os atuais, desta forma, se
não fosse feita essa pré-leitura, o primeiro valor seria irreal e esse erro se propagaria à
medida que fossem feitas novas leituras.
“Background Loop”  ‘Janela de tempo’ do software. Neste estágio o PIC
fica esperando por um timer de interrupção interna para que todo o software seja
executado. Depois que o software é executado, o PIC espera até a próxima interrupção
para executá-lo novamente. O timer de interrupção é gerado internamente no PIC e
nesse caso foi configurado para 1ms, e define também o tempo de amostragem dos
sinais, já que os sinais serão lidos uma vez a cada execução do software. Por uma
questão de simplicidade, optou-se por utilizar um único tempo de amostragem de 1 ms
para ambas as malhas corrente e velocidade. A separação dinâmica foi obtida com a
seleção adequada dos ganhos dos controladores.
(1)  Leitura das variáveis analógicas.
(2)  Cálculo da média. A média é feita com os valores atuais e os valores da
execução anterior do software, exceto na primeira execução, como já descrito na
inicialização.
(3)  Cálculo da tensão de armadura. Neste estágio é calculada a tensão de
armadura utilizando o valor da corrente de armadura lida e devidamente tratada em
software, o valor da tensão nos terminais do motor e o valor de software da resistência
32

da armadura. Para realização dos cálculos foi utilizado o conceito de aritmética


fracionária.
(4)  Cálculo da velocidade do motor. Neste estágio, o cálculo da velocidade é
feito multiplicando-se o valor da tensão calculado anteriormente pelo inverso da
constante elétrica do motor. Para realização dos cálculos foi utilizado o conceito de
aritmética fracionária.
(5)  Cálculo do erro de velocidade. É a diferença entre a velocidade de
referência (valor lido) e a velocidade calculada em (4).
(6)  Controlador PI. Faz o controle proporcional e integral da corrente a
partir do erro de velocidade, ou seja, é um controle de corrente (torque) comandado
por tensão (velocidade). É composto por duas partes: controle proporcional (constante
Kp1 multiplicada pelo erro de velocidade) e pelo controle integral (constante Ki
multiplicada pelo tempo de amostragem e pelo erro de velocidade). O controle integral
acumula seu valor anterior, de forma que a segunda parcela do PI torna-se um
somatório do valor atual com os valores anteriores.
(7)  Limitação por software da corrente de armadura.
(8)  Cálculo do erro de corrente.
(9)  Cálculo da tensão de referência da armadura. É um controlador
proporcional (constante Kp2 multiplicada pelo erro de corrente e somada com a tensão
de armadura calculada) utilizado para obter-se a tensão de armadura que resulte na
corrente desejada.
(10)  Limitação da tensão de armadura por software.
(11)  Cálculo da razão cíclica.
(12) Cálculo do tempo em nível alto do PWM. Essa é a variável necessária
para habilitar o PWM.
(13)  Habilita o PWM
(14)  Teste da tensão Vs nos terminais da fonte. Caso Vs seja maior que o
valor nominal, condição prevista quando ocorre a frenagem, é comandado o
fechamento da chave CH3 (via saída digital) dissipando desta forma a energia da
frenagem no resistor R6.
33

(15)  Atualização das variáveis para ser feita a média na execução seguinte, e
atualização do erro de velocidade para cálculo da parte integral do controlador PI na
próxima execução.

RESET

In icialização

" B ack g ro u n d
L oop"

T in t

V *a k = K p 2 .e I a + E a (9 )
k k
L er en trad as an aló g icas
(1 ) I a , V m , *m , VS

V *a k > V a m áx S V *a k = Va m áx
C álcu lo d a m éd ia
(2 )
I a k , V m k , *m k , VS k N
(1 0 )
S
V *a k < Va m ín V *a k = Va m ín
(3 ) E a k = V m k -R a . I a k
N

= Eak d = Va . 1 (1 1 )
(4 ) mk V
k

t o n= d .f C H (1 2 )

(5 ) e mk = *k
m - mk
A tu aliza (1 3 )
PW M
8

(6 ) I*a k = K p 1.e + K i.Ta m .e


mk k= 0 mk
S lig a
V S k > V S m áx fren ag em

S N (1 4 )
I*a k > I a m áx I*a k = I a m áx
N S d eslig a
(7 ) VS k < V S m ín fren ag em

S N
I*a k < I a m ín I*a k = I a m ín
A tu a liza
N v ariáv eis (1 5 )

(8 ) e I a = I*a - I a
k k k

Figura 5-1 – Algoritmo


34

6. O PROTÓTIPO

Na figura 6.1 são mostrados os equipamentos utilizados para a realização de


testes com o protótipo:
1 – Fonte de potência;
2 – Motor ;
3 – Amperímetro para medição de corrente no resistor de frenagem;
4 – Placa de controle;
5 – Placa de força;
6 – Ponteira de tensão isolada;
7 – Amperímetro para medição de corrente na carga;
8 – Módulo ponteira de corrente;
9 – Carga RL utilizada para testes iniciais;
10 – Programador PICstart plus;
11 – Fonte simétrica -12V +12V;
12 – Osciloscópio;
13 – Computador;

Figura 6-1 - Bancada com protótipo em funcionamento


35

Figura 6-2 - Protótipo – 1) Placa de força 2) Placa de controle

6.1. Formas de onda


6.1.1 Modo “Buck” com carga RL
Teste feito com uma carga RL, onde:
R=0 a 200Ω; L=59mH; RL=18Ω
A tensão de alimentação da fonte é de 120Vcc.
No caso do conversor operando em 50% do ciclo de trabalho (figura 6.3),
variou-se a carga R de 200Ω a 40Ω (do ponto de vista da rede isso significa aumentar
a carga) e observou-se a corrente variando de 0,6 a 3A sem variação no ciclo de
trabalho do conversor. Isso mostra que a malha de corrente não funciona nessa
situação, com qualquer ganho dos controladores, pois não há regulação de corrente.
No entanto, para operação próxima aos 100% do ciclo de trabalho foi possível
observar uma resposta do sistema de controle da seguinte forma: com a referência de
velocidade em 100% observou-se o ciclo de trabalho em 100% e corrente na carga em
torno de 2A (carga R com aproximadamente 60 Ω). Ao aumentar a carga R a razão
cíclica diminui, e ao diminuir novamente a carga R a razão cíclica aumenta
novamente, tentando manter constante a corrente na carga.
36

O sistema de controle perde capacidade de resposta com aumento da carga R


acima da nominal, e quando o conversor está operando em 50% do ciclo de trabalho,
devido às limitações do controlador tipo P na ausência de fcem .
Os pequenos picos de corrente e tensão durante o chaveamento se devem à
corrente de recuperação reversa dos diodos intrínsecos dos MOSFETS.

Figura 6-3 - Operação em modo “buck” – ciclo de trabalho em 50% (carga RL)
37

Figura 6-4 - Operação em modo “buck” – ciclo de trabalho em 100% (RL)

6.1.2 Modo “Buck” com motor operando a vazio


Motor utilizado:
VN=220Vcc; IN=0,9A; Ra=40Ω; Ivazio=0,1A;
Neste teste não foi possível realizar uma variação de carga, pela não
disponibilidade de equipamento adequado para teste com este motor. O teste foi feito
com o motor operando a vazio com ciclo de trabalho em 50% (figura 6.5) e 100%
(figura 6.6).
38

Figura 6-5 - Operação em modo “buck” – ciclo de trabalho em 50% (carga motor)

Figura 6-6 - Operação em modo “buck” – ciclo de trabalho em 100% (carga motor)
39

6.1.3 Modo “Boost” (frenagem)


Motor utilizado:
VN=220Vcc; IN=0,9A; Ra=40Ω; Ivazio=0,1A;
Neste caso, o motor estava operando no modo “buck” com ciclo de trabalho
em 100%, quando a referência de velocidade é trazida para próximo de zero. A figura
6.7 mostra a forma de onda obtida. No canal 1 é mostrada a tensão no capacitor de
entrada e o canal 2 mostra a corrente no motor. A forma de onda no alto da figura é no
canal 1 (tensão). Pode-se observar uma pequena variação da tensão no capacitor de
entrada de 120Vcc para cerca de 125Vcc instantaneamente. Também pode-se observar
a corrente negativa no motor em aproximadamente 0,5A.
Os resultados obtidos com este teste foram satisfatórios, visto que uma
variação de carga era impraticável, e que o conversor foi projetado para operar com
um motor de 120Vcc, IN=2,8A e Ra=3Ω.

Figura 6-7 - Operação em modo “boost” – frenagem


40

7. CONCLUSÃO

Os testes realizados no laboratório de máquinas com o motor para o qual o


protótipo foi projetado, não foram bem sucedidos pois existe alguma interferência
somente no laboratório de máquinas. Os testes no LEPAC foram muito bons,
mostrando o funcionamento do conversor “buck” durante a ação motora direta, e do
conversor “boost” durante a frenagem regenerativa direta. Apenas foi possível a
realização de testes com o motor operando a vazio e à metade de sua velocidade
nominal.
Para operação do conversor no modo “buck” com carga RL e ciclo de trabalho
em 50%, variou-se a carga e a razão cíclica não variou, mostrando que para esta
situação o sistema de controle não responde. No entanto, para operação próxima aos
100% do ciclo de trabalho foi possível observar uma resposta do sistema conforme
6.1.1. Não era de se esperar que houvesse uma boa resposta com carga RL, já que o
conversor é proposto para acionamento de um motor (carga RLE).
Para testes do conversor em modo “boost”, a referência de velocidade foi
levada a 100% (com o motor operando a vazio) e depois de o motor estar com
velocidade máxima a referência foi trazida para próximo de zero. Desta forma
observou-se uma corrente negativa fluindo do motor para a resistência de dissipação
conforme 6.1.3.
Considerando a não disponibilidade de uma fonte receptora e interferências
existentes somente no laboratório de máquinas, os resultados foram satisfatórios e são
suficientes para demonstrar o funcionamento do protótipo, apenas não foi possível
fazer um ajuste fino de ganho do controlador PI e do controlador Proporcional.
41

ANEXO A

O software de controle em linguagem ‘C’ que foi compilado e implementado


no PIC.

PARTE 1 – Inicialização ("adress_v1+.h")

#ifndef _ADRESSES__PIC__H__
#define _ADRESSES__PIC__H__

// Timer2

#locate TMR2=0x11
#locate T2CON=0x12
#locate PR2=0x92
// CCP1
#locate CCPR1L=0x15
#locate CCPR1H=0x16
#locate CCP1CON=0x17
// ADC
#locate ADRESH=0x1E
#locate ADCON0=0x1F
#locate ADRESL=0x9E
#locate ADCON1=0x9F
#locate TXREG=0x19
#define Wait_Conversion() while(ADCON0 & 4)
#define Start_Conversion() ADCON0 |= 4

unsigned int8 Vm_now, omega_mx_now, Ia_now, Vs_now;


unsigned int8 Vm_ant, omega_mx_ant, Ia_ant, Vs_ant;
unsigned int8 Vm_med, omega_mx_med, Ia_med, Vs_med;

unsigned int8 Ia_ref, omega_m, Ia;


unsigned int8 erro_omega, erro_Ia;
unsigned int8 acao_proporcional, Ra_x_Ia_8, acao_integral_8;
unsigned int8 Ea, Va_ref;
unsigned int8 ton, Va_ref_aux;
unsigned int16 Ra_x_Ia, Ia_16, Ea_16, omega_m_16, erro_Ia_16, Va_ref_16,
ton_16;
unsigned int16 erro_omega_16, acao_integral_16, erro_omega_ant_16;
unsigned int16 acao_proporcional_16, acao_integral_ant, acao_integral,
acao_integral_aux;

#define POSITIVO 0
42

#define NEGATIVO 1

unsigned int8 sinais;


#bit sinal_erro_omega = sinais.0
#bit sinal_erro_Ia = sinais.1
#bit sinal_Ia = sinais.2
#bit sinal_acao_integral_ant = sinais.3
#bit sinal_acao_integral = sinais.4
#bit sinal_Ia_ref = sinais.5

#define Ra 50
#define Kix 80
#define Kp1 130
#define Kp2 255

#define IA_MAX 235 //positivo


#define IA_MIN 235 //negativo

#define VA_MAX 255


#define VA_MIN 0

#define VS_MAX 225


#define VS_MIN 223

void Zera_Tudo()
{
Vm_now = 0;
omega_mx_now = 0;
Ia_now = 0;
Vs_now = 0;
Vm_ant = 0;
omega_mx_ant = 0;
Ia_ant = 0;
Vs_ant = 0;
Vm_med = 0;
omega_mx_med = 0;
Ia_med = 0;
Vs_med = 0;
omega_m = 0;
acao_proporcional = 0;

Ra_x_Ia_8 = 0 ;
Ra_x_Ia = 0 ;
Ia_16 = 0 ;
Ea_16 = 0 ;
43

omega_m_16 = 0 ;
erro_Ia_16 = 0 ;
Va_ref_16 = 0 ;
ton_16 = 0 ;
erro_omega_16 = 0 ;
acao_integral_16 = 0 ;
erro_omega_ant_16 = 0 ;
acao_proporcional_16 = 0 ;
acao_integral_aux = 0;
acao_integral_ant = 0;
Va_ref_aux = 0;
acao_integral = 0;

sinal_erro_omega = POSITIVO;
sinal_acao_integral_ant = POSITIVO;
sinal_acao_integral = POSITIVO;
sinal_Ia_ref = POSITIVO;
sinal_Ia = POSITIVO;
sinal_erro_Ia = POSITIVO;

void primeira_leitura()
{
SET_ADC_CHANNEL(0); delay_us(10);
Start_Conversion(); Wait_Conversion();
Ia_ant = ADRESH >> 1;
SET_ADC_CHANNEL(1); delay_us(10);
Start_Conversion(); Wait_Conversion();
Vm_ant = ADRESH >> 1;
SET_ADC_CHANNEL(2); delay_us(10);
Start_Conversion(); Wait_Conversion();
Vs_ant = ADRESH >> 1;
SET_ADC_CHANNEL(3); delay_us(10);
Start_Conversion(); Wait_Conversion();
omega_mx_ant = ADRESH >> 1;
}

#endif //_ADRESSES__PIC__H__

PARTE 2 – Programa principal


// Acionamento Microcontrolado de um motor DC com frenagem regenerativa
44

#include <16F876A.h>
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, BRGH1OK) //Jumpers:
8to11, 7to12
#include "adress_v1+.h"

#define RESOLUTION 128

int8 ciclos=0;

main()
{
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM. The cycle time
will be
// (1/clock)*4*TMR2*(PR2+1).In this program
// clock=20MHz and PR2=63(below) 63=003Fh. For the
// possible selections the cycle time is:
// (1/20000000)*4*1*256=51,2us or 19,531kHz
// (1/20000000)*4*4*127=us or 9,692kHz ************
setup_timer_2(T2_DIV_BY_4, RESOLUTION, 1);
setup_ADC_ports (RA0_RA1_RA3_ANALOG); // RA2 tambem
setup_ADC (ADC_CLOCK_INTERNAL);
set_tris_b(0);
output_high(pin_b0); // inciar com frenagem desligada
Zera_Tudo();
primeira_leitura();
set_pwm1_duty(0);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);

while(1)
{
}
}
#INT_TIMER1 //timer de interrupção em 1ms
void timer1_isr()
{
set_timer1(64910); // Nint = 5.000.000 / (1/Tint) / 8
// ciclos_T1 = 65535 - Nint
// set_timer1(ciclos_T1)

output_high(pin_b7); // para ver a janela de tempo


45

// LEITURAS DAS VARIÁVEIS ATUAIS


SET_ADC_CHANNEL(0); delay_us(10);
Start_Conversion(); Wait_Conversion();
Ia_now = ADRESH >> 1;
SET_ADC_CHANNEL(1); delay_us(10);
Start_Conversion(); Wait_Conversion();
Vm_now = ADRESH >> 1;
SET_ADC_CHANNEL(2); delay_us(10);
Start_Conversion(); Wait_Conversion();
Vs_now = ADRESH >> 1;
SET_ADC_CHANNEL(3); delay_us(10);
Start_Conversion(); Wait_Conversion();
omega_mx_now = ADRESH >> 1;

// Cálculo da média
Ia_med = Ia_ant + Ia_now;
Vm_med = Vm_ant + Vm_now;
Vs_med = Vs_ant + Vs_now;
omega_mx_med = omega_mx_ant + omega_mx_now;

// ACERTO DA CORRENTE
if (Ia_med >= 130)
{
Ia = Ia_med - 130;
sinal_Ia = POSITIVO;
}
else
{
Ia = 130 - Ia_med;
sinal_Ia = NEGATIVO;
}

// CÁLCULO DA TENSÃO DE ARMADURA


Ia_16 = (int16) Ia; // Casting (mudança de tipo)
Ra_x_Ia = Ia_16*Ra;
Ra_x_Ia = Ra_x_Ia >> 8;
Ra_x_Ia_8 = (int8) Ra_x_Ia; // Casting

if (sinal_Ia == POSITIVO)
{
if (Vm_med >= Ra_x_Ia_8)
{
Ea = Vm_med - Ra_x_Ia_8;
}
46

else
{
Ea=5;
}
}
else
{
Ea=255;
}

// CÁLCULO DA VELOCIDADE DO MOTOR


omega_m = Ea;

// CÁLCULO DO ERRO DA VELOCIDADE DO MOTOR


if (omega_mx_med >= omega_m)
{
erro_omega = omega_mx_med - omega_m;
sinal_erro_omega = POSITIVO;
}
else
{
erro_omega = omega_m - omega_mx_med;
sinal_erro_omega = NEGATIVO;
}

// CONTROLE PROPORCIONAL E INTEGRAL

//proporcional
erro_omega_16 = (int16) erro_omega;
acao_proporcional_16 = erro_omega_16 * Kp1;
acao_proporcional_16 = acao_proporcional_16 >> 8 ;
acao_proporcional = (int8) acao_proporcional_16;

acao_integral_16 = erro_omega_16 * Kix;

// açao integral // sinal de erro_omega = sinal de acao_integral_16

if ((sinal_erro_omega == POSITIVO) && (sinal_acao_integral_ant ==


POSITIVO))
{
acao_integral = acao_integral_ant + acao_integral_16;
sinal_acao_integral = POSITIVO;
//Teste de overflow positivo
if ((acao_integral < acao_integral_ant) || (acao_integral <
acao_integral_16))
47

{
acao_integral = 65535;
}
}

if ((sinal_erro_omega == POSITIVO) && (sinal_acao_integral_ant ==


NEGATIVO))
{
if (acao_integral_16 >= acao_integral_ant)
{
acao_integral = acao_integral_16 - acao_integral_ant;
sinal_acao_integral = POSITIVO;
}
else
{
acao_integral = acao_integral_ant - acao_integral_16;
sinal_acao_integral = NEGATIVO;
}
}

if ((sinal_erro_omega == NEGATIVO) && (sinal_acao_integral_ant ==


POSITIVO))

{
if (acao_integral_16 <= acao_integral_ant)
{
acao_integral = acao_integral_ant - acao_integral_16;
sinal_acao_integral = POSITIVO;
}
else
{
acao_integral = acao_integral_16 - acao_integral_ant;
sinal_acao_integral = NEGATIVO;
}
}
if ((sinal_erro_omega == NEGATIVO) && (sinal_acao_integral_ant ==
NEGATIVO))
{
acao_integral = acao_integral_ant + acao_integral_16;
sinal_acao_integral = NEGATIVO;
//Teste de overflow positivo
if ((acao_integral < acao_integral_ant) || (acao_integral <
acao_integral_16))
{
acao_integral = 65535;
48

}
}

acao_integral_aux = acao_integral >> 8;


acao_integral_8 = (int8) acao_integral_aux;

sinal_acao_integral_ant = sinal_acao_integral;
acao_integral_ant = acao_integral;

//PI Ia_ref = acao_integral + acao_proporcional


// sinal de erro_omega = sinal_acao_proporcional

if ((sinal_acao_integral == POSITIVO) && (sinal_erro_omega ==


POSITIVO))
{
Ia_ref = acao_integral_8 + acao_proporcional;
sinal_Ia_ref = POSITIVO;
//Teste de overflow positivo
if ((Ia_ref < acao_integral_8) || (Ia_ref < acao_proporcional))
{
Ia_ref = 255;
}
}

if ((sinal_acao_integral == POSITIVO) && (sinal_erro_omega ==


NEGATIVO))

{
if (acao_integral_8 >= acao_proporcional)
{
Ia_ref = acao_integral_8 - acao_proporcional;
sinal_Ia_ref = POSITIVO;
}
else
{
Ia_ref = acao_proporcional - acao_integral_8;
sinal_Ia_ref = NEGATIVO;
}
}

if ((sinal_acao_integral == NEGATIVO) && (sinal_erro_omega ==


POSITIVO))
49

{
if (acao_integral_8 <= acao_proporcional)
{
Ia_ref = acao_proporcional - acao_integral_8;
sinal_Ia_ref = POSITIVO;
}
else
{
Ia_ref = acao_integral_8 - acao_proporcional;
sinal_Ia_ref = NEGATIVO;
}
}

if ((sinal_acao_integral == NEGATIVO) && (sinal_erro_omega ==


NEGATIVO))
{
Ia_ref = acao_integral_8 + acao_proporcional;
sinal_Ia_ref = NEGATIVO;
//Teste de overflow positivo
if ((Ia_ref < acao_integral_8) || (Ia_ref < acao_proporcional))
{
Ia_ref = 255;
}
}

Ia_ref = Ia_ref >> 1;

//PI
erro_omega_16 = (int16) erro_omega;
acao_integral_16 = erro_omega_16 * Kix;
acao_integral_16 = acao_integral_16 >> 8 ;
acao_integral = (int8)acao_integral_16;

erro_omega_ant_16 = (int16) erro_omega_ant;


acao_proporcional_16 = erro_omega_ant_16 * Kp1;
acao_proporcional_16 = acao_proporcional_16 >> 8 ;
acao_proporcional = (int8) acao_proporcional_16;

Ia_ref = Ia_acumulado;

// Cálculo da ação INTEGRAL


if (sinal_erro_omega == POSITIVO)
{
Ia_ref_aux = Ia_ref + acao_integral;
50

//Teste de overflow positivo


if ((Ia_ref_aux < Ia_ref) || (Ia_ref_aux < acao_integral))
Ia_ref_aux = 255;
}

else // sinal negativo


{
Ia_ref_aux = Ia_ref - acao_integral;
//Teste de overflow negativo
if ((Ia_ref_aux > Ia_ref) || (Ia_ref_aux > acao_integral))
Ia_ref_aux = 0;
}

Ia_ref = Ia_ref_aux;

// Cálculo da acao PROPORCIONAL


if (sinal_erro_omega_ant == POSITIVO)
{
Ia_ref_aux = Ia_ref - acao_proporcional;
//Teste de overflow negativo
if ((Ia_ref_aux > Ia_ref) || (Ia_ref_aux > acao_proporcional))
Ia_ref_aux = 0;
}
else // sinal negativo
{
Ia_ref_aux = Ia_ref + acao_proporcional;
//Teste de overflow positivo
if ((Ia_ref_aux < Ia_ref) || (Ia_ref_aux < acao_proporcional))
Ia_ref_aux = 255;
}
Ia_ref = Ia_ref_aux;

// LIMITADOR DA CORRENTE DE REFERÊNCIA DA ARMADURA


if (Ia_ref > IA_MAX) Ia_ref = IA_MAX;
// if (Ia_ref < IA_MIN) Ia_ref = IA_MIN;

// CÁLCULO DO ERRO DA CORRENTE DE ARMADURA


if ((sinal_Ia == POSITIVO) && (sinal_Ia_ref == POSITIVO))
{
if (Ia_ref >= Ia)
{
erro_Ia = Ia_ref - Ia;
sinal_erro_Ia = POSITIVO;
}
51

else
{
erro_Ia = Ia - Ia_ref;
sinal_erro_Ia = NEGATIVO;
}
}

if ((sinal_Ia == NEGATIVO) && (sinal_Ia_ref == NEGATIVO))


{
if (Ia_ref <= Ia)
{
erro_Ia = Ia - Ia_ref;
sinal_erro_Ia = POSITIVO;
}
else
{
erro_Ia = Ia_ref - Ia;
sinal_erro_Ia = NEGATIVO;
}
}
if ((sinal_Ia == POSITIVO) && (sinal_Ia_ref == NEGATIVO))
{
erro_Ia = Ia_ref + Ia;
sinal_erro_Ia = NEGATIVO;
//Teste de overflow positivo
if ((erro_Ia < Ia) || (erro_Ia < Ia_ref))
{
erro_Ia = 255;
}
}

if ((sinal_Ia == NEGATIVO) && (sinal_Ia_ref == POSITIVO))


{
erro_Ia = Ia_ref + Ia;
sinal_erro_Ia = POSITIVO;
//Teste de overflow positivo
if ((erro_Ia < Ia) || (erro_Ia < Ia_ref))
{
erro_Ia = 255;
}
}

// CÁLCULO DA TENSÃO DE REFERÊNCIA DA ARMADURA


erro_Ia_16 = (int16) erro_Ia;
Va_ref_16 = (Kp2 * erro_Ia_16);
52

Va_ref_16 = Va_ref_16 >> 8;


Va_ref_aux = (int8) Va_ref_16;

if (sinal_erro_Ia == POSITIVO) //sinal_erro_Ia = sinal_Va_ref_aux


{
Va_ref = Va_ref_aux + Ea;
//Teste de overflow positivo
if ((Va_ref < Va_ref_aux) || (Va_ref < Ea))
{
Va_ref = 255;
}
}

if (sinal_erro_Ia == NEGATIVO)
{
if (Ea >= Va_ref_aux)
{
Va_ref = Ea - Va_ref_aux;
}
else
{
Va_ref = 0;
}
}
// LIMITADOR DA TENSÃO DE REFERÊNCIA DA ARMADURA
if (Va_ref > VA_MAX) Va_ref = VA_MAX;
if (Va_ref < VA_MIN) Va_ref = VA_MIN;
// ATUALIZA PWM
ton = Va_ref >> 1; //Alternativa mais rápida
if (ton > 127) ton=127;
set_pwm1_duty(ton);
// FRENAGEM
if (Vs_med > VS_MAX) output_low(pin_b0);
if (Vs_med < VS_MIN) output_high(pin_b0);
// ATUALIZA VALORES ANTERIORES
Ia_ant = Ia_med >> 1;
Vm_ant = Vm_med >> 1;
Vs_ant = Vs_med >> 1;
omega_mx_ant = omega_mx_med >> 1;
output_low(pin_b7); // para ver a janela de tempo
}
53

ANEXO B
Esquemático feito no software Eagle 4.11 para roteamento das trilhas e
confecção da placa de circuito impresso (somente para a placa de controle).
54

ANEXO C

Trilhas roteadas pelo Eagle 4.11 – placa de controle.

Trilhas – Lado dos componentes (lado de cima)


55

Trilhas – Lado das soldas (lado de baixo)


56

REFERÊNCIAS BIBLIOGRÁFICAS

[1] DUBEY, Gopal K. Power Semiconductor Controlled Drives. Prentice-Hall


International. U.S.A.
[2] MOHAN, Ned – UNDELAND Tore M. – ROBBINS Willian P. Power
electronics, Converters, Applications and Design, 2ª ed. John Willey & Sons,
Inc. U.S.A, 1995.
[3] BERLIN, Howard M. OP-Amp Circuits and principles. 1ª ed. SAMS, U.S.A,
1991.
[4] BARBI, Ivo – Apostila do professor
[5] BOSE B. K. Introduction to Microcomputer Control. General Electric
Company
[6] MICROCHIP Datasheet microcontrolador PIC16F87X - [on line].
Disponível em URL: http://www.microchip.com/. [capturado em outubro de
2006].
[7] MICROCHIP Datasheet gate drive IR2104 [on line]. Disponível em
URL: http://www.microchip.com/. [capturado em outubro de 2006].
[8] KOSOW, Irving L. Máquinas Elétricas e Transformadores. 8ª ed. Globo.
São Paulo, 1989.
[9] UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO. Biblioteca Central.
Normalização e apresentação de trabalhos científicos e acadêmicos:guia
para alunos, professores e pesquisadores da UFES. 2. ed. Vitória, 1997.
[10] UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO. Biblioteca Central.
Guia para normalização de referências bibliográficas: NBR 6023. 2. ed.
Vitória, 1997.

Você também pode gostar