找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 26759|回复: 21
打印 上一主题 下一主题
收起左侧

51单片机控制L298N驱动两台直流电机的智能小车程序

  [复制链接]
跳转到指定楼层
楼主
51单片机芯片控制的L298N驱动两台直流电机的智能小车程序

包含
1-左轮前进(接线调试)
2-右轮前进(接线调试)
3-前进后退
4-PWM调速前进后退

全部小车程序源码下载: 51小车测试程序.rar (126.33 KB, 下载次数: 548)


部分源码预览:
  1. /***************************************************************************
  2. 标题:前进后退测试
  3. 平台:LY5A-L2B开发板
  4. 作者:        林洋电子工作室-单片机
  5. 说明:使用定时器来输出PWM信号,通过调节占空比实现调速
  6. ******************************************************************************/

  7. //头文件:
  8. #include <reg52.h>

  9. //IO引脚定义:

  10. sbit IN1=P1^0;               
  11. sbit IN2=P1^1;
  12. sbit IN3=P1^2;
  13. sbit IN4=P1^3;
  14. //以上为电机驱动板输入引脚定义,
  15. //IN1和IN2控制左轮电机,输出对应的OU1和OUT2接左轮电机,
  16. //IN3和IN4控制右轮电机,输出对应的OU3和OUT4接右轮电机

  17. sbit L_PWM=P1^4;           //左轮调速,接驱动模块ENA使能端,在这里输入PWM信号
  18. sbit R_PWM=P1^5;           //右轮调速,接驱动模块ENB使能端,在这里输入PWM信号


  19. //宏定义
  20. #define L_go      IN1=0;IN2=1 //左轮前进
  21. #define L_back    IN1=1;IN2=0 //左轮后退   
  22. #define L_stop    IN1=0;IN2=0        //左轮停止,两个输出1也可以
  23. #define R_go            IN3=0;IN4=1 //右轮前进
  24. #define R_back          IN3=1;IN4=0 //右轮后退
  25. #define R_stop          IN3=0;IN4=0 //右轮停止,两个输出1也可以

  26. #define car_go                                L_go;R_go;                //小车前进
  27. #define car_back                        L_back;R_back        //小车后退
  28. #define car_left                        R_go;L_stop                //小车左转弯
  29. #define car_right                        L_go;R_stop                //小车右转弯
  30. #define car_stop                        L_stop;R_stop        //小车停车
  31. #define car_left_360        R_go;L_back                //小车向左360度转,也可以认为是大转弯
  32. #define car_right_360        L_go;R_back                //小车向右360度转,也可以认为是大转弯

  33. //数据定义
  34. unsigned char l_tt=0;        //定时器计数用

  35. unsigned char l_Lpwm=0;        //左轮PWM占空比值,我们设计10个格,0-9,0为停止,9为全速
  36. unsigned char l_Rpwm=0;        //右轮PWM占空比值,我们设计10个格,0-9,0为停止,9为全速


  37. //TIMER0中断服务子函数产生PWM信号
  38. void timer0()interrupt 1   using 2
  39. {
  40.         TH0=0XFC;          //定时1毫秒,10格调速,为100HZ频率,此频率下效果比较好,过大有噪声,过小振动大
  41.         TL0=0X17;
  42.         l_tt++;
  43.         if(l_tt>9)l_tt=0;        //比较用,10格调速
  44.        
  45.         if(l_tt<=l_Lpwm){//左调速,占空比数值越大,输出高电平时间越宽,电机转速越高,我们设计10个格,0-9,0为停止,9为全速
  46.                  L_PWM=1;
  47.         }
  48.         else{
  49.                 L_PWM=0;
  50.         }
  51.         if(l_tt<=l_Rpwm){//右调速,同上
  52.                 R_PWM=1;
  53.         }
  54.         else{
  55.                 R_PWM=0;
  56.         }
  57. }       

  58. //延时
  59. void Delay(unsigned int t)
  60. {
  61.         unsigned int c;
  62.         while(t--){
  63.                 c=10000;
  64.                 while(c--);
  65.         }
  66. }
  67. //入口函数
  68. void main(void)
  69. {
  70.         unsigned char i;
  71.         EA=1;                                                //首先开启总中断
  72.         TMOD|=0X11;                        //定时器方式1,16位计数器,用来计数时间
  73.         TH0= 0XFC;                  //1ms定时
  74.         TL0= 0X14;
  75.         TR0= 1;
  76.         ET0= 1;
  77.        
  78.         while(1){
  79.                 l_Lpwm=0;
  80.                 car_go;                        //前进
  81.                 for(i=0;i<10;i++){//慢慢提速
  82.                         l_Lpwm++;       
  83.                         l_Rpwm++;
  84.                         Delay(2);
  85.                 }               
  86.                 Delay(5);                                        //保持速度前进一会
  87.                 for(i=0;i<10;i++){//慢慢降速
  88.                         l_Lpwm--;       
  89.                         l_Rpwm--;
  90.                         Delay(2);
  91.                 }               
  92.                 Delay(10);
  93.                
  94.                 car_back;                //后退,以下原理同上
  95.                 for(i=0;i<10;i++){
  96.                         l_Lpwm++;       
  97.                         l_Rpwm++;
  98.                         Delay(2);
  99.                 }               
  100.                 Delay(5);
  101.                 for(i=0;i<10;i++){
  102.                         l_Lpwm--;       
  103.                         l_Rpwm--;
  104.                         Delay(2);
  105.                 }               
  106.                 Delay(10);
  107.         }
  108. }
