Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
projects:steppermotor [2013/01/06 12:31] elger |
projects:steppermotor [2016/11/16 13:06] (current) |
||
|---|---|---|---|
| Line 23: | Line 23: | ||
| The label on the motor reads: Huisitong MOTOR 42BYGH202AA 1.8 1A 0: 20110717000KU | The label on the motor reads: Huisitong MOTOR 42BYGH202AA 1.8 1A 0: 20110717000KU | ||
| + | |||
| + | |||
| + | ====== The demo ====== | ||
| + | <html> | ||
| + | <iframe width="853" height="480" src="http://www.youtube.com/embed/-20p3q9VnIA" frameborder="0" allowfullscreen></iframe> | ||
| + | </html> | ||
| + | |||
| + | ====== The code ====== | ||
| + | <code cpp L298N_driver_test.ino> | ||
| + | // test script | ||
| + | // Drive a Motor controller L298N | ||
| + | |||
| + | |||
| + | //IN1 IN2 : TTL Compatible Inputs of the Bridge A | ||
| + | //In3 In4 :TTL Compatible Inputs of the Bridge B. | ||
| + | //ENA ENB:TTL Compatible Enable Input: the L state disables the | ||
| + | //bridge A(enable A) and/or the bridge B (enable B). | ||
| + | |||
| + | #define ENA 8 | ||
| + | #define IN1 9 | ||
| + | #define IN2 10 | ||
| + | #define IN3 11 | ||
| + | #define IN4 12 | ||
| + | #define ENB 13 | ||
| + | |||
| + | void setup() { | ||
| + | // put your setup code here, to run once: | ||
| + | pinMode(ENA, OUTPUT); | ||
| + | pinMode(IN1, OUTPUT); | ||
| + | pinMode(IN2, OUTPUT); | ||
| + | pinMode(IN3, OUTPUT); | ||
| + | pinMode(IN4, OUTPUT); | ||
| + | pinMode(ENB, OUTPUT); | ||
| + | |||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | |||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | // put your main code here, to run repeatedly: | ||
| + | engage(); | ||
| + | for (int i = 0 ; i < 50; i++ ) { | ||
| + | //waveDriveOneFaseOn(); | ||
| + | //waveDriveTwoFaseOn(); | ||
| + | halfStep(); | ||
| + | } | ||
| + | delay(10); | ||
| + | disengage(); | ||
| + | delay(2000); | ||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | void engage() { | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | } | ||
| + | |||
| + | void disengage() { | ||
| + | digitalWrite(ENA, LOW); | ||
| + | digitalWrite(ENB, LOW); | ||
| + | } | ||
| + | |||
| + | void waveDriveTwoFaseOn() { | ||
| + | //State sequence and output waveforms for the two phase on sequence | ||
| + | // only four steps for one turn | ||
| + | // 0101 | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, HIGH); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //1001 | ||
| + | digitalWrite(IN1, HIGH); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //1010 | ||
| + | digitalWrite(IN1, HIGH); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, HIGH); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //0110 | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, HIGH); | ||
| + | digitalWrite(IN3, HIGH); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | delayMicroseconds(1000); | ||
| + | } | ||
| + | |||
| + | void halfStep() { | ||
| + | |||
| + | //101011 | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, HIGH); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, HIGH); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //000011 | ||
| + | digitalWrite(ENA, LOW); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, HIGH); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | | ||
| + | |||
| + | //110011 | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, HIGH); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, HIGH); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //110000 | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, HIGH); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, LOW); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //110101 | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, HIGH); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, HIGH); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | |||
| + | //000101 | ||
| + | digitalWrite(ENA, LOW); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, HIGH); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | |||
| + | //101101 | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, HIGH); | ||
| + | digitalWrite(IN3, HIGH); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //101000 | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, HIGH); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, LOW); | ||
| + | delayMicroseconds(1000); | ||
| + | } | ||
| + | |||
| + | void waveDriveOneFaseOn() { | ||
| + | |||
| + | //000011 | ||
| + | digitalWrite(ENA, LOW); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, HIGH); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //110000 | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, HIGH); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, LOW); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //000101 | ||
| + | digitalWrite(ENA, LOW); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, LOW); | ||
| + | digitalWrite(IN3, HIGH); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, HIGH); | ||
| + | delayMicroseconds(1000); | ||
| + | |||
| + | //101000 | ||
| + | digitalWrite(ENA, HIGH); | ||
| + | digitalWrite(IN1, LOW); | ||
| + | digitalWrite(IN2, HIGH); | ||
| + | digitalWrite(IN3, LOW); | ||
| + | digitalWrite(IN4, LOW); | ||
| + | digitalWrite(ENB, LOW); | ||
| + | delayMicroseconds(1000); | ||
| + | } | ||
| + | </code> | ||