单片机实训报告.docx
- 文档编号:8169526
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:13
- 大小:240.49KB
单片机实训报告.docx
《单片机实训报告.docx》由会员分享,可在线阅读,更多相关《单片机实训报告.docx(13页珍藏版)》请在冰豆网上搜索。
单片机实训报告
一、设计任务。
1、智能小车:
用STC89C52(单片机)设计一个智能小车。
2、设计目的:
1)、熟悉MCS-51系列单片机的组成结构。
2)、掌握MCS-51系列单片机的指令系统及编程方法。
3)、掌握MCS-51系列单片机的中断系统和定时/计数器的使用。
4)、掌握MCS-51系列单片机的LED数码管显示控制和键盘输入检测等接口技术。
5)、掌握PWM直流电机驱动技术。
6)、掌握小车红外循迹、避障碍等技术。
二、设计要求:
本小车以STC89C52单片机为核心,完成寻迹、避障、光源检测和车速测量等功能。
在机械结构上,对普通的小车进行了改造,即用一个万向轮来代替两个前轮,是小车的转向更加灵敏。
采用PWM驱动芯片控制电机,红外传感器检测白线、障碍物以及用来测量速度,光敏器件检测光强。
基于可靠的硬件设计和稳定的软件算法,基本实现题目要求。
具有一定的实用性。
三、系统框图:
四、软件算法:
五、硬件单元电路:
本系统以STC89C52为控制核心,最小系统如下:
5.1主控制模块
STC89C52是一种带8K字节闪烁可编程擦出只读存储器的低电压,高性能COMMOS8的微处理器。
该器件采用ATMEL高密度非易失真存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
STC89C52主要完成液晶显示、寻迹、避障、光源检测和车速测量等功能。
5.2.1电机驱动模块1
电机的驱动芯片选用L298N作为驱动芯片。
工作稳定电机驱动信号由单片机提供,信号经过光耦隔离后传至PWM控制芯片L298N,通过L298N的输出引脚与两个电机相连。
L198N的连接方法如下图所示
EnA
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.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电压高,否则有时会出现失控现象。
下表是其使能、输入引脚和输出引脚的逻辑关系(电路按上图连接):
ENA(B)
IN1(IN3)
IN2(IN4)
电机运行情况
H
H
L
正转
H
L
H
反转
H
同IN2(IN4)
同IN1(IN3)
快速停止
L
X
X
停止
5.3寻迹模块
当小车在白色地面行驶时,装在小车下的红外发射管发射红外线信号,经白色反射后,被接收管接受,一旦接收管接收到信号,输输出端将输出低电平,从而实现了通过红外线检测信号的功能。
将检测到的信号传到单片机的I/O口,当I/O口检测到的信号为高电平时,表明红外光被地上的黑线吸收了,表明小车正处在黑色的引线上;同理,当I/O口检测到的信号为低电平时,表明小车行驶在白色地面线上。
反射式红外传感器ST188采用高发射功率红外广电二极管和高灵敏度光电晶体管组成。
检测距离可调整范围为4—15mm;采用非接触式检测方式。
当ST188前方为白色时,ST188接收管导通,电阻值减少,输出电压降低,此时比较器同相输入端(3脚)输入电压小,比较器输出为低电平,发光二极管点亮。
如下图所示。
5.4趋光避障模块(选做)
本设计采用光敏电阻检测光源从而达到趋光效果,光敏电阻阻值随光照强度增大而减小,首先在自然光条件下调节R18改变基准电压,使发光二极管点亮。
当光照强度增大,光敏电阻阻值减少,输出电压增加,此时比较器同相输入端(3脚)输入电压大,比较器输出为高电平,发光二极管熄灭,如下图所示
在进行避障时采用了反射式红外传感器ST188,放于小车前部,三个ST188,左右中间各一个,具体算法可以参考前面的算法。
六、程序:
/*晶振为11.0592MHz*/
/*按键1控制速度,按键2控制前进后退和转弯*/
/*程序已成功*/
#include
#defineucharunsignedchar
/************根据实际接线更改I/O口*******************/
#defineENAP1_0
#defineIN1P1_1
#defineIN2P1_2
#defineIN3P1_4
#defineIN4P1_5
#defineENBP1_3
/****************************************************/
#defineLeft_moto_pwmENA
#defineRight_moto_pwmENB
#defineLeft_moto_go{IN1=0,IN2=1;}//当IN1=0,IN2=1;时左电机前进
#defineLeft_moto_back{IN1=1,IN2=0;}//当IN1=1,IN2=0;时左电机后退
#defineRight_moto_go{IN3=0,IN4=1;}//当IN3=0,IN4=1;时右电机前进
#defineRight_moto_back{IN3=1,IN4=0;}//当IN3=1,IN4=0;时右电机后退
#definemoto_go{IN1=0,IN2=1,IN3=0,IN4=1;}//小车前进
#definemoto_back{IN1=1,IN2=0,IN3=1,IN4=0;}//小车后退
#definemoto_pwm_on{ENA=1,ENB=1;}//小车启动
#definemoto_pwm_off{ENA=0,ENB=0;}//小车停止
ucharspeed=35;//设定变量,用于调速
voidtime_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启动
}
voidtime0(void)interrupt1//用于调速
{
TH0=(65536-1844)/256;
TL0=(65536-1844)%256;//T0初始值2ms
speed--;
if(speed<=6)//数值越小,速度越慢
{moto_pwm_on;}
else{moto_pwm_off;}
if(speed==0)
{speed=35;}//数值越小,速度越快
else{}
}
voidtime1(void)interrupt3//用于检测传感器
{
ucharx,y,z;
TH1=(65536-1844)/256;
TL1=(65536-1844)%256;//T1定时1ms用于检测传感器
P2=0xff;//用前先置1
if(P2_6==1)//前方无障碍物直走
{
moto_go;
x=0,y=0,z=0;
}
else{}
if(P2_5==0)//左边有障碍物
{
Right_moto_go;
Left_moto_back;//右转
x++;
}
else{}
if(P2_7==0)//右边有障碍物
{
Left_moto_go;
Right_moto_back;//左转
z++;
}
else{}
if(P2_6==0)
{
Right_moto_go;
Left_moto_back;//右转
y++;
}
else{}
if(P2_6==0)
{
if(P2_5==0)
{
if(P2_7==0)//三边都有障碍物
{
Left_moto_go;
Right_moto_back;//左转
}
else{}
}
else{}
}
else{}
if(P2_6==0)
{
if(P2_5==0)//左边和右边都有障碍物
{
Right_moto_go;
Left_moto_back;//右转
}
else{}
}
else{}
if(P2_6==0)
{
if(P2_7==0)
{
Left_moto_go;
Right_moto_back;//左转
}
else{}
}
else{}
if(x>=8&&y>=8)
{
Left_moto_go;
Right_moto_back;//左转
}
if(z>=8&&y>=8)
{
Right_moto_go;
Left_moto_back;//右转
}
}
voidmain(void)
{
time_hai();
moto_go;
while
(1)
{}
}
7、故障分析与改进:
故障:
1、小车走迷宫时速度太快
2、小车在走迷宫时左右摆动太大
3、小车走迷宫时感应探头感应不到信号
分析改进:
1、设计程序时,设计速度的时候没有把电机转速调低。
修改程序,降低电机转速
2、左右太大,是探头感应的时候检测不到合适的距离,需要调整探头感应距离。
3、探头感应距离大了,以至于感应不到信号。
调整探头感应距离。
八、心得体会:
这次实训,我们所做的智能小车使我们系统的学习了51系列单片机的工作原理及其使用方法。
实训是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。
随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域。
在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
从理论到实践,在整整两星期的日子里,学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次实训,使我更加扎实的掌握了有关单片机方面的知识,在实训过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我们在这方面的知识欠缺和经验不足。
通过实训,理论知识与实际得到结合,使我们得到了一个实践所学知识的机会,为今后的就业打下了一定的基础。
附图:
迷宫1
附图3:
迷宫2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)