Identificação de Sistema Eletromecânico - Arduino e MatLab

Esta é uma aplicação do Arduino em pesquisa acadêmica. Trata-se da identificação paramétrica de um sistema eletromecânico em malha aberta, um motor acoplado a um tacogerador, cuja variável de interesse é a velocidade do sistema.

 

Os dois motores DC, um ativo funcionando como motor e outro passivo funcionando como tacogerador, são acoplados elasticamente por um sistema de polias e correia. O papel do Arduino nesta etapa do projeto de pesquisa é de impostar um sinal PRBS (pseudo-random binary signal- sinal binário pseudo-randômico), ler a tensão de saída condicionada do sistema e enviar ambos os sinais via porta serial para o PC a cada período de aquisição.

O circuito de acionamento e condicionamento dos sinais de entrada e saída para o Arduino é ilustrado abaixo.

 

 

Para garantir a aquisição de dados dentro do período projetado, foi utilizada a biblioteca TimerOne, gerando a interrupção a cada período de aquisição. Segue o código abaixo.

 

/*
Programa para aquisição de dados de dois canais para o MTG - Sistema Motor Tacogerador
*/

#include "TimerOne.h"
int motor = 0;
int taco = 0;
int inPin = 0; // selecione o pino de entrada (sinal TACO)
int outPin = 9; // selecione o pino de saída (sinal MOTOR)
int i = 0; // inicializa o valor do sinal de saída
int ts = 20; // período de aquisição em MILISEGUNDOS

int tmin = 500; // tempo mínimo para atraso
int tmax = 2000; // tempo máximo para atraso

int atraso1 = 0; // atrasos
int atraso2 = 0;

int vmin = 2; // tensão mínima
int vmax = 3; // tensão máxima

void setup()
{
Serial.begin(9600); // inicializa a porta serial
pinMode(outPin, OUTPUT); // declara o pino outpin como saída
Timer1.initialize(ts*1000); // inicializa timer1, e seta o período aquisição
Timer1.attachInterrupt(callback); // chama a interrupção a cada tempo de aquisição
}
// ________________________________________________________

// Interrupção de aquisição

void callback()
{
taco = analogRead(inPin); // lê a entrada analógica (sinal TACO)
Serial.print(motor); // escreve na serial o valor do sinal MOTOR
Serial.print(","); //
Serial.println(taco); // escreve na serial o valor do sinal TACO
}
// ________________________________________________________
void loop()
{

motor = int((1024/5)*vmin); // calcula o valor de vmin
Timer1.pwm(outPin, motor); // joga valor para a saída
atraso1 = random(tmin,tmax); // atraso 1
delay(atraso1);

motor = int((1024/5)*vmax); // calcula o valor de vmax
Timer1.pwm(outPin, motor); // joga valor para a saída
atraso2 = random(tmin,tmax); // atraso 2
delay(atraso2);

}

 

A próxima etapa do projeto é fazer o algoritmo de identificação rodar no Arduino. Aguardem novos resultados.

Exibições: 3025

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Magnun de Souza Serpa em 12 agosto 2014 às 4:25

Como vc faz a conexão para o matlab receber os dados do arduino?

Comentário de CBeuter em 26 novembro 2012 às 10:26

Achei o vídeo relacionado com o tópico, conforme comentado abaixo [Identificação do Sistema MTG - Arduino e MatLab]: http://www.youtube.com/watch?v=MMnsUW20Ixg

Esta página original antes da possível correção:

Comentário de CBeuter em 26 novembro 2012 às 10:10

Olá. O link para o vídeo [Documentário Édipo Rei]  http://www.youtube.com/watch?v=xxNdcAVk_jc neste post(*) esta correto?

(*) http://labdegaragem.com/profiles/blogs/identifica-o-de-sistema-elet...

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço