Você está na página 1de 33

UNIVERSIDADE COMUNITÁRIA DA REGIÃO DE CHAPECÓ - UNOCHAPECÓ

CURSO DE GRADUAÇÃO EM ENGENHARIA ELÉTRICA

CONTROLADOR DIGITAL PID PARA CONTROLE DE CORRENTE DE


CARGA EM UM CONVERSOR BUCK

Acadêmicos: Cedinir Fabicz


Fernando M. Maffissoni
Professor: Fabio Dalla Vecchia
Disciplina: Laboratório DSP

CHAPECÓ – SC
2016
SUMÁRIO

1 INTRODUÇÃO ............................................................................................. 3

2 ELABORAÇÃO DO PROJETO DO CONVERSOR BUCK ....................... 4

2.1 Cálculo do Ganho Estático...................................................................... 4

2.2 Montagem do Indutor ............................................................................. 4

2.3 Montagem do Circuito no Protoboard e Simulação no PSIM ................ 6

2.3.1 Testes no Gerador de Sinal. ............................................................... 7

3 INSTALAÇÃO DO SOFTWARE IDE CODEWARRIOR .......................... 8

3.1 Instalação do Software e Criação do Projeto .......................................... 8

3.2 Habilitar USBTAP .................................................................................. 9

3.3 Habilitar e Criar o Periférico PWMA0 ................................................... 9

3.4 Visualizar o PWM no Osciloscópio ...................................................... 10

4 HABILITAR E CRIAR INTERRUPÇÃO TMRA0 .................................... 12

5 HABILITAR E CRIAR CONVERSOR AD ANA0 .................................... 13

5.1 Configurações do Conversor ................................................................ 13

5.2 Sensor de Corrente ................................................................................ 14

5.3 Teste do Conversor AD ........................................................................ 15

6 MODELAMENTO DA PLANTA P(S) SISTEMA DE 2ª ORDEM ........... 18

6.1 Simulações no PSIM e Função de Transferência no Matlab ................ 19

6.2 Testando o Modelo da Planta no Matlab .............................................. 24

7 PROJETO DO CONTROLADOR PARA P(S) ........................................... 24

8 IMPLEMENTAÇÃO DO CONTROLADOR NO PROCESSADOR ......... 26

9 CONCLUSÃO ............................................................................................. 31

10 REFERÊNCIAS BIBLIOGRÁFICAS ..................................................... 32


3

1 INTRODUÇÃO

Conversores CC-CC são sistemas formados por semicondutores de potência


operando como interruptores, e por elementos passivos, normalmente indutores e
capacitores que tem por função controlar o fluxo de potência de uma fonte de entrada
para uma fonte de saída.
Um conversor buck um circuito eletrônico utilizado para converter uma tensão
cc em outra tensão cc de valor mais baixo.
Uma forma simples de reduzir uma tensão é usar um divisor resistivo, mas, no
entanto em relação aos conversores chaveados, dissipam calor na conversão e, portanto,
possuem uma baixa eficiência um conversor buck bem projetado pode ter mais de 95%
de eficiência.
Neste trabalho será detalhado as etapas de projeto de um conversor Buck para
corrente estabelecida em 480mA, com baixa ondulação de corrente no indutor e na
carga, operando em condução contínua e com razão cíclica de 40%.
4

2 ELABORAÇÃO DO PROJETO DO CONVERSOR BUCK


Para a elaboração do projeto do conversor Buck estabelecemos a relação entre a
tensão de saída e a tensão de entrada é definida por ganho estático do conversor,
calculado a indutância necessária e construído o indutor, montado o circuito no
protoboard e verificado suas grandezas no osciloscópio.

2.1 Cálculo do Ganho Estático.


A relação entre a tensão de saída e a tensão de entrada é definida por ganho
Vo
estático do conversor e dada então pela relação D  , sendo que para este projeto;
Vi
D  0, 4
Vi  12
Vo  12  0, 4
Vo  4,8V

2.2 Montagem do Indutor


Nesta etapa do projeto, projetado e montado o indutor do conversor.
Primeiramente calculamos a indutância necessária.
Vi  D  (1  D)
Lo 
f   iL
Vo
Io 
R
4,8
Io 
10
I o  0, 48 A
 iL  0,1 I o

