zoukankan      html  css  js  c++  java
  • 直流电机两轮驱动小车行走基本控制

    控制任务

    对2驱动轮1从动轮的小车基本行走控制方法进行设计

    实物图与电路设计

                           

    图1 双轮驱动小车1

     

    图2 双轮驱动小车2

     

    图3 双轮驱动小车3

      

    图4 双轮驱动小车控制系统接线图

    实际接线

    Arduino的引脚6,8,7分别接L298N驱动板的ENA,IN1,IN2,控制左电机,Arduino的引脚3,2,4分别接L298N驱动板的ENB,IN3,IN4,控制右电机,

    程序设计

      1 //控制板引脚定义
      2 int motor_L_ENA = 6; //左电机控制端连接于Arduino板的6,8,7引脚
      3 int motor_L_IN1 = 8;
      4 int motor_L_IN2 = 7;
      5 int motor_R_ENB = 2; //右电机控制端连接于Arduino板的2,3,4引脚
      6 int motor_R_IN3 = 3;
      7 int motor_R_IN4 = 4;
      8 int low_speed = 100; //左转右转时的高速低速设定,可调整
      9 int high_speed = 200;
     10 
     11 
     12 
     13 //子函数定义
     14 void go_forward_high_speed()   //小车前进 全速
     15 {
     16   digitalWrite(motor_L_ENA, 1);  //左电机正转
     17   digitalWrite(motor_L_IN1, 0);
     18   digitalWrite(motor_L_IN2, 1);
     19 
     20   digitalWrite(motor_R_ENB, 1);   //右电机正转
     21   digitalWrite(motor_R_IN3, 0);
     22   digitalWrite(motor_R_IN4, 1);
     23 }
     24 
     25 void go_backward_high_speed()  //小车后退 全速
     26 {
     27   digitalWrite(motor_L_ENA, 1);  //左电机反转
     28   digitalWrite(motor_L_IN1, 1);
     29   digitalWrite(motor_L_IN2, 0);
     30 
     31   digitalWrite(motor_R_ENB, 1);  //右电机反转
     32   digitalWrite(motor_R_IN3, 1);
     33   digitalWrite(motor_R_IN4, 0);
     34 }
     35 
     36 void stop_with_brake()  //小车制动
     37 {
     38   digitalWrite(motor_L_ENA, 1);  //左电机制动
     39   digitalWrite(motor_L_IN1, 1);
     40   digitalWrite(motor_L_IN2, 1) ;
     41 
     42   digitalWrite(motor_R_ENB, 1);  //右电机制动
     43   digitalWrite(motor_R_IN3, 1);
     44   digitalWrite(motor_R_IN4, 1) ;
     45 }
     46 
     47 void stop_free()    //小车自由停止
     48 {
     49   digitalWrite(motor_L_ENA, 0); //左电机自由停止
     50   digitalWrite(motor_L_IN1, 0);
     51   digitalWrite(motor_L_IN2, 0) ;
     52 
     53   digitalWrite(motor_R_ENB, 0);   //右电机自由停止
     54   digitalWrite(motor_R_IN3, 0);
     55   digitalWrite(motor_R_IN4, 0) ;
     56 }
     57 
     58 void go_forward_speed_up()  //小车前进 加速
     59 {
     60   digitalWrite(motor_L_IN1, 0); //左轮加速
     61   digitalWrite(motor_L_IN2, 1);
     62   for (int a = 100; a <= 255; a++)
     63   {
     64     analogWrite(motor_L_ENA, a);
     65     delay(200);
     66   }
     67 
     68   digitalWrite(motor_R_IN3, 0); //右轮加速
     69   digitalWrite(motor_R_IN4, 1);
     70   for (int a = 100; a <= 255; a++)
     71   {
     72     analogWrite(motor_R_ENB, a);
     73     delay(200);
     74   }
     75 }
     76 
     77 void go_forward_speed_down()  //小车前进 减速
     78 {
     79   digitalWrite(motor_L_IN1, 0);  //左轮减速
     80   digitalWrite(motor_L_IN2, 1);
     81   for (int a = 255; a <= 100; a--)
     82   {
     83     analogWrite(motor_L_ENA, a);
     84     delay(200);
     85   }
     86 
     87   digitalWrite(motor_R_IN3, 0);  //右轮减速
     88   digitalWrite(motor_R_IN4, 1);
     89   for (int a = 255; a <= 100; a--)
     90   {
     91     analogWrite(motor_R_ENB, a);
     92     delay(200);
     93   }
     94 }
     95 
     96 void go_forward_left()  //小车左转
     97 {
     98   digitalWrite(motor_L_IN1, 0);
     99   digitalWrite(motor_L_IN2, 1);
    100   analogWrite(motor_L_ENA, low_speed); //左轮低速
    101 
    102   digitalWrite(motor_R_IN3, 0);
    103   digitalWrite(motor_R_IN4, 1);
    104   analogWrite(motor_R_ENB, high_speed);  //右轮高速
    105 }
    106 
    107 void go_forward_right()  //小车右转
    108 {
    109   digitalWrite(motor_L_IN1, 0);
    110   digitalWrite(motor_L_IN2, 1);
    111   analogWrite(motor_L_ENA, high_speed); //左轮高速
    112 
    113   digitalWrite(motor_R_IN3, 0);
    114   digitalWrite(motor_R_IN4, 1);
    115   analogWrite(motor_R_ENB, low_speed);  //右轮低速
    116 }
    117 
    118 
    119 void setup()
    120 {
    121   pinMode(motor_L_ENA, OUTPUT); //左电机使能和PWM调速口
    122   pinMode(motor_L_IN1, OUTPUT);  //左电机控制口1
    123   pinMode(motor_L_IN2, OUTPUT);  //左电机控制口2
    124 
    125   pinMode(motor_R_ENB, OUTPUT); //右电机使能和PWM调速口
    126   pinMode(motor_R_IN3, OUTPUT);  //右电机控制口3
    127   pinMode(motor_R_IN4, OUTPUT);  //左电机控制口4
    128 }
    129 
    130 void loop()
    131 {
    132   stop_with_brake(); //制动2秒
    133   delay(2000);
    134 
    135   go_forward_speed_up();   //前进 加速 50秒
    136   delay(50000);
    137   go_forward_high_speed();   //前进 全速10秒
    138   delay(10000);
    139   go_forward_speed_down();   //前进 减速50秒
    140   delay(50000);
    141   stop_free();    //自由停车5秒
    142   delay(5000);
    143 
    144   go_forward_left();  //小车左转10秒,时间可调整
    145   delay(10000);
    146   go_forward_right();  //小车右转10秒,时间可调整
    147   delay(10000);
    148   stop_free();    //自由停车5秒
    149   delay(5000);
    150 }

    运行效果

    包括下列动作:小车制动,加速前进,全速前进,减速前进,自由停车,小车左转,小车右转,自由停车,循环

    进一步练习

    设计程序控制小车走圆形曲线或者走口字

  • 相关阅读:
    echarts-detail---饼图
    echarts-detail--柱状图
    mvc5 错误页如何定义
    MyEclipse编码设置
    java EE 5 Libraries 删掉后怎么重新导入
    Server Library [Apache Tomcat v6.0](unbound)服务未绑定解决办法
    免安装jdk 和 免安装tomcat
    group_concat
    java cookie
    java 分割split
  • 原文地址:https://www.cnblogs.com/MyAutomation/p/9289591.html
Copyright © 2011-2022 走看看