复制代码

  1. /***************************************************************************
  2. 标题:前进后退测试
  3. 平台:LY5A-L2B开发板
  4. 作者:        林洋电子工作室-单片机
  5. 客服QQ:52927029
  6. 邮箱:        52927029@qq.com
  7. 说明:当1和2两个接线调试程序测试通过后,就可以用此程序进行前进后退实验
  8. ******************************************************************************/

  9. //头文件:
  10. #include <reg52.h>

  11. //IO引脚定义:

  12. sbit IN1=P1^0;               
  13. sbit IN2=P1^1;
  14. sbit IN3=P1^2;
  15. sbit IN4=P1^3;
  16. //以上为电机驱动板输入引脚定义,
  17. //IN1和IN2控制左轮电机,输出对应的OU1和OUT2接左轮电机,
  18. //IN3和IN4控制右轮电机,输出对应的OU3和OUT4接右轮电机

  19. //宏定义
  20. #define L_go      IN1=0;IN2=1 //左轮前进
  21. #define L_back    IN1=1;IN2=0 //左轮后退   
  22. #define L_stop    IN1=0;IN2=0        //左轮停止,两个输出1也可以
  23. #define R_go            IN3=0;IN4=1 //右轮前进
  24. #define R_back          IN3=1;IN4=0 //右轮后退
  25. #define R_stop          IN3=0;IN4=0 //右轮停止,两个输出1也可以

  26. #define car_go                                L_go;R_go;                //小车前进
  27. #define car_back                        L_back;R_back        //小车后退
  28. #define car_left                        R_go;L_stop                //小车左转弯
  29. #define car_right                        L_go;R_stop                //小车右转弯
  30. #define car_stop                        L_stop;R_stop        //小车停车
  31. #define car_left_360        R_go;L_back                //小车向左360度转,也可以认为是大转弯
  32. #define car_right_360        L_go;R_back                //小车向右360度转,也可以认为是大转弯


  33. //延时
  34. void Delay(unsigned int t)
  35. {
  36.         unsigned int c;
  37.         while(t--){
  38.                 c=10000;
  39.                 while(c--);
  40.         }
  41. }
  42. //入口函数
  43. void main(void)
  44. {
  45.         while(1){
  46.                 car_go;                        //前进
  47.                 Delay(10);
  48.                
  49.                 car_back;                //后退
  50.                 Delay(10);
  51.         }
  52. }
复制代码
  1. /***************************************************************************
  2. 标题:右轮前进
  3. 平台:LY5A-L2B开发板
  4. 作者:        林洋电子工作室-单片机
  5. 客服QQ:52927029
  6. 邮箱:        52927029@qq.com
  7. 说明:        本程序主要是用来做接线调试使用,右轮前进,即前进方向的右边轮子,
  8.                         如果实际写入程序测试电机向后转(后退),将电机两线调换一下即可。
  9. ******************************************************************************/

  10. //头文件:
  11. #include <reg52.h>

  12. //IO引脚定义:

  13. sbit IN1=P1^0;               
  14. sbit IN2=P1^1;
  15. sbit IN3=P1^2;
  16. sbit IN4=P1^3;
  17. //以上为电机驱动板输入引脚定义,
  18. //IN1和IN2控制左轮电机,输出对应的OU1和OUT2接左轮电机,
  19. //IN3和IN4控制右轮电机,输出对应的OU3和OUT4接右轮电机

  20. //宏定义
  21. #define L_go      IN1=0;IN2=1 //左轮前进
  22. #define L_back    IN1=1;IN2=0 //左轮后退   
  23. #define L_stop    IN1=0;IN2=0        //左轮停止,两个输出1也可以
  24. #define R_go            IN3=0;IN4=1 //右轮前进
  25. #define R_back          IN3=1;IN4=0 //右轮后退
  26. #define R_stop          IN3=0;IN4=0 //右轮停止,两个输出1也可以


  27. //入口函数
  28. void main(void)
  29. {
  30.         R_go;                        //右轮前进
  31.         while(1);
  32. }