Considerando,
f  25 KHz
D  0, 4
Vi  12V
I o  0, 48 A
5

12  0, 4  (1  0, 4)
L0 
25000  0,1 0, 48
L0  2, 4mH
Foi calculado o número de voltas conforme fórmula abaixo:
Lo  I pk 106
N
Bmax  Ae
Sendo:
N : Número de voltas
Lo : Indutância do indutor (H), calculado acima 2, 4mH

I pk : Corrente de pico (A), 528mA

Bmax : Densidade magnética, 0,3T.

Ae : Área da janela, 60mm²

2, 4 103  0,528 106


N
0,3  60
N  70, 4
Após enrolado o indutor e inserido entreferro foi realizado a medição da
indutância e chegou-se ao valor de Lo  2,37mH . Após isso acabamos de fazer os
ajustes necessário no indutor, deixando o mesmo pronto para o uso.

Figura 1. Indutor construído, pronto para o uso.


6

2.3 Montagem do Circuito no Protoboard e Simulação no PSIM


Para a montagem do circuito físico no protoboard foram utilizados os seguintes
materiais:
 Fonte de tensão;
 Gerador de sinais;
 Osciloscópio;
 Transistor: 1xBC548, 1xBD140;
 Resistor: 1x2,2k Ω, 1x1k Ω, 1x15 Ω 10w;
 Capacitor eletrolítico: 47uF <=C <= 100uF;
 Diodo rápido HER208;

Figura 2. Circuito proposto para o projeto, simulado no PSIM.


7

Figura 3. Circuito montado no protoboard.

Neste projeto Vi  12V , Fs  25kHz e I o sendo escolhida entre 200mA e

500mA , sendo Vo  D  Vi .

2.3.1 Testes no Gerador de Sinal.


Na prática o gerador de sinal é parametrizado para gerar uma onda quadrada com os
seguintes parâmetros: Vpk = 3,3V, f=25kHz, razão cíclica (D) = 40%.

Figura 4. Configuração no gerador de sinais.


8

Quando conectado o gerador de sinais ao osciloscópio, obtém-se a seguinte


forma de onda;

Figura 5. Forma de onda gerada no osciloscópio.

A tensão de saída V0 = 3,4V conforme mostra no osciloscópio.

3 INSTALAÇÃO DO SOFTWARE IDE CODEWARRIOR


Esta etapa consiste na instalação do software, sendo que o mesmo, tem como
objetivo programar o processador utilizado. Para fazer a comunicação entre computador
e a placa, o mesmo conta com uma saída serial.

3.1 Instalação do Software e Criação do Projeto


Foi instalado o software e criado um projeto com o nome “LAB1.mcp” com o
processador MC56F8335, conforme ilustrado abaixo;

Figura 6. Criação do projeto.


9

3.2 Habilitar USBTAP


Após a criação do projeto, o próximo passo consiste em habilitar o USBTAP.
Acessamos então a aba edit - sdm pRom settings e configuramos o remote debugging,
conforme a Figura 7. Este processo tem a finalidade de permitir a comunicação do IDE
com o USBTAP.

Figura 7. Habilitar USBTAP.

3.3 Habilitar e Criar o Periférico PWMA0


Nesta etapa é realizado a geração da modulação PWM com o auxílio de uma
placa experimental. Através do software Code Warrior é criado um novo projeto para o
processador do tipo MC56F8335, cujo mesmo, está presente na placa Freescale. A
função “remote debugging” é programada para que seja possível a comunicação entre o
PC e à placa, através das plataformas IDE e USBTAP.
Através do caminho: processor expert – componentes – add componentes – On-
Chip Prph – 56F8335 – Timer:PWM_A – PWM, chegamos na janela de configuração
do PWM, conforme figura ilustrada abaixo.

Figura 8. Configuração do PWM.


10

Nesta aba configuramos o período em 40us (25kHZ de frequência) e


