智能小车的自动寻迹实验

时间:2019-05-12 11:52:18下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《智能小车的自动寻迹实验》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《智能小车的自动寻迹实验》。

第一篇:智能小车的自动寻迹实验

智能小车的自动寻迹实验

【实验目的】 熟悉光敏电阻的性质 熟悉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 //定义t 为中间变量

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 #define LED P1 //定义数据显示端口

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 #include #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

}

//两个延迟子程序

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

/********************************************/ /* 名称: PCA_Init

*/ /* 用途: PCA初始化

*/ /********************************************/ void PCA_Init(){

PCA0MD=0x08;

//PCA采用系统时钟,且PCA溢出中断禁止

PCA0CN=0x40;

//启动PCA计数器

} void PCA0_Init(){

PCA0CPM0=0x42;//CEX0为8位PWM输出模式

PCA0CPM1=0x42;//CEX1为8bit PWM输出模式

}

/********************************************/ /* 名称: PWM_Init

/* */ /********************************************/ void PWM0_set(uchar val){ PCA0CPH0=~val+1;

2011年6月12日13:30

*/ 生

PWM

用途:

//高电平占空比为val/256 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

} void PWM1_set(uchar val){

}

/********************************************/ /* 名称: L_Operation R_Operation

/* */ /********************************************/ void L_FORD(uchar L_spe_ford){

L_MOTO_FORD;

PWM0_set(L_spe_ford);} void R_FORD(uchar R_spe_ford){

R_MOTO_FORD;

PWM1_set(R_spe_ford);} void L_BACK(uint L_spe_back){

L_MOTO_BACK;

PWM0_set(L_spe_back);

}

2011年6月12日13:30

//高电平占空比为val/256 PCA0CPH1=~val+1;

*/ 用途:

电机正反转及速度的控制

//电机速度 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

void R_BACK(uint R_spe_back){

R_MOTO_BACK;

PWM1_set(R_spe_back);

} void L_BREAK(){

L_MOTO_BREAK;

} void R_BREAK(){

R_MOTO_BREAK;

}

/********************************************/ /* 名称: 定时器_Init

*/ /* 用途: 定时器初始化

*/ /********************************************/ void time_init()

{ CKCON=0X08;

//12分频与原分频的选择。把定时器1选为系统时钟 TMOD=0X01;//定时器1的方式选择为,把定时器1选为16位定时功能

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

TH0=0X00;TL0=0X00;//定时器1重装初值 ET0=1;//使能定时器1 TR0=1;//开定时器1 } /********************************************/ /* 名称:lcddisplay显示函数

*/ /* 用途:初始化

*/ /********************************************/

void sendc(uchar c)//给1602的lcd送命令 {

} void sendd(uchar c)//给1602的lcd送数据

2011年6月12日13:30 lcdrs=0;lcdrw=0;lcdcs=1;//E的高脉冲 P7=c;delay(10);lcdcs=0;//E的高脉冲

智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

{ lcdrs=1;lcdrw=0;lcdcs=1;P7=c;delay(10);lcdcs=0;}

void lcd_pos(uchar pos){ sendc(pos|0x80);}

//发送地址定位函数

void lcd_init(void)

//lcd初始化函数 { sendc(0x38);//8位,2行,5*7字体

sendc(0x08);//显示开,光标关;不闪

sendc(0x01);//清屏

sendc(0x06);delay1(1);

2011年6月12日13:30

智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

sendc(0x0C);}

/********************************************/ /* 名称:lcddisplay1

*/ /* 用途:第一次显示

*/ /********************************************/ void lcddisplay1(void)

//显示主函数 {

line1[5]=table[sign%10];line1[4]=table[sign/10];line1[11]=table[second%10];line1[10]=table[second/10];line1[8]=table[minute%10];line1[7]=table[minute/10];sendc(0x01);lcd_pos(0x00);

2011年6月12日13:30 uchar table[]={“0123456789”};uchar line1[]={“time00/00:00”};uchar i=0;sign++;智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

for(i=0;i<12;i++)

{

sendd(line1[i]);

delay(1);

} }

//时间显示

void display()

//最后的显示子函数,显示总时间,与结束标志。{ uchar table[]={“0123456789”};uchar i=0;uchar table1[]={“all_time:00:00”};uchar table2[]={“finish”};table1[13]=table[second%10];table1[12]=table[second/10];table1[10]=table[minute%10];table1[9]=table[minute/10];sendc(0x01);lcd_pos(0x00);while(table1[i]!=''){ sendd(table1[i++]);delay(10);

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

} lcd_pos(0x40);i=0;while(table2[i]!='')

}

/********************************************/ /* 名称: Founding_Line

*/ { sendd(table2[i++]);delay(10);}

/* 用途: p6八路寻迹

*/ /********************************************/

void xun1()

//循迹函数,实现小车的寻线行走,与遇黑线停止

{ if(P5==0x00)

{ PWM0_set(230);PWM1_set(245);}

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

if(P5&0x04)//右

{

PWM0_set(170);

PWM1_set(250);

} if(P5&0x02)//左

{

PWM0_set(250);

PWM1_set(170);

} if(P5&0x08)//右

{

PWM0_set(1);

PWM1_set(245);

} if(P5&0x01)//左

{

PWM0_set(245);

PWM1_set(1);

}

if(P5&0x01&&P5&0x02){

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

PWM0_set(255);

PWM1_set(160);

} if(P5&0x04&&P5&0x08)

{

PWM0_set(255);

PWM1_set(160);

} }

void xun2(){ if(P5==0x00)

{

PWM0_set(230);

PWM1_set(245);

} if(P5&0x40)//右

{

PWM0_set(220);

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

PWM1_set(245);

} if(P5&0x20)//左

{

PWM0_set(245);

PWM1_set(180);

} if(P5&0x80)//右

{

PWM0_set(1);

PWM1_set(245);

} if(P5&0x10)//左

{

PWM0_set(245);

PWM1_set(1);

} if(P5&0x10&&P5&0x20)

{

PWM0_set(255);

PWM1_set(160);}

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

if(P5&0x40&&P5&0x80)

{

PWM0_set(160);

PWM1_set(255);

} }

void Founding_Line(){ if(fb<=8){ if((P5&0x06)==0x06)//终点停

{

R_BREAK();

L_BREAK();

fb++;

if(fb==1 ||fb==2)

{

lcddisplay1();

delay1(380);//延时4s R_FORD(230);

2011年6月12日13:30

智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

L_FORD(245);

delay1(50);//延时0.5s

}

if(fb==3||fb==4)

{

lcddisplay1();

delay1(380);//延时4s

R_FORD(185);

L_FORD(245);

delay1(80);//延时0.5s

}

if(fb==5)

{

lcddisplay1();

delay1(380);//延时4s

R_FORD(185);

L_FORD(245);

delay1(80);//延时0.5s }

if(fb==6)

{

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

lcddisplay1();

delay1(380);//延时4s

R_FORD(230);

L_FORD(245);

delay(1800);

R_BACK(235);

L_FORD(245);

delay(6000);

R_BREAK();

L_BREAK();

//前直角拐弯

fb++;

}

if(fb==7)

{

R_FORD(230);

L_FORD(245);

delay1(50);//延时0.5s

}

if(fb==8){

P3_1=0;

2011年6月12日13:30

智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

lcddisplay1();

fb++;delay1(350);//延时4s

P3_1=1;

} } else xun1();

}

if(fb>=9){ if((P5&0xf0)==0xf0)//终点停

{

R_BREAK();

L_BREAK();

fb++;

if(fb==10)

{

lcddisplay1();

2011年6月12日13:30

智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

delay1(350);//延时4s

L_BACK(245);

R_BACK(230);

delay(1000);

R_FORD(200);

L_BACK(250);

delay(6300);

R_BREAK();

L_BREAK();

//后直角拐弯

fb++;

}

if(fb==11)

{

L_BACK(245);

R_BACK(230);

}

if(fb==13)

{

lcddisplay1();

L_BACK(245);

R_BACK(185);

delay1(80);

2011年6月12日13:30

智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

}

}

}

if(fb==12||fb==14||fb==15)

{

lcddisplay1();

L_BACK(245);R_BACK(230);delay1(50);}

else

{ xun2();} }

/********************************************/ /* 名称:main

*/ /* 用途:主程序,调用子程序进行电机控制和寻迹 */ /********************************************/ void main(){ config();

//初始化函数

2011年6月12日13:30

//主函数 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

lcd_init();PCA_Init();

//1602的初始化

//PCA的初始化

//PCA0和1的初始化

//定时器的初始化

//总中断打开,定时器开始计时,PCA开始PCA0_Init();time_init();EA=1;

PWM输出

P3_1=1;

while(1){ if(fb==0){

R_FORD(230);

L_FORD(245);}

if(fb==9){

L_BACK(245);

R_BACK(230);}

2011年6月12日13:30

智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

if(fb==16){

P3_1=0;

display();

EA=0;

PCON=0x02;

while(1);} Founding_Line();} } void timer0()interrupt 1

时钟提供定时。{ a++;TH0=0X00;TL0=0X00;if(a==145){ a=0;second++;if(second==60)

//中断函数,实现定时器功能。为

2011年6月12日13:30

智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

} { second=0;minute++;if(minute==60)

} {

minute=0;} }

结论

测试结果表明:本小组的智能小车能够很好的完成循迹功能,小车能够沿着如图所示的黑色路线行走。

2011年6月12日13:30 智能寻迹小车

组员:赵一鹏 艾博文 董羽曦

在这次的制作过程中,虽然条件艰苦,但是经过我们的不懈努力终于把课题完成。在这个过程中,我们不仅学习了单片机的工作原理和使用方法,而且还增强了动手能力。本次课题的设计,一方面是对我们所学课本知识的考验,另一方面更是对我们自学能力和收集资料能力以及动手能力的考验。通过软硬件的结合让我们充分认识到硬件制作和软件结合的困难,以及C语言对我们课题编译的重要性。我们以后一定会更加努力的。

2011年6月12日13:30

第四篇:智能小车设计实验指导书

智 能 小 车 设 计

实 验 指 导

王 恒 编

2011年4月

目录

目录.....................................................................................................I 实验阶段一

智能小车路径规划.......................................................1 实验阶段二

智能小车环境感知与控制...........................................6 实验阶段三

智能小车行为控制.....................................................12 附录: 库函数......................................................................................17

I 实验阶段一

智能小车路径规划

一.实验目的

1.熟悉智能小车的硬件开发平台与软件开发环境。2.掌握智能小车路径规划程序设计。

二.实验内容

1.熟悉智能小车硬件设计。

2.学习智能小车的软件使用方法,学会软件的编写、调试与下载。3.编写第一个智能小车程序。4.编写智能小车移动程序。

5.编写复杂的智能小车路径规划程序。

三、实验设备及工具

硬件:能力风暴AS-UII开发平台,程序下载线。

软件:PC 机操作系统Win2000 或WinXP、VJC开发平台。

四、实验原理与步骤

智能小车实验平台配备有5种传感器,对环境的感知能力很强。执行器配备有二只高性能直流电机、一只喇叭和一只2*16 字符的液晶显示器。整个小车通过Motorola 公司8位单片机来进行控制。智能小车的硬件结构如下图所示:

2、让智能小车动起来

下面我们就尝试着让智能小车动起来。

在VJC1.5 开发版执行器模块库中有一专门控制智能小车“移动”的模块,这里我们就用

它来编写一个智能小车直线行走的程序。要求:先让智能小车以速度100 前进3 秒,再让智能小车 以速度-60 后退5 秒,再在原地以功率80 旋转1 秒。(如图4-2 所示)

示范操作步骤如下:

2.1 在 VJC1.5 开发版窗口中编写流程图

a)编写流程图:用鼠标将“执行器模块库”中的“移动”模块移到流程图生成区并与 主程序模块连接上;

