Problemas para ler dois encoder utilizando o Matlab e suas bibliotecas de comunicação com o arduino

Bom dia a todos, eu estou com um pequeno projeto em que eu pretendo realizar a leitura de dois  encoder utilizando somente o Matlab que faz a comunicação com o Arduino Mega2560, para que eu conseguisse realizar a comunicação e programação via Matlab-Arduino eu tive que baixar alguns pacotes de suporte para o Matlab foram eles :

http://www.mathworks.com/matlabcentral/fileexchange/32374-legacy-ma...

http://www.mathworks.com/matlabcentral/fileexchange/40312-simulink-...

http://www.mathworks.com/matlabcentral/fileexchange/47522-matlab-su...

baixei também a biblioteca rotaryencoder e para utiliza-la e comunicar com o matlab ficou da seguinte forma:

e para utilizar a biblioteca do rotaryencoder eu preciso utilizar os pinos de interrupções, no caso eu já testei para o Arduino Uno e funcionou normalmente, como eu desejo ler dois encoder eu comprei um Arduino Mega2560

segundo o site:http://www.arduino.cc/reference/pt/language/functions/external-inte...

Placa Pinos digitais possíveis para interrupções

Uno, Nano, Mini e outros com 328p

  2, 3

Uno WiFi Rev.2

todos os pinos digitais

Mega, Mega2560, MegaADK

2, 3, 18, 19, 20, 21

clear all; close all; clc

a = arduino('COM11','Mega2560','Libraries','RotaryEncoder')

canalA1 = 'D2' ;
canalB1 = 'D3' ;

canalA2 = 'D18' ;
canalB2 = 'D19' ;

encoder1 = rotaryEncoder(a,canalA1,canalB1,180);% 1º encoder se trata do ky040

encoder2 = rotaryEncoder(a,canalA2,canalB2,180);% 2º encoder se trata sensor de leitura acoplado ao eixo do motor

for k=3:100

      ky040 = readCount(encoder1);

      eixo_motor = readCount(encoder2);

end

clear encoder a %encerra a comunicação com o arduino

bem quando utilizo o Arduino uno para fazer a leitura de um Encoder funciona perfeitamente,

quando utilizo Arduino Mega2560 para ler um Encoder funciona e quando coloco o segundo Encoder agora lendo dois Encoder da erro durante a leitura ele fica lendo normalmente ae do nada ele para antes de concluir o laço for k=3:100.

queria perguntar se alguém aqui do LabG já utilizou alguma vez o Matlab para ler dois Encoder, 

o Arduino Mega2560 que comprei foi pelo mercado livre não o original de fabrica suspeito disso também, a bilioteca rotaryencoder foi feita para ler apenas um encoder eu até suspeiti disso, mas depois de pesquisar um pouco vi que é possível sim nesse exemplo ele utilizar um Arduino Due http://https://www.mathworks.com/help/supportpkg/arduinoio/ug/steer...

outra possível causa o processamento é muito grande ae exigi muito do notebook, acho que talvez não, fiz um programa para funcionar somente no Ide do Arduino e funcionou normal também.

para adiantar, porque você estar utilizando o matlab para comunicar com o arduino da para fazer tudo la no IDE do Arduino? bem, sim isso é possível mas como eu pretendo aplicar controladores PID, GPC, I+PD, PI,etc... na ide Arduino ficaria muito pesado acredito e bem mais trabalhoso uma vez que eu já tenho quase tudo pronto no Marlab e que venho guardando ao longo de meu curso, bastando eu adaptar ao que eu pretendo trabalhar e fazendo algumas mortificações para o funcionamento, más para isso preciso primeiro arrumar essa comunicação via Matlab-Arduino.

podem perguntar porque você não utilizar somente a Ide do Arduino para fazer a sua programação, bem foi uma de minhas proposta para o TCC.

porque vc não faz a programação no Arduino normalmente e depois envia para o Matlab para fazer todos processamento e aplicar os controles de PID, GPC, etc....

bem já fiz isso também, ou seja o arduino seria somente para ler as entradas, enviar para o matlab, receber os dados calculados do matlab, e fazer atuação de uma saída PWM acionando um motor.

o matlab ficaria com a parte matemática dos controladores, mas tive alguns problemas com retorno do calculo do matlab para o Arduino eu envio para o Arduino,mas o Arduino não reconhece

Exibições: 108

Anexos

Responder esta

Respostas a este tópico

Olá,

   Eu nunca usei profissionalmente o Mathlab, nada contra, mas nossos caminhos não se cruzaram. Tive alguma coisa na faculdade, mas naquela época o Arduino nem existia. Eram placas de aquisição impossíveis de se ter se vc não for uma empresa como a NASA ou uma universidade. Hj está mais popular.

   Enfim, não sei !

   Mas... Recomendo:

   Vc disse que está travando. Travar é algo que acontece por inúmeros motivos. Recomendo o básico primeiro: Se vc está alimentando tudo pela USB existem portas USB que não fornecem 5.0V, elas fornecem menos ou mais. Existem cabos USB que não são próprios para cargas, são mais para dados, por isso tem muitas perdas. Pode ser que uma bobagem como a forma de alimentar esteja criando toda essa dificuldade. 

   Fios longos são antenas, se vc tiver fios longos e motores considere usar cabos blindados e aterrados, etc. Os motores de passo geram muito ruído. Se vc coloca a fiação do encoder junto com a do motor e está travando pode ser isso.

   Eu basicamente nunca alimentaria pela USB (não sei se vc fez isso, não foi informado).

   Teste as alimentações de 5V com um multímetro.

   Se tiver acesso a um osciloscópio verifique os sinais, se estão mesmo entre 0 e 3.3V ou 0 e 5.0V sem grandes ruídos.

   Se só lê mesmo 1 encoder verifique no forum específico do MathLab ou até no suporte deles. Deve haver uma solução, não faz sentido, qq coisa que vc faz usa pelo menos 2 (X e Y). 

   Outra: Tente isolar o problema. Tirar o maximo possível do codigo pra ver se continua travando. Digo: Fazer um programa limpo que apenas lê os 2 encoders. Veja se só isso já trava.

   As vezes é outra coisa como falta de memória. O Arduino não consegue mandar mensagens de erro de travamento por falta de memória. Quando está perto do limite e há um consumo dinâmico de memória a memoria acaba e ele trava (pode acontecer).

   Mande fotos, faça um vídeo.


   

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço