寻线机器人Word格式文档下载.docx
- 文档编号:16729984
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:23
- 大小:225.78KB
寻线机器人Word格式文档下载.docx
《寻线机器人Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《寻线机器人Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
STC12C5A16S2单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代增强型单片机,指令代码完全兼容传统的8051,但速度快8-12倍。
如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。
它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。
但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。
内部集成MAX810专用集成电路,针对电机控制、强干扰场合。
40引脚双列直插封装(DIP)形式,内部由CPU,8KB的ROM,1280B的RAM,2个16b的定时/计数器TO和T1,4个8B的I/O端I:
IP0,P1,P2,P3,2路PWM,8路10位A/D以及全双功串行通信口等组成。
使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。
图2.0
电机控制部分
电机的控制部分采用直流H桥集成功放电路直流H桥功放电路是用于控制直流电机双向运动的基本电路,该电路使电机在单电源供电下可以双向运转。
该控制模块主要采用L298N驱动芯片,该芯片内部集成有两个桥式电路所组成的电机驱动电路,是驱动二相和四相步进电机的专用芯片,我们利用它内部的桥式电路来驱动直流电机。
L298N驱动芯片的内部结构如图2.1所示。
图2.1
每一组PWM波用来控制一个电机的速度。
每一组PWM波用来控制一个电机的速度,而另外两个I/O口可以控制电机的正反转,控制比较简单,电路也很简单,一个芯片内包含有8个功率管,这样简化了电路的复杂性,如图2.2所示IN1、IN2控制第一个电机的方向,ENA输入的PWM控制第一个电机的速度;
IN3、IN4控制第二个电机的方向,ENB输入的PWM控制第二个电机的速度。
电机采用两个直流电机,工作电压高于5V,左右各一个电机,控制小车的转向。
并用TLP521-2光耦把该模块和主控制器隔离,避免了干扰。
图2.2
寻线控制模块
寻线模块主要用了TCRT5000反射式红外发射-接收器,由红外发射头和光敏三极管组成。
电路原理如图2.4所示直接用直流电压对发射管进行供电。
由于黑色物体和白色物体的反射系数不同,调节红外对管和北侧物体的距离,使光敏三极管只能接收到白色物体反射回来的光束。
而对于黑色物体,由于反射系数小,几乎所有的光线都会被黑色物体吸收,所反射回来的光束很弱,则光敏三极管将无法接收到足够的反射光。
当检测物为黑色时,红外对管发射的光几乎被黑色物体吸收,光敏三极管没有接收到足够的光线将无法导通,则TCRT5000输出为高电平,并将信号送到比较器中进行比较,则比较器输出高电平,发光二极管不亮,最后OUT输出为高电平;
当检测为白色物体时,红外对管发射的光束被反射回来,光敏三极管接收到足够光束而导通,则TCRT5000输出为低电平,并送到比较器中进行比较,比较器输出低电平,发光二极管亮,最后输出低电平。
图2.4
里程计算电路
计里程模块主要采用对射式红外传感器。
原理与电路图和寻线时用的电路图一样。
安装时在小车传动齿轮上刻出四个孔,并在齿轮两侧固定相对的红外发射、接收器件。
在过孔处接收器可以接收到信号。
从而轮子转动时可以产生连续脉冲信号,通过对脉冲的计数,可以计算出小车轮子运行圈数,只要用尺子测出轮子的周长,则可计算出小车运行的路程。
智能小车的着轮直径为Φ=3.5cm,则周长L=Φπ=11.0cm,大齿轮与小齿轮组的比值为1:
2,传感器检测小齿轮的转的圈数N。
则用单片机可以计算出小车行驶的路程S=11N/8cm,并在液晶上显示出来。
.金属探测电路
金属探测部分电路主要是利用电感与电容组成的震荡电路,震荡器即是由缠绕在铁氧体磁芯上的线圈构成的LC震荡电路。
震荡器通过传感器的感应面,在其前方产生一个高频交变的电磁场。
当外界的金属性导电物体接近这一磁场,并到达感应区时,在金属物体内产生涡流效应,从而导致LC震荡电路震荡减弱,振幅变小,即称之为阻尼现象。
这一震荡的变化,即被开关的后置电路放大处理并转换为一确定的输出信号,触发开关并驱动控制器件,从而做非接触式目标检测。
电路原理如图2.5所示。
工作原理:
反相器集成ICA与外围的电感和电容构成了一个电容三点式振荡器,振荡频率主要由电感L,电容器C16、C13、C15决定。
调节电位器R13可使电路处在刚刚起振状态下。
微小的振荡信号通过由ICB和R31组成的放大电路进行放大。
再经二极管VD整流,电容器C14滤波,最后经过反相器ICC和ICD进行放大和整形。
在ICD和ICE的输出端得到两路反相的输出信号。
在金属探测器的探头电感L没有接近金属物体时,电路正常起振,振荡信号通过反相器ICB放大及整流滤波,在反相器ICC的输入端形成一个负电压,使ICC的输出端为高电平,反相器ICD的输出端为低电平,ICE的输出端为高电平,发光二极管发光,有利于控制器拾取该信号。
当有金属物体接近时,电感L的Q值下降,使电路停振。
由于反相器ICC的输入端通过电阻R33上拉到Vcc,所以ICC的输出端为低电平,ICD、ICE输出端分别为高电平和低电平,发光二极管不发光。
此电路的特点是:
使用六个反相器,用一片CD4069就能满足需求,电路简单。
功耗低,没有磨损,探测高度达到10mm,不会产生误动作;
无接触,因而可免于保养;
使用低电压5V输入,则输出为高低电平,可直接供单片机使用,方便MCU处理控制。
图2.5
.声光报警模块
由于要求小车在规定的地点发出声光报警,则根据需要电路采用了高亮度LED和蜂鸣器,如图2.6所示,当输入高电平时,发光二极管亮,同时NPN三极管导通,蜂鸣器工作;
当输入为低电平时,发光二极管熄灭,NPN三极管截止,蜂鸣器不工作。
若给该模块通入高低变化的电平,则蜂鸣器将发出“滴,滴……”的声音,则实现报警功能。
图2.6
.显示模块
由于智能小车显示的内容比较多,包括运行时间、状态信息、路程、探测的铁块数目等,若用一般的数码管显示达不到显示的要求,因此采用LCD1602液晶显示。
LCD1602是一种点阵字符型液晶显示模块,显示两行16个字符共32个字符,又可以显示简单的图形。
字符的点阵为5x8,是一种很常用的小型液晶显示模块,以其微功耗、体积小、重量轻、超薄型等诸多其他显示器件所无法比拟的优点,在袖珍仪表和低功耗系统中得到了广泛的运用。
LCD1602外围电路如图2.7所示。
图2.7
四.软件部分
/*****************************************************************
***************本设计使用STC12C5A08S2单片机为主控制器*************
Project:
智能小车
Date:
2009-11-20
Author:
李爽
Company:
重庆工业职业技术学院
Comments:
Chiptype:
STC12C5A08S2L
Programtype:
Thesis
Clockfrequency:
11.0592MHz
Memorymodel:
8K
ExternalSRAMsize:
0
Cyclestyle:
1T
DataStacksize:
1280
*****************************************************/
#include<
stc12c5a60s2.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineXUNJIP3&
0xf8
sbitSPEAKER=P2^3;
sbitCCAP00L=P1^3;
sbitCCAP11L=P1^4;
sbitIN1=P1^0;
sbitIN2=P1^1;
sbitIN3=P1^6;
sbitIN4=P1^7;
sbitRS=P2^7;
sbitRW=P2^6;
sbitEN=P2^5;
sbitRUN=P2^4;
sbitSTOP=P2^2;
sbitNUM=P2^1;
/*************************全局变量声明*************************
***************************************************************/
uchardisbuf[]={0,0,0,0,0,0,0,0,0,0};
ucharcodelcd1602_data[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,
0x37,0x38,0x39,0x3a};
//lcd1602显示代码
ucharcount=0,counts=0;
ucharseconds=0,minutes=0;
uintsum=0,sum1=0;
//定义计里程字符变量
ucharnum=0;
//定义探测的铁块数目变量
ucharcount1=0,count2=0;
ucharx1,x2;
/*************************************************************/
/***********************函数声明******************************/
voidXUNJI_RUN();
voidNUM_RUN();
voidSTOP_RUN();
voidFRONT_RUN();
voidBACK_RUN();
voidLEFT_RUN();
voidRIGHT_RUN();
voidCIRCLE_RUN();
voidSPEED_RUN(ucharm,ucharn);
voidlcd1602_display1(ucharstring[],ucharm,ucharn);
//lcd1602显示字符串函数
voidlcd1602_display2(ucharx,uchary,ucharz);
//lcd1602显示数字变量函数
/**************************************************************/
voiddelay5ms(uintx)//延时5ms函数
{
unsignedchara,b;
while(x--)
{
for(b=15;
b>
0;
b--)
for(a=152;
a>
a--);
}
}
voidshort_delay(uintx)//延时20us函数
unsignedchara,b,c;
for(b=1;
for(a=10;
a--)
for(c=x;
c>
c--);
/****检测金属传感器计算探测金属的数目*****
*****************NUM_RUN()****************/
voidNUM_RUN()
{
uchari=100;
if(NUM==0)//判断是否NUM=0
{
short_delay(100);
if(NUM==0)
{
num++;
disbuf[9]=num/10;
disbuf[8]=num%10;
TR0=0;
STOP_RUN();
lcd1602_display1("
STOP!
"
0,10);
while(i--)//启动报警并延时5s=5000ms
{
STOP=1;
SPEAKER=~SPEAKER;
delay5ms(10);
//延时50ms
}
FRONT_RUN();
//5S停止后启动运行
SPEED_RUN(15,15);
TR0=1;
delay5ms(200);
}
/************lcd1602显示模块**************
*************lcd160_display***************/
voidwritecommand(uchardictate)//写指令到LCD_1602
short_delay(50);
EN=1;
RS=0;
RW=0;
P0=dictate;
EN=0;
voidwritedata(ucharddata)//写数据到lcd1602
RS=1;
P0=ddata;
voidINIT_LCD1602()//初始化lcd1602函数
writecommand(0x38);
_nop_();
writecommand(0x06);
writecommand(0x0c);
writecommand(0x01);
voidlcd1602_display1(ucharstring[],ucharm,ucharn)//lcd1602显示字符串函数
uchara;
writecommand(0x40*m+0x80+n);
while(string[a]!
='
\0'
)
writedata(string[a]);
a++;
}
a=0;
voidlcd1602_display2(ucharx,uchary,ucharz)//lcd1602显示数字变量函数
writecommand(0xc0+x);
//探测到的铁块数目显示
writedata(lcd1602_data[disbuf[9]]);
writedata(lcd1602_data[disbuf[8]]);
writecommand(0xc0+y);
//计里程显示
writedata(lcd1602_data[disbuf[7]]);
writedata(lcd1602_data[disbuf[6]]);
writedata(lcd1602_data[disbuf[5]]);
writecommand(0x80+z);
//运行时间显示
writedata(lcd1602_data[disbuf[4]]);
writedata(lcd1602_data[disbuf[3]]);
writedata(lcd1602_data[10]);
writedata(lcd1602_data[disbuf[1]]);
writedata(lcd1602_data[disbuf[0]]);
/*******************电机方向控制函数***********************
*********************f0为左PWM频率*************************
*********************f1为右PWM频率*************************/
voidSTOP_RUN()//停止函数
IN1=0;
IN2=0;
IN3=0;
IN4=0;
STOP=1;
RUN=0;
voidFRONT_RUN()//f0=f1;
前进函数;
f0>
f1则为右转;
f0<
f1则为左转
IN1=1;
IN3=1;
STOP=0;
RUN=1;
voidBACK_RUN()//后退函数
IN2=1;
IN4=1;
lcd1602_display1("
BACK!
voidLEFT_RUN()//左急转调整函数
LADJ"
voidRIGHT_RUN()//右急转调整函数
RADJ"
voidCIRCLE_RUN()//原地打转函数寻线
CIRCLE!
"
/*********************速度控制函数********************
***********************SPEED-RUN()********************/
voidSPEED_RUN(ucharm,ucharn)//调节PWM的频率,从而控制电机运行速度
x1=m;
x2=n;
/*********************寻线控制函数**********************
***********************XUNJI_RUN()**********************/
voidXUNJI_RUN()//寻线函数
switch(XUNJI)
case0x00:
STOP_RUN();
//停止
delay5ms(50);
//延时防止误动作
TR1=0;
TR0=0;
P1=0x00;
while
(1)
{
STOP=1;
RUN=0;
break;
case0x70:
FRONT_RUN();
//前进f0=f1时为前进
SPEED_RUN(85,80);
lcd1602_display1("
FRONT!
case0x20:
case0x40:
//左
SPEED_RUN(90,80);
case0x10:
//右
SPEED_RUN(80,90);
case0x60:
//左转
//f0<
SPEED_RUN(90,70);
LEFT!
case0x30:
//右转
//f0>
f1则为右转
SPEED_RUN(70,90);
RIGHT!
case0xe0:
//左快转
STOP_RUN();
LEFT_RUN();
delay5ms(100);
SPEED_RUN(60,90);
case0xc0:
STOP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器人