Já estava ficando com saudades
de mecatrônica. Então, hoje, vamos falar de motor de passo. Vamos montar um
projeto com um motor de passo desconhecido com o Driver DRV8825 e Arduino UNO,
com exemplo de programa usando a função micros() para controlar a velocidade de
rotação. Confira no vídeo!
Quer adquirir um DRV8825? Indico este link:
https://www.banggood.com/custlink/3DKGkSwO29
E para quem quiser enviar algum componente pra mim, seguem os dados da Caixa Postal:
Caixa postal: 4444CEP: 19020-970
MONTAGEM
Obs: Nessa aula não usamos o potenciômetro A1
RECURSOS USADOS
- Motor de passo desconhecido ( retirado de drive de disquete 3 ½
- Placa padrão
- Fios
- 1 Potenciômetro de 10k
- 2 Leds
- 1 drv8825
- 2 resistor de 10k
- 1 resistor de 330R
- 1 Dip Switch de 4 chaves
- 1 protoboard
- Arduino Uno
- 2 capacitores de 100nF
- 1 capacitor de 470uF
- 2 conector molex 4 vias
- 1 conector borne de 4 vias
LIMITE DE CORRENTE
SAÍDA DO DRV8825
https://www.banggood.com/custlink/3DKGkSwO29
CÓDIGO FONTE
///#define DEBUG #//define TDELAY 500 #define ENABLE 2 #define DIRPIN 4 #define STEPPIN 3 #define BOTAOPIN 12 #define MAX_AD 1024 // PARA STM32 ESP32 E ARDUINO DUE USAR 4096 // #define MAX_AD 4096 unsigned long TPulso = 0; unsigned long TPulsoContinuo = 0; bool giroDirEsq = true; bool pressionou = false; int PotA0 = 0;
setup e loop
void setup() { // Declare pins as outpu0t: pinMode(STEPPIN, OUTPUT); pinMode(DIRPIN, OUTPUT); pinMode(ENABLE, OUTPUT); pinMode(BOTAOPIN, INPUT); digitalWrite(DIRPIN, giroDirEsq); digitalWrite(ENABLE, LOW); TPulso = 2000; Serial.begin(115200); } // -------------------------------------------------------------------------------- void loop() { LeVel(); PBotao(); umpasso(); }
umpasso
void umpasso(void) { digitalWrite(STEPPIN, HIGH); delayMicroseconds(TPulso); digitalWrite(STEPPIN, LOW); delayMicroseconds(TPulso); } void LeVel(void) // REGULA A VELOCIDADE DO PULSO { PotA0 = analogRead(0); PotA0 = map(PotA0, 0, MAX_AD, 1000, 100); // VELOCIDADE INVERSAMENTE PROPORCIONAL AO TEMPO DO PULSO POR ISSO 1000 PARA 100 TPulso = PotA0; #ifdef DEBUG Serial.print("--> TPulso:"); Serial.println(TPulso); delay(TDELAY); #endif }
PBotao
void PBotao(void) { pressionou = digitalRead(BOTAOPIN); if(pressionou) { giroDirEsq = !giroDirEsq; delay(1000); digitalWrite(DIRPIN,giroDirEsq); pressionou = false; #ifdef DEBUG Serial.print(">>> BOTÃO PRESSIONADO"); delay(TDELAY); #endif } }
2 Comentários
Muito legal
ResponderExcluirGostei muito do comentário que você fez com o Lego e Eletrônica....Atualmente estou com 61 anos e trilhei praticamente os mesmo caminhos que você....saí da Eletrônica e fui para área de Processamento de Dados e me aposentei em 2020 em plena pandemia. Mas nunca deixei a eletrônica e vim acompanhando a evolução.,
ResponderExcluirDepois que conheci o seu canal, venho tentando aprender a programar......