基于51单片机的循迹小车的诸多问题及解决方法

声明:以下所有问题都是我个人实际遇到的(你可能会觉得:“啊?遇到这么多问题,你好菜啊

“对此,我也没有办法,毕竟我喜欢摆烂)

问题1:引脚问题

  1.1电机引脚 

 按照上述的三张图片,以电机IN1引脚为例。

 寻找IN1引脚的顺序应该为:上左图中找到IN1对应PWM A-1,在下左图中找到PWM A-1     对应PWM A-1-,最后在上右图中找到PWM A-1与P1^0对应。

1.2传感器类引脚问题

  按照上述的三张图片,以P6引脚为例。

  寻找P6中引脚的顺序应该为:在P6中找到SEN4,在右图找到SEN4对应引脚为P2^3。

问题2:舵机问题

2.1舵机型号一般为SG90型号,常见的舵机在接线时会出现三根线连在一起的问题。

     解决方法:1.用斜口钳将三根线依次剪开。

                      2.在三条线的接线口在接上三条公对公杜邦线或公对母杜邦线(个人推荐第二种方法)。

2.3舵机转向程序设计

类型:1.定时器版(此版本可以自定义舵机的旋转角度)。

           2.非定时器版(此版本的舵机仅可以旋转三个特殊角度)。

       注:建议使用第二种方法,第一种可能会出现定时器的复用相关内容的学习。

2.4. 舵机一般为180度的,即使被旋转到了一个大于180度的角度,在启动舵机后,舵机会自动回复到原位,因此不需要担心这类问题。

问题3:电池问题

3.1一般用的电池为18650型号,充电速度较慢。

     解决方法:1.再另外购买同种类型的电池一对,并注意及时交替充电。

                       2.利用闲暇时间充电(傻子也知道(doge))。

问题4:电机问题

4.1学校发的电机类型为黄色直流减速电机,这种电机的接线是需要自己通过对杜邦线的剪接来完成的。

注意事项:1.杜邦线中的铜丝尽可能全部与电机上的铜片接触,并需要保证接触良好,在小车行驶                       过程中会出现颠簸,导致铜丝错位,进而导致电机无法正常运转

                  2. 电机的表面外壳上有两个螺丝,在使用前或在使用过程中有明显的卡顿现象可以将                         两螺丝小心同时拧下,拆开外壳后会发现齿轮的结构,并购买润滑油,涂抹部分使齿                       轮运作流畅。

4.2如若出现电机在使用过程中出现左轮转右轮不转或相反(只有一个轮子有异常)的情况。(我一般称之为电机挂机)。 

      解决方案:

       注意:尝试下列解决方案前请查看自己的程序设计部分是否有问题,解决方案均是建立在程序确定无误的基础上。

  1. 首先查看电机与电机驱动板的接线,一般情况下,公头与电机驱动板的连接不会出现问题。
  2. 其次查看电机驱动板与电机的连线,即上文提到的杜邦线内铜丝与电机铜孔的连接,可以采取将线取下,并用刀片或剥线钳将杜邦线在去除一部分外皮后,将里面的铜丝绕在铜孔中。 (如若有朋友采取焊接的方式进行连接,上述第二种方法可以简单测试)。

     3. 最后(1)换上别的同学电量较多的电池尝试,如果可以正常运作。        

                (2)或者是悬空测试时可以正常运作,在赛道上时则不可以。证明大概率是电池过低,

                          导致供给电机的电压不足。

4.3如若出现电机在使用过程中出现两个轮子都不转的情况。

    解决方案:

    注意:尝试下列解决方案前请查看自己的程序设计部分是否有问题,以下解决方案均是建立在        程序确定无误的基础上

     1.  首先安装上述第二个问题的情况检查接线,如果仍有问题,可以首先考虑更换杜邦线或者更            换电机

     2.  可以考虑电池的电量问题,及时充电或更换电池。

     3.  检查电源板与主控板的VCC和GND接线有没有松,检查电源板和电机驱动公对母线的连接,

          是否出现漏接,接口松弛的情况。

      4.  检查PWM的几根相关线是否连接。

4.4电机上的皮套可拆可不拆

   

问题4:万向轮问题

4.1万向轮卡顿

        解决方法:1.在万向轮的间隙中滴加润滑油,直至运作流畅。

                          2.更换万向轮

4.2万向轮固定不牢固

        解决方法:1.网站上购买合适长度的铜柱或尼龙柱

                           2.使用长螺丝和螺母搭配的方法调整高度后固定

                           (此种方法最好准备老虎钳 两个,注意不是斜口钳)

