基于单片机89c51循迹小车原理与程序分解Word文件下载.docx
- 文档编号:15179196
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:14
- 大小:429.12KB
基于单片机89c51循迹小车原理与程序分解Word文件下载.docx
《基于单片机89c51循迹小车原理与程序分解Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机89c51循迹小车原理与程序分解Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
传感器模块将当前采集到的一组电压值传递给单片机,进而根据一定得算法对舵机进行控制,使小车自动寻线行走。
单片机模块是智能车的核心部分,主要完成对外围各个模块的管理,实现对外围模块的信号发送,以及对传感器模块的信号采集,并根据软件算法对所采集的信号进行处理,发送信号给执行模块进行任务执行,还对各种突发事件进行监控和处理,保证整个系统的正常运作。
电机驱动采用L293驱动芯片,该芯片支持2路电机驱动同时支持PWM调速
3-2赛道检测原理图
3.3电机驱动采用L293驱动芯片,该芯片支持2路电机驱动同时支持PWM调速
L293驱动
3.3电源电路设计
模型车通过自身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。
在本设计中,51单片机使用5V电源,电机使用6V电源。
考虑到电源为充电电池组,额定电压为7.2V,实际充满电后电压则为6.5-6.8V,所以单片机及传感器模块采用LM1117-5稳压后的5V电源供电,电机直接由电池供电。
**********************************
*程序说明:
本附录:
源程序主代码
****************************************/
#include"
reg52.h"
#defineuintunsignedint
#defineucharunsignedchar
sbitK1=P2^0;
sbitK2=P2^1;
sbitK3=P2^2;
sbitK4=P2^3;
sbitLED1=P1^0;
sbitLED2=P1^1;
sbitLED3=P1^2;
sbitLED4=P1^3;
sbitPWM1=P3^2;
sbitPWM2=P3^3;
ucharPWM1_Cycle=0,PWM2_Cycle=0;
//PWM占空比
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voidPWM_Init()
TMOD=0x11;
TH0=(65535-100)/256;
//定时5us
TL0=(65535-100)%256;
TH1=(65535-100)/256;
//定时10us
TL1=(65535-100)%256;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
EA=1;
//开中断
/**********************************************************************
*函数功能:
小车前进
*时间:
2013、3、29
**********************************************************************/
voidAdvance()
P0=0x50;
小车后退
voidRetreat()
P0=0xa0;
小车左转
voidTurn_left1()
P0=0x10;
delay(500);
P0=0;
小车右转
voidTurn_right1()
P0=0x40;
voidmain()
PWM_Init();
PWM1_Cycle=30;
//初始速度,可改变其大小是速度使变化
while
(1)
if(K1==1)
{
Turn_right1();
}
elseif(K2==1)
Advance();
elseif(K4==1)
Turn_left1();
else
Advance();
/*************************************************************************
产生占空比可调的PWM波
*参数:
PWM1_Cycle
**************************************************************************/
voidPWM1_Produce()interrupt1
{
staticunsignedintt1;
//tt用来保存当前时间在一秒中的比例位置
t1++;
//定时100us
if(t1==100)
t1=0;
PWM1=1;
if(PWM1_Cycle==t1)
PWM1=0;
}
voidPWM2_Produce()interrupt3
staticunsignedintt2;
t2++;
if(t2==100)
t2=0;
PWM2=1;
if(PWM2_Cycle==t2)
PWM2=0;
元件清单
附录:
#include<
reg52.h>
intrins.h>
math.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineMIDDLE1390 //舵机中心位置
#defineLEFT1600
#defineRIGHT1000
#defineT20000
#defineHIGH7300//电机基准速度
sbitrudder=P1^0;
//定义舵机PWM波输出端口为P1.0口
sbitpulse=P1^1;
//定义后轮PWM波输出端口为P1.1口
charflag1=0,flag2=0;
//定义全局变量(flag1用于控制舵机//PWM标志位,flag2用于控制电机PWM)
uintb=0,a=0;
//b用来装载电机所需的高电平时间,a用于保存电机所需高电平时间
voidmain()
ucharreceive,ek[4]={7,7,7,7};
uintpidr=0;
uintpidlr=0;
uintppid=0;
IE=0x8a;
TMOD=0x11;
TH0=0x00;
TL0=0x00;
TR0=1;
TH1=0x00;
TL1=0x00;
TR1=1;
while
(1)
{receive=P2;
//采集光电传感器的值
/*--------------switch----------------*/
switch(receive)//根据采集到的值进行判断
case0x7f:
ek[3]=0;
break;
//01111111最左边(或右边)1个光电传感器检测到黑线
case0x3f:
ek[3]=1;
//00111111最左边(或右边)2个光电传感器检测到黑线
case0xbf:
ek[3]=2;
//10111111依次类推
case0x9f:
ek[3]=3;
//10011111
case0xdf:
ek[3]=4;
//11011111
case0xcf:
ek[3]=5;
//11001111
case0xef:
ek[3]=6;
//11101111
case0xe7:
ek[3]=7;
//11100111
case0xf7:
ek[3]=8;
//11110111
case0xf3:
ek[3]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 89 c51 小车 原理 程序 分解
![提示](https://static.bdocx.com/images/bang_tan.gif)