Paso 5: Ejemplo de programación
Por lo tanto, hay algunas cosas extra en aquí que usted puede o no puede necesitar, como el código para el LCDShield o el código que comprueba el tiempo de ejecución del bucle principal.
Si usas el A1-A4 este código debe compilar (Arduino IDE 1.6.5) y obtener su motor a girar. La mayor parte de este código es mío, con un poco prestado o alterada del archivo Stepper.h.
Notas:
La demora en "StepFast" está en microsegundos, para que 2000 es de sólo 2 milisegundos, la mayoría de las veces si tratas de caminar el motor con un retraso de menos de 1200 salte los pasos, y a pesar de 800 pasos siendo 4 revoluciones para la mayoría de los motores, puede encontrar que tu motor solo hace tal vez un cuarto de vuelta.
Este código pretende ser un ejemplo, en la actualidad no invertir, ni tener retroalimentación de los L298 o hacer un montón de otras cosas que me gustaría. Considerar el existente Stepper.h, lo puedo volver a escribo en las próximas semanas utilizando este método para el manejo de los pasos, como el método existente probablemente dañará el L298 o cualquier otra configuración puente H.
#include <Arduino.h> #include <LiquidCrystal.h> //Keypad Shield LCD pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); long unsigned int lasttime; long unsigned int timer; int timeuntil; float exectime; int smallcount; void setup() { lcd.begin(16, 2); lcd.print("Motor Test"); delay(2500); lcd.clear(); } void StepFast(long int steps,long unsigned wait) { DDRC = B00011110; //set arduino ports A1-A4 output remember this works backwards! // ^-pin 7^-pin 0 int pattern = 0; int mydelay = 0; for (int i = 0;i < steps; i++) { switch (pattern) { case 0: // 1010 PORTC = B00001010; //arduino analog port we're using pins A1-A4 So we're only going to change those break; case 1: // 0110 PORTC = B00001100; break; case 2: //0101 PORTC = B00010100; break; case 3: //1001 PORTC = B00010010; break; } pattern++; if (pattern > 3) {pattern = 0; } delayMicroseconds(wait); } PORTC = B00000000; //de-energize to motor } void loop() { lasttime = timer; timer = millis(); exectime = (timer - lasttime)/1000; if (timeuntil < timer) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Clockwise "); lcd.print(exectime); lcd.setCursor(0,1); lcd.print(timer); lcd.print(" "); lcd.print(lasttime); timeuntil = timer + 1500; } StepFast(800,2000); //steps,delay in microseconds delay(5000); }
Notas:
Este código funciona bastante bien a las velocidades de paso moderado de ~ 300 RPM (velocidad de paso de 1 ms o menos) al tratar de conseguir más a 1000 RPM, empezará a faltar pasos a menos que el voltaje aumenta, sin embargo si corre del motor a 60 RPM (5ms) > 5V el L298N comenzará a calentarse bastante.