问题5:循迹红外传感器问题

5.1代码与实际运行结果不符合

    解决方法:(1)此种情况主要是因为没有了解使用的循迹红外传感器是高电平输出方式还是低

                                电平输出方式,简而言之,就是led灯亮的时候对应的是1还是0。

                     (2)可以让所有的传感器都为0或1时,执行一个特征性强的函数,如停止,亮灯,

                             前进后,烧录到芯片后进行统一遮挡或不遮挡,进而判断所有传感器输出类型。

5.2由于设计问题,循迹红外传感器过于靠近地板,导致其滑动变阻器旋动困难,进而导致调整困难。

    解决方法:1.网上购买美工刀或刻刀或电钻,在底板的原有基础上打孔(不推荐)

                      2.利用拧松铜柱或尼龙柱的方法调整高度。

                      3.使用长螺丝配合螺母的方法

                        (比较推荐这种,可以大幅度,较为方便地调节循迹红外线传感器的高度)

                注:使用这种方法时注意在拧紧螺母时最后用老虎钳,但是老虎钳在拧的时候注意不要

                        划破电路板上的电路,如果用力过猛会导致铜丝裸露,大概率使得传感器失效。

5.3由于设计问题,导致小车底盘过低,在安装循迹红外线传感器时导致传感器过于靠近小车底板,导致接线时多次拆装使得杜邦线和排针的连接过于松弛。

    解决方法:1.将三根线按照对应顺序摆放好后,用手捏住,并提前准备好适当长度宽度的电工胶

                          带,将其固定。

                      2.将线接到针脚上后,用电工胶带将其固定在底板上。

5.4小车在巡线过程中会发生颠簸,加上小车的设计有漏洞,使得小车的前半部分有上下晃动的情况,最终导致循迹红外线传感器在检测到白色部分时并没有亮灯。

    解决方法:1.使用尼龙扎带将小车前半部分固定在某一个高度,如果实在不好固定,可以

                         小车的板子上用电钻打孔。

                      2.在网上购买其它型号的循迹红外线传感器,这些传感器的灵敏性远远强于

                         学校自己焊接的类型,基本上不需要考虑小车颠簸导致的问题。

                      (个人推荐采取第二种方法)

5.5如果遇到两个同样型号的循迹红外传感器在使用过程中出现两个灯的亮度明显不一致

    的情况。

      解决方法:1.先尝试将电池拿去充电后在检测(这个情况概率很小)

                         2.大概率是在使用过程中由于VCC和GND接反,导致循迹红外传感器的芯

                            片一瞬间被烧毁,建议更换传感器。

5.6传感器型号不一样导致电机有问题(这个在后续电机程序问题部分讲解)。

问题6:烧录问题

6.1将USB线连接后未显示串口

      解决方法:这个问题需要一个个进行排除

                        1.先找一台驱动安装成功等已经没有如何烧录问题的电脑,并使用一个可以

                           成功烧录的USB线

                        (1)如果仍然不可以,大概率是电路板的问题,先检查电容等需要注意

                                 方向的电子元件的焊接,再检查USB头的焊接,再检查与USB接口对应的

                                 芯片问题,最后检查STC芯片。

                                (这类问题大概率是芯片在焊接的时候被烧坏或存在虚焊的问题)

                           注:可以用万用表检测或直接找老师更换芯片,重新焊接

                        (2)如果使用自己的USB线无法检测,但是使用别人的USB线可以,说明是USB

                                  线有问题,可以更换USB线。

                       2.使用上述1的方法后,排除了USB线的问题后再检查驱动问题

                       (1)在自己的电脑上检测不到串口但是在别人的电脑上就可以,说明是电脑驱动

                                 未安装成功。关于驱动安装的一系列问题会在后续问题中讲解。

                       (2)如果仍然无法解决,则情况同上述1.(1)这里就直接复制粘贴了。

                                大概率是电路板的问题,先检查电容等需要注意方向的电子元件的焊接,

                                再检查USB头的焊接,再检查与USB接口对应的芯片问题,最后检查STC芯片

                             (这类问题大概率是芯片在焊接的时候被烧坏或存在虚焊的问题)

                                注:可以用万用表检测或直接更换芯片,重新焊接

6.2排除上述的问题后,在接上USB线后,有的时候仍然会出现检测不到串口

       解决方法:

               1.将电脑上的对应插头拔下后,重新插入后稍微用点劲往里面怼一下

               2.将电路板上的对应插头拔下后,稍微倾斜地从上往下插入后,在轻轻往

                 下按压一下。

