1、单片机实训报告一、设计任务。1、智能小车:用STC89C52(单片机)设计一个智能小车。2、设计目的: 1)、熟悉MCS-51系列单片机的组成结构。 2)、掌握MCS-51系列单片机的指令系统及编程方法。 3)、掌握MCS-51系列单片机的中断系统和定时/计数器的使用。 4)、掌握MCS-51系列单片机的LED数码管显示控制和键盘输入检测等接口技术。 5)、掌握PWM直流电机驱动技术。 6)、掌握小车红外循迹、避障碍等技术。二、设计要求:本小车以STC89C52单片机为核心,完成寻迹、避障、光源检测和车速测量等功能。在机械结构上,对普通的小车进行了改造,即用一个万向轮来代替两个前轮,是小车的转
2、向更加灵敏。采用PWM驱动芯片控制电机,红外传感器检测白线、障碍物以及用来测量速度,光敏器件检测光强。基于可靠的硬件设计和稳定的软件算法,基本实现题目要求。具有一定的实用性。三、系统框图: 四、软件算法:五、硬件单元电路:本系统以STC89C52为控制核心,最小系统如下:5.1 主控制模块STC89C52是一种带8K字节闪烁可编程擦出只读存储器的低电压,高性能COMMOS8的微处理器。该器件采用ATMEL高密度非易失真存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。STC89C52主要完成液晶显示、寻迹、避障、光源检测和车速测量等功能。5.2.1 电机驱动模块1电机的驱动芯
3、片选用L298N作为驱动芯片。工作稳定电机驱动信号由单片机提供,信号经过光耦隔离后传至PWM控制芯片L298N,通过L298N的输出引脚与两个电机相连。L198N的连接方法如下图所示En A IN1 IN2 运转状态0 X X 停止1 1 0 正转1 0 1 反转1 1 1 刹停1 0 0 停止本设计中采用脉宽调制技术(PWM)控制使能端(En),然后改变IN1和IN2的状态实现电机的正转和反转。同时可改变脉宽的占空比来调节电机的转速。PWM波形为周期不变的周期性高低电平信号,占空比为高电平时间除以周期,改变占空比实质上是改变了电动机的驱动电压。下图为10%和50%占空比的PWM信号。5.2.
4、2 电机驱动模块2恒压恒流桥式1A驱动芯片L293内部逻辑框图以及与51单片机连接的电路原理图如下所示: L293是著名的SGS公司的产品,内部包含4通道逻辑驱动电路。其后缀有B、D、E等,除L293E为20脚外,其它均为16引脚。其额定工作电流为1A,最大可达1.5A,Vss电压最小4.5V,最大可达36V;Vs电压最大值也是36V,Vs电压比Vss电压高,否则有时会出现失控现象。下表是其使能、输入引脚和输出引脚的逻辑关系(电路按上图连接):EN A(B)IN1(IN3)IN2(IN4)电机运行情况HHL正转HLH反转H同IN2(IN4)同IN1(IN3)快速停止LXX停止5.3 寻迹模块当
5、小车在白色地面行驶时,装在小车下的红外发射管发射红外线信号,经白色反射后,被接收管接受,一旦接收管接收到信号,输输出端将输出低电平,从而实现了通过红外线检测信号的功能。将检测到的信号传到单片机的I/O口,当I/O口检测到的信号为高电平时,表明红外光被地上的黑线吸收了,表明小车正处在黑色的引线上;同理,当I/O口检测到的信号为低电平时,表明小车行驶在白色地面线上。反射式红外传感器ST188采用高发射功率红外广电二极管和高灵敏度光电晶体管组成。检测距离可调整范围为415mm;采用非接触式检测方式。当ST188前方为白色时,ST188接收管导通,电阻值减少,输出电压降低,此时比较器同相输入端(3脚)
6、输入电压小,比较器输出为低电平,发光二极管点亮。如下图所示。5.4 趋光避障模块(选做)本设计采用光敏电阻检测光源从而达到趋光效果,光敏电阻阻值随光照强度增大而减小,首先在自然光条件下调节R18改变基准电压,使发光二极管点亮。当光照强度增大,光敏电阻阻值减少,输出电压增加,此时比较器同相输入端(3脚)输入电压大,比较器输出为高电平,发光二极管熄灭,如下图所示在进行避障时采用了反射式红外传感器ST188,放于小车前部,三个ST188,左右中间各一个,具体算法可以参考前面的算法。 六、程序: /*晶振为11.0592MHz*/*按键1控制速度,按键2控制前进后退和转弯*/*程序已成功*/#incl
7、ude #define uchar unsigned char/*根据实际接线更改I/O口*/#define ENA P1_0#define IN1 P1_1#define IN2 P1_2#define IN3 P1_4#define IN4 P1_5#define ENB P1_3/*/#define Left_moto_pwm ENA#define Right_moto_pwm ENB#define Left_moto_go IN1=0,IN2=1; /当 IN1=0,IN2=1; 时左电机前进#define Left_moto_back IN1=1,IN2=0; /当 IN1=1,IN
8、2=0; 时左电机后退 #define Right_moto_go IN3=0,IN4=1; /当 IN3=0,IN4=1; 时右电机前进#define Right_moto_back IN3=1,IN4=0; /当 IN3=1,IN4=0; 时右电机后退#define moto_go IN1=0,IN2=1,IN3=0,IN4=1; /小车前进#define moto_back IN1=1,IN2=0,IN3=1,IN4=0; /小车后退#define moto_pwm_on ENA=1,ENB=1; /小车启动#define moto_pwm_off ENA=0,ENB=0; /小车停止u
9、char speed=35; /设定变量,用于调速void time_hai(void) EA=1; /总中断允许 TMOD=0x11; /00010001 TH1=(65536-1844)/256; TL1=(65536-1844)%256; /T1定时1ms 用于检测传感器 TH0=(65536-1844)/256; TL0=(65536-1844)%256; /T0定时2ms 用于调速 PT1=1; /T1定时器优先 ET1=1; /T1中断允许 ET0=1; /T0中断允许 TR0=1; /T0启动 TR1=1; /T1启动void time0(void) interrupt 1 /用
10、于调速 TH0=(65536-1844)/256; TL0=(65536-1844)%256; /T0初始值 2ms speed-; if(speed=8&y=8) Left_moto_go; Right_moto_back; /左转 if(z=8&y=8) Right_moto_go; Left_moto_back; /右转 void main(void) time_hai(); moto_go; while(1) 7、故障分析与改进:故障:1、小车走迷宫时速度太快2、小车在走迷宫时左右摆动太大3、小车走迷宫时感应探头感应不到信号分析改进:1、设计程序时,设计速度的时候没有把电机转速调低。修
11、改程序,降低电机转速2、左右太大,是探头感应的时候检测不到合适的距离,需要调整探头感应距离。3、探头感应距离大了,以至于感应不到信号。调整探头感应距离。八、心得体会:这次实训,我们所做的智能小车使我们系统的学习了51系列单片机的工作原理及其使用方法。实训是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域。在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。从理论到实践,在整整两星期的日子里,学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次实训,使我更加扎实的掌握了有关单片机方面的知识,在实训过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我们在这方面的知识欠缺和经验不足。通过实训,理论知识与实际得到结合,使我们得到了一个实践所学知识的机会,为今后的就业打下了一定的基础。附图:迷宫1附图3:迷宫2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1