b)设置时,右击“移动”流程图模块,在弹出框中输入移动速度为 100、时间为3; c)再用鼠标将“执行器模块库”中的“移动”模块移到流程图生成区并连接; d)在流程图的末端位置;

e)设置第二个“移动”流程图模块,点击右键在弹出框中输入移动速度为-60、时间 为5;

f)再将“执行器模块库”中的“转向”模块连接到程序中,点击右键进入设置对话框,分别设置速率和时间为:80 和1

g)再将“程序模块库”中的“任务结束”移入到流程图生成区并连接在程序的末尾。

drive(0,60);wait(0.2);} stop();} 能力风暴逆时针走约一米见方的正方形路径。其中wait(0.2)是能力风暴转90度弯所需要的 时间。该值和转弯速度以及能力风暴的电机有关,需要实际调整,此外地面的摩擦力也有影 响。利用wait()函数是控制电机工作的常用方法。

五、实验考核

编写智能小车程序,实现下列连续的路径规划:(1)智能小车走两遍1.5米直径的圆;

(2)原地停止1秒后,智能小车走三遍等边三角形(或等腰直角三角形);

(3)再次原地停止1秒后,智能小车走一遍8字形。(或9字形、D字母型、B字母型等,每组的考核指标由指导老师随机抽选)。

我们也可以点击“工具栏”中的“编辑JC 程序代码”按钮,切换到JC 代码界面,对 JC 代码进行修改。

1.2 保存程序

点击工具栏中的“保存”按钮,文件名输入:感光,按“确定”。此时,“感光.flw” 流程图程序文件已被保存。

1.3 程序下载

此时,能力风暴要处于开机状态,并串口连接线已与计算机连接。点击“工具”中的“下 载当前程序”按钮,就会出现下载对话框,等待出现“下载成功!”字样,说明程序已经下 载到能力风暴里了。

1.4 运行程序

将串口连接线取下,将智能小车带到安全的地方,按智能小车身上的“运行”键,在智能小车 的LCD 上就会显示出外界光线的平均值。

2、JC 程序的基本程序结构

下面是JC 程序中最常见的一种程序模式。

