基于单片机的自动避障小车设计课设 下载本文

沈阳航空航天大学课程设计说明书 第5章 制作安装与调试

(2)连接完成后,打开电源开关,观察稳压模块、单片机等部件的LED指示灯是否全亮,如若有不亮的,则要重新检查供电是否正常;

(3)电路连接完毕后,此时将L298N上控制信号直接连5V电压,观察四个电机是否可以正常转动,若有电机不转或者卡死现象,则要再次检查电路,并且检查电机是否存在接触不良等问题;

(4)全车检查完成后,软件调试时先用KEIL软件编译程序检查程序是否有错误,然后再将程序烧录进入芯片,观察小车的运行情况。然后再将占空比相等的两路PWM信号程序烧录入单片机,打开电源,观察小车是否可以直道行驶;

(5)确定小车可以直道行驶后,此时就要进入小车的功能调试。先确定小车的超声波模块探测到障碍物是的最大转弯距离,然后调节小车两路PWM信号的占空比,是小车能够在给定的距离内安全转弯并绕过障碍物。

5.3 调试中遇到的问题

在调试时发现的问题主要有以下几个方面:

(1)小车前进过程中突然停止,经检查发现是由于电机机械特性较差所致。 (2)小车在遇到前方障碍物时未能转弯,经检查发现是由于程序中所写的转弯距离裕量太小,转弯时小车行驶速度过慢导致的,增大裕量及小车转弯速度后小车能够及时转弯。

(3)小车在转弯过程中电机卡死,经检查时由于差速转弯时两边电机的速度相差过大引起,减小速度差即可。

18

沈阳航空航天大学课程设计说明书 第6章 总结

总结

历时两周的课程设计过程转眼就结束了,从最初的上网查资料,到在实验室安装小车并且设计小车的布局,再到修改程序调试小车。一步步走过来,我也收获了很多。在安装小车过程中,我发现要是小车能够运行得更好且能够经受长时间的调试过程,必须使用能够充电的蓄电池而不是干电池,用到蓄电池就需要稳压模块。在调试过程中,发现单片机烧录入程序后电机不转动,经检查发现是因为驱动芯片L298N的使能端未接高电平,接入后小车正常行驶。通过这些调试,提高了我检查电路的能力,以及巩固了电路的知识。通过这样的设计,提高了我的动手能力。每天在实验室除了安装元器件,还可以上机编程,使我软件调试知识也提高了。

最后,我要感谢在课设过程中老师们和同学们给予我的无私帮助,使我能够快速顺利地完成本次课程设计所要求的各项任务。

19

沈阳航空航天大学课程设计说明书 参考文献

参考文献

[1] 安岩.自动循迹智能小车的设计. 苏州科技学院学报(工程技术版),2010,23(1):72-75.

[2] 高振东等. 直流电机PWM闭环调速系统. 信息空间, 1999. 04.

[3] 李华. MCS-51系列单片机实用接口技术. 北京航空航天大学出版社. 2002.1 [4] 李扬, 张喜验. MCS-51单片机在直流电机闭环调速系统中的应用. 山东科学, 2006.19(5), 92-95.

[5] ST. L298N数据手册[DB/OL]. 2000-7-1/2008-5-9.

[6] 沙占友. 单片机外围电路设计[M]. 北京:电子工业出版社, 2003:21. [7] 泰继荣. 现代直流控制技术及其系统设计[M]. 北京:机械工业出版社,1993:141-145.

[8] 李杰. 51系列单片机输出PWM的两种方法[DB/DL]. 2002-2-14/2008-5-9. [9] 9孙传友. 测控系统原理与设计[M] .北京:北京航空航天大学出版社, 2003:160-166,174.

[10] 王兆安. 电力电子技术[M].北京:机械工业出版社, 2006:150-152. [11] 潘松,黄继业. EDA技术实用教程[M]. 北京:科学出版社, 2003:33.

20

沈阳航空航天大学课程设计说明书 参考文献

附录

1.源程序

#include #include #define uchar unsigned char #define uint unsigned int unsigned char i;

sbit trig = P1^0; //触发信号引脚 sbit echo = P3^2;

sbit PWM1 = P0^1; //pwm信号输出 sbit PWM2 = P0^3; static char click = 0; unsigned char ZK1,ZK2; unsigned int time = 0; unsigned int timer = 0; unsigned long S; bit flag = 0;

void Conut(void) { }

void delay_1(void) //误差 0us

time = TH0*256+TL0; TH0 = 0; TL0 = 0;

S=(time*1.5)/100;

21

沈阳航空航天大学课程设计说明书 参考文献

{

unsigned char a,b; for(b=215;b>0;b--) for(a=45;a>0;a--); }

void Timer2Interrupt() { RCAP2H = 0x0fe; RCAP2L = 0x33;

ET2 = 1; EA = 1; TR2 = 1; }

void zd0() interrupt 1 { flag = 1;

}

void zd3() interrupt 3 { TH1 = 0x0f8; TL1 = 0x30; timer++; if(timer>=200) {

timer = 0;

// 允许T2定时器中断 // 打开总中断 // 启动T2定时器

//T0中断

//T1中断用来计800MS启动模块

22