6.3显示串口但是无法烧录程序

       解决方法:

              1.检查驱动的安装

              2.检查单片机型号(极大概率是这个问题)

               注意:我们使用的单片机型号应该选择下图,切勿选择错误。

              3. 路板的问题,先检查电容等需要注意方向的电子元件的焊接,再检查USB头的焊接,

                   再检查与USB接口对应的芯片问题,最后检查STC芯片。(复制粘贴了)

                (这类问题大概率是芯片在焊接的时候被烧坏或存在虚焊的问题)

                  注:可以用万用表检测或直接找老师更换芯片,重新焊接

              (这个情况基本上不需要考虑,很小概率是这个问题)

6.4烧录程序出现全为乱码的情况

     解决方法:非Unicode应用程序语言改成中文。

                        控制面板-区域和语言选项-高级-取消勾选beta

6.5点击下载后程序并没有正常被烧录进单片机芯片中,卡在第一行

    解决方法:1.关闭程序后,将两头全部拔下,在重启软件,插上USB线,电机下载程序后,

                         稍微延时3s左右在开启开关

                      2.检查单片机型号的选择。

 

问题7:电机程序问题

下列问题默认电机接线等一切硬件问题没有问题

7.1电机转动,无论怎么改动pwm的设定值也改变不了

     解决方法:此种情况经常会伴随电机转动出现明显间隔现象

               请自己查看相关书籍定时器部分和后续的  PWM问题,自行理解

7.2电机在前进函数中一个正转一个反转

     解决方法:更换对应IN的0和1的值,这种情况一般是接线接反了

7.3电机基本上转不动

     解决方法:1.调整PWM的set值,自行寻找电机明显转动的阈值

                       2.给电池充电(后续像这种硬件问题不在赘述)

7.4传感器检测部分检查无误,无论哪种情况,电机仍然不转

     解决方法:检查小车移动类函数是否加入ENA=0或ENB=0,建议这种问题认真看书

                       或我的个人理解部分,尽可能搞清楚ENA和ENB的用处

7.5传感器检测到后,但是对应的电机并没有转

     解决方法:检测传感器部分函数的if判断中是否为==和&&

7.6所有程序检查无误,但是实际上没有任何反应

    解决方法:检查是否添加大循环语句,如while(1)类

7.7(下面这个问题一般很少有人遇到,因为实在是太抽象了)

    使用了触发信号不同的传感器,部分情况是没有问题的,但是某些判断情况就会出现一

    个转一个不转的问题,但是单独检测时,电机的转动都是正常的,而且不存在硬件问题

    解决方法:这个方法是我自己摸索出来的,但是并没有理解其原因,所以请了解的大佬

    指教,

    如图:我一共使用了两个传感器,所以一共有三个if和一个else语句,先将else语句改写为if语          句,解决这个问题的方法就是不断调整if语句的顺序,直到电机旋转正常。