while(1)/*循环检测*/ { ir=ir_detector();/*对环境采样*/ if(ir>0)/*条件判断*/ { 语句1;/*做相应的处理*/ 语句2;} else {

试窗口一行编辑框中输入如下程序块:

{while(1){printf(“bump=%dn”,bumper());wait(0.1);}} 按回车,JC 能立即编译这一段程序并下载运行,LCD 上显示: bump=0(表示此时没有碰撞)

按左前碰撞环,LCD 上显示:bump=5。在其他方向施加碰撞,显示的值将不同。各个方 向发生碰撞时返回值对应关系如下:

无0,左前1,右前2,左后4,右后8

下面结合智能小车“台球”程序来学习碰撞传感器的使用。

void main(){ int bill_trans=0;int bill_rot=0;int bmpr=0;while(1)/*无限循环检测*/ { bmpr=bumper();/*检测碰撞传感器*/ if(bmpr!=0){ if(bmpr==0b0011)/*正前方发生碰撞*/ { bill_trans=-80;/*后退*/ bill_rot=0;} else if(bmpr==0b1100)/*正后方发生碰撞*/ { bill_trans=80;/*前进*/ bill_rot=0;} else if(bmpr & 0b0101)/*左侧发生碰撞*/ { 51 bill_trans=0;bill_rot=-80;drive(bill_trans,bill_rot);wait(0.5);/*顺时针转一个角度*/ bill_trans=80;/*前进*/ bill_rot=0;} else if(bmpr & 0b1010)/*右侧发生碰撞*/ { bill_trans=0;bill_rot=80;drive(bill_trans,bill_rot);wait(0.5);/*逆时针转一个角度*/ bill_trans=80;/*前进*/

void main(){ int ir;while(1){ ir=ir_detector();if(ir!=0)/*判断有否障碍*/ { motor(-80,-40);/*执行语句,即倒退0.5秒*/ wait(0.5);} 26 motor(100,0);/*前进*/ } } 运行此程序可知当前方有障碍时,能力风暴智能智能小车有反应。

五、实验考核

编写智能小车跟随前方物体的程序,实现下列要求:

智能小车可以跟随前方移动的人或物;如果撞上前方的物体,就停一停;如果前方红外系统探测范围内没有物体,它就停下来。

六、思考题

1、实验中碰到哪些故障或问题?解决方法是怎样的?将实验中碰到的问题及解决方法写入实验报告中。

2、如果要对智能小车双轮的转速实现带反馈的控制,需要在硬件上添加什么部件?为什么?

1bill_rot=0;} else if(bmpr & 0b0101)/*左侧发生碰撞*/ { bill_trans=0;bill_rot=-80;wait(0.5);/*顺时针转一个角度*/ bill_trans=80;/*前进*/ bill_rot=0;} else if(bmpr & 0b1010)/*右侧发生碰撞*/ { bill_trans=0;bill_rot=80;wait(0.5);/*逆时针转一个角度*/ bill_trans=80;/*前进*/ bill_rot=0;} } } 54 } void billiards_drive(){ while(1)drive(bill_trans,bill_rot);/*驱动电机*/ } void main(){ start_process(billiards_drive());/*创建电机驱动进程*/ start_process(billiards());/*创建碰撞处理进程*/ } “台球”改成多进程后,运行的效果没变,但结构已经完全不一样了。电机驱动进程 billiards_drive()专门设置电机速度,碰撞处理进程billiards()判断碰撞并改变电机速 度。两个进程之间通过全局变量bill_trans 和bill_rot 进行通讯。能力风暴的操作系统自 动调度两个进程,给它们分配时间片。从执行效果来讲,就相当于这两个进程并列运行。这 样的结构非常方便增加新的进程,同时处理更多的外部信息。

2、进程间通信

我们给前面的程序增加一个红外避障进程,改变它的行为,而其它部分不需要做大的变动。改动后的程序如下。

int bill_trans=0;int bill_rot=0;int bmpr=0;int forward=0;

3{ bill_trans=20;bill_rot=80;/*逆时针转*/ } else if(ir==1)/*左侧有障碍,向右绕*/ { bill_trans=20;bill_rot=-80;/*顺时针转*/ } else if(ir==0)/*前方没有障碍,恢复直行*/ { bill_trans=80;bill_rot=0;}} wait(0.1);}} 56 } void billiards_drive(){ while(1){ running = bill_trans;/*能力风暴正在运动*/ drive(bill_trans,bill_rot);/*驱动电机*/ } } void main(){ start_process(billiards_drive());/*创建电机驱动进程*/ start_process(billiards_ir());/*创建避障进程*/ start_process(billiards());/*创建碰撞处理进程*/ } 改动以后的程序增加了避开侧面障碍物的行为。比较一下,增加的代码除了红外避障进 程外,就是用于进程之间的通讯。进程间的通讯和同步是多进程编程的难点,不解决好这个 问题,多进程程序可能会产生一些奇怪的行为。在这个程序里,由于碰撞处理进程和红外避 障进程都要修改设置电机速度的两个全局变量(bill_trans,bill_rot),这是进程间发生冲 突的根源。如果不加以限制,两个进程同时修改电机速度,必然会出现一片混乱,能力风暴 下一步的运动方向将无法预知。

