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:42] elger |
projects:steppermotor [2016/11/16 13:06] (current) |
||
---|---|---|---|
Line 29: | Line 29: | ||
<iframe width="853" height="480" src="http://www.youtube.com/embed/-20p3q9VnIA" frameborder="0" allowfullscreen></iframe> | <iframe width="853" height="480" src="http://www.youtube.com/embed/-20p3q9VnIA" frameborder="0" allowfullscreen></iframe> | ||
</html> | </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> |