(可能很多人会有疑问,同样我也有疑问,但是的确是这么解决的

 

问题八:keil2软件问题

8.1字太小,看不清楚

     解决方法:View-Options—Colors&Fonts-第一个

8.2新建项目时没有单片机型号选择

     解决方法:前往csdn下载KEIL2的组件包

8.3点击 未出现hex文件

    解决方法:点击魔法棒,顺便根据自己的晶振修改周期,点击output,勾选带有create hex

8.5勾选了create hex仍然无法生成hex

    解决方法:点击 左边那个,别点右边那个

8.6无法添加中文注释,或者一输入中文就显示?

   解决方法:非Unicode应用程序语言改成中文。

控制面板-区域和语言选项-高级-取消勾选beta

8.7Keil2报错failed to execute 'd:\Keil\C51\BIN\C51.EXE

    解决方法:找到自己的keil安装目录,下面有个TOOLS.INI文件。用记事本打开这个文

件,找到:[C51] PATH=“d:\Keil\C51”或类似字样,将PATH=后面的内容改为自己keil实际安装的目录,最后一个文件夹是C51.

 8.8按照解决方法修改后仍然显示类似failed to execute 'd:\Keil\C51\BIN\C51.EXE这种问题

    解决方法:修改keil2的文件存在位置,使文件不含有中文

8.9引用头文件时显示没有头文件

   解决方法:上csdn下载头文件组件包

问题9:驱动安装问题

9.1驱动安装失败

     解决方法:卸载后重新安装

9.2驱动预安装成功

     解决方法:安装驱动时将单片机主控板连接到电脑上,并通上电,如果还是不行,就考虑

                        芯片是否被烧坏这类问题(我当时就是这种情况)

问题10:焊接类问题

10.1该亮的灯没亮

解决方法:1.检查应该区分正负的电子元件是否接反

                  2.检查电源线是否接反(这种情况最可怕,一般会烧坏芯片)

                  3.检查是否虚焊

                  4.检查电阻型号

10.2灯闪烁

    解决方法:1.检查是否虚焊

          2.检查电阻型号

10.3焊接芯片时引脚连在一起

    解决方法:1.用杜邦线,抹上松香加热,将焊锡移除(一般没人用的会)

              2.用焊枪一点一点拨出来

10.4不小心把插口焊死

   解决方法:两端同时加热,一段向外顶

10.5电路板铜丝被烫出来

    解决方法:换板子

问题11:接线类问题

11.1电机不转

    解决方法:检查这部分电源相关的线是否连接

11.2为什么接3.3v部分

  解决方法:稳压

11.3程序烧入进芯片了,电机不转

  解决方法:1.检查pwm相关的6个线是否接反或未接

                    2.检查电机驱动是否少接线

11.4主控板灯不亮 

 解决方法:排除焊接问题,检查是否供电

(其它板同理)

问题12:机械类问题

12.1小车应该几个轮子

    建议:最好是两轮加万向轮,也可以尝试四驱和四轮两驱(本人能力不足)

12.2舵机尺寸或其它元件尺寸大了

    解决方法:买美工刀直接在板子上刻

12.3忘记留孔穿线了

    解决方法:找电钻打孔

12.4电机上不紧

    解决方法:采用两个板子加紧的方法

12.5电池盒没地方放

    解决方法:考虑放在小车底板反面或竖起来

12.6电路板可以直接拧在板子上吗?

    建议:最好不要,可以用铜柱或螺母,垫片等物品垫高或者直接竖直放置,除非电路板够厚

              小车材料够好

12.7做两层结构,导致接线不好接

   解决方法:提前考虑规划接线顺序

问题13:超声波传感器硬件类问题

13.1小车整体底盘过低导致小车在一定高度时超声波避障可以实现,如果直接放在地上则不可以

    解决方法:暂时没有好的建议,只能想办法垫高

13.2超声波程序没有问题,但是每次触发都得先有障碍物,且触发后便不在变化(无法避障)

    解决方法:考虑更换超声波传感器型号

【淘宝】https://m.tb.cn/h.5gA2jM5?tk=mfqfW0oVhCE CZ3457 「HC-SR04超声波测距模块传感器支持3.3V-5V兼容UNO R3/51/STM32」

(这里说明一下啊,完全没有宣传的含义,单纯就是自己使用的型号)

声明:此问题汇总仅可用于学习且尚未盘点软件的编程设计问题

  • 29
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
循迹小车停车的代码可以分为两个部分:循迹部分和停车部分。以下是基于51单片机循迹小车停车代码示例: ```c #include <reg51.h> #define uchar unsigned char sbit IN1=P1^0; //定义IN1 sbit IN2=P1^1; //定义IN2 sbit IN3=P1^2; //定义IN3 sbit IN4=P1^3; //定义IN4 uchar i=0,flag=0; //定义计数器i和标志位flag void delay(uchar n) //延时函数 { uchar i,j; for(i=0;i<n;i++) { for(j=0;j<120;j++); } } void forward() //前进函数 { IN1=1; IN2=0; IN3=1; IN4=0; } void left() //左转函数 { IN1=0; IN2=1; IN3=1; IN4=0; } void right() //右转函数 { IN1=1; IN2=0; IN3=0; IN4=1; } void stop() //停止函数 { IN1=0; IN2=0; IN3=0; IN4=0; } void main() { while(1) { if(P2==0x0F) //循迹小车在黑线上 { forward(); //前进 } else if(P2==0x00) //循迹小车在白色地面上 { stop(); //停车 flag=1; //标志位flag置1 } else if(P2==0x0E) //循迹小车偏右 { right(); //右转 delay(10); //延时 forward(); //前进 } else if(P2==0x0D) //循迹小车偏左 { left(); //左转 delay(10); //延时 forward(); //前进 } if(flag==1) //停车后flag为1 { i++; //计数器i自增 if(i==10) //计数器i达到10 { flag=0; //标志位flag置0 i=0; //计数器i清0 } } } } ``` 以上代码中,使用了P1口控制小车电机的方向,P2口接收循迹模块的信号。循迹部分通过读取P2口的值判断循迹小车的位置,从而控制小车的运动方向;停车部分通过设置标志位flag和计数器i实现停车后的维持状态。需要注意的是,以上代码仅供参考,具体实现需要根据具体的硬件环境进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值