largura de pulso de 0.017us.
Em Generated Code foi aberto PWM1.c e comentada a linha indicada (//). Esta
linha controla a razão cíclica do PWM (PWMVAL0).
Dentro do arquivo principal do programa LAB1.c é implementado o código
abaixo;
#include "stdio.h"
#include "math.h"
float D;
void main(void)
{
/* Write your local variable definition here */
/*** Processor Expert internal initialization. DON’T REMOVE THIS CODE!!!
***/
PE_low_level_init();
/*** End of Processor Expert internal initialization. ***/
While(1)
{
D = 1200; // seta razão cíclica de 960/2400=0.4=40%
D = roundf(D); // arredonda possível valor float de D
setReg16(PWMA_PWMVAL0,(unsigned short)D); // Store initial value to the
duty-compare register
setReg16Bits(PWMA_PMCTL,2); // charge buffer D
}
}
Este programa supracitado foi escrito supondo que a frequência do pwm foi
setado em 25KHz.

3.4 Visualizar o PWM no Osciloscópio


O próximo passo consiste em alimentar a placa que contém o processador com
3.3V. Para tanto, utiliza-se de uma segunda fonte CC limitada em 240mA (consumo da
placa).
11

Identificado o pino de saída do PWM, pino 1 do A0, pino 19 do 3v3 e pino 20


do GND, o mesmo é conectado a um osciloscópio, nas figuras 9,10 e 11, podemos
observar o projeto do circuito conectado na placa, as fontes conectadas e as formas de
ondas no osciloscópio.

Figura 9. Circuito conectada a placa.

Figura 10. Fontes conectadas ao circuito.


12

Figura 11. Tensão de saída.

Com a razão cíclica ajustada em 40%, conforme estabelecida no projeto, a


tensão de saída encontrada é igual à 3,96V mais queda de tensão no diodo e no resistor
de 1Ω, como mostra a figura 11.

4 HABILITAR E CRIAR INTERRUPÇÃO TMRA0


Nesta etapa será criada uma interrupção do timer para cada 1ms, ou seja, a cada
1ms a interrupção irá parar a tarefa que o processador estiver executando e remeterá o
programa para o atendimento da interrupção dentro da função de atendimento, que neste
chama-se VOIDPID_INTER_OnInterrupt(void). Esta função é criada automaticamente
dentro da pasta User Modules após compilado o programa.
Seguindo os passos em processor expert – componentes – add componentes –
On-Chip Prph – 56F8335 – Timer:TMRA∅ -TimerInt (Pode-se escolher TMRA0 ou
TMRB0). Renomeie Component Name para: PID_INTER (este nome será a função
comentada acima).

Figura 12. Configuração do timer no CodeWarrior.


13

Na figura 12 observamos a configuração onde foi inserido 1ns no período de


interrupção com high 1ms.
Após configurado o programa foi compilado e acessado a pasta em Files/User
Modules/Events, onde foi criada uma função que será executada a cada 1ms.
Foi inserido o seguinte código no programa:
#include "stdio.h" // bibliotecas
#include "math.h"
float D;
void PID_INTER_OnInterrupt(void)
{
D = 960; // 40%
D = roundf(D);
setReg16(PWMA_PWMVAL0,(unsigned short)D); // Store initial value to the
duty-compare register
setReg16Bits(PWMA_PMCTL,2); // charge buffer D
}

5 HABILITAR E CRIAR CONVERSOR AD ANA0


Esta etapa habilitamos o conversor AD para fazer a aquisição de sinais do pino
ANA0. Este sinal irá variar de 0 a 3,3V e a frequência de amostragem será de 1MHz. O
pino 1 corresponde ao ANA0.

5.1 Configurações do Conversor


Para configuração no CODEWARRIOR seguimos os passos: Em processor
expert - componentes – add componentes – On-Chip Prph – 56F8335 –
A/D:ADCA>init_ADC
14

Figura 13. Configuração do conversor AD no CODEWARRIOR.

Na figura 13 observa-se que o divisor de clock ficou em por 30, a frequência de


A/D em 1MHz e o modo ADC em Loop sequencial.
O registrador do conversor trabalha de 0 a 15 bits = 32768.
Os bits 0, 1 e 2 não são usados (2_ = 8). Contamos 8 combinações, logo ele
possui valor máximo de 32768– 8 = 32760. Com isso a resolução é de 12bits e o
conversor varia de 0 a 4095 níveis.
Se a tensão de referência interna do conversor é 3,3V, ele terá Δ = 0,805mV de
resolução, isto é, 3,3/4095.

5.2 Sensor de Corrente


Após estas configurações foi ligado o sensor de corrente ACS712 no conversor.
O sensor de corrente deve receber 2,5V na sua entrada para indicar 0A de corrente.
Portanto 2,5V é o meio de sua escala e não 0V. Portanto, este valor de 2,5V
corresponde a escala 3102 no conversor AD. Em 3102 temos 0A de corrente no sensor.
Se entrarmos com 3,3V no conversor AD, teremos aproximadamente 4,5A no sensor.
15

Figura 14. Escala de Ip x Vout do sensor de corrente.

Figura 15. Entrada do processador.

A figura 14, mostra a escala do sensor da variação da Ip x Vout no sensor de


corrente. A figura 15 obtém a entrada do processador e os possíveis valores da
conversão AD.

5.3 Teste do Conversor AD


Na ligação da placa controladora, aterramos o pino 1 ANA0 e, usamos na placa
CAN CN1 o pino 18 no GND, ANEXO B, figura 16.
16

Figura 16. Placa controladora e CAN.

Dentro da rotina de interrupção escrevemos o seguinte código:


void PID_INT_OnInterrupt(void)
{
AD00 = (ADCA_ADRSLT0)>>3;
printf("AD00=%d \n",AD00); // imprime na tela o conteúdo do registrador
AD00
}
Feito o debugue do programa e observamos que é plotado na tela é o conteúdo
do registrador AD é próximo de zero.
17

Figura 17. Valores do conversor AD no CODE WARRIOR com 0V.

Após alteramos o valor de entrada do conversor para 3,3V, ligamos no pino 20


do CAN da placa e observamos conforme figura 18 que o valor plotado é próximo de
4095.

Figura 18. Valores do conversor AD no CODE WARRIOR com 3,3V.

Depois testamos 2,5V na entrada do conversor e ligamos o sensor de corrente no


conversor da placa, com os pinos de corrente curto-circuitados, e observamos na figura
20 valores próximo de 3102.
18

Figura 19. Valores do conversor AD no CODE WARRIOR com 2,5V.

6 MODELAMENTO DA PLANTA P(S) SISTEMA DE 2ª ORDEM


O conversor BUCK possui uma entrada (razão cíclica D) e uma saída, que neste
projeto será considerada a corrente na carga __ (resistor de 10Ω).
A relação entre entrada e saída é chamada função de transferência P(S). S é a
notação de Laplace no domínio da frequência.
P(S) ou “planta” é desconhecida, e poderá ser deduzida matematicamente
solucionando o circuito dado. Este é um processo bastante trabalhoso e não é objetivo
deste trabalho. Outro método é realizar um teste sob o circuito físico, aplicando uma
razão cíclica Dop (op=operação) e verificar a resposta da saída. Sabendo-se o formato
da saída podemos deduzir rapidamente P(S). Um terceiro método consiste em fazer o
mesmo teste anterior só que simulando o circuito em software, neste caso o PSIM. Com
o auxílio dos softwares PSIM e MATLAB é possível encontrar a função de
transferência equivalente para o circuito montado na protoboard.
O circuito é modelado por um equivalente de 2º ordem. Com a função
transferência é possível modelar o controlador e analisar a resposta do sistema a
diversas perturbações.
No software PSIM é desenhado o circuito conforme montado em protoboard, com
exceção das não idealidades do circuito. Com o circuito montado, ao rodar a simulação,
o software cria uma matriz de pontos, que indicam o domínio (tempo) e a imagem
19

(corrente) da forma de onda simulada. A quantidade de pontos é ditada pelo tempo de


amostragem e do tempo de execução da simulação.

6.1 Simulações no PSIM e Função de Transferência no Matlab


Na configuração dos parâmetros no PSIM usamos as seguintes especificações:
amostragem 1us, tempo 0,01s, o gerador PWM 25kHz, 1V peak-peak e razão cíclica
D=0.4.
Para melhor visualização do sinal PWM inserimos o tempo de 0,01s, conforme
figura 21.
Na figura 20 observamos o circuito simulado no PSIM.

Figura 20. Circuito simulado no PSIM.


20

Figura 21. Configuração do Total time no PSIM.

Para a quantidade de pontos desejada, a fonte de tensão de onda quadrada, que


simula o PWM, é ajustada conforme figura 22.

Figura 22. Parâmetros do PWM simulado.

A Figura 23 mostra a corrente de saída I0 e o sinal PWM.

Figura 23. Formas de onda corrente de saída e do sinal PWM no PSIM.


21

Após executada a simulação salvamos os pontos da simulação para um arquivo do


tipo .txt , conforme figura 24, com o nome do arquivo buck.txt.

Figura 24. Arquivo txt.

Após importamos este arquivo txt para o Matlab através do comando import
data, conforme figura 25.
22

Figura 25. Arquivo PSIM importado para o Matlab.

O próximo passo foi importar estes dados para a ferramenta System Identification
Tollbox, através do comando ident, alterando o import data para time-Domain Signals e
configuremos Input para I0(corrente de saída) e Output para PWM. Na parte Data
information inserimos o nome do arquivo e o intervalo de tempo 1e-6, conforme figura
26.

Figura 26. Configurações do Import Data.

Após em Estimate alteramos para transfer function models e escolhemos 2 polos e


nenhum zero e clicamos no gráfico tf1e apareceu o gráfico e a função de transferência
23

como mostrado na figura 27 e, a forma de onda da crosscorrelação entre o Psim e o


Matlab com aproximação de 98,76, conforme figura 28.

Figura 27. Função de transferência.

Figura 28. Cross relação entre PSIM e Matlab.


24

6.2 Testando o Modelo da Planta no Matlab


Este teste apenas nos certifica que o circuito simulado no PSIM pode ser
substituído do P(S) encontrado acima.
Usando e testando o código do Matlab ilustrado na figura 29, chegamos ao
resultado apresentado na figura 30;

Figura 29. Código Matlab da planta.

Figura 30. Forma de onda da corrente de saída no Matlab.

7 PROJETO DO CONTROLADOR PARA P(S)


O controlador de característica PID possui função de transferência abaixo:
25

 Kp  2
  S   K p  S  K p  Ki
Gc   Kd 
S
Os “K” do controlador determinam a velocidade que a corrente converge.
No código da figura 31 é possível encontrar a função de transferência é possível
implementar o controlador através do Matlab. Kp e Ki foram sintonizados através de
tentativas para que a corrente converge em alguns segundos, foi desconsiderado Kd. E
na figura 32, a forma de onda da resposta do degrau unitário.

Figura 31. Código Matlab para FT e Step.

Figura 32. Resposta do degrau unitário.


26

8 IMPLEMENTAÇÃO DO CONTROLADOR NO PROCESSADOR


Uma vez que já encontramos o Gc(S) acima, discretizamos Gc(s) para encontrar
finalmente a equação a diferenças conforme figura 33.

Figura 33. Equações para discretização.

Por se tratar de um controle discreto, a função transferência do controlador deve


ser discretizada. Neste caso, optou-se por discretizar a parcela integrativa por Tustin e a
parcela derivativa por aproximação diferencial. Tais métodos de discretização estão
mostrados nas equações abaixo;
Tustin
2( z  1)
S
Ts ( z  1)
Na figura 34 demostra a estratégia para implementar controle discreto.

Figura 34. Estratégia para implementar controle discreto.


27

Após isolando a função G(Z)c e aplicando a propriedade do deslocamento da


transformada Z, seguimos na dedução apresentada na figura 35.

Figura 35. Propriedades do deslocamento da transformada Z.

Fazendo as devidas simplificações, chega-se a equação recursiva da figura 36.

Figura 36. Equação recursiva.

A equação da figura 34 foi implementada no processador. A variável m é a razão


cíclica D que deve ser controlada.
A primeira parcela m1 é D1. A segunda é o ganho proporcional Gp, o terceiro o
ganho integrativo e o último o ganho derivativo.
Foi colocado um resistor de1Ω com o resistor da carga. No resistor de 1Ω foi
colocada a ponta de prova do osciloscópio. A escala horizontal está em 2,5s.
Utilizamos ki=800 e kp=5.00 e Ts= 0.001 e uma razão cíclica de 0.4, para
simulação abaixo no CodeWarrior.
Dentro da rotina de tratamento de interrupção já criada (Events.c), podemos
escrever o código abaixo:
/* MODULE Events */
28

#include "Cpu.h"
#include "Events.h"
#include "stdio.h"
#include "math.h"
float e,e1=0.0,e2=0.0,D1=0.0,D, Gp,Gi,Gd, Kp=5.00 ,Ki=800.00 ,Kd=200.00 ,
Ts=0.001;
unsigned short AD00,I_set=3365; //480mA
** Event : PID_INTER_OnInterrupt (module Events)
**
** Component : PID_INTER [TimerInt]
** Description :
** When a timer interrupt occurs this event is called (only
** when the component is enabled - <Enable> and the events are
** enabled - <EnableEvent>). This event is enabled only if a
** <interrupt service/event> is enabled.
** Parameters : None
** Returns : Nothing
void PID_INTER_OnInterrupt(void)
{
AD00 = (ADCA_ADRSLT0)>>3; // 4095 = 4,5A e 3102 = 0A -> lê o conversor
e =(float)I_set - (float)AD00 ; // calcula erro de corrente
Gp = Kp*(e-e1);
Gi = Kp*Ki*Ts*((e+e1)/2);
//Gd = (Kp*Kd/Ts)*(e-2*e1+e2); // praticamente não precisa
Gd=0;
D = D1 + (Gp+ Gi + Gd)/480;
e2 = e1;
e1 = e;
D1 = D;
//printf("AD00=%d AD00x=%f e = %f D = %f\n",AD00, AD00x, e, D); so para
D = roundf(D); // arredonda
setReg16(PWMA_PWMVAL1,(unsigned short)D); // Store initial value to the
duty-compare register
setReg16Bits(PWMA_PMCTL,2); // charge buffer D
29

//AD00 = (ADCA_ADRSLT0)>>3;
//printf("AD00=%d \n",AD00);
//D = 480; // seta razão cíclica de 960/2400=0.4=40%
//D = roundf(D); // arredonda possível valor float de D
//setReg16(PWMA_PWMVAL1,(unsigned short)D); // Store initial value to the
duty-compare register
//setReg16Bits(PWMA_PMCTL,2); // charge buffer D
}
/* END Events */
Devido a dinâmico dos componentes foi alterado os valores de kp=800 e ki=5 e
obteve-se a resposta do controlador conforme figura 37 que mostra em regime com
corrente de 400mA.

Figura 37. Curva de ação de controle implementada no processador, rampa.

Analisando a figura 37, é possível perceber que a ação do controle se aproxima


em muito da idealidade. A corrente cresce em rampa, levando aproximadamente os 10
segundos para alcançar o set point.
Na figura 38 apresenta o circuito final montado e, na figura 39 as fontes que
foram conectadas ao circuito.
30

Figura 38. Circuito completo montado.

Figura 39. Fontes utilizadas.


31

9 CONCLUSÃO
O estudo dos conversores CC-CC, especificamente o conversor Buck, foi
importante por se tratar de um dispositivo cada vez mais utilizado em substituição aos
antigos conversores lineares de energia elétrica nas mais diversas aplicações, onde
devem produzir na saída uma tensão contínua de baixa ondulação.
O desenvolvimento do conversor através dos cálculos proporcionou o acréscimo
de conhecimento teórico, o qual foi complementado com simulações por software, pois
flexibiliza a simulação de diversas experiências, facilitando o aprendizado com a
comparação dos resultados obtidos nos cálculos, verificando que os valores obtidos nas
simulações podem ser utilizados como base de projetos.
32

10 REFERÊNCIAS BIBLIOGRÁFICAS
OGATA, Katsuhiko. Discrete-time control systems. 2nd. ed. New Jersey:
Prentice Hall International, c1995. xi, 745 p.ISBN 0130342815 (broch.).c2010. 1108 p.
(Prentice-Hall signal processing series) ISBN 9780131988422 (enc.)
OPPENHEIM, Alan V.; SCHAFER, Ronald W. Discrete-time signal
processing. 3rd. ed. Upper Saddle River: Pearson.
MALVINO, Albert Paul; BATES, David J. Eletrônica. 7. ed. Porto Alegre:
McGrawHill, Bookman, AMGH, c2007. 2 v.ISBN 9788577260225 (broch.).
CHAPMAN, Stephen J. Programação em MATLAB para engenheiros. São
Paulo: Thomson, 2003. 477 p. ISBN8522103259

Você também pode gostar