本程序中把bmpr 改为全局变量,通过bmpr 来划分两个进程生效的时间。即发生碰撞时,只有碰撞处理进程可以修改电机速度;在其他时间里碰撞处理进程只是在不断检测碰撞传感 器,只有红外避障进程才有可能修改电机速度。我们可以看到,在本程序里碰撞处理进程的 优先级高于红外避障进程。增加的另两个全局变量是出于红外避障行为逻辑的需要。全局变 量running 是能力风暴开始运动的标志,红外避障进程要等待这一事件发生后才能起作用。forward 反映能力风暴当前运动方向,用于避免红外避障进程在后退时候处理前方障碍。

3、智能小车的行为控制

借助于多进程功能,可以方便实施目前处于研究前沿的行为控制方法。

行为控制的基本思想是建构行为能力,而非功能模块。首先把要设计机器人的行为特点描述下来,表达成基本的行为构成,如要做一只模拟机器飞蛾的智能小车,一边到处找食物,一边向较

附录: 库函数

1.执行器输出

void stop()关闭左右两个电机,停止运动;

void stop_motor(int m)关闭电机m,0为所有电机,1为左电机, 2为右电机, 3为扩展电机; void motor(int m, int speed)以功率级别speed(-100到100)启动电机m(1为左电机, 2为右电机, 3 为扩展电机);

void drive(int move, int turn)同时设定两个电机的速度,move 为平移速度,turn 为旋转速度。

2.传感器输入

int photo()光敏传感器检测。photo(1)为检测左光敏, photo(2)为检测右光敏,返回值为0~ 255的数字量;

int microphone()声音传感器检测。返回值为0~255的数字量;

int ir_detector()红外传感器检测。返回值的意义:0=> 没有障碍, 1=>左边有障碍, 2=>右边有 障碍, 4=>前方有障碍;

int bumper()碰撞传感器检测。返回值的意义:0=>无碰撞,1=>左前受碰,2=>右前受碰,4=> 左后受碰,8=>右后受碰。

int rotation(int index)光电编码器脉冲累计读数,rotation(1)为检测左光电编码器,rotation(2)为 检测右光电编码器。

int digitalport(int channel)读数字口上传感器的值。channel的范围是0~7。返回值:从传感器数字硬 件读到的值为零伏或逻辑零时,返回1;否则返回0 int analogport(int channel)读模拟口上传感器的值。channel的范围是0~7。返回值是0到255间的整数 值

int encoder(int index)读取光电编码器的当前状态。0为低电平/1为高电平(分别对应光栅的通光缺口 /遮光齿)。

3.时间

void wait(float sec)延时等于或稍大于指定的sec时间(秒)后再执行后面的语句。sec是一个浮点数 void resettime()将系统时间复位清零

float seconds()以秒的形式返回系统时间,它是一个浮点数,精度为0.001秒

4.声音

void beep()产生一段0.3秒500赫兹的音频信号。发声结束后返回。

void tone(float frequency, float length)产生一个length秒长音调为frequency赫兹的音频信号。

5.电池

int battery()检测电池电量,返回值为0~255的数字量;

6.其他函数

void asosreset()软件复位函数。与按下能力风暴的复位开关的效果一样,ASOS操作系统重启动,程序停止运行。

int runbutton()读运行键状态。运行键在能力风暴智能智能小车的头顶上,可以在程序中使用该 按钮。返回值:0没按,1按下 int abs(int val)取整数val的绝对值 int max(int x, int y)求两个整数的最大值 int min(int a, int b)求两个整数的最小值 float rand()返回0~1之间的随机浮点数

int random(int scale)返回0~scale之间的随机整数

第五篇:智能小车课程设计

智能循迹小车

【摘要】

本课题是基于低功耗单片机的智能小车的设计与实现,小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。小车系统以单片机为系统控制处器;采用红外传感获取赛道的信息,来对小车的方向和速度进行控制。此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。

一、实验目的

这次设计智能小车的目的是为了掌握电路设计的方法和技巧。如何将学习到的理论知识运用到实际当中去,怎样能够活学活用,深入的了解电子元器件的使用方法,了解各种元器件的基本用途和方法,能够灵活敏捷的判断电路中出现的故障,学会独立设计电路,积累更多的设计经验,加强焊接能力和技巧,完成基本的要求。并能完美的完成这次实训。

根据老师给的控制要求,和自己的发挥扩充能力,独立的,大胆的去实践,开拓创新,能够将自己的想法体现到实际电路当中去。

二、设计方案

该智能车采用红外传感器对赛道进行道路检测,单片机根据采集到的信号的不同状态判断小车当前状态,通过电机驱动芯片发出控制命令,控制电机的工作状态以实现对小车姿态的控制。

