4788|0

85

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

零知开源分享-L298N模块使用 电机驱动 TT马达 [复制链接]

本帖最后由 roc2 于 2019-5-11 14:44 编辑

电机驱动模块在电子制作中会经常使用到,下面以L298N型号的模块为例介绍其使用方法。
模块引脚说明如下:

值得注意的是,它已经内置5V供电,所以不必从外面再接5V输入。
1、实验材料
直流减速电机TT马达2个,带车轮(便于实验观察)

  • 电机驱动板1块
  • 零知-标准板
  • 杜邦线若干

2、接线
我们把零知标准板和电机驱动板相连接,驱动2路电机工作。接线图如下:

引脚连接:
最后我们把电机驱动板的12v接到一个9v的电源上(如干电池组),然后GND连接到零知标准板的地。
3、程序
根据上述连接线后,我们使用程序来控制电机的运行:
  1. /**
  2. *    文件: 电机驱动.ino      by 零知实验室
  3. *    -^^- 零知开源,让电子制作变得更简单! -^^-
  4. *    时间: 2018/10/13 15:01
  5. *    说明:
  6. **/
  7.   
  8. //控制命令
  9. #define        STOP                 0
  10. #define        FORWARD                1
  11. #define        BACKWARD        2
  12. #define        TURNLEFT        3
  13. #define        TURNRIGHT        4

  14. //电机控制引脚
  15. #define LEFT_MOTOR1 2
  16. #define LEFT_MOTOR2        3
  17. #define RIGHT_MOTOR1 4
  18. #define RIGHT_MOTOR2 5
  19. #define LEFT_ENA 11
  20. #define RIGHT_ENB 12

  21. int LED_STATE = 0;
  22.    
  23. void setup() {
  24.     // put your setup code here, to run once:
  25.          
  26.         Serial.begin(9600);
  27.          
  28.         pinMode(LED_BUILTIN, OUTPUT);
  29.          
  30.         pinMode(LEFT_MOTOR1, OUTPUT);
  31.         pinMode(LEFT_MOTOR2, OUTPUT);
  32.         pinMode(RIGHT_MOTOR1, OUTPUT);
  33.         pinMode(RIGHT_MOTOR2, OUTPUT);
  34.         pinMode(LEFT_ENA,OUTPUT);
  35.         pinMode(RIGHT_ENB,OUTPUT);
  36.          
  37.         motor_run(STOP);
  38.          
  39. }
  40.   
  41. void loop() {
  42.     // put your main code here, to run repeatedly:

  43.         int cmd = 1;

  44.         motor_run(cmd);

  45.         delay(1000);
  46.          
  47.         motor_run(0);
  48. }
复制代码


把电机驱动的操作作为一个函数motor_run(int cmd);如下:
  1. /**
  2. *        根据命令点击进行相应动作
  3. *         cmd 命令
  4. */

  5. int highSpeed = 200;
  6. int lowSpeed = 100;

  7. void motor_run(int cmd)
  8. {
  9.         switch(cmd)
  10.         {
  11.                 case FORWARD:
  12.                         Serial.println("FORWARD"); //输出状态
  13.                         analogWrite(LEFT_ENA,highSpeed);
  14.                         digitalWrite(LEFT_MOTOR1, LOW);
  15.                         digitalWrite(LEFT_MOTOR2, HIGH);
  16.                         analogWrite(RIGHT_ENB,highSpeed);
  17.                         digitalWrite(RIGHT_MOTOR1, LOW);
  18.                         digitalWrite(RIGHT_MOTOR2, HIGH);
  19.                 break;
  20.                 case BACKWARD:
  21.                         Serial.println("BACKWARD"); //输出状态
  22.                         digitalWrite(LEFT_MOTOR1,  HIGH);
  23.                         digitalWrite(LEFT_MOTOR2, LOW);
  24.                         digitalWrite(RIGHT_MOTOR1, HIGH);
  25.                         digitalWrite(RIGHT_MOTOR2, LOW);
  26.                 break;
  27.                 case TURNLEFT:
  28.                         Serial.println("TURN  LEFT"); //输出状态
  29.                         analogWrite(LEFT_ENA,lowSpeed);
  30.                         analogWrite(RIGHT_ENB,highSpeed);
  31.                         digitalWrite(LEFT_MOTOR1, LOW);
  32.                         digitalWrite(LEFT_MOTOR2, HIGH);//C
  33.                         digitalWrite(RIGHT_MOTOR1, LOW);
  34.                         digitalWrite(RIGHT_MOTOR2, HIGH);
  35.                 break;
  36.                 case TURNRIGHT:
  37.                         Serial.println("TURN  RIGHT"); //输出状态
  38.                         analogWrite(LEFT_ENA,highSpeed);
  39.                         analogWrite(RIGHT_ENB,lowSpeed);
  40.                         digitalWrite(LEFT_MOTOR1, LOW);
  41.                         digitalWrite(LEFT_MOTOR2, HIGH);
  42.                         digitalWrite(RIGHT_MOTOR1, LOW);//C
  43.                         digitalWrite(RIGHT_MOTOR2, HIGH);
  44.                 break;
  45.                 case STOP:
  46.                 default:
  47.                         Serial.println("STOP"); //输出状态
  48.                         digitalWrite(LEFT_ENA,1);
  49.                         digitalWrite(RIGHT_ENB,1);
  50.                         digitalWrite(LEFT_MOTOR1, LOW);
  51.                         digitalWrite(LEFT_MOTOR2, LOW);
  52.                         digitalWrite(RIGHT_MOTOR1, LOW);
  53.                         digitalWrite(RIGHT_MOTOR2, LOW);
  54.                 break;
  55.         }
  56. }
复制代码

把程序上传到零知-标准板上,调整程序中cmd的值,看看效果吧!
更多详细资料可到零知官网免费获取。

此内容由EEWORLD论坛网友roc2原创,如需转载或用于商业用途需征得作者同意并注明出处

点赞 关注(1)
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表