第一篇:智能小车的自动寻迹实验
智能小车的自动寻迹实验
【实验目的】 熟悉光敏电阻的性质 熟悉ICCAVR 编译环境
进一步熟悉单片机各端口的特性和作用 能够编写程序,利用光敏电阻的性质对小车进行控制
【实验器材】
小车一辆 导线五根 下载线一根
【实验原理】
(一)光敏电阻
当光照射在物体上,物体内部的原子释放出电子并不逸出物体表面,而仍留在内部,使 物体的电阻率1/R 发生变化的效应称为光电导效应。光敏电阻是一种光电导效应半导体器 件。由于光敏电阻没有极性,工作是可加直流偏压或交流电压。当无光照时,光敏电阻的阻 值(暗电阻)很大,电路中电流很小。当它受到一定波长范围的光照射时,其阻值(亮电阻)
急剧减小,电路中电流迅速增加,用电流表可以测量出电流。
本实验所采用的光敏电阻是硫化镉光敏电阻,下图是硫化镉光敏电阻的光照特
光敏电阻的检测
1. 用黑纸片将光敏电阻的透光窗口遮住,此时万用表的指针基本保持不动,阻值接近无穷 大。此值越大说明光敏电阻性能越好。若此值很小或接近为零,说明光敏电阻已烧穿损
坏,不能再继续使用。
2. 用一光源对准光敏电阻的透光窗口,此时万用表的指针应有较大幅度的摆动,阻值明显 减小。此值越小说明光敏电阻性能越好。若此值很大甚至无穷大,表明光敏电阻内部开
路损坏,也不能再继续使用。
3. 将光敏电阻透光窗口对准入射光线,用小黑纸片在光敏电阻的遮光窗上部晃动,使其间 断受光,此时万用表指针应随黑纸片的晃动而左右摆动。如果万用表指针始终停在某一
位置不随纸片晃动而摆动,说明光敏电阻的光敏材料已经损坏。
(二)Atmega8515的端口特性
由于本实验主要用到I/O输入输出的PA端口,因此主要介绍PA端口的特性。端口 A(PA7..PA0)端口A为8位双向I/O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称 的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外 部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口A处于高阻状态。作为通用数字I/O使用时,所有AVRI/O端口都具有真正的读-修改-写功能。这意味着用 SBI或CBI指令改变某些管脚的方向(或者是端口电平、禁止/使能上拉电阻)时不会无意地改 变其他管脚的方向(或者是端口电平、禁止/使能上拉电阻)。输出缓冲器具有对称的驱动能 力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。
并有保护二极管与VCC和地相连。
每个端口都有三个I/O存储器地址:数据寄存器–PORTx、数据方向寄存器–DDRx和端 口输入引脚–PINx。数据寄存器和数据方向寄存器为读/写寄存器,而端口输入引脚为只读 寄存器。当寄存器SFIOR 的上拉禁止位PUD置位时所有端口的全部引脚的上拉电阻都被禁 止。不论如何配置DDxn,都可以通过读取PINxn寄存器来获得引脚电平。PINxn寄存器的各 个位与其前面的锁存器组成了一个同步器。这样就可以避免在内部时钟状态发生改变的短
时间范围内由于引脚电平变化而造成的信号不稳定。
本实验主要应用PA端口的输入引脚PINA。因此当我们把与光敏电阻的输出电压相连的 五个数据线连接到PA端口时可以通过读取寄存器PINAx来获得光探测装置输出的电平,在 AVR中PA端口的反转电压是2.1V为高电平。即当外部输入电压高于2.1V时,PINAx读取的输 入逻辑电平值为“1”,当外部输入电压低于2.1V时,PINAx读取的输入逻辑电平值为“0”。
根据PINA寄存器放置的五个数据来判断小车的走向。
(三)本实验实现原理
当电路接通电源时,由小车主板的稳压电源电路稳定输出5 伏电压为小车下部的光探测 电路提供电源使二极管发光,当路面是白色时,二极管发出的光大部分被反射,光敏电阻就 接收到比较强的光照射,阻值变小,流过光敏电阻的电流变大。由于电阻的分压作用,使得 光敏电阻的输出电压较小,约为1.5V 左右。当路面是黑色时,由于黑色对光有吸收作用,使得二极管发出的光大部分被吸收,只有小部分被反射,光敏电阻接收到的光照就比较小,阻值变大,流过光敏电阻的电流变小,光敏电阻的输出电压变大,约为2.5V 左右。共有五个 光敏电阻也就是有五个数据输出。这五个信号通过数据线与单片机的PA 口相连,最左边的
电阻连接PA 口的最低位PA0,依次类推,一直连到PA4 口。
【实验步骤】
(1)连接好电路,把导线,下载线连接好,打开电源
(2)进入ICCAVR 编译环境,编写并调试程序直至没有错误,编译环境简介请参见
附录一
(3)下载,烧录进单片机,看实验结果(4)反复修改调试程序,逐渐增强其功能(5)写好实验报告,实验心得体会
【实验电路】 小车的硬件连接图
小车轮子的驱动详见实验一
【程序示例】
由于在实验中黑线的宽度不同,寻迹中所用到的光敏电阻的部位也不同。下面程序的
例子是黑线的宽度只能覆盖一个光敏电阻时对小车的驱动程序
#include
#include
unsigned char t;//******************系统自动生成的初始化程序**********************
void port_init(void)
{
PORTA = 0x00;DDRA = 0x00;PORTB = 0x00;DDRB = 0x00;PORTC = 0x00;DDRC = 0x00;PORTD = 0x00;DDRD = 0xFF;PORTE = 0x00;DDRE = 0x04;
} //call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI();//disable all interrupts
port_init();MCUCR = 0x00;EMCUCR = 0x00;GICR = 0x00;TIMSK = 0x00;
SEI();//re-enable interrupts //all peripherals are now initialized
} //****************小车前进的子程序*********************
void runforth(void)
{
PORTE=0x04;PORTD=0x70;
} //*****************小车左转的子程序*********************
void zuozhuan(void)
{
PORTE=0x00;PORTD=0X70;
} //****************小车右转的子程序*********************
void youzhuan(void)
{
PORTE=0x04;PORTD=0x50;
} //***************小车停止不动的子程序****************
void stop(void)
{
PORTE=0x00;PORTD=0x00;
} //****************主程序***************************
void main(void)
{ while(1)//设置一个死循环,不断读取PA口的输入逻辑电平
{
init_devices();//调用初始化函数
t=PINA&0x1f;//屏蔽掉PA口的高三位数据位
if(t==0x00){stop();} else { switch(t)
{ case 0x01:zuozhuan();break;case 0x07:zuozhuan();break;case 0x02:zuozhuan();break;case 0x03:zuozhuan();break;case 0x04:runforth();break;case 0x0e:runforth();break;case 0x06:zuozhuan();break;case 0x08:youzhuan();break;case 0x10:youzhuan();break;case 0x0c:youzhuan();break;case 0x18:youzhuan();break;case 0x1c:youzhuan();break;
} } } }
第二篇:智能寻迹小车实训报告
目录
1、引言
1.1智能小车的设计意义和作用………………………3
2、系统总体设计……………………………………………4
3、硬件设计
3.1循线模块……………………………………………5
4、软件设计
4.1软件调试平台………………………………………7 4.2系统软件流程………………………………………8 4.3系统软件程序………………………………………9
5、调试及性能分析………………………………………12
6、设计总结………………………………………………13
7、作品实物图……………………………………………14
8、参考文献………………………………………………15
1、引言
1.1智能小车的设计意义和作用
智能小车是移动式机器人的重要组成部分,介绍一种基于AT89S52单片机的智能小车。通过不断检测各个模块传感器的输入信号,根据内置的程序分别控制小车左右两个直流电机运转,实现小车自动识别路线,寻找光源,判断并避开障碍物,检测道路上的铁片、发出声光信息并计数显示,智能停车等功能。
作为20世纪自动化领域的重大成就,机器人已经和人类社会的生产、生活密不可分。因此为了使智能小车工作在最佳状态,进一步研究及完善其速度和方向的控制是非常有必要的。智能小车要实现自动寻迹功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(avg—auto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。该智能小车可以作为机器人的典型代表.它可以分为三大组成部分:传感器检测部分,,执行部分,cpu。机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。考虑使用价廉物美的红外反射式传感器来充当。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。
2、系统总体设计
AT89S52单片机作为总的控制核心,利用传感器,在循线信号、寻光信号、检测障碍物信号等的输入作用下,控制电机采取相应的动作,从而调整小车做合适的选择。同时,如果有检测到金属片的信号,则将该信号以声光的形式表现出来并令数码管计数显示。主要有循线、寻光、避障、金属检测、数码显示、电机驱动、电源、单片机控制等8大模块,如2-1图所示。
图2-1 功能模块图
3、硬件设计
3.1循线模块
循线模块,循迹是指小车在白纸地板上循黑线行走通常采取的方法是红外探测法,红外探测法即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,可以根据黑带和白纸对光线的发射系数不同,可以利用车底接收到的发射光的强弱来判断“道路”黑带。采用四个红外光电管分别置于移动智能小车前板底座的两侧,确保沿着黑线行驶。红外光电管由一个发射管和一个接收管组成,安装在同一面上。红外光电管的工作原理是由发射管发射出的红外线,经检测面反射后被接收管吸收,由于检测面颜色的不同,对红外线的吸收程度也不同,从而反映在接收管的阻值变化上。这种阻值变化通过外接通路就能转换成单片机能够识别的信号。由于红外光电管发出的是红外线,日光对小车的检测不会产生影响,因而其抗干扰性能好,从而实现小车的循迹功能。但红外探测器探测距离有限,一般最大不应超过3cm。循迹功能如3-1,3-2图所示。
图 3-1 循迹功能图
图3-2循迹功能图
本设计需要检测小车的运动状态,沿着路面黑线运动。采用发射取样式,单光束红外传感器接收信号,电路在5V电压下工作,根据该型号传感器红外发射管所需的工作降压(红外发射管的正向降压在1-1.3V)和工作电流(红外发射管的电流为2-10mA),选取负载电阻R=15千欧,红外发射管负载电阻R=220欧。
4、软件设计
4.1 软件调试平台
Keil for C51是美国Keil Software公司出品的C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,Keil C51软件还提供了丰富的库函数和功能强大的集成开发调试工具,生成的目标代码效率非常高,且容易理解。
C51开发中除了必要的硬件外,同样离不开软件,我们写的源程序要变为C51可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,但现在已极少使用手工汇编。Keil提供了包括C编译器、宏汇编、连接线、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision2)将这些部分组合在一起。如图4-1所示。
图4-1 Keil for C51开发平台
4.2系统软件流程
系统软件流程图如图4-2所示
图4-2系统流程图
4.3系统软件程序
#include
sbit D1=P2^0;//定义前方左侧指示灯端口 sbit D2=P0^7;//定义前方侧右指示灯端口 sbit ZIR=P3^5;//定义前方左侧红外探头端口 sbit YIR=P3^6;//定义前方右侧红外探头端口 sbit QIR=P3^7;//定义前方正前方红外探头端口 sbit M1A=P0^0;//定义左侧电机驱动A端 sbit M1B=P0^1;//定义左侧电机驱动B端 sbit M2A=P0^2;//定义右侧电机驱动A端 sbit M2B=P0^3;//定义右侧电机驱动B端 sbit SB1=P0^4;//定义语音识别传感器端口 sbit MIC=P0^6;//定义蜂鸣器端口 void delay(unsigned int z){ while(z--);SB1=!SB1;
return;} void car(unsigned char a){ M1A=0;M2A=0;M1B=0;M2B=0;switch(a){ case 1:{M1A=1;M2A=1;break;};case 2:{M1B=1;M2B=1;D1=0;D2=0;break;};case 3:{M1B=1;M2A=1;D2=0;break;};case 4:{M1A=1;M2B=1;D1=0;break;};} } void main(){ car(1);while(1);{ D1=1;D2=1;LED=0x00;if(QIR==0){ car(2);delay(15000);car(1);} if(YIR==0&&ZIR==1){ car(3);delay(15000);if(YIR==0&&ZIR==1){ car(1);} } if(ZIR==0){ car(4);delay(15000);if(YIR==0&&ZIR==1)
{ car(1);} } if(YIR==0&&ZIR==0){ car(2);delay(30000);} } }
5、调试及性能分析
整机焊接完毕,首先对硬件进行检查联线有无错误,再逐步对各模块进行调试。首先写入电机控制小程序,控制其正反转,停机均正常。加入避障子程序,小车运转正常,调整灵敏度达最佳效果。加入显示时间子程序,显示正常。铁片检测依靠接近开关,对检测信号进行处理并实时显示和发出声光信息,无异常状况。路程显示部分是对霍尔管脉冲进行计数,为了尽量达到精确,车轮加装小磁片。接着对黑带检测模块调试,发现有时小车会跑出黑带,经判断是因为红外线收发对管灵敏度不高,调整灵敏度后仍然达不到满意效果,疑是受环境光影响,利用塑料套包围红外线收发后问题解决。趋光电路主要由三个光敏电阻构成,调 整三个光敏电阻的角度同时测试软件,以最佳效果完成趋光功能。
整机综合调试,上电后对系统进行初始化,接着控制电机使小车向前行驶,突然发现系统即刻进入外部中断1,重复多次测试,结果都是自动进入该中断。推断是由刚上电时电机起动所引起,为了避免上电瞬间的影响,在启动小车后延时几毫秒,再开外部中断,结果问题解决。允许的话应采用双电源供电,即电机和电路应分开供电,L293D与单片机之间采用隔离信号控制。这样就不会出现小车启动时程序出错和数码管显示闪动的问题。在计程精度上,可用红外线原理获 得较高精度。
6、设计总结
通过本次实训设计,不仅是对我们课本所学知识的考查,更是对我们的自学能力和收集资料能力及动手能力的考验,本次实训使我们对一个项目整体设计有了初步认识。再有对电路板的制作有了一定的了解。并学会了使用keil软件设计。本次实训使我们意识到实验的更重要性,在硬件制作和软件调试过程中,出现了很多问题,最终都
是通过实验的方法来解决的。还有以前对程序只是一个模糊的概念。通过这次实训极大的锻炼了我们的思考和分析问题能力。并对单片机有利益更深的认识。
总之,实训过程中,无论是对学习方法还是理论知识,我们都有了新的认识。受益匪浅。这将激励我们今后再接再励,不断完善自己的理论知识提高实践运作能力。
8、作品实物图
9、参考文献
1)、《单片机应用技术》 2)、《周立功单片机》 3)、《单片机原理与应用》
4)、《8051单片机程序设计与实例》 5)、《MCS-51单片机实验指导》
第三篇:寻迹小车报告
智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
寻迹小车设计报告
指导教师:
2011年6月12日13:30
小组成员:智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
C8051F单片机的智能寻迹小车
本课题是基于C8051F单片机的智能小车的设计与应用,小车完成的主要功能是能够自主识别黑色引导线并根据黑色引线能快速自主稳定的寻线行驶。小车系统以单片机为系统控制处理器,对整个控制软件进行程序的设计和程序的调试,并最终完成软硬件的结合,完成小车的预期功能。
一、实验目的:
通过设计能进一步掌握单片机的原理、以及能刚好的运用编程实现对小车的控制。
使小车能自主寻找路线,并且能够合理设计单片机的外围电路,并使之与单片机能构成整个 系统。
二、设计方案:
本组小车以单片机为控制处理器、以298为驱动器结合程序,通过芯片发出驱动命令,控制电机的驱动以实现对小车的控制。
三、技术方案概要说明
本模块车的电路系统包括电源管理模块、单片机模块、传感器模块、电机驱动模块、人机界面。
四、工作原理
1、利用红外采集块中的红外发射接收对关检测路面上的轨迹
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
2、将轨迹信号传给单片机
3、单片机采用模糊推理求出转向角度和行走速度,然后去控制行走部分
4、最终完成智能小车可以按照路面上的轨迹运行
五、报告内容安排
第一部分为对整个报告的概括说明,第二部分为整个电路硬件的介绍和说明,第三部分为整个设计的软件程序设计的说明。
硬件电路的设计
一、寻迹模块
寻迹共有8路,前后各4路,它通过TCRT5000是否接受到红外反射光来改变电压大小,从而使单片机发出指令,使小车进行前进、后退、停止、走正等一系列动作。
1、寻迹电路图
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
焊接时,可用一个电位器来代替四个电位器,这样即省材料,也使电路板更加精巧。甚至还能将除TCRT5000以外的部件全部安放到车体板上面。
TCRT5000实物图与内部结构(与地面距离0.2mm~0.8mm之间)
LM393引脚图
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
2、检测
将5V电源连接好,万用表与各组寻迹的GND与输出端相连,用白纸来使红外灯反射,当TCRT5000接收到反射红外光时输出低电平,未接收时输出高电平,最后通过改变电位器阻值来调节寻迹灵敏度。
二、驱动模块
驱动的核心部件是L298N,它通过单片机指令直接控制小车电机电机转速,从而来使小车行驶。
驱动电路图
5,7,10,12与P2.1,P2.2,P2.5,P2.6相连,使能1,2与P0.0,2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
P0.1相连,2,3,13,14与小车电机相连,驱动要加散热片,防止过热烧坏。
L298n引脚分辨
电机驱动的检测:
连接好电源,将使能1,2都与电源5V相连,5,10与7,12两组,一组与5V相连,另一组与GND相连,用万用表分别测量2,3与13,14两组引脚,有12V电源输出,则驱动正常。
三、电源模块
电源主要是将12V电压降为5V,输给小车的各部分模块。
电源电路图
电源最好需由两组并联而成,以免7805过载而烧坏。J2与外电源12V
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
相连,需要两个引脚,5V引脚与GND引脚都需要多个,以满足对各模块的供电需求。
LM7805
电源模块的检测:
将12V与GND连接好,输出端有稳定的5V电源输出,则电源正常。
四、1602显示屏(主要用于显示小车运动时间)
1602电路图
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
五、语音模块
当小车完成所有指令动作到达终点时,蜂鸣器发出响声。
蜂鸣器的电路图
六、C8051F020单片机
它是由Cygnal出的一种混合信号系统级单片机。片内含CIP-51的CPU内核,它的指令系统与MCS-51完全兼容。其中的C8051F020单片机含有64kB片内Flash程序存储器,4352B的RAM、8个I/O端口共64根I/O口线、一个12位A/D转换器和一个8位A/D转换器以及一个双12位D/A转换器、2个比较器、5个16位通用定时器、5个捕捉/比较模块的可编程计数/定时器阵列、看门狗定时器、VDD监视器和温度传感器等部分。C8051F020单片机支持双时钟,其工作电压范围为2.7~3.6V(端口I/O,RST和JTAG引脚的耐压为5V)。与以前的51系列单片机相比,C8051F020增添了许多功能,同时其可靠性和速度也有了很大提高。
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
五、组装小车
用适当大小的单孔电路板作为小车底板,在适当位置打上小孔,将各个模块安在上面,使小车质量分布均匀,以免小车走歪。
六、焊接的注意事项
1.呈圆焊接顺序,元器件装焊顺序依次为:电阻器、电容器、二极管、三极管、集成电路、大功率管,其它元器件为先小后大。
2.芯片与底座都是有方向的,焊接时,要严格按照PCB板上的缺口所指的方向,使芯片,底座与PCB三者的缺口都对应。
3.焊接时,要使焊点周围都有锡,将其牢牢焊住,防止虚焊。
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
4.在焊接圆形的极性电容器时(一般电容值都是比较大的),其电容器的引脚是分长短的,以长脚对应“+”号所在的孔。
5.芯片在安装前最好先两边的针脚稍稍弯曲,使其有利于插入底座对应的插口中。
6.电位器也是有方向的,其旋钮要与PCB板上凸出方向相对应。7.取电阻时,找到所需电阻后,拿剪刀剪下所需数目电阻,并写上电阻,以便查找。
8.装完同一种规格后再装另一种规格,尽量使电阻器的高低一致。焊完后将露在印制电路板表面多余引脚齐根剪去。
9.焊接集成电路时,先检查所用型号,引脚位置是否符合要求。焊接时先焊边沿对脚的二只引脚,以使其定位,然后再从左到右自上而下逐个焊接。
10.对引脚过长的电器元件(如电容器,电阻等),焊接完后,要将其剪短。
11.焊接后用放大镜查看焊点,检查是否有虚焊以及短路的情况的发生。
12.当有连线接入时,要注意不要使连线深入过长,以至于将其旋在电线的橡胶皮上,出现断路的情况。
13.当电路连接完后,最好用清洗剂对电路的表面进行清洗,以防电路板表面附着的铁屑使电路短路。
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
14.在多台仪器老化的时候,要注意电线的连接,零线对零线,火线对火线。
15.当最后组转时,应将连线扎起,以防线路混乱交叉。16.要进行老化工艺,可发现很多问题,连线要接紧,螺丝要旋紧,当反复插拔多次后,要注意连线接头是否有破损。
17.焊接上锡时,锡不宜过多,当焊点焊锡锥形时,即为最好。
软件系统设计
若小车偏左的时候,左轮将向右偏转;若小车偏右,车轮将向左偏转;若没有偏移,小车将继续向前;若完全偏离黑色轨迹,小车后退以寻找黑色轨迹。
一、程序设计方法
1、确定程序功能。根据机电硬件中的人机界面、电力电子器件和传感器件的物理特点和运行方式确定外围部件软件功能,根据控制系统设计方案确定控制软件功能,根据系统的功能结构确定前面没有提到的其他软件功能。
2、划分任务。将各类软件功能划分成具体的任务。
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
3、确定任务的组合方式。通过分析任务的优先级和相互关系来确定组合方式。因为这个组合方式通常并不是唯一的,可以采取如前文所介绍的概念设计方法的方案排列和方案选择方法。
4、确定编程方法。根据任务划分、任务的组合方式、软件开发能力和软件开发环境可以确定具体程序编制方法。在确定过程中,也可以采用如前文所介绍的概念设计方法的方案排列和方案选择方法。
5、编程与调试。
二、资源分配
P0^0----电机1用的PWM输出信号(左轮)P0^1----电机2用的PWM输出信号(右轮)L_DIR1A=P3^6----左轮电机方向控制 L_DIR1B=P3^7----左轮电机方向控制 R_DIR1A=P3^4----右轮电机方向控制 R_DIR1B=P3^5----右轮电机方向控制 P3^1----蜂鸣器控制
PCA0CPM0----电机1PWM输出,工作在8位定时器模式,允许比较器匹配中断,每次中断加载新的比较值,实现电机输出的脉宽、周期控制。
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
PCA0CPM1----电机2PWM输出,工作在8位定时器模式,允许比较器匹配中断,每次中断加载新的比较值,实现电机输出的脉宽、周期控制。
P5.0-P5.7;传感器接口 lcdrw=P3^2;----读写控制5 lcdcs=P3^0;----E使能6 lcdrs=P3^3;命令数据选择控制4
三、小车程序
#include
typedef unsigned char uchar;typedef unsigned long ulong;typedef unsigned int uint;
//变量定义#define L_MOTO_BREAK L_DIR1A=L_DIR1B #define L_MOTO_BACK L_DIR1A=0;L_DIR1B=1 #define L_MOTO_FORD L_DIR1A=1;L_DIR1B=0
2011年6月12日13:30
智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
#define R_MOTO_BREAK R_DIR1A=R_DIR1B #define R_MOTO_BACK R_DIR1A=0;R_DIR1B=1 #define R_MOTO_FORD R_DIR1A=1;R_DIR1B=0 //前走与后走的定义 sbit L_DIR1A=P3^6;sbit L_DIR1B=P3^7;sbit R_DIR1A=P3^4;sbit R_DIR1B=P3^5;sbit P3_1=P3^1;
sbit lcdrw=P3^2;//5 sbit lcdcs=P3^0;//6 sbit lcdrs=P3^3;//4
int a=0;//定时器计数用 uchar minute=0,second=0,sign=0;uchar fb=0;//控制前后方向
//全局变量的声明
//1602液晶的管脚定义
//I/O管脚的定义
/********************************************/ /* 名称:config
*/ /* 用途:初始化配置, 以保证单片机控制功能工作 */ /********************************************/ void config(void)
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
{
WDTCN = 0x07;
//看门狗禁止
WDTCN = 0xde;
WDTCN = 0xad;
XBR0 = 0x50;
XBR1 = 0x00;XBR2 = 0x40;
//配置交叉开关,//交叉开关允许
P0MDOUT=0x00;
P1MDOUT=0x00;
P2MDOUT=0x00;
P3MDOUT=0xfd;//I/O口的推挽与漏极输出 P74OUT=0x00;
//p4--p6 I/O口的推挽与漏极输出
P5=0xff;
OSCXCN = 0x00;
OSCICN = 0x16;//采用内部晶振,频率为 8MHZ }
2011年6月12日13:30 智能寻迹小车
组员:赵一鹏 艾博文 董羽曦
/********************************************/ /* 名称: delay1ms
*/ /* 用途: 延时
*/ /********************************************/ void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}
void delay1(uint time){ uint ii;uint jj;for(ii=0;ii