复制代码


  1. /***************************************************************************
  2. 标题:左轮前进
  3. 平台:LY5A-L2B开发板
  4. 作者:        林洋电子工作室-单片机
  5. 客服QQ:52927029
  6. 邮箱:        52927029@qq.com
  7. 说明:        本程序主要是用来做接线调试使用,左轮前进,即前进方向的左边轮子,
  8.                         如果实际写入程序测试电机向后转(后退),将电机两线调换一下即可。
  9. ******************************************************************************/

  10. //头文件:
  11. #include <reg52.h>

  12. //IO引脚定义:

  13. sbit IN1=P1^0;               
  14. sbit IN2=P1^1;
  15. sbit IN3=P1^2;
  16. sbit IN4=P1^3;
  17. //以上为电机驱动板输入引脚定义,
  18. //IN1和IN2控制左轮电机,输出对应的OU1和OUT2接左轮电机,
  19. //IN3和IN4控制右轮电机,输出对应的OU3和OUT4接右轮电机

  20. //宏定义
  21. #define L_go      IN1=0;IN2=1 //左轮前进
  22. #define L_back    IN1=1;IN2=0 //左轮后退   
  23. #define L_stop    IN1=0;IN2=0        //左轮停止,两个输出1也可以
  24. #define R_go            IN3=0;IN4=1 //右轮前进
  25. #define R_back          IN3=1;IN4=0 //右轮后退
  26. #define R_stop          IN3=0;IN4=0 //右轮停止,两个输出1也可以


  27. //入口函数
  28. void main(void)
  29. {
  30.         L_go;                        //左轮前进
  31.         while(1);
  32. }
复制代码


评分

参与人数 5黑币 +93 收起 理由
Ca1m + 5 共享资料的黑币奖励!
1261280117 + 5 很给力!
kikiikllll + 3 很给力!
map0391 + 30 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏20 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:121114 发表于 2016-5-16 16:20 | 只看该作者
看来只好凑钱开启终身装逼模式了
回复

使用道具 举报

板凳
ID:205862 发表于 2017-6-5 17:42 | 只看该作者
有没有仿真
回复

使用道具 举报

地板
ID:233330 发表于 2017-9-28 21:33 | 只看该作者
好贴,不错,正适用。
回复

使用道具 举报

5#
ID:297298 发表于 2018-3-26 15:27 | 只看该作者
有点厉害啊,非常有帮助
回复

使用道具 举报

6#
ID:297298 发表于 2018-3-26 15:32 | 只看该作者
非常有帮助的有,厉害厉害!
回复

使用道具 举报

7#
ID:297298 发表于 2018-3-26 15:33 | 只看该作者
共享资料的黑币奖励!
回复

使用道具 举报

8#
ID:301443 发表于 2018-4-15 22:37 | 只看该作者
谢谢!
回复

使用道具 举报

9#
ID:61280 发表于 2018-4-19 15:38 | 只看该作者
资料是好,钱不够。囧
回复

使用道具 举报

10#
ID:220472 发表于 2018-4-28 13:03 | 只看该作者
学习了
回复

使用道具 举报

11#
ID:374904 发表于 2018-7-21 09:35 | 只看该作者
真的很赞
回复

使用道具 举报

12#
ID:372154 发表于 2019-5-28 02:27 | 只看该作者
好啊,是真的挺好的
回复

使用道具 举报

13#
ID:549212 发表于 2019-5-28 13:12 | 只看该作者
谢谢分享!!!
回复

使用道具 举报

14#
ID:570839 发表于 2019-6-28 03:18 | 只看该作者
谢谢下载学习下
回复

使用道具 举报

15#
ID:572744 发表于 2019-7-1 15:11 | 只看该作者
加个按键键控制的该多好
回复

使用道具 举报

16#
ID:582784 发表于 2019-7-12 10:16 | 只看该作者
学习学习
回复

使用道具 举报

17#
ID:580104 发表于 2019-7-17 15:25 | 只看该作者
备注的很详细,资料不错,学习一下 ...
回复

使用道具 举报

18#
ID:630776 发表于 2019-10-27 23:05 来自手机 | 只看该作者
可以发一下相关的仿真电路图吗?
回复

使用道具 举报

19#
ID:630776 发表于 2019-10-27 23:05 来自手机 | 只看该作者
可以发一下相关的仿真电路图吗?
回复

使用道具 举报

20#
ID:626667 发表于 2019-11-12 17:00 | 只看该作者
给力非常棒
回复

使用道具 举报

21#
ID:437948 发表于 2019-12-9 16:18 | 只看该作者
你好,楼主,我用你的程序,但是我的电机不转是为什么
回复

使用道具 举报

22#
ID:927901 发表于 2021-6-9 23:12 | 只看该作者
终于找到了PWM调速程序呀,爱了爱了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表