My little place on the web

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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>​