Motores de passo geralmente são caros para um motor grande. No entanto, com um poderoso motor DC padrão e um codificador rotativo, você pode "simular" um motor de passo. Qual a precisão dos codificadores rotativos do Arduino apenas com um loop básico e sem muito outro código? Vai "perder um pulso" e não gravar rotação suficiente com frequência? Como posso lidar com isso com muito mais código? Existe uma maneira melhor de fazer isso? Interrompe a ajuda? Existe algum tipo de circuito que ajudaria com esse problema?
Nota: Provavelmente não excederá 4 rotações por segundo ... (Isso pode ser muito, mas se você estiver executando um mecanismo do tipo parafuso de avanço que seria de apenas 24 polegadas por minuto se houver 10 rotações por polegada de movimento linear. )
fonte
Respostas:
Interrupções são o que você usaria nessa situação.
As taxas que você mencionou são lentas o suficiente, onde você provavelmente seria capaz de contá-lo dentro de um loop, no entanto, isso não é recomendado, pois um loop típico levará muitos ciclos de clock para ser concluído, e dependendo do número de instâncias por loop , você pode perder algumas contagens.
As interrupções são feitas para esse fim, pois podem ser acionadas a qualquer momento, independentemente do estado do loop.
Há uma função nomeada
attachInterrupt()
que receberá três argumentos.Abaixo está um exemplo para contar uma interrupção
Os modos são os seguintes:
Mais informações sobre o uso de interrupções podem ser encontradas aqui .
Dependendo do codificador usado, você precisará adaptar o código às suas necessidades e fazer mais alguns cálculos para determinar sua posição, mas esse deve ser um bom ponto de partida.
Editar Aqui está um exemplo de código do Arduino Sandbox para usar um codificador rotativo.
fonte
ISR_NAKED()
), poderá pular a economia automática de contexto C e obter taxas de interrupção de 100 a 500 Khz sem problemas, mas basicamente está escrevendo o assembly em C nesse ponto.ISR()
direto da interrupção .Adicionando algumas referências a bibliotecas e exemplos já escritos, para permitir a comparação entre diferentes abordagens e experiências com velocidade versus suscetibilidade a etapas ausentes.
Leitura de codificadores rotativos: http://playground.arduino.cc/Main/RotaryEncoders
Codificador de quadratura muito rápido para o Arduino (com solução): http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino/
Biblioteca Teensy Encoder: https://www.pjrc.com/teensy/td_libs_Encoder.html
Lendo o codificador rotativo no Arduino: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/
fonte