Faculdade de Engenharia Elétrica Universidade de Brasília
Laboratório Controle Dinâmico
Marco A. EgitoKit Impressora
Este kit consiste basicamente de 1 motor CC acoplado a um carro através de uma correia e polias, juntamente com um encoder, uma placa analógica, um arduino nano, uma ponte H e mini proto-board para implementação de compensadores analógicos.
Sistema de malha fechada proporcional
O kit deve ser utilizado sempre em malha fechada, uma vez que em malha aberta o carro pode se deslocar rapidamente até um dos batentes e o motor pode danificar a correia. A detecção da posição do carro é feita através de uma fita transparente com marcações e detector óptico (encoder). O detector óptico fica preso ao carro e quando este se desloca as marcações da fita geram pulsos em 2 canais, o que permite detectar movimento para a direita ou para a esquerda. Os pulsos são “lidos” pelo arduino que atualiza constantemente um contador que indica a posição do carro. O conteúdo do contador de posição é então utilizado para a modulação de uma saída PWM do arduino, que é filtrada pelo circuito analógico e gera então a informação analógica de posição (sinal r).
Fig 1 – Diagrama de Blocos Geral do Kit
ω
1+sTm
e x
Ref +
-r Pot. Aten. PWM1 PonteH Motor
Km 1 1 1 s encoder 1 ADC Ajuste sinal Ka 1 Kp Comp G(s) Filtro PB Kf Cont pos 1 Kb Ajuste sinal PWM2 1 arduino
No diagrama de blocos da Fig 1 todos os subsistemas estão representados, onde os blocos internos à linha pontilhada (arduino) são digitais e os externos são basicamente analógicos (exceto encoder e ponte H). Nem todas as ligações elétricas estão representadas, apenas as que tem importância do ponto de vista da modelagem dinâmica. Observe que muitos blocos tem ganho igual a 1, o que corresponde a uma simplificação. Os blocos PWM, por exemplo, convertem uma informação digital em analógica e tem um certo ganho, pois 00000001 → 5/256V (conversão de 8 bits). O bloco ADC teria um ganho inverso, por este motivo foram incluidos os blocos Ka e Kb para corrigir possíveis distorções e colocar
os sinais na melhor faixa possível para a parte eletrônica.
A introdução do arduino na malha permite não apenas a leitura do encoder digital, mas também a correção da zona morta do motor, onde uma voltagem abaixo de certo limiar não movimenta o carro. No diagrama da Fig. 1 a correção é feita pelo bloco de Ka. Desta maneira o software do arduino sempre
soma o valor correspondente à zona morta à voltagem que deve ser aplicada ao motor (positiva para um lado negativa para o outro). Considerando que a taxa de atualização dos blocos do arduino é alta, o Kit se aproxima de um sistema de controle de posição linear com o seguinte diagrama de blocos:
Fig 2 – Diagrama de Blocos Simplificado
Onde as constantes Ka e Kb foram incorporadas às constantes Km e Kf . Observe que nos 2 diagramas
anteriores consideramos que o arduino e filtro passa baixas na realimentação são muito rápidos podendo ser modelados por uma constante. Isto será melhor avaliado adiante.
Saturações
Estas não-linearidades podem comprometer a modelagem linear utilizada neste experimento e devem ser evitadas. A parte eletrônica do kit e software foram projetados para minimizar problemas com saturações, que podem ocorrer em:
Entrada do conversor A/D (ADC na Fig. 1): Manter o sinal ADC da protoboard entre -3V e +3V (-3V < ADC < +3V).
Encoder e PWM2: Não deixar que o carro se aproxime muito dos batentes à direita ou esquerda.
PWM1 , ponte H e fonte de alimentação do motor: Só ocorre durante breves momentos desde
que o motor seja alimentado com o fio de 20V durante os experimentos.
Amplificadores operacionais: Utilizar amplitudes não muito grandes no gerador de sinais. 1º Teste – Determinar as constantes Km , Kf e Tm
Uma vez que Kp corresponde à escala do potenciômetro, apenas Km e Kf precisam ser determinadas.
Ligar o Kit em compensador proporcional (interconectar entrada e saída no protoboard), colocar Kp
em 0.2 e utilizar sinais senoidais em Ref. Desta maneira, estaremos utilizando o regime permanente senoidal, portanto, é possível medir o valor pico a pico de e, r, e avaliar o deslocamento máximo em x com o uso de uma régua. Fazendo s= jω no diagrama de blocos da Fig 2, Kf pode ser obtido
facilmente. Porém, Km é dependente da constante de tempo Tm.
Para a medida das constantes Km e Tm em malha fechada, é possível aplicar 1 única frequência
senoidal e medir Δe , Δx = Δr/Kf e a defasagem ϕ entre ambos. Teremos então,
e + -r Kp G(s) Kf ω 1+sTm x Km 1 s Ref ) 1 ( m m p T j j K K e x
Igualando partes real e imaginária de um lado e outro da equação acima é possível obter Km e Tm.
Para ter certeza dos resultados devido a possíveis erros experimentais causados por pequenas distorções nas senóides, é interessante fazer as medidas em várias frequências e posteriormente simular o diagrama simplificado da Fig. 2 no modelica, simulink ou outro software equivalente. Portanto:
Meça Δe e Δx em 3 frequências diferentes, ω1 a ω3 (2, 3, 4 Hz) anotando as amplitudes e
defasagens estimadas em cada caso. É necessário medir de 2 maneiras: 1) com as medidas automatizadas dadas na tela do osciloscópio e 2) manualmente com os cursores para as medidas. Tire a foto da tela do osciloscópio em uma das frequências utilizadas.
No relatório, calcule Km e Tm com as 3 frequências e use as médias como valores finais. Utilize
o método que forneceu menores dispersões dos resultados.
No simulador reproduza o equivalente à tela da foto do osciloscópio. 2º Teste – Resposta à onda quadrada
Ligar o Kit em compensador proporcional (interconectar entrada e saída no protoboard), colocar Kp
em 0.5 e utilizar um sinal de onda quadrada de 0.8 Hz em Ref. Com o osciloscópio ligado em r e Ref é possível ver a resposta à onda quadrada. Variando Kp de 0 a 1, a resposta muda de
superamortecida para crítica e subamortecida.
Tire a foto da tela do osciloscópio para cada uma das 3 respostas.
Avalie o erro em estado estacionário em cada caso (com o fio de 20V ligado).
Avaliar o valor de Kp correspondente ao menor tempo de acomodação possível. Considere que
este significa ζ=1 (amortecimento crítico).
No relatório calcule o valor de Kp para amortecimento crítico com os valores de parâmetros
obtidos no 1º Teste e considerando o diagrama de blocos da Fig. 2. Informe o tipo do sistema e o erro em estado estacionário para cada caso.
No simulador reproduza o equivalente à tela da foto do osciloscópio. 3º Teste – Resposta à onda triangular
Ligar o Kit em compensador proporcional (interconectar entrada e saída no protoboard), colocar Kp
em 0.5 e utilizar um sinal de onda triangular de 0.8 Hz em Ref. Com o osciloscópio ligado em r e Ref é possível medir um certo erro entre os sinais r e Ref.
Tire a foto da tela do osciloscópio para Kp = 0.3, 0.7 e 1.0.
Avalie o erro em estado estacionário em cada caso (com o fio de 20V ligado).
No relatório informe o tipo do sistema e o erro em estado estacionário para cada caso. No simulador reproduza o equivalente à tela da foto do osciloscópio.
4º Teste – Avaliação do atraso do arduino e filtro PB
Observando o diagrama geral da Fig. 1 vemos que o arduino está presente na malha de realimentação em 2 trechos. Certamente o microcontrolador interno leva algum tempo no processamento de cada um destes trechos e, portanto, introduz atrasos que podem ou não ser desprezíveis. Também o filtro passa baixas presente na realimentação pode introduzir atrasos. O atraso introduzido pelo tempo de processamento do arduino pode ser estimado examinando o sinal no pino D13 que muda entre 0V → 5V → 0V (periodo completo) a cada ciclo de processamento. A constante de tempo do filtro passa baixas (Tf na Fig. 3) pode ser medida com a aplicação de um sinal de onda quadrada em sua entrada.
Ligar o Kit em compensador proporcional, colocar Kp em 0:
coloque uma das pontas do osciloscópio em D13 (à direita da entrada USB do arduino), faça o ajuste para uma boa imagem do sinal e meça o tempo de 1 período de processamento.
. sen cos . sen ). / ( m p m T K e x K
Tire a foto da tela do osciloscópio detalhando bem o sinal.
Desligar o fio conectado em D9 e ligar a este fio um sinal de onda quadrada variando entre 0 e 5V. Com uma ponta do osciloscópio em r e outra no sinal aplicado, ajustar a frequência para uma boa visualização do sinal r .
Meça a constante de tempo Tf .
Tire a foto da tela do osciloscópio detalhando bem o sinal. Aperfeiçoamento do modelo
Fig 3 – Diagrama de Blocos Ampliado
No diagrama de blocos da Fig. 3 o bloco de realimentação foi substituido por um sistema de 1ª ordem na tentativa de aperfeiçoar o modelo. A constante de tempo Tf se propõe a substituir o atraso
introduzido pelo arduino e filtro passa baixas e deve ser igual à soma dos atrasos avaliados no 4º Teste. No seu relatório faça o seguinte:
Deduza as expressões de Km e Tm como foi feito no 1º teste, porém a partir modelo da Fig. 3
Calcule Km e Tm utilizando as novas expressões e com Tf igual ao atraso avaliado no 4º Teste.
No simulador reproduza o equivalente à tela da foto do osciloscópio do 4º Teste.
Qual a sua conclusão sobre a oportunidade de utilizar ou não o Diagrama de blocos ampliado? RELATÓRIO KIT IMPRESSORA 1a
Faça 1 relatório por grupo incluindo:
1) Nome e matrícula dos participantes
2) Número do kit utilizado
3) “fotografias” das telas do osciloscópio utilizadas para as medições
4) Valores e métodos utilizados para os cálculos dos parâmetros.
5) Outros itens pedidos nos Testes 1, 2, 3 e 4
6) Itens teóricos pedidos no seção “Aperfeiçoamento do modelo” e + -r Kp G(s) ω 1+sTm x Km 1 s Ref 1+sTf Kf
Apêndices
Diagrama elétrico geral
Diagrama elétrico da placa analógica
Arduino Placa analógica Ponte H Protob P. turbo Fonte Fonte + 1 2 V 0 V -1 2 V +20V +12V 0V D9 D8 D7 D6 D4 D3 A0 0V Vin ENA IN1 IN2 Vmotor 0V 0V 0V +5V Motor Encoder PWM_POS +12V_0V P R O T O B _ 1 P R O T O B _ 2 0V Op1+ Op1-Op1S Op2S Op2-Op2+ 0V S Analog → ADC ← G.Sin. Osc. D13
Código Arduino
/* Encoder Library http://www.pjrc.com/teensy/td_libs_Encoder.html */
#include <Encoder.h>
// Valimentacao ponte H -> 18V // Arduino NANO
// 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output #define Ss1 3 // definicao pinos arduino (Interrupcao) #define Ss2 4 // definicao pinos arduino (NInterrupcao) #define HORARIO true
#define ANTIHORARIO false
#define ENA 6 // definicao pinos arduino L298 (PWM) #define IN1 7 // definicao pinos arduino L298 #define IN2 8 // definicao pinos arduino L298 #define Posicao 9 // definicao pinos arduino (PWM) #define Tpro 13 // informacao tempos processamento #define Entrada A0 // definicao pinos arduino (A/D) #define Zmorta 142 // definicao zona morta 20V alim // ajuste melhor possivel com compensador prop c/ Kp=.1 float Apos=255./7000.,Bpos=0.5, //Constantes encoder
Aent=(255-Zmorta)/512.,Bent=Zmorta-254.5; //Constantes entrada //Calculo para maximizar saturacoes [SatKitImpress2.mws]
int Vel,Pos;
// Inicializacao Encoder
Encoder Sens(Ss1, Ss2); //1 interupcoes void setup() { // Serial.begin(9600); // setPwmFrequency(Posicao, 1); // ~31kHz TCCR1B = TCCR1B & 0b11111000 | 0x01; // setPwmFrequency(ENA, 8); // ~8kHz TCCR0B = TCCR0B & 0b11111000 | 0x02; for (int i = 6; i < 13; i++)
pinMode(i,OUTPUT); }
void loop() {
// atualizacao saida posicao Pos=Sens.read()*Apos+Bpos;
analogWrite(Posicao,Pos); //analogWrite de 0 a 255 digitalWrite(Tpro,true); // marcador tempo 1 // atualizacao saida motor
Vel = (float)analogRead(Entrada)*Aent+Bent; // analogRead de 0 a 1023 acionaMotor(Vel); //Ganho em Vel diminui a saturacao na entrada //que já é baixa <=> evitar [SatKitImpress.mws] digitalWrite(Tpro,false); // marcador tempo 2
}
//funcoes para acionamento individual de cada motor void acionaMotor(int velocidade) {
if(velocidade >= 0) { velocidade += Zmorta;
if(velocidade > 255) velocidade = 255; // saturacao analogWrite(ENA, velocidade);
digitalWrite(IN1,true);
digitalWrite(IN2,false); // sentido horario }
else {
velocidade -= Zmorta;
if(velocidade < -255) velocidade = -255; // saturacao analogWrite(ENA, -velocidade);
digitalWrite(IN1,false);
digitalWrite(IN2,true); // sentido anti-horario }