三、各芯片说明 W981216BH-6 一种髙速度同步动态随机存取存储器(SDRAM), 具有 1M 字(words)*4 层(banks)*16 位(bits)的存储结构组织.传输数据带宽最高达 166M 字/秒(-6)。对SDRAM是否访问是突发导向。在一个页面连续的内存位置可在一个1, 2, 4, 8或整页突发访问时长和行选择组由活动命令。列地址自动生成的SDRAM的内部计数器在突发运作。随机栏也可以通过阅读在每个时钟周期提供其地址。该多组特性使交织在内部银行隐藏预充电时间。通过让一个可编程的模式寄存器,该系统可以改变突发长度,延时周期,交错或连续突发最大限度地发挥其性能。W981216BH是在理想的主内存高性能应用。特征:

1、.3V±0.3V电源

2、截至143 MHz时钟频率 3、2,097,152字×4层×16 位组织

4、自动刷新和自刷新

5、CAS 延时:2和3

6、突发长度:1, 2, 4, 8,和整页

7、突发读,写单人模式

8、自动预充电和预充电控制 9、4K刷新周期/ 64 ms

TE28F160C3BD70(快闪记忆体)该设备提供高性能异步的包兼容密度读取与16位数据总线。

该器件提供三种低功耗节电功能:自动节能待机(APS),,模式和深度掉电模式,这三个功率节省功耗的功能显着增强灵活性

特点:

1、柔性Smart Voltage技术 2.7 V– 3.6 V读/编程/擦除2、1.65 V–2.5 V或2.7 V–3.6 V / O选项 降低整体系统功耗

3、优化架构的代码,数据存储

4、柔性块锁定 锁定/解锁任何座,保护上电

5、低功耗 6、128-bit保护寄存器

SN74LVC1G14 施密特触发器是一种特殊的门电路,与普通的门电路不同,施密特触发器有两个阀值电压,分别称为正向阀值电压和负向阀值电压。这种单一的施密特触发器逆变器是专为1.65-V到5.5-V VCC运作。该器件包含一个SN74LVC1G14逆变器和执行布尔函数Y = A。

施密特触发器也有两个稳定状态,但与一般触发器不同的是,施密特触发器采用电位触发方式,其状态由输入信号电位维持;对于负向递减和正向递增两种不同变化方向的输入信号,施密特触发器有不同的阀值电压。

利用施密特触发器状态转换过程中的正反馈作用,可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。输入的信号只要幅度大于vt+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。施密特触发器的应用:

1、波形变换:可将三角波、正弦波等变换成矩形波

2、脉冲波的整形:数字系统中,矩形脉冲在传输中经常发生波形畸变,出现上升沿和下降沿出现不够理想的情况,可用施密特触发器整形后,获得较理想的矩形脉冲

3、脉冲鉴幅:幅度不同、不规则的脉冲信号时加到施密特触发器的输入端时,能选择幅度大于欲设值的脉冲信号进行输出。

晶振作用:给单片机正常工作提供稳定的时钟信号。

MAX3221 MAX3221由一条线驱动器,一条线接收器和一个带有±15-kVESD保护的双电荷泵。该器件可满足TIA/EIA-232-F要求,并在一个异步通信控制器和串行端口连接器之间提供接口。电荷泵和四个小型外接电容器可在3V到5.5V电源电压下工作。这些器件在数据信号率达到250 kbit / s和最高的30-V/µs 驱动输出回转率时工作。应用:

1、电池供电,手持,和便携式设备

2、PDAs和掌上PCs

3、笔记本,Subnotebooks和笔记本电脑

4、数码相机

5、移动电话和无线设备

RS232

RS-232是现在主流的串行通信接口之一。

MAX809R 是功能单一的MAX809/MAX810微处理器复位芯片。用于监测微处理器和其它逻辑供应电压系统.它可以在上电、掉电、和节电情况下向微控制器提供复位信号。当电源电压低于预设的门槛电压时,器件会发出复位信号,直到在一段时间内电源电压又恢复到高于门槛电压为止。

MAX809有低电平有效的复位输出,而MAX810有高电平有效的复位输出。典型值是17uA的低电平电流时MAX809/MAX810能理想地用于便携式,电池供电的设备,它们使用3管脚的SOT23封装。

应用:嵌入式控制器、电池供电系统、无线通信系统、PDA和手持式设备

LED FOR DEBUG(LED调试)

LED:发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光

CD4066 CD4066是四双向模拟开关,主要用作模拟或数字信号的多路传输。引出端排列与CC4016一致,但具有比较低的导通阻抗。另外,导通阻抗在整个输入信号范围内基本不变。CD4066由四个相互独立的双向开关组成,每个开关有一个控制信号,开关中的p和n器件在控制信号作用下同时开关。这种结构消除了开关晶体管阀值电压随输入信号的变化,因此在整个工作信号范围内导通阻抗比较低。与单通道开关相比,具有输入信号峰值电压范围等于电源电压以及在输入信号范围内导通阻抗比较稳定等优点。应用:

(1)模拟信号开关/多路复用:信号选通、调制器、静噪控制、解调器、削波器、换向开关

(2)数字信号开关/多路复用

3、传输门逻辑实现

4、模拟到数字及数模转换

5、数字控制频率,阻抗,相位和Analog Signal Gain

VS2576 VS2576系列电压调节器是单片集成电路,提供了所有转换开关调节器的有效功能,在极好的线路和负载调解下具有3A的驱动能力。这种器件适合于3.3V,5V,12V,15V的固定电压,和可调的输出形式。

只需最少数量的外围器件,调节器就会被使用,内部包含有频率补偿和一个固定频率的振荡器。

VS2576系列提供了一个高效的,比较流行的三端线性调节器,他从根根上降低了半导体散热片的尺寸,在许多情况下不需要散热。

现在几个不同的生产商已经生产了由VS2576优化制作的标准的电感器系列,这个特性大大简化了功耗开关模式的设计。

其他特性还包括在指定的输入电压和输出负载条件下,保证±4%输出电压的误差和±10%振荡器频率的误差。还包括外围关闭电路,典型值为50uA备用电流。输出转换还包括在出错条件下,环路电流限制和出于芯片保护热敏关闭电路。主要特点: 1、3.3V,5V,12V,15V的固定电压和可调节的输出形式

2、可调节形式输出电压的范围在1.23V到37V之间(对于高压系列为57V),误差范围±4%

3、保证3A的输出电流

4、输入电压范围,对于高压系列为40V到60V

5、仅仅需要四个外围器件

6、内部振荡器为52kHz的固定频率

7、TTL关断电路能力,低功耗等待模式

8、高效

C39:稳压器二极管

特点:总功耗:

1、最大.1.3 W;

2、工作电压范围:标称3.3 V到75 V(E24范围)

IN5822:3.0安培垒肖特基整流器 RED:交流线路频率分频器

P89LPC938FDH(微控制器(MCU))

8-bit微控制器,带有加速two-clock 80C51核心8 kb的3 V byte-erasable闪光10-bit A/D转换器

该P89LPC938是一种单芯片微控制器,低成本封装,基于一个高性能的处理器结构,指令执行在2到4个时钟周期的指令,六倍标准80C51器件。许多系统级的功能已被纳入P89LPC938,从而减少元件数量,电路板空间。主要特点: 1、256-byte RAM数据存储器和辅助512-byte片上RAM

2、CCU提供PWM,输入捕捉,输出比较功能

3、准确度的内部RC振荡器时不需要外部振荡器的操作组件。该RC振荡器选项可选,并fine可调4、8-input复10-bit的A / D转换器.两个可选择的模拟比较器输入和参考源 功能:

1、一个高性能80C51 CPU提供111 ns指令周期222 ns所有除乘法和除法指令时,在18 MHz。执行,这是六倍的标准80C51性能运行在相同的时钟频率.较低的时钟频率相同的性能结果,降低功耗EMI。

2、串行Flash ICP允许简单的生产与商用EPROM编码程序员。闪光安全 bits防止读数敏感的应用程序。

3、串行Flash ISP允许编码,而该设备是安装在最终应用。

4、在应用中的Flash程序存储器的编程.这允许改变代码在程序运行。

5、看门狗有独立的片内振荡器,无需外部元件。看门狗预分频器有8种选择

AMS1084-3.3 可调和固定的电压调节器AMS1084系列旨在提供5A输出电流和操作到1V input-to-output差距。该装置的漏失电压为保证在最大输出的最大1.5V当前,减少在低负载电流。片上微调调节参考电压1%.电流限制也修剪,超负荷的压力下最小同时在条件稳压器和电源电路。

该AMS1084设备的引脚与老式三端稳压器兼容,并在3铅TO-220 包装,3提供和2铅TO-263(塑胶DD)和TO-252(D PAK)包装。特征:

1、三端可调或固定1.5V, 2.5V, 2.85V, 3.0V, 3.3V, 3.5V和5.0V

2、电流输出5A

3、操作低至1V 漏失

4、线路调整:0.015%

5、负载调整率:0.1%

6、TO-220, TO-263和TO-252封装 应用:

1、高效率线性稳压器

2、用于开关电源的后稳压器

3、微处理器供应

4、电池充电器

5、恒流稳压器

6、笔记本电脑/个人电脑耗材

AMS1117_2.5 AMS1117系列稳压器有可调版与多种固定电压版,设计用于提供1A输出电流且工作压差可低至1V。在最大输出电流时,AMS1117器件的压差保证最大不超过1.3V,并随负载电流的减小而逐渐降低。

AMS1117的片上微调把基准电压调整到1.5%的误差以内,而且电流限制也得到了调整,以尽量减少因稳压器和电源电路超载而造成的压力。

AMS1117器件引脚上兼容其他三端SCSI稳压器,提供适用贴片安装的SOT-223,8引脚SOIC,和TO-252(DPAK)塑料封装。应用: 高效率线性稳压器、用于开关电源的后稳压器、5V到3.3V线性稳压器、电池充电器、积极SCSI终结者、笔记本电脑的电源管理、电池供电的仪器

IN4148是一种小型的高速开关二极管,开关比较迅速,广泛用于信号频率较高的电路进行单向导通隔离,以及通讯、电脑板、电视机电路及工业控制电路中

CORE 双核芯片,即在一枚芯片上封装入两个处理器。

HEADER 5 X 2 5 X2的接插件,用于接线。

复位电路

复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。单片机复位电路主要有四种类型:(1)微分型复位电路;(2)积分型复位电路;(3)比较器型复位电路;(4)看门狗型复位电路。

复位电路工作原理:VCC上电时,C充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。

DS1232LPS 该DS1232LP/LPS芯片低功耗MicroMonitor监视微处理器三个重要条件:电源供应器,软件执行和外部过骑.引脚说明:

PBRST–按键复位输入 TD–延时设置

TOL–选择5%或10% V CC检测 GND–地面

RST–复位输出(高)

RST–复位输出(低电平有效,开漏)意法半导体–选通输入 VCC–+5伏电源

SKP1:扬声器

PDIUSBP11AD PDIUSBP11A是一个通用的USB收发器芯片。USB接口主要用于传输数据。

74HCT541 为八进制非反相缓冲器/线路驱动器与三态输出 特征:

1、非反相输出

2、输出能力:总线 驱动器

3、ICC类别:MSI

四、实验小结

计算机的发展日新月异,其技术也突飞猛进,嵌入式系统是近年来发展很快的计算机方面的学科方向,并迅速渗透到控制、自动化、仪器仪表等学科。

根据本次课程设计要求,我们系统地阅读了大量的资料,并认真分析了设计课题的需求,还系统学习了ARM系列单片机的工作原理及其使用方法,并独自设计智能小车的整个项目。

虽然条件艰苦,但经过不懈钻研和努力,研究所有所需的元器件,并系统的进行了多项试验,最终做出了整个小车的硬件系统,然后结合课题任务和小车硬件进行了程序的编制,本系统能够基本满足设计要求,能够较快较平稳的使小车沿引导线行驶,但由于经验能力有限,该系统还存在着许多不尽人意的地方,有待于进一步的完善与改进。

通过本次课程设计,不仅是对我们课本所学知识的考查,更是对我的自学能力和收集资料能力以及动手能力的考验。本次课程设计使我们对一个项目的整体设计有了初步认识,还认识了几种传感器,并能独立设计出其接口电路,极大的锻炼了我们的思考和分析问题的能力,并对嵌入式系统有了一个更深的认识。

总之,在课程设计的过程中,无论是对于学习方法还是理论知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。

下载智能小车的自动寻迹实验word格式文档
下载智能小车的自动寻迹实验.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    智能小车设计报告

    机器人控制技术 实验设计报告书 题 目:基于STC89C52的智能小车的设计 姓 名:李如发 学 号:073321032 专 业:电气工程及其自动化 指导老师:李东京 设计时间:2010年 6 月 目 录 1.......

    智能小车设计报告

    智能小车设计报告 魏旭峰、孔凡明、陈梦洋 (河北科技大学 电气信息学院 ) 摘要: AT89S52单片机是一款八位单片机,他的易用性和多功能性受到了广大使用者的好评。该设计是结合......

    智能小车实验报告[全文5篇]

    课程设计报告 (嵌入式技术实践(一)) 学院:电气工程与自动化学院 题 目:智能小车的电路设计与制作 专业班级:自动化123班 学 号: 21 学生姓名:谢斌 指导老师: 王祖麟、张振利 日 期:......

    智能循迹小车实验报告

    摘要 本设计主要有单片机模块、传感器模块、电机驱动模块以及电源模块组成,小车具有自主寻迹的功能。本次设计采用STC公司的89C52单片机作为控制芯片,传感器模块采用红外光电......

    智能循迹小车(推荐阅读)

    专业创新实践实训报告 课题名称 成员 院系 专 业 指导教师 智能循迹小车 *** 航空工程学院 电子信息科学与技术专业 *** 2016年5月28日 目录 1 实训任务与内容 ...............

    毕业设计任务书(智能小车)

    安徽建筑工业学院毕业设计(论文)任务书课题名称系别专业姓名 基于单片机智能小车的设计 电子与信息工程学院 城建电子学号2011 年 2 月 20 日至 2010 年 6 月 22 日共 17 周......

    智能小车总结(5篇材料)

    第二届“飞思卡尔杯”智能小车 技术总结报告 队名:BIT 电气二队 队员:叶林瓒李文楠学院:信息科学技术学院专业:电气工程与自动化 宣言:做到最好2008-9-3 第二届“飞思卡尔杯......

    智能小车设计文献综述

    智能小车设计文献综述 智能小车设计文献综述 摘要:随着电子工业的发展,智能技术广泛运用于各种领域,智能小车不仅在工业智能化上得到广泛的应用,而且运用于智能家居中的产品也越......