控制任务

让单个直流电机在L298N模块驱动下,完成制动、自由停车,正反转,加减速等基本动作

芯片模块及电路设计

                        

图1 L298N芯片引脚

  

图2 L298N驱动模块

表1 L298N驱动模块的控制引脚

 使用注意  短路帽连接后内置5V输出使能。调速时,只需要在使能端输入PWM信号就行。使能端低电平时,电机自由停止。通过ENA,IN1,IN2控制电机A,通过ENB,IN3,IN4控制电机B。

 

图3 L298N驱动模块的Fritzing元件图

  

图4 单片机控制板Aduino UNO

 

图5 Aduino UNO 与L298N驱动模块的接线

 

图6 整个系统的接线

 

图7 电机控制系统接线原理示意图1

 

图8 电机控制系统接线原理示意图2

实际接线:Arduino的引脚6,8,7分别接L298N驱动板的ENA,IN1,IN2

程序设计

本程序只对单电机进行控制

  1 //控制板引脚定义
  2 int motor_c_ENA=6;
  3 int motor_c_IN1=8;
  4 int motor_c_IN2=7;
  5 
  6 //子函数定义
  7 void go_forward_high_speed()   //正转 全速
  8 {
  9     digitalWrite(motor_c_ENA,1);    
 10     digitalWrite(motor_c_IN1,0); 
 11     digitalWrite(motor_c_IN2,1);
 12 }
 13 
 14 void go_backward_high_speed()  //反转 全速
 15 {
 16     digitalWrite(motor_c_ENA,1);    
 17     digitalWrite(motor_c_IN1,1);  
 18     digitalWrite(motor_c_IN2,0);
 19 }
 20 
 21 void stop_with_brake()  //制动
 22 {
 23     digitalWrite(motor_c_ENA,1);    
 24     digitalWrite(motor_c_IN1,1);  
 25     digitalWrite(motor_c_IN2,1) ; 
 26 }
 27 
 28 void stop_free()    //自由停车
 29 {
 30     digitalWrite(motor_c_ENA,0);    
 31     digitalWrite(motor_c_IN1,0);  
 32     digitalWrite(motor_c_IN2,0) ; 
 33 }
 34 
 35 void go_forward_speed_up()  //正转 加速
 36 {
 37     digitalWrite(motor_c_IN1,0);   
 38     digitalWrite(motor_c_IN2,1);
 39     for (int a=100;a<=255;a++)  
 40      {
 41         analogWrite(motor_c_ENA,a);
 42         delay(200);
 43      }
 44 }
 45 
 46 void go_backward_speed_up()  //反转 加速
 47 {
 48     digitalWrite(motor_c_IN1,1);   
 49     digitalWrite(motor_c_IN2,0);
 50     for (int a=100;a<=255;a++)  
 51      {
 52         analogWrite(motor_c_ENA,a);
 53         delay(200);
 54      }
 55 }
 56 void go_forward_speed_down()  //正转 减速
 57 {
 58     digitalWrite(motor_c_IN1,0);   
 59     digitalWrite(motor_c_IN2,1);
 60     for (int a=255;a<=100;a--)  
 61      {
 62         analogWrite(motor_c_ENA,a);
 63         delay(200);
 64      }
 65 }
 66 
 67 void go_backward_speed_down()  //反转 减速
 68 {
 69     digitalWrite(motor_c_IN1,1);   
 70     digitalWrite(motor_c_IN2,0);
 71     for (int a=255;a<=100;a--)  
 72      {
 73         analogWrite(motor_c_ENA,a);
 74         delay(200);
 75      }
 76 }
 77 
 78 
 79 void setup() 
 80 {
 81      pinMode(motor_c_ENA,OUTPUT);  //电机C使能和PWM调速口
 82     pinMode(motor_c_IN1,OUTPUT);   //电机C控制口
 83     pinMode(motor_c_IN2,OUTPUT);   //电机C控制口
 84 }
 85 
 86 void loop() 
 87 {
 88    stop_with_brake(); //制动2秒
 89   delay(2000);
 90 
 91    go_forward_speed_up();   //正转 加速 50秒
 92   delay(50000);
 93    go_forward_high_speed();   //正转 全速10秒
 94   delay(10000);
 95    go_forward_speed_down();   //正转 减速50秒
 96   delay(50000);
 97    stop_free();    //自由停车5秒
 98   delay(5000);
 99 
100    go_backward_speed_up();   //反转 加速 50秒
101   delay(50000);
102    go_backward_high_speed();   //反转 全速10秒
103   delay(10000);
104    go_backward_speed_down();   //反转 减速50秒
105   delay(50000);
106    stop_free();    //自由停车5秒
107   delay(5000);
108 }

程序运行效果

制动状态开始正转加速,正转全速,正转减速,自由停车,反转加速,反转全速,反转减速,自由停车,循环。