找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2138|回复: 15
收起左侧

红外传感器+51单片机循迹小车程序问题

[复制链接]
ID:903232 发表于 2021-4-9 22:09 | 显示全部楼层 |阅读模式
采用的是L298n电机驱动,通电后红外传感器灯是正常的,可以识别黑白线,黑线不亮其他亮,但是电机一动不动,求大佬帮看下程序有什么问题

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char   
  3. #define uint  unsigned int

  4. uint PWM_R=0,PWM_L=0,t=0;

  5. sbit inputL=P2^7;
  6. sbit inputR=P2^6;
  7. sbit LB=P2^3;   
  8. sbit LF=P2^2;         
  9. sbit RB=P2^1;         
  10. sbit RF=P2^0;         


  11. void stop(void);
  12. void Timer0Init(void);
  13. void scan(void);
  14. void Timer0(void);

  15. void main()
  16. {
  17.         Timer0Init();  
  18.         EA=1;     
  19.         while(1)
  20.         {
  21.                 scan();
  22.                 Timer0();
  23.         }        
  24. }

  25. void stop(void)
  26. {
  27.         LF=0;
  28.         LB=0;   
  29.         RF=0;
  30.         RB=0;
  31. }

  32. void Timer0Init()  
  33. {
  34.         TMOD|=0X01;

  35.         TH0=(65536-100)/256;        
  36.         TL0=(65536-100)%256;        
  37.         ET0=1;
  38.         TR0=1;               
  39. }

  40. void Timer0() interrupt 1
  41. {
  42.         TH0=(65536-100)/256;
  43.         TL0=(65536-100)%256;
  44.         if(t<PWM_L)
  45.                 LF=1;
  46.         else
  47.                 LF=0;
  48.         if(t<PWM_R)
  49.                 RF=1;
  50.         else
  51.                 RF=0;
  52.         t++;
  53.         if(t>=100)
  54.                 t=0;        
  55. }

  56. void scan()        
  57. {
  58.           if(inputL==1&&inputR==1)
  59.           {
  60.                         PWM_R=0;
  61.                         PWM_L=0;
  62.                         stop();
  63.            }
  64.           if(inputL==0&&inputR==1)
  65.           {
  66.                         PWM_R=0;
  67.                         PWM_L=70;
  68.            }
  69.           if(inputL==1&&inputR==0)
  70.           {
  71.                         PWM_R=70;
  72.                         PWM_L=0;
  73.            }
  74.             if(inputL==0&&inputR==1)
  75.           {
  76.                         PWM_R=40;
  77.                         PWM_L=40;
  78.            }
  79. }

复制代码
回复

使用道具 举报

ID:903232 发表于 2021-4-10 09:14 | 显示全部楼层
顶下,马上就要比赛了
回复

使用道具 举报

ID:894065 发表于 2021-4-10 16:59 | 显示全部楼层
程序没问题的话,一般问题就出在外部接线
回复

使用道具 举报

ID:808223 发表于 2021-4-10 19:02 | 显示全部楼层
你仔细看看你的程序,你是不是最后一个子函数写错了判断条件,应该是
if(inputL==0&&inputR==0)
          {
                        PWM_R=40;
                        PWM_L=40;
           }
回复

使用道具 举报

ID:903232 发表于 2021-4-11 10:48 | 显示全部楼层
wqqfE 发表于 2021-4-10 16:59
程序没问题的话,一般问题就出在外部接线

昨晚写了个很简单的测试程序
  1. #include<reg52.h>

  2. sbit IN1 = P1^2;
  3. sbit IN2 = P1^3;
  4. sbit IN3 = P1^6;
  5. sbit IN4 = P1^7;
  6. sbit EN1 = P1^4;
  7. sbit EN2 = P1^5;

  8. void main()
  9. {
  10.         IN1 = 0;
  11.         IN2 = 1;
  12.         IN3 = 1;
  13.         IN4 = 0;
  14.         while(1);
  15. }
复制代码


但是烧到单片机里面小车依然不动,我觉得应该是单片机里面的程序根本没有被执行,观察了下买的51单片机的最小系统板子,少了一个叫晶振的东西,白色的有两个脚的零件,请问是少了这个晶振的原因吗?
回复

使用道具 举报

ID:903232 发表于 2021-4-11 10:50 | 显示全部楼层
Secret丶 发表于 2021-4-10 19:02
你仔细看看你的程序,你是不是最后一个子函数写错了判断条件,应该是
if(inputL==0&&inputR==0)
         ...

