terça-feira, 31 de julho de 2012

Transientes

Um dos problemas que foram detectados durante uma simulação para um seguidor de linha que estava desenvolvendo no Simulino foi a presença de transientes, assim definidos no Wikipédia (http://pt.wikipedia.org/wiki/Transiente, acesso em 31/07):
"...é um surto de tensão elétrica que ocorre num intervalo de tempo muito pequeno...
  • O chaveamento de cargas fortemente indutivas, como os motores elétricos, gera transientes que são causados pela força contra eletro-motriz. Isso ocorre porque um indutor opõe-se à variação de corrente elétrica. Quando ocorre o desligamento de uma chave - eletrônica ou não - a energia armazenada sob a forma de campo magnético força a passagem de corrente em sentido inverso ao sentido original. O resultado é um pulso rápido de alta tensão, conhecido como "spike".
Os transientes são um dos maiores causadores da queima de equipamentos eletrônicos..."
Bom, o código segue abaixo:

/* Programa para leitura de 2 sensores IR - Projeto Robô Lutador de Sumô
Equipe Pequenos Cientistas 2012
Este programa é a base para um robo seguidor de linha e pode ser aplicado em arenas de fundo branco com linha preta ou fundo preto linha branca A variável maximo estipula o limite de tensão entre o estado ligado e desligado do sensor, ou seja, se a tensão lida no  sensor for inferior não há reflexão ou, caso contrário, há reflexão. Para controle se faz uso de uma ponte H - O L298N. Foi escolhido por suportar correntes maiores do que L293 e, ser mais barato.
*/
//Variáveis de pino analógico
int IR1=0;
int IR2=1;
//variáveis de pino digital
int L1 = 5;
int L2 = 6;
int L3 = 7;
int L4 = 8;

//variável dos sensores
int maximo = 3; // tensão de corte - sensor ativo ou desligado
int VR1;
int VR2;

//variável de acionamento dos motores
int m1 = 3;
int m2 = 4;

void setup() {
// configura o pino como saida
pinMode(L1, OUTPUT); //pino 5
pinMode(L2, OUTPUT); //pino 6
pinMode(L3, OUTPUT); //pino 7
pinMode(L4, OUTPUT); //pino 8
//configura acionamento de motores
pinMode(m1, OUTPUT);
pinMode(m2, OUTPUT);
// configura o pino como entrada
pinMode(IR1, INPUT); //pino A0
pinMode(IR1, INPUT); //pino A1

}
void loop(){
  
  // le o estado do sensor e converte para volts
VR1 = analogRead(IR1) * 0.0049;
VR2 = analogRead(IR2) * 0.0049;
digitalWrite(m1, HIGH);//aciona o MOTOR 1
digitalWrite(m2, HIGH);//desliga o MOTOR 2

// verifica se o sensor está ativo
if (VR1 > maximo) { // se ativo:
digitalWrite(L1, HIGH);//aciona o pino digital 5
digitalWrite(L2, LOW);//desliga o pino digital 6
}
else {// se desligado:
digitalWrite(L1, LOW);//desliga o pino digital 5
digitalWrite(L2, HIGH);//aciona o pino digital 6
}
//verifica se o sensor está ativo
if (VR2 > maximo){ // se ativo:
digitalWrite(L3, HIGH);//aciona o pino digital 7
digitalWrite(L4, LOW);//desliga o pino digital 8
}
else {//se desligado:
digitalWrite(L3, LOW);//aciona o pino 7
digitalWrite(L4, HIGH);//aciona o pino 8
}
//L1 – MOTOR DIREITO LIGADO
//L2 – MOTOR DIREITO INVERTIDO
//L3 – MOTOR ESQUERDO LIGADO
//L4 – MOTOR ESQUERDO INVERTIDO

}
Aqui segue o circuito elétrico que utilizei na simulação:
 
Bom, notaram que usei diodos de proteção na tentativa inútil de remover os transientes detectados durante a simulação. Resultado: não funcionou. Consultando o site do Newton Braga (http://www.newtoncbraga.com.br/index.php/robotica/1396-mec018.html) ele sugere: "Os capacitores em oposição em paralelo com o motor são importantes para eliminar transientes que tanto podem afetar os transistores como também o próprio circuito integrado, a partir da fonte de alimentação."
Bom não testei ainda mas em breve posto o resultados dos testes.

Nenhum comentário:

Postar um comentário