智能小车实训报告.docx
《智能小车实训报告.docx》由会员分享,可在线阅读,更多相关《智能小车实训报告.docx(36页珍藏版)》请在冰豆网上搜索。
智能小车实训报告
智能小车实训报告
班级:
学号:
姓名:
1系统设计要求
●智能小车以控制芯片STC89C51为核心,以L298N为驱动模块,编写PWM程序使得智能小车完成直线行驶,转弯。
1.1智能小车底盘选择
●
●
1.1智能小车电机选择
智能小车套件中的动力驱动部分一般都用电机作为动力,目前常见的智能小车使用的电机是普通电机,带减速的电机,步进电机。
平常我们接触的也以直流电的居多。
电机,是指依据电磁感应定律实现电能转换或传递的一种电磁装置。
它的主要作用是产生驱动转矩,作为用电器或各种机械的动力源。
俗称“马达”。
●普通直流电机
普通直流电机是我们平时见得最多的电机,电动玩具,刮胡刀等里面都有。
一般只有两个引脚,用电池的正负极接上两个引脚就会转起来,这种电机有转速过快,扭力过小的特点,一般不直接用在智能小车上,在用得配置减速器才行。
●带减速的电机
带减速的电机就是普通电机加上了减速箱,这样便降低了转速,增加了扭力,使得普通电机有的更广泛的使用空间。
带减速的电机由于降低了转速,增加了扭力,被大多数智能小车套件中列为智能小车动力标配,这种电机的控制一般都用H桥方案,用L298芯片组成的电路进行控制,能实现PWM的调速,控制上采用单片机进行PWM调速控制,PWM控制可以方便的控制小车整体速度。
●步进电机
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机一般用在控制精准的智能小车或机器人士,相对成本高,一些简单的智能小车上运用较少。
1.3智能小车电源选择
可充电电池是智能小车的能源供给,常见用于智能小车的电池类型及特点如下表:
可充电电池按化学组成分类,有铅酸、镍镉、镍氢、锂离子、锂聚合物等不同类型,其主要指标为电压、容量等。
然而在选择可充电电池时,除考虑电压和容量,还应根据应用着重考虑电池的放电能力。
电池放电能力习惯上以C为单位进行评价,C即电池容量。
如一个标称容量为2000mAh,放电能力为10C,其最大放电电流可达到10*2000mA=20A。
智能车竞速的特点要求充电电池要有大容量、高放电能力的特点。
1.4智能小车单片机选择
STC单片机(
STC公司的单片机主要是基于8051内核,是新一代增强型单片机,指令代码完全兼容传统8051,速度快8~12倍,带ADC,4路PWM,双串口,有全球唯一ID号,加密性好,抗干扰强。
PIC单片机()
它是MICROCHIP公司的产品,其突出的特点是体积小、功耗低、精简指令集、抗干扰性好、可靠性高、有较强的模拟接口、代码保密性好,大部分芯片有其兼容的FLASH程序存储器的芯片。
ATMEL单片机()
ATMEL一共有三个系列的单片机AT89AT90AT91.AT89是以51内核为标准的单片机。
它是改进型的51单片机。
比如说标准的8051单片机没有20PIN封装的芯片。
但是AT89C2051AT89C4051都是20PIN封装的单片机。
它主要是把原51单片机的P0口和P2口省略了,然后再改进了一些功能。
可以认为它们是精简型51单片机,比较适合初学者学习。
AT89有许多型号。
比如AT89C51AT89S51AT89C52AT89S52AT89S8252(后面几款其实是8052单片机,但是和AT89的指令系统兼容的,只是增加了一些功能而已,也可以认为是51系列的单片机)。
对于AT89系列单片机都是FLASH型单片机,烧录次数至少在1000次以上(数据手册提供,实际估计要在4000以上了)只要芯片上带有“S”字样的单片机都可以支持ISP(在线烧录)。
AT89系列单片机主要对应的是AVR单片机(这是ATMEL的最主要的单片机了)。
AVR分成三挡。
ATTINY系列,AT89系列,AT90系列,ATMEGA系列。
分别对应AVR中的低档,中档和高档单片机。
现在有的AT90系列单片机已经转型给了ATTINY系列和ATMEGA系列了。
所以得AVR单片机都支持ISP。
而且AVR单片机是一款RISC(精简指令)型单片机。
51单片机是CISC(集中指令)型单片机。
AVR单片机的功能远远强于51.AT90系列单片机主要对应的是高端的32位ARM单片机。
一般采用ARM7内核,ARM是现在嵌入式系统32位里主流单片机。
PHILIPS单片机
PHILIPS公司的单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求。
TI公司()
德州仪器提供了TMS370和MSP430两大系列通用单片机TMS370系列单片机是8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合;MSP430系列单片机是一种超低能耗、功能集成度较高的16位低功耗单片机,特别适合于要求功耗低的场合。
1.5智能小车电动机驱动选择
电机属于大功率器件,而单片机的I/O口所提供的电流有限,怎样驱动电机?
智能小车在行进的过程中要实现转向。
如何实现?
如何控制小车的行进速度?
上面三个问题是电机控制中必须要考虑的问题,可以通过硬件的方法实现,也可以通过软件的方法实现,当然也可以采取硬软结合的方法解决。
目前比较通用的方法是,设计H桥电路和利用单片机产生PWM波信号。
1)H桥电路
2)驱动芯片选择依据(L298N,BST7970,MC33886)
市面上的专用驱动芯片很多,选择的依据是:
驱动效率,驱动电路最好不消耗或少消耗能量
驱动电流,电机的电流可以达到4-5A,而L298N最大承受的电流不能超过2A
芯片的价格
3)L298N
ST公司生产的一种高电压,大电流的电机驱动芯片。
该芯片采用15脚封装。
主要特点是:
工作电压高,最高工作电压可达46V,输出电流大,瞬间峰值可达3A,持续工作电流为2A;额定功率为25W。
内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电机和步进电机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个控制端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,讲变化量反馈给控制电路。
使用L298N芯片驱动电机,该芯片可以驱动一台量相步进电机和四相步进电机,也可以两台直流电机。
模块名称
双H桥电机驱动模块
工作形式
H桥驱动(双路)
主控芯片
L298N
包装形式
9个盒装出货
逻辑电压
5V
驱动电压
5V-35V
逻辑电流
0mA-36mA
驱动电流
2A(MAX单桥)
存储温度
-20℃到+135℃
最大功率
25W
重量
30g
外围尺寸
43*43*27mm
产品特点:
本模块使用ST公司的L298N作为主驱动芯片,具有驱动能力强,发热量低,抗干扰能力强的特点。
本模块可以使用内置的78M05通过驱动电源部分去电工作,但是为了避免文雅芯片损坏,当使用大于12V驱动电压的时候,请使用外置的5V逻辑供电。
本模块使用大容量滤波电容,续流保护二极管,可以提高可靠性。
本模块集成了一个内置的5V供电。
当你的驱动电压为7V-35V的时候,可以使用能板载的5V逻辑供电,当使用板载5V供电之后,借口中的+5V供电不要输入电压,但是可以引出5V电压供外部使用。
当ENA使能IN1IN2控制OUT1OUT2
当ENB使能IN3IN4控制OUT3OUT4
由于本模块是2路的H桥驱动,所以可以同时驱动两个电机,接法如图所示
使能ENAENB之后
可以分别从IN1IN2输入PWM信号驱动电机1的转速和方向
可以分为从IN3IN4输入PWM信号驱动电机2的转速和方向
信号如图所示
4)BTS7960
BTS7960是半桥驱动芯片,就是说需要2个芯片来驱动一个电机,电流最高43A,其内阻很小。
5)MC33886
MC33886是全桥的电机驱动芯片,电流最高5A,发热量较大。
1.6智能小车传感器选择
1>红外传感器:
该传感器的检测距离2~30cm,检测角度35°。
探测距离可以通过电位器调节,具有干扰小,便于装配,使用方便等特点,可以管广泛应用于机器人避障,避障小车及黑白线循迹等众多场合。
2>超声波传感器:
超声波测距离传感器,采用超声波回波测距原理,运用精确的时差测量技术,检测传感器与目标物之间的距离。
超声波测距离传感器,具有测量准确,无接触,防水,防腐蚀,低成本等优点。
3>加速度传感器:
加速度传感器是一种能够测量加速力的电子设备。
加速度传感器可以检测上下左右的倾角的变化,再通过其他的设备来实现物体的前后左右的方向的控制。
4>碰撞开关:
5>霍尔传感器:
霍尔电压随磁场强度的变化而变化,磁场越强,电压越高,磁场越弱,电压越低。
霍尔电压值很小,通常只有几个毫伏,但经集成电路中的放大器放大,就能使该电压放大到足以输出较强的信号。
6>视觉传感器:
视觉传感器是整个机器视觉系统信息的直接来源,主要有一个或者两个图形传感器组成,有时候还要配以关投射器及其他辅助设备。
视觉传感器的组要功能是获取足够的机器视觉系统要处理的最原始图像。
图像传感器可以使用激光扫描器,线阵和面阵CCD摄像机或者TV摄像机,也可以是最新出现的数字摄像机等。
1.7考核内容
(一)
1.LED灯
2.智能小车硬件电路设计
2.1智能小车结构框架图
2.2STC89C52控制模块
STC89C51RC/RD+系列单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,指令代码完全兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择。
其特点如下:
●增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.[1]
●工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
●工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
●用户应用程序空间为8K字节
●片上集成512字节RAM
●通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
●ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
●具有EEPROM功能
●共3个16位定时器/计数器。
即定时器T0、T1、T2
●外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒
●通用异步串行口(UART),还可用定时器软件实现多个UART
●工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
●PDIP封装
下表是STC89C51RC/RD+系列单片机选型一览表:
下图是STC8051的内部结构图:
下图是STC89系列单片机命名规则:
2.3智能小车驱动模块
2.3.1L298N介绍
L298是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片的主要特点是:
工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器、线圈等感性负载;采用标准TTL逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
2.3.2L298N引脚封装
L298N引脚:
L298N引脚功能表:
2.3.3L298N内部结构
2.3.4L298N电路连接
3.系统软件设计
3.1驱动及程序下载方法
1)连接方法
2)驱动安装
3)程序编写
安装软件如下,一个keil安装程序,一个注册机。
4)程序下载
双击sti-isp程序下载软件文件夹STC_ISP_V479
3.2考核内容
(二)
按照3.1的实验步骤,编写程序,控制LED灯按一定规律亮,并将程序下载到板子上,显示结果(每名同学都做)。
LED灯闪烁规律:
●LED灯从左向右依次单个亮(跑马灯)
●LED灯从右向左依次单个亮
●8个LED灯同时亮同时灭
●LED灯从左向右亮(水滴灯)
●LED灯从右向左亮
●LED灯从两边向中间亮(水滴)
●LED灯从中间向两边亮
3.3智能小车方向调整及程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitIN1=P0^0;
sbitIN2=P0^1;
sbitIN3=P0^2;
sbitIN4=P0^3;
sbitENA=P0^5;
sbitENB=P0^6;
uintMA=0,MB=0;
uintSpeedA=100;
uintSpeedB=100;
voiddelay(uintz){
uintx,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
voidmain(void)
{
delay(1000);
delay(1000);
IN1=1;
IN2=0;
IN3=1;
IN4=0;
TH0=0x3C;
TL0=0xB0;
TH1=0x3C;
TL1=0xB0;
TMOD=0x11;
TR0=1;
TR1=1;
ET0=1;
ET1=1;
EA=1;
while
(1){}
}
voidtime0_int()interrupt1using1
{
TR0=0;
TH0=0x3C;
TL0=0xB0;
MA++;
if(MAENA=1;
}
elseENA=0;
if(MA==200){
MA=0;
}
TR0=1;
}
voidtime1_int()interrupt3using1
{
TR1=0;
TH1=0x3C;
TL1=0xB0;
MB=MB+1;
if(MB{
ENB=1;
}
elseENB=0;
if(MB==200){
MB=0;
}
TR1=1;
}
}
#include
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharzkb1;
unsignedcharzkb2;
unsignedchart=0;
sbitLSEN=P1^0;//传感器
sbitMSEN=P1^1;
sbitRSEN=P1^2;
sbitIN1=P0^0;//L1R1L2R2
sbitIN2=P0^1;
sbitIN3=P0^2;
sbitIN4=P0^3;
sbitENA=P0^5;
sbitENB=P0^6;
voidinit()//初始化定时器,中断
{
TMOD=0X01;
TH0=(65536-100)/256;//定时100us高八位的值
TL0=(65536-100)%256;//定时100us低八位的值
EA=1;
ET0=1;
TR0=1;
}
voidtimer0()interrupt1//中断函数+脉宽调制
{
if(tENA=1;
else
ENA=0;
if(tENB=1;
else
ENB=0;
t++;
if(t>=20)//周期100us*20
t=0;
}
voidqianjin()//直行
{
zkb1=5;
zkb2=5;
}
voidturn_left()//左转函数
{
zkb1=5;
zkb2=1;
}
voidturn_right()//右转函数
{
zkb1=1;
zkb2=5;
}
voidxunji()//循迹函数
{
ucharflag;
if((LSEN==0)&&(MSEN==1)&&(RSEN==0))
{flag=0;}//直行
else
if((LSEN==1)&&(MSEN==0)&&(RSEN==0))
{flag=1;}//右偏左转
else
if((LSEN==0)&&(MSEN==0)&&(RSEN==1))
{flag=2;}//左偏右转
switch(flag)
{
case0:
qianjin();
break;
case1:
turn_left();
break;
case2:
turn_right();
break;
default:
break;
}
}
voidmain()
{
init();
zkb1=10;
zkb2=10;
while
(1)
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
ENA=1;
ENB=1;//启动
while
(1)
{
xunji();
}
}
}