Arduino - Usando interrupções com encoder para obter a velocidade de um motor

  Рет қаралды 5,340

Carlos Rodrigues Rocha

Carlos Rodrigues Rocha

Күн бұрын

Пікірлер: 16
@codex8797
@codex8797 Жыл бұрын
Valeu muito mano, essa questão de precisar de um resistor de pullup tava me quebrando
@CRocha
@CRocha Жыл бұрын
É um detalhe chato, pois não é tão óbvio. Passei por isso também.
@andersoncosta0020
@andersoncosta0020 Жыл бұрын
Muito bom! parabéns!
@CRocha
@CRocha Жыл бұрын
Muito obrigado 😁
@felipemanhaes470
@felipemanhaes470 3 жыл бұрын
Muito obrigado! Foi de grande ajuda!
@CRocha
@CRocha 3 жыл бұрын
Bom ter ajudado.
@cienciamatinal6148
@cienciamatinal6148 2 жыл бұрын
Tenho um projeto que preciso do numero de pulsos do encoder, sem ajustar a velocidade! Seria só tirar a parte do cálculo da velocidade?
@CRocha
@CRocha 2 жыл бұрын
Olá. Se é somente para obter o número de pulsos no tempo, basta tirar o cálculo que infere o número de rotações por minuto. Porém, se é apenas para obter o número de pulsos, basta não zerá-lo a cada intervalo de cálculo. Porém, rapidamente ele atingirá o limite e zerará por conta própria. Contar apenas o número de pulsos é útil apenas para o caso de encoder utilizados em interfaces com o usuário, ou sistemas de rotação muito lenta.
@Manokleber_
@Manokleber_ 2 жыл бұрын
Que tipo de sinais em ondas quadradas são essas ?? Hertz ?? Pra marcação de velocidade em painel digital qual seria ? Pq o sensor magnético de pulsos o velocímetro digital nem se mexe.
@CRocha
@CRocha 2 жыл бұрын
Olá. Esses sinais são pulsos gerados pelo encoder embutido neste motor. Como o motor gira em uma velocidade constante (a não ser que variemos a tensão de alimentação), pode-se assumir que essa informação possa ser tratada como frequência (cuja unidade seriam Hertz), desde que a contagem seja dividida pelo tempo em que ocorre. É o que o código faz. Para tanto, o código utiliza interrupções para contar os pulsos à medida que ocorrem. De tempos em tempos, no loop() é feita a divisão do número desses pulsos pelo tempo entre uma aferição e outra, e com isso se obtém a frequência. Sabendo o número de pulsos correspondentes a uma volta completa do motor (é um valor constante, característico do encoder), obtém-se o valor em rotações por segundo, e dele, calcula-se fácil o valor em rotações por minuto, que é o que se apresenta na comunicação serial. Não sei quem não se mexe, pois se variares a tensão, podes observar no motor que ele muda o valor das rotações por minuto. E o cálculo feito pelo programa é bem aproximado, variando muito pouco em relação à referência. Por fim, é importante observar que o encoder é do tipo coletor aberto. Para se ter uma medida dos pulsos, é fundamental aquele resistor pull-up que está no fundo da protoboard. A cada pulso, o encoder fecha o contato e prevalece o terra, fazendo com que o sinal caia (falling). Espero ter esclarecido um pouco.
@pedroalmeidarosa
@pedroalmeidarosa 3 жыл бұрын
Como eu faço para descobrir a resolução do encoder utilizado?
@CRocha
@CRocha 3 жыл бұрын
No caso do Tinkercad, foi por "engenharia reversa". Uma vez que a velocidade é conhecida, foi-se modificando a constante que multiplicava o número de pulsos divididos pelo tempo (claro, incluindo a conversão de ms para s) até que o resultado obtido pelo Arduino fosse igual ao valor da velocidade indicada no corpo do motor. Num sistema real, tem que se ver o número de pulsos gerados em uma única revolução. Em um encoder óptico, pode-se contar o número de ranhuras do disco, por exemplo. Outros encoders devem apresentar esse valor na folha de dados. Espero ter ajudado.
@pedroalmeidarosa
@pedroalmeidarosa 3 жыл бұрын
@@CRocha A constante que você ajustou não é a resolução, ou é? Pois se converter a velocidade para revoluções por segundo, essa constante se torna um número muito baixo, bem menor que a média das resoluções de encoders que vi a venda na internet. Eu fiz uma outra conta aqui, imprimi o número de pulsos calculados ao longo de 1s e dividi pela velocidade em revoluções por segundo, o valor obtido é de aproximadamente 323. Sabe me confirmar se essa é a resolução?
@CRocha
@CRocha 3 жыл бұрын
Olá. De fato, esta não é a resolução. Não é o número de pulsos por revolução, ou quantos graus por pulso. O fundamental é calcular o número de pulsos por revolução. No caso do Tinkercad, o motor tem sua velocidade medida em RPM. Então, aquele valor de 313RPM do motor, a 12V, deveria ser dividido por 60, para se determinar o número de rotações por segundo (aproximadamente 26,08RPS). Aí, o número de pulsos contados em 1s, dividido pelo número de revoluções em 1s, te dará a resolução. No meu caso, fiz similar: contei o número de pulsos em um período de tempo (não lembro, mas acho que foi por volta de uns 2s ou 3s), e depois fiz a relação entre esse número de pulsos e a velocidade informada do motor. Se o que viste são encoders ópticos, eles costumam ter uma resolução baixa, entre 8 e 20 pulsos por revolução. Porém, se eles são montados no eixo de um motor com redução, passam a ser interessantes, pois a resolução final (do eixo de saída do motorredutor) será função dessa redução. Assim, com uma redução de 20:1, um encoder de 10 pulsos por revolução no eixo do motor teria o efeito de "contar" 200 pulsos por revolução no eixo de saída da redução. Por fim, motores com encoders integrados, como é o caso deste do Tinkercad, podem ter encoders de alta resolução. Já topei com um com resolução maior que 500 ppr, usado em um equipamento industrial.
@CURIOSIDADEOUCRIATIVIDADE
@CURIOSIDADEOUCRIATIVIDADE Жыл бұрын
VOCE FAZ PROJETOS DE ARDUINO? SE SIM ME PASSA SEU ZAP PRECISO FAZER ALGUNS
@CRocha
@CRocha Жыл бұрын
Olá. Eu trabalho com Arduino, C/C++ e Micropython, com os Arduinos mais convencionais, ESP32 e Rasperry Pi Pico, em se tratando apenas de microcontroladores. Infelizmente, minhas atividades docentes estão me tomando muito tempo. No momento, é difícil fazer qualquer colaboração. Mas no futuro (janeiro, espero), seria possível conversar para algumas colaborações de curta duração. Em breve lançarei alguns vídeos sobre Micropython em Raspberry Pi Pico usando o Wokwi.com como simulador, ao invés do Tinkercad.
DC motor PID speed control
15:29
Curio Res
Рет қаралды 256 М.
Andro, ELMAN, TONI, MONA - Зари (Official Music Video)
2:50
RAAVA MUSIC
Рет қаралды 2 МЛН
요즘유행 찍는법
0:34
오마이비키 OMV
Рет қаралды 12 МЛН
How Rotary Encoder Works and How To Use It with Arduino
4:55
How To Mechatronics
Рет қаралды 904 М.
How to control a DC motor with an encoder
9:30
Curio Res
Рет қаралды 465 М.
TILT SENSOR
4:51
Aluvanze
Рет қаралды 44
COMO funciona e como instalar um ENCODER incremental ⚙
12:17
Medir RPM com Arduino! // Dicas de Programação
14:43
Abraao Lacerda
Рет қаралды 10 М.
Connecting Rotary Incremental Encoder with arduino
3:20
Mr Innovative
Рет қаралды 177 М.
Using Rotary Encoders with Arduino
32:10
DroneBot Workshop
Рет қаралды 723 М.