Lever med Arduino och L298N H-bryggan för bipolära Stepper motorstyrning (5 / 6 steg)
Steg 5: Programmering exempel
Så, det finns några extra saker här som ni kanske eller kanske inte behöver, som koden för LCDShield eller den kod som kontrollerar körningstiden för huvudloop.
Om du använder A1-A4 bör koden sammanställa (Arduino IDE 1.6.5) och få din motor att snurra. De flesta av denna kod är min egen, med lite lånade eller ändras från filen Stepper.h.
Anteckningar:
Förseningen på "StepFast" är i mikrosekunder, så 2000 är bara 2 millisekunder, för det mesta om du försöker kliva motorn med en försening på mindre än 1200 det kommer hoppa över steg, och trots 800 steg att vara 4 fulla varv för de flesta motorer, kan du hitta din motor endast gör kanske en fjärdedel vända.
Denna kod är avsett som ett exempel, det för närvarande vända inte, inte heller ta feedback från L298, eller göra en hel del andra saker som jag. Ser på de befintliga Stepper.h, kan jag skriva det under de kommande veckorna med denna metod för hantering av stegen, som den befintliga metoden sannolikt kommer att skada L298 eller någon annan H-bro konfiguration.
#include < Arduino.h >
#include < LiquidCrystal.h >
Knappsatsen sköld LCD-pins
LiquidCrystal lcd (8, 9, 4, 5, 6, 7);
långa unsigned int lasttime;
länge osignerade 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 steg, länge osignerade vänta)
{
DDRC = B00011110; ställa arduino hamnar A1-A4 produktionen kom ihåg detta fungerar bakåt!
^-stift 7 ^-pin 0
int mönster = 0;
int mydelay = 0;
för (int jag = 0; jag < steg; i ++)
{
Switch (mönster)
{
fall 0: / / 1010
PORTC = B00001010; Arduino analog port vi använder stift A1-A4 så vi ska bara ändra de
bryta;
fall 1: / / 0110
PORTC = B00001100;
bryta;
fall 2: //0101
PORTC = B00010100;
bryta;
fall 3: //1001
PORTC = B00010010;
bryta;
}
mönster ++;
om (mönster > 3) {mönster = 0;}
delayMicroseconds(wait);
}
PORTC = B00000000; de ge energi till motor
}
void loop()
{
lasttime = timer;
timer = millis();
exectime = (timer - lasttime) / 1000;
om (timeuntil < timer)
{
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("medurs");
LCD.Print(exectime);
lcd.setCursor(0,1);
LCD.Print(timer);
LCD.Print("");
LCD.Print(lasttime);
timeuntil = timer + 1500;
}
StepFast(800,2000); steg, försening i mikrosekunder
Delay(5000);
}
Anteckningar:
Denna kod fungerar ganska väl med måttlig steg hastigheter på ~ 300 RPM (steg räntan på 1ms eller så) som du försöker få mer mot 1000 RPM, det börjar saknas åtgärder om inte spänningen ökar, men om du kör motorn på 60 RPM (5ms) på > 5V L298N börjar bli ganska varm.