Questão:
Como pausar o Arduino por 1 milissegundo no MATLAB?
Blundering Philosopher
2014-02-12 07:37:24 UTC
view on stackexchange narkive permalink

Consegui conectar o MATLAB ao meu Uno com esta linha de código: a = arduino ('COM4'); por meio deste pacote: Pacote de suporte Matlab para Arduino.

No momento, MATLAB é meu script principal que sincronizará todos os componentes [como o Arduino].

Posso enviar pulsos para meu motor de passo apenas usando :

  void loop () {digitalWrite (2, HIGH); atraso (1); digitalWrite (2, BAIXO); delay (1);}  

Isso funciona bem e fará o motor se mover uma vez a cada 2 milissegundos. Meu problema é que não consigo encontrar uma maneira de produzir este mesmo atraso através da interface do MATLAB. Eu sei que o MATLAB tem uma função pause () , mas quando eu configuro um loop no MATLAB como este:

  a = arduino ('COM4'); para m = 1: 400 a.digitalWrite (2, 1); pausa (0,001); a.digitalWrite (2, 0); pause (0,001); end  

Cada etapa leva muito mais tempo - cerca de 200 milissegundos cada.

Quais são as outras opções para criar a pausa entre o envio digital de Alto / Baixo para o Arduino? Seria bom se eu pudesse controlar o resultado do Matlab, por meio do Arduino.

Parece que você precisa de algo como [GRBL] (https://github.com/grbl/grbl). É um programa autônomo para uma placa arduino que interpreta uma linguagem de comando e produz movimentos coordenados de motor de passo. Ele é amplamente destinado à usinagem CNC, mas provavelmente pode fazer o que você precisa.
Dois respostas:
mpflaga
2014-02-12 08:51:06 UTC
view on stackexchange narkive permalink

O aumento no atraso observado se deve ao tempo que leva para enviar o comando do MATLAB para o Arduino para que seu código execute o comando solicitado. No seu caso, o a.digitalWrite. Portanto, o tempo real entre os pulsos usando o atraso do MATLAB é 0,001 pausa mais o tempo da taxa de transmissão vezes o tamanho do pacote e a decodificação e a execução.

Eu recomendaria não prosseguir com esta solução do MATLAB controlando o tempo dos motores de passo, remotamente. Como esse acoplamento latente será uma limitação frustrante. Observando que, para motores de passo, o tempo não pode permitir tal execução latente. Portanto, todas as impressoras 3D e muitos CNC com Step Motors usam Arduino que obtém G-Code (comandos de movimentação do motor com destinos) e o firmware em tempo real lida com a revisão, dentro das tolerâncias.

Eu sugeriria usar algo como firmware grbl com proteção de motor de passo e, em seguida, faça com que o MATLAB envie o código G necessário. Onde há outros com muito mais recursos, mas adaptados para impressão 3D. grbl é mais simples e direto ao ponto de mover motores.

MichaelT
2018-06-23 05:06:31 UTC
view on stackexchange narkive permalink

Não está claro em sua pergunta se você está tentando obter uma execução em tempo real sem latência ou simplesmente deseja ajustar o tempo de atraso do motor do MATLAB. Se for o último, uma boa maneira é enviar dados de atraso (por exemplo, um número que representa quanto tempo você deseja entre os pulsos) via serial, que seu programa Arduino receberá e atualizará o atraso do motor conforme desejado. Ou, tendo em mente as limitações de RAM, você pode enviar uma sequência inteira de atrasos que podem ser executados um após o outro com um tempo preciso.



Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...