基于ARM的寻迹小车.docx
《基于ARM的寻迹小车.docx》由会员分享,可在线阅读,更多相关《基于ARM的寻迹小车.docx(26页珍藏版)》请在冰豆网上搜索。
基于ARM的寻迹小车
XX郵電XX
开放实验报告
题目:
基于ARM的寻迹小车
系别:
信息与控制系
导师姓名:
XXX
小组成员:
XXX
起止时间:
2007.9.28至2007.12.10
摘要
本文是基于ARM的自动寻迹小车,通过反射式光电传感器ST198或ST188来检测黑线,并把信号传给微控制器,进入相关控制程序,控制电机的转向来寻迹,终点时,同时检测到黑线停止。
微控制器是NXP(Philips公司)推出的基于ARM7TDMI核的ARM2132,以ZLG(周立功)的EasyARM2131为开发板,选择容易操作的SM-202A为步进电机驱动芯片,及驱动力足够大的型号为42BYG步进电机作为驱动器,电源由电池供给,组成一个完全独立的基于ARM的寻迹小车系统。
介绍了ARM的编译平台ADSV1.2、Keil,仿真器平台Protues7.0,及其操作。
还介绍了ARM的C语言编程,步进电机驱动的功能及接线,还有黑线检测电路模块。
给初学者一个很好的入门。
关键词:
基于ARM的自动寻迹小车反射式光电传感器ST198或ST188
EasyARM2131步进电机驱动芯片SM-202A步进电机42BYGC语言编程ADSV1.2KeilProtues7.0
ABSTRACT
ThisarticleisbasedontheARMtargethomingmarkcar,examinestheheavylinethroughreflectiontypephotoelectricsensorST198orST188,andpassestothesignalthemicroprocessor,entersthedependentprogram,controlstheelectricalmachinerytochangeseeksthemark.
ThemicroprocessorisNXP(PhilipsCorporation)promotesbasedonARM7TDMInucleusARM2131,(weekrendersmeritoriousservice)EasyARM2131takeZLGasthedevelopmentboard,SM-202Awhichthechoiceeasytooperateisstep-by-stepsthemotor-drivenchip,andthedrivinginfluenceenoughbig42BYGachievementstep-by-stepstheelectricalmachinery,thepowersourcebythebatterysupplies,composesonecompletelyindependentlytoseekthemarkcarsystem.
IntroducedARMtranslationplatformADSV1.2,simulatorplatformProtues7.0,andoperation.AlsointroducedtheARMClanguageprogramming,step-by-stepsthemotor-drivenfunctionandthewiring,butalsohastheexaminationheavylineelectriccircuit.Forbeginneraverygoodcrossingthethreshold.
Keyword:
BasedonARMtargethomingmarkcar
ReflectiontypephotoelectricsensorST198orST188
EasyARM2131
Step-by-stepsmotor-drivenchipSM-202A
Step-by-stepselectricalmachinery42BYG
Clanguageprogramming
ADSV1.2Protues7.0
第一章序言
1.1课题背景
嵌入式系统的应用广泛,它主要应用于以下几个方面:
1.消费类电子产品应用
嵌入式系统在消费类电子产品应用领域的发展最为迅速,而且在这个领域中的嵌入式处理器的需求量也最大。
由此可以清楚地理解“为什么从2006年开始以来中国台湾联发科公司的MTK多媒体应用处理器的全球出货量如此巨大?
”了,其2007年手机应用芯片的出货量将挑战1亿片。
由嵌入式系统构成的消费类电子产品已经成为现实生活中必不可少的一部分。
比如各式各样的信息家电产品,如智能冰箱、流媒体电视等。
大家最熟悉的莫过于手机、PDA、电子辞典、数码相机、MP3/MP4等。
可以说离开了这些产品生活会失去很多的色彩。
也许不久的将来,如果没有了这些消费类电子产品,生活就像以前没有电一样很不方便。
即将上市的苹果公司i-Phone手机中的嵌入式ARM处理器的数量,估计会达到4个以上。
2.智能仪器、仪表类应用
这类产品可能离日常生活有点距离,但是对于开发人员来说却是实验室里的必备工具,比如网络分析仪、数字示波器、热成像仪等。
通常这些嵌入式设备中都有一个应用处理器和一个运算处理器,可以完成一定的数据采集、分析、存储、打印、显示等功能。
可以说这些设备对于开发人员的帮助很大,大大地提高了开发人员的开发效率,可以说是开发人员的“助手”。
3.通信信息类产品应用
这些产品多数应用于通信机柜设备中,如路由器、交换机、家庭媒体网关等。
在民用市场使用较多的莫过于路由器和交换机了。
通常在一个典型的VOIP系统中,嵌入式系统会扮演不同的角色,有网关(gateway)、关守(gatekeeper)、计费系统、路由器、VOIP终端等。
基于网络应用的嵌入式系统也非常多,可能目前市场发展最快的就是远程监控系统等监控领域中应用的系统了。
4.过程控制类应用
过程控制类应用主要指在工业控制领域中的应用。
对生产过程中各种动作流程的控制,如流水线检测、金属加工控制、汽车电子等。
汽车工业已开始在中国取得了飞速的发展,汽车电子也在这个大发展的前提下迅速成长。
汽车发动机控制器ECU是汽车中最为复杂且功能最为强大的嵌入式系统,它包含电源、嵌入式处理器、通信链路、离散输入、频率输入、模拟输入、开关输出、PWM
输出和频率输出等各大模块。
正在飞速发展的车载多媒体系统、车载GPS导航系统等也都是典型的嵌入式系统应用。
美国Segway公司出品的两轮自平衡车,其内部就使用嵌入式系统来实现传感器数据采集、自平衡系统的控制、电机控制等。
5.国防武器设备应用
如雷达识别、军用数传电台、电子对抗设备等。
在国防军用领域使用嵌入式系统最成功的案例莫过于美军在海湾战争中采用的一套Adhoc自组网作战系统了。
利用嵌入式系统设计开发了Adhoc设备安装在直升机、坦克、移动步兵身上构成一个自愈合自维护的作战梯队。
这项技术现在发展成为Mesh技术,同样依托于嵌入式系统的发展,已经广泛应用于民用领域,比如消防救火、应急指挥等应用中。
6.生物微电子应用
指纹识别、生物传感器数据采集等应用中也广泛采用嵌入式系统设计。
现在环境监测已经成为人类突出要面对的问题,可以想像随着技术的发展,将来的空气中、河流中都可能存在着很多的微生物传感器在实时地检测环境状况。
而且还在实时地把这些数据送到环境监测中心,以达到检测整个生活环境避免发生更深层次的环境污染问题。
这也许就是将来围绕在我们生存环境周围的一个无线环境监测传感器网。
对于已经过去的SARS等重大流行性疾病,人类可以在嵌入式系统的协助下与之对抗。
1.2开发意义
现在全世界嵌入式处理器的品种已经超过1000多种,流行的体系结构多达30多个,嵌入式处理器的寻址空间也从64KB到2GB不等,其处理速度可以从0.1MIPS~2000MIPS等。
一般来说可以把嵌入式处理器分成以下4类:
MCU(MicroControllerUnit)嵌入式微控制器,如:
单片机、ARM;
MPU(MicroProcessorUnit)嵌入式微处理器;
嵌入式DSP处理器(DigitalSignalProcessor);
嵌入式片上系统(SOC)。
8位的单片机将被ARM所取代,且ARM的优势也将赶上DSP。
DSP的优点在于其并行性和高速的乘法运算性能,其主要应用在通信、电机控制、图象处理、硬盘控制等领域。
但是ARM9的处理速度已经达到了1.1MIPS/MHz,时钟可以达到233MHz。
而新出的ARM10可以达到700MHz。
在处理速度上已经可以和DSP抗衡了。
在开发成本上,ARM远远低于DSP。
在生产成本上,ARM的价格也低于DSP。
在开发难度上ARM低于DSP,因为ARM的编程要灵活得多。
在接口上,许多ARM芯片都内置了多个USB口、串口。
有些还内置了集成音频接口和LCD控制器(可以达到彩色)。
有些ARM芯片有PWM输出,可以取代DSP在电机控制等方面的应用。
有些ARM还具备实时钟功能。
Altera出了内置FPGA的ARM,这可以取代DSP在通信方面的应用。
有些ARM内置DMA控制器,可以取代DSP在硬盘行业的地位。
连通信行业在国内占领先地位的华为和中兴都已经购买ARM核了。
可见ARM在DSP的传统行业已经是步步为赢了。
我本人认为:
先学好单片机,包括它的汇编及C51开发,有单片机的基础,再学ARM;开始时,把ARM当作功能强大的单片机使用,即不要涉及操作系统;最后向嵌入式驱动开发,这要很深内功,是这领域的专家级人物了。
1.3课题完成功能
本课题是一个完全独立的基于ARM的寻迹小车系统,能寻黑线前进,到终点停。
用电池供电,有5V、12V,Easy2131板3V由5V通过USB分压供给。
闭合电源,小车前移,通过车前的光电传感器来检测黑线。
黑线时输出为低电平,白线时为高电平,这样有白到黑时,就可生成一下降沿,进入下降沿触发的中断程序,控制一电机后转,从而改变了车向。
就这样小车寻线前进。
终点横置两条黑线,小车到时,两传感器同时检测到黑线,处理相关程序控制小车停。
第二章系统各模块介绍
2.1总系统结构图
电机驱动器所需时钟信号CP由ARM2131的PWM提供;42BYG型步近电机的力矩对我们的应用来说足够大,很好用,需12V电压;ARM2131的3V电压由5V分压而来;检测黑线用反射式光电传感器ST188或ST198,并有相关的模块电路。
这里都用电池供电,不仅要满足所需电压,还要考虑电流,即达到额定功率。
因5V电源要为五个模块供电:
两电机驱动器、两黑线检测电路、ARM2131,故满足其功率须两个电池并联;8节充电电池提供1300MA、10.42V,电机为12V、0.5A,故可带动两电机。
2.2电机驱动器SM-202A
高细分驱动器SM-202A:
特点:
※电源电压不大于+40VDC
※斩波频率大于35KHZ
※输入信号与TTL兼容
※无CP脉冲电流自动减半
※最大驱动电流1A/相
※可驱动两相或四相混合式步进电机
※双极性恒流斩波方式
※光电隔离信号输入
※SM-202A型:
2、4、8、16、32、64、128、256;SM-202型:
2、5、10、20、40
※驱动电流可由开关设定
※外型尺寸:
85*59*19
※重量:
0.11kg
◆引脚说明
☆<+45V,GND端为外接直流电源,直流电压范围为+12V~+40V。
☆A+,A-端为电机A相,B+,B-端为电机B相。
☆+COM端为光电隔离电源公共端,典型值为+5V,高于+5V时应在CP,DIR及FREE端串接电阻。
☆CP端为脉冲信号,下降沿有效。
☆DIR端为方向控制信号,电平高低决定电机运行方向。
☆FREE端为驱动器使能,高电平或悬空电机可运行。
低电平驱动器无电流输出,电机处于自由状态。
◆电气特性(Tj=25℃)
☆输入电压+12V-+40V,典型值为+30V。
☆输出相电流0.15、0.25、0.40、0.5、0.6、0.7、0.85、1.00A。
☆信号逻辑输入电流10mA-25mA。
☆下降沿脉冲时间大于5us。
☆绝缘电阻大于500MΩ。
◆使用环境及参数
☆冷却方式;自然冷却或强制风冷。
☆使用环境;尽量避免粉尘及腐蚀性气体。
☆温度;0°C-+50°C。
☆湿度;40-89%RH。
细分数由开关K1、K2、K3来选择。
为降低成本,两三个驱动器可共用一个电源。
但应提高电源的额定功率和额定输出电流并需注意散热。
注意:
调节好CP与相应的细分数,CP太小,电机内磁场没足够时间建立,会卡住不转。
2.342BYG型号步进电机
电动机的选择。
方案一:
采用普通的直流电机。
直流电机具有优良的调速特性,调速平滑、方便。
调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速启动、制动和反转。
能满足各种不容的特殊运行要求。
方案二:
采用步进电机,步进电动机的一个显著的特点就是具有快速启动和停止能力,能够达到我们所要求的标准。
如果负荷不超过步进电机所能提供的动态转矩值,就能够立即是步进电机启动或反转。
其转换灵敏度比较高。
正转、反转控制灵活。
由于寻迹对于直流电机,很难控制其达到要求,因此采用步进电机作为动力源。
其图、参数、接线图为:
,C应改为A非,D应改为B非。
2.4黑线检测电路
探测路面黑线的基本原理:
光线照射到路面并反射,由于黑线和白纸对光的反射系数不同,可以根据接收到的反射光强弱来判断是否是黑线。
利用这个原理,可以控制小车行走的路迹。
下面几种可行的方案是根据本原理设计的:
方案一:
采用普通的发光二极管及光敏电阻组成的发射接收方案,如图1-1所示。
其工作原理:
当无光照时,光敏电阻呈现高阻状态,又分压公式可知,电阻R2无压降三极管截止,三极管的集电极输出高电平;反之,当有光照的时候,光敏电阻接收到反射的光,其阻值下降,由分压公式,R2有压降三极管导通,输出低电平,利用高低电平可以判断控制小车的形程和方向。
本方案能达到基本的控制要求,但是它的缺点在于容易受到外界光线的干扰,不易于控制小车的行迹,损坏了信号采集的效果。
主要是因为可见光的反射效果跟地表的平坦程度、材料的反射情况有关直接影响到检测效果。
图并不是此图,我用的是双极放大,且通过双极后,检测黑线为低电平,白的为高,不用加非门,就能适合中断触发。
若要图,可跟杨老师要。
1-1发光二极管及光敏电阻组成的发射接收方案
方案二:
脉冲调制的反射式红外发射接收器。
由于采用该有交流分量的调制信号,侧可大幅度减少外界干扰;另外红外发射接收管的最大工作电流取决于平均电流。
如果采用占空比小的调制信号,再平均电流不变的情况下,瞬时电流很大(50~100mA),大大提高了信噪比。
如图1-2所示。
它的优点是消除了外界光线的干扰提高了灵敏度。
1-2脉冲调制的反射式红外发射接收方案
由以上两种方案比较可知。
方案二虽然比方案一优势大,但是我们做的小车要求不是很高,方案一基本能满足要求,并且电路简单,工作还比较可靠,因此我们选择方案一作为小车的寻迹传感器。
2.5电源的供给
没好用的电池,应该能找到好用的。
而这耗了我很多时间。
第三章编译及仿真环境介绍
3.1NXP的ARM2131
其功能特点请见周立功的《深入浅出ARM7—LPC213x/214x》(上册),在到处学术抄袭情况下,这是一本很认真地书。
ARM2131是ARM7TDMI核,三级流水线,内部集成几种很通用的模块,寄存器不是很多,管脚也不是很多,这就很适合初学者,可把它当作功能强大的单片机使用,不必熟悉ARM体系结构及汇编指令,而用C写,其余的事由编译器完成。
3.2编译器ADS1.2
ARM编译器有IDE、ADS、IAR、Keil等。
对于我们来说,常用的是ADS、Keil,相对好用。
ADS1.2的安装请见相关的介绍。
ARM2131工程模板用周立功现成的,主要用的命令有:
Compile、Make、Debug。
调试软件AXD不会用,它全是汇编指令。
ARM2131支持并口在线仿真,用的是JTAG;并口及串口写程序,写在flash。
并口软件为H-JTAGV0.6.0,串口软件为LPC_ARM_ISP_V2.2.3,都能在网站下到。
JTAG仿真。
装好软件,连接好并口,打开
,其界面为:
点击
,读取芯片型号。
选择DebugInRAM,Compile、Make、Debug。
进入AXD界面,点击Project→Creattarget,点击ADD,增加C:
/ProgramFlies/H-JTAG/H-JTAG.del文件。
然后点击运行,就写入到RAM中了,可仿真了。
并口写,前面都一样,只是要选DebugInFLASH,
点击
,进入并做如下设置。
再Compile、Make,就可生成HEX文件,这文件用来烧程序、加载到Proteus中来仿真。
点击
或H-JTAG中的
,有如下界面,并做如下设置:
然后,点击
、
、
、
,OK!
但我从来没写成功过,因写到87%就停了。
若有问题可Email、Tel取得周的技术支持。
串口写程序。
打开
,其界面为:
做如下设置:
连接好串口,短接上JSP1,P0.0与TXD0,P0.1与RXD0接上。
点击
,弹出
,按板子的复位键并确认,就读出了芯片型号。
分别点击
、
、
、
,程序就固定了,断开JSP1,按复位键就能跑片子了。
注意:
只有断开JSP1才能跑程序。
3.3Protetus7.0及KeilforARM
双击
来打开,然后加载元件、画图。
跟做单片机时一样用。
KeilforARM可用Keil2、Keil3,也和单片机一样操作,不过要进行一些配置,这里就不提了,请参考其他的。
第四章系统硬件设计
硬件接线如下图:
P0.5接DIR1;
P0.6接DIR2;
P0.7接CP,两电机共用一条;
P0.16接ZuoZhuan,为其中一光电传感器的输入信号;
P0.20接YuoZhuan,为另一光电传感器的输入信号。
SM-202A的EA可不接。
注意:
都要共地线,ARM2131、SM-202A、电机、黑线检测模块。
总的说,其电路简单。
调式电路时,要善于使用检测工具,万用表、示波器等。
还要就是要坚持,成功终属你的。
第五章系统软件设计
4.1软件流程图
总流程图中,先进行管脚设置,包括:
管脚功能选择、方向选择、置“1”还是清“0”;再PWM2初始化,提供CP;设置中断,分配中断到向量中断,设置中断服务程序地址,设置外部中断的触发电平及极性,使能个中断、IRQ中断。
然后,等待中断。
定时是用来,控制电机所转角度。
定时长短由实际测量中的经验值决定。
有可能角度过大超线,那就重新定时想另外一边转;也有可能转度不够,那就再转。
外部中断程序,包括左传、右转。
先把定时器关了,再判到终点没,并有去干扰延时,也为经验值,可改动。
中断程序都要清除中断标志及通知VIC中断处理结束,以响应下次中断和其他中断。
4.2系统软件程序
#include"config.h"
#definePWM2(2<<14)//P0.7
#defineDIR1(1<<5)//P0.5
#defineDIR2(1<<6)//P0.6
#defineKEY1(1<<16)//P0.16,EXINT0
#defineKEY5(1<<20)//P0.20,EXINT3
void__irqIRQ_youzhuan(void);
void__irqIRQ_zuozhuan(void);
void__irqIRQ_Timer0(void);
voidDelayNS(uint32dly)//延时程序
{uint32i;
for(;dly>0;dly--)
for(i=0;i<5000;i++);
}
voidPWM2_Init()
{PWMPR=0x00;//不分频,PWM计数频率为Fpclk
PWMMCR=0x02;//PWMMR0与PWMTC匹配时复位PWMTC
PWMPCR=(1<<0)|//PWM2单边沿控制
(1<<10);//使能PWM2输出
PWMMR0=Fpclk/400;//PWM速率控制/计数初值,T=1/400s,//经验值,电机转速
PWMMR2=PWMMR0/2;//PWM1的位置,方波作为STK_CLK
PWMLER=0x05;//锁存0,2的PWM匹配值
PWMTCR=0x02;//复位PWMTC
PWMTCR=0x09;//使能PWM
}
voidTimer0_Init(void)
{T0TC=0;//定时器设置为0
T0PR=0;//时钟不分频
T0MCR=0x03;//设置T0MR0匹配复位T0TC,并产生中断标志
T0MR0=Fpclk/10;//1/10s定时,//经验值,小车转弯角
T0TCR=0x01;//启动定时器0
T0IR=0x01;//清除中断标志
}
voidEINT_Init(void)
{VICIntSelect=0;//设置所有中断匹配为IRQ中断
VICVectCntl0=0x20|14;//分配EINT0中断到向量中断0
VICVectAddr0=(uint32)IRQ_zuozhuan;//设置中断服务程序地址
EXTMODE=0x01;//设置EINT1为边沿触发。
//极性寄存器使用默认值,0,下降沿
VICVectCntl1=0x20|17;//分配EINT3中断到向量中断1
VICVectAddr1=(uint32)IRQ_youzhuan;//设置中断服务程序地址
EXTMODE=EXTMODE|0x06;//设置EINT3为边沿触发。
//极性寄存器使用默认值,0,下降沿
EXTINT=0x09;//清除EINT0、EINT3中断标志
VICVectCntl2=0x20|4;//分配Timer0中断到向量中断2
VICVectAddr2=(uint32)IRQ_Timer0;//设置中断服务程序地址
T0IR=0x01;
VICIntEnable=(1<<4)