昨晚写了个很简单的测试程序,但是依然没反应,觉得单片机里面的程序没有被执行,观察发现单片机少了个叫晶振的零件,银白色有两个引脚的那个,请问是因为没有这个晶振的原因吗?
测试程序如下
  1. #include<reg52.h>

  2. sbit IN1 = P1^2;
  3. sbit IN2 = P1^3;
  4. sbit IN3 = P1^6;
  5. sbit IN4 = P1^7;
  6. sbit EN1 = P1^4;
  7. sbit EN2 = P1^5;

  8. void main()
  9. {
  10.         IN1 = 0;
  11.         IN2 = 1;
  12.         IN3 = 1;
  13.         IN4 = 0;
  14.         while(1);
  15. }
复制代码

用的是L298n电机驱动
回复

使用道具 举报

ID:844772 发表于 2021-4-11 15:12 | 显示全部楼层
1、自己做的系统,晶振藏到51下边,你看不到,但买的最小系统好多在外边,建议你拿表测一下是不是有输出就知道系统起振没。2、测试程序EN1和EN2没赋值啊,你把它跳线了吗?还有L298N电源上面的跳线你怎么接的?这两个跳线没弄好都不会转的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:903232 发表于 2021-4-11 17:54 | 显示全部楼层
glinfei 发表于 2021-4-11 15:12
1、自己做的系统,晶振藏到51下边,你看不到,但买的最小系统好多在外边,建议你拿表测一下是不是有输出就 ...
  1. #include<reg52.h>

  2. sbit IN1 = P1^2;
  3. sbit IN2 = P1^3;
  4. sbit IN3 = P1^6;
  5. sbit IN4 = P1^7;
  6. sbit EN1 = P1^4;
  7. sbit EN2 = P1^5;

  8. void main()
  9. {
  10.         while(1)
  11.         {
  12.                 IN1 = 0;
  13.                 IN2 = 1;
  14.                 IN3 = 1;
  15.                 IN4 = 0;
  16.                 EN1 = 1;
  17.                 EN2 = 1;
  18.         }
  19. }
复制代码


你好,这个是我加上的代码,又烧写了一遍,L298n的电源跳冒是接好了的,晶振也插上了,但轮子还是不转,不知道问题出在哪里
回复

使用道具 举报

ID:903232 发表于 2021-4-11 17:55 | 显示全部楼层
C:\Users\DELL\Desktop\1.jpg
这个是接线图
回复

使用道具 举报

ID:332214 发表于 2021-4-12 16:17 | 显示全部楼层
检查问题:
1、首先判断程序驱动有没有问题,不用先接到L298n 直接测试单片机引脚 有没有高低电平变化。
2、1没问题,那就证明程序驱动没问题。在接到L298n上,接好线路测试。
回复

使用道具 举报

ID:332214 发表于 2021-4-12 16:25 | 显示全部楼层
个人猜想: 可能问题是 L298n外接的电源,电机启动瞬间电流过大,电源保护,驱动不了。最简单办法,在电源上串个电抗器
回复

使用道具 举报

ID:844772 发表于 2021-4-12 17:30 | 显示全部楼层
但走一个6 发表于 2021-4-11 17:54
你好,这个是我加上的代码,又烧写了一遍,L298n的电源跳冒是接好了的,晶振也插上了,但轮子还是不 ...

程序没看出问题,拍个你的298接线的照片看看。主要看你是双电源还是用51供电?双电源别忘共地,如果用51输出的电,估计转不动电机,但应该能听到发出噪音。
回复

使用道具 举报

ID:844772 发表于 2021-4-12 17:32 | 显示全部楼层
但走一个6 发表于 2021-4-11 17:54
你好,这个是我加上的代码,又烧写了一遍,L298n的电源跳冒是接好了的,晶振也插上了,但轮子还是不 ...

还有个事,检查一下你的51系统上的en,好多系统给悬空了,所以不运行。
回复

使用道具 举报

ID:900662 发表于 2021-4-13 21:38 | 显示全部楼层
你用万用表测试一下,你置位的口是不是高电平,然后再看你的驱动芯片接法,别接错了,图也没有,只能盲猜
回复

使用道具 举报

ID:911899 发表于 2021-4-25 16:06 | 显示全部楼层
但走一个6 发表于 2021-4-11 10:50
昨晚写了个很简单的测试程序,但是依然没反应,觉得单片机里面的程序没有被执行,观察发现单片机少了个叫 ...

晶振的效果是当一个时钟,电流变化是通交流阻直流。
回复

使用道具 举报

ID:921969 发表于 2021-5-15 23:56 | 显示全部楼层
你好  请问为什么我的电机偶尔可以受红外模块控制,偶尔不行
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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