kesheWord格式.docx
- 文档编号:8413577
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:22
- 大小:674.43KB
kesheWord格式.docx
《kesheWord格式.docx》由会员分享,可在线阅读,更多相关《kesheWord格式.docx(22页珍藏版)》请在冰点文库上搜索。
(一)基于嵌入式单片机的设计方案
方案一:
采用单片机控制。
利用单片机丰富的IO端口,及其控制的灵活性,实现基本的数码管显示功能。
电机采用继电器控制,可实现低压电平控制高压电平,以防止高压电对CPU的影响,损坏单片机.
(二)基于EDA为核心的设计方案
采用FPGA应用控制,FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。
用户可以根据不同的配置模式,采用不同的编程方式。
应用FPGA设计该系统的框图如下:
图2基于EDA为核心的设计方案
(三)方案选择
通过比较以上两种方案,单片机方案有较大的活动空间,也比较方便,对控制系统的要求也不是很高,价格也比较底,电路设计也比较方便,软件指令简单,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级.
EDA方案采用FPGA应用控制,它由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。
这样在编程时就很复杂,对于刚开始学习者来说是很困难的,价格昂贵,在用于实验性课程设计来说的话是不划算的,对于控制系统的要求比较高,在实现所要求的功能时仿真比较复杂。
综上所述我们选择方案一。
三、结构设计
在这里,本系统我们选用了方案一(基于嵌入式单片机的设计方案)。
总体设计框图如下:
(一)CPU控制模块
CPU控制模块采用MCS—51单片机(单片机又称单片微控制器),它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:
一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜等。
单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可......用它来做一些控制电器一类不是很复杂的工作足矣了。
它主要是作为控制部分的核心部件
(二)键盘模块
图54×
4行列键盘
键盘是人操作本系统的唯一通道。
键盘设计采用4×
4行列键盘,十个数字键,上下左右键4个,还有确定键,取消键。
采用单片机的P0到P7端口控制。
数字键可设定电机的转速、设定时钟、设定温度等。
上下左右键用于菜单的选择控制,让菜单跟随上下左右键上下滚屏翻动,实现菜单滚屏显示。
确定键用于菜单中所选项目的启动。
如启动电机按照规定速度转动,启动红外侧距功能、启动秒表等。
取消键:
取消键和确定键的功能相反,即停止某项功能。
从图可看出,当没有键按下时,行线和列线之间是不相连的,若第N行第M列的键被按下,那么第N行与第M列的线就被接通。
如果在列线上加上信号,根据行线的状态,便可得知是否有键按下。
如果在列线上逐行加上一个扫描信号,就可以判断按键的位置。
在H1到H4接四个10K的上拉电阻。
(三)数码管显示模块
(四)电源模块
图7电源图
直流稳压电源基本组成框图
一个系统如果没有电就不能工作,如果没有稳定的电源也不能正常工作,所以电源在系统的设计中是站着非常重要的作用。
电源模块中为系统输出正5V和正3.3V电源,5V为本系统的主电源,3.3V是为红外模块提供电源。
作区保护,以防过载而损坏。
78表示78系列,05表示稳压器输出的电压值,L为稳压器最大输出电流为100MA。
C19和C25为大容量滤波电流,C20和C26为小容量,C20用于抑制78L05芯片自激振荡,C26用于压榨该电源电路采用78L05三端固定式正压稳压器,它有过流、过热和调整管安全工芯片的高频带宽,减小高频噪声。
LED灯为电源指示灯。
SPX1117-3.3为3.3v备用电源电路。
(五)时钟模块
我选用的时钟芯片是DS1302,它价格比较底,使用方面,下面对DS1302作一定的介绍:
图17时钟模块图
DS1302的结构及工作原理
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×
8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1RES复位2I/O数据线3SCLK
串行时钟时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信DS1302工作时功耗很低保持数据和时钟信息时功率小于1mW.
DS1302是由DS1202改进而来增加了以下的特性双电源管脚用于主电源和备份电源供应Vcc1为可编程涓流充电电源附加七个字节存储器它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域.
(六)红外测速模块
图18测速模块原理图
测速电路用的是光耦测量转动圆盘引起的脉冲宽度,从而可得单片机的实时速度,精度很高,可达千分之一。
用的是外部中断的,在电机带动转盘的时候,转盘上有n个狭缝,只有当转盘到达狭缝的时候,红外线传感器是导通的,平常的时候传感器都处于断开的状态,利用这一特点,我采用外部中断的方式,每次断开的时候采集一个信号,发生中断,每发生一次中断,就让计数器计数一次,以这样的方式来测量电机的转速。
从上图可知,该模块采取的是单片机高电模块驱动,由于单片机的高电平输出的电信号的驱动能力很底,采用了电流放大电路(三极管都是电流信号放大元件,如果在输出的地方接一负载电阻就可以变为电压放大),就可以实现由弱电平驱动直流电机。
一编码盘
<
对于交流电机调速,控制系统都要求能在很宽的转速范围内实现高精度的转速测量。
目前,
测速器件主要有光电编码器、测速发电机、霍尔传感器及磁旋转编码器等,而通常使用的是光电编码器,又称光电轴角编码器和轴编码器等。
光电编码器以高精度计量圆光栅为检测元件,通过光电转换,将输入的角位置信息转换成相应的数字代码,并与计算机等控制器件及显示装置相连接,实现数字测量、数字控制与数字显示[1]。
光电编码器根据输出代码的不同主要分为绝对式与增量式两大类。
增量式编码器输出两路正交编码脉冲以及每转一个脉冲的零脉冲信号,其码盘如图1所示。
对两路正交脉冲进行计数及相位判断,可计算速度大小和方向;
零脉冲信号用于校正每转编码器产生的脉冲个数,防止积累误差的产生。
增量式编码器的优点是易于实现小型化,响应迅速,结构简单,其缺点是初始定位及掉电后容易造成数据损失等。
绝对式编码器一般使用二进制码(如格雷码)盘,码盘上的码道按一定规律排列,对应每一分辨率区间有唯一的二进制数,5位格雷码制绝对式码盘如图2所示。
绝对式编码器同增量式的相比,具有固定零点,输出代码是轴角的单值函数,抗干扰能力强,掉电后再起动无须重新标定,无累积误差等优点。
但是绝对式编码器的缺点是制造工艺复杂,不易实现小型化,通常生产的位数不高。
因此,一般速度测量采用的是增量式编码器。
由于绝对式G编码器比增量式编码器更容易检测转轴位置,且其输出的数字码计算简单,不需另外增加编码器脉冲计数器等,将绝对式编码器应用于速度测量,以简化测速环节。
同时,针对绝对式编码器的位数较低问题,分析比较常用的测速方法,选择精度较高的M/T法,以提高测速的精度和分辨率。
二测速原理
1 M法(测频法)
在规定的检测时间内,检测光电脉冲发生器所产生的脉冲信号的个数来确定转速。
虽然检测时间一定,但检测的起止时间具有随机性,因此M法测量转速在极端情况下会产生士1个转速脉冲的误差。
当被测转速较高或电机转动一圈发出的转速脉冲信号的个数较大时,才有较高的测量精度,因此M法适合于高速测量即在一定的时间间隔t内,计数被测信号的重复变化次数N,则被测信号的频率fx可表示为:
fx=N/t;
。
M法通过测量一定时间内编码器的脉冲个
数来获得速度值。
设编码器每圈发出脉冲数为P,在指定的测量时间Tg内,编码器共发出m1个脉冲,则电机转速n的表达式为:
由式
(1)可看出,M法的分辨率与转速无关,任何转速情况下,能检测到的速度最小改变量都相等。
由式
(2)可以看出,在测量时间一定时,只有当m1增大(速度增加)时,精度才会增加,因此M法适用于高速情况下的测量。
.2 T法(测周期法)
它是测量光电脉冲发生器所产生的相邻两个转速脉冲信号的时间来确定转速。
相邻两个转速脉冲信号时间的测量是采用对已知高频脉冲信号进行计数来实现的。
在极端情况下,时间的测量会产生士1个高频脉冲周期,因此T法在被测转速较低(相邻两个转速脉冲信号时间较大)时,才有较高的测量精度,所以T法适合于低速测量。
即在被测信号的一个周期内,计数
时钟脉冲数m0,则被测信号频率fx=fc/m0。
其中,fc为时钟脉冲信号频率;
T法的原理是通过测量相邻两个编码器脉冲的时间间隔来得到速度信息,即测频法。
如果计
时用的高频时钟脉冲频率为fc,由编码器的相邻两个测速脉冲控制计时的起始和终止,如计时器计数值为m2,则转速n、分辨率Q及精度E的表达式如表1所示。
因此,T法的Q值随转速上升而增加,分辨率减小,在低速时有较高的分辨率。
转速增加时,m2减小,测量误差增大,可见T法适合于低速情况下的测量,但低速测量时间会较长。
3M/T法
M/T法是综合M法和T法进行改进得来的,它同时测量检测时间和此段时间内的编码器脉冲
数。
其原理是,设定一个时间间隔Tg,用Tg后第一个编码器脉冲来终止时间计数器m2,则测量时间T=Tg+$T。
如编码器脉冲计数值为m1,fc为高频时钟脉冲频率,则M/T法的转速n、分辨率Q及精度E如表1所示。
由表1可以看出,分辨率与测量时间及转速都有关系。
但高速时,M/T法中的m2值比T法
的要大很多,所以精度仍然很高。
M/T法相比于M法和T法,在很大的速度范围内,精度高,误差小,因此其应用非常广泛,本文也采用M/T法实现转速测量。
但M/T法在低速时测量时间仍然很长
三光栅测量原理
1光拍的获得和光电流[3]
如图1所示,双光栅由以速度v运动的动光栅A和静光栅B组成.He-Ne激光器发出频率为
0的基频光束,此光束通过动光栅A后,由于多普勒频移,1级衍射光的频率变为
0
d,而0级衍射光的频率仍为
0与基频光束的频率相同.1和0级衍射光再通过静止光栅B时,出射光的频率如图1的右边所示(只考虑1级和0级).其中光束1的频率为
0,光束2的频率为
0+
d.易知,光束1和光束2是相互平行的光束,但由于He-Ne激光器发出的是有一定宽度的光束(束腰直径大约为1.2mm),所以只要两光栅的距离比较小,则两光束在空间会有重叠的部分(如图2所示),故两光束能叠加从而形成光拍图
光拍信号进入硅光电池后,其对应的光电流可由下述关系求得.光束1的光电场
光束2的光电场
硅光电池输出的光电流
其中!
为硅光电池的光电转换系数.从式(5)可以看出,第一、二项和第四项由于频率和基频光是同一数量级,硅光电池无法作出反应,因此硅光电池输出的变化的光电流实际上就是式(5)的第三项,即
微电流放大器
用硅光电池作检测元件时,是把它作为电流源来使用的(如图3中的虚线框所示).但式(6)所表示的光电流is通常是很小的,必须利用运算放大器进行放大.图3是T形网络电路组成的微电流放大和I/V转换电路,在理想的情况下有
式中u=-isR1,将它代入上式可求得输出电压为
单片机测频
由式(8)可知,通过对R1、R2、R3的值作适当的选择,能够获得较大的输出电压.但由于这里硅光电池输出的电流is是很微小的,所以输出电压u0的值仍然较小,在整形之前必须再次进行放大,使放大后的峰值电压达到+5V左右以便后续的电路进行处理.整形电路的作用是把u0变成标准的矩形波送往与门电路,与门电路的另一路信号(时基信号)来自单片机的P1.1脚.用编程的方法,能使P1.1脚输出宽度为1s的矩形脉冲[5].秒脉冲把与门打开1s,在这段时间内整形电路输出的矩形脉冲通过与门电路,然后进入单片机,再由单片机记录下在这1s时间内矩形波的数目N很显然,这一数目就是信号u0的频率fd的值(电路如图4所示).由式易知fd与动光栅的运动速度v的关系是
fd=v/d
因此被测运动光栅的速度是
v=fd!
d(10)
利用fd和光栅常数d的值,编程计算出v,然后在数码管上显示出来.这样,通过测频解决了测速的问题.
四测量电路与数码管显示
速度信号采集采用光码盘转换电路,如图2所示。
发光二极管LED发出红外光,透过遮光板TLP的圆孔照射光敏三极管T1,使其迅速由截止状态变为导通,如此反复形成光脉冲信号经T2的放大,再由74LS04反向整形后送给单片机。
为了提高响应速度,选用脉冲响应时间50ns的GaA1As红外发光二极管,将光敏三极管做光敏二极管用,另外数据的处理由单片机完成。
设:
n—电机转速(r/min);
N—一个采样周期T内计数器记录的光脉冲的个数;
P—测速盘开孔的总数;
T—采样周期(s);
f—脉冲频率。
则:
T·
n·
p/60=N
因此电机转速为:
n=60N/(PT)
四软件设计
该程序在总体思想是显示器按照键位的信息显示内容,控制电机和红外模块的运行,程序总体设计图如下
图20主程序的流程图
(一)初始化和主程序模块
初始化是整个软件开始运行的地方,为软件运行做好铺垫,一开始就需要做一些准备工作,在初始化模块中,需要完成对各接口芯片的初始化、定时器初始化、LCD的初始化,全屏幕清屏、按键查找等工作。
(二)按键模块
图23键盘处理子程序流程图
按键模块是本程序较重要的部分,采用了键盘扫描程序,即如果在列线上逐行加上一个扫描信号,就可以判断按键的位置,该程序是个常用而较经典,在其中采用了—nop()空指令和延时函数Delay
(1),都是去按键抖动,因为在硬件原理图上没考虑抖动问题,所以对软件设计要求较高。
/********************************************************/
/*键扫描函数*/
//--------------------------------------------------
/*键扫描子程序*/
Ucharkeyscan(void)
{Uchartemp,key1;
while(P1==0xf0)
{;
}
Delay
(1);
if(P1!
=0xf0)
{
P1=0x0F;
//低四位输入
temp=P1;
//读P1口
key1=(~temp)&
0x0F;
_nop_();
P1=0xF0;
//高四位输入
key1=key1+(~((temp&
0xf0)|0x0f));
return(key1);
}
在按键模块中,还有一个较重要的程序,就是对按键功能的控制,使我们在不同菜单级别按不同的键位得到我们想要的结果,该程序就是把按键的信息存储到KEY中,不0到9数字键的键位信息通过一键位翻译函数翻译为有用的十进制数。
五总结
由于使用的是单片机作为核心的控制元件,以及良好的人机界面LCD液晶显示器,使本系统具有功能强、人机界面友好、电路简单等特点,加上经过优化的程序,使其有很高的智能化水平。
但是在我们设计和调试的过程中,也发现了一些问题,譬如字根采用查表法,可用字库芯片代替,使其功能更强大;
该系统的设计还不够人性化,比如加上语音的提示功能,可能会更有生命力。
六附录
测量转速,使用光电传感器,被测电机带主光栅旋转,我们在光栅上开了50小缝隙,电机每旋转一周就会产生50个脉冲,要求将转速值(转/分)显示在数码管上。
实验程序如下:
#include<
REG52.H>
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
#defineLED_DATP1
sbitLED_SEG0=P0^3;
sbitLED_SEG1=P0^2;
sbitLED_SEG2=P0^1;
sbitLED_SEG3=P0^0;
//sbitpin_SpeedSenser=P3^5;
//光电传感器信号接在T1上
#defineTIME_CYLC100//12M晶振,定时器10ms中断一次我们1秒计算一次转速//1000ms/10ms=100
#definePLUS_PER50//码盘的齿数,这里假定码盘上有50个小缝隙,即传感器检测到50个脉冲,认为1圈
#defineK100.0//校准系数
unsignedcharcodetable[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchardataDisbuf[4];
//显示缓冲区
uintTcounter=0;
//时间计数器
bitFlag_Fresh=0;
//刷新标志
bitFlag_clac=0;
//计算转速标志
bitFlag_Err=0;
//超量程标志
//在数码管上显示一个四位数
voidDisplayFresh();
//计算转速,并把结果放入数码管缓冲区
voidClacSpeed();
//初始化定时器T0
voidinit_timer0();
//初始化定时器T1
voidinit_timer1();
//延时函数
voidDelay(uintms);
voidit_timer0()interrupt1/*interruptaddressis0x000b*/
{
TF0=0;
//d定时器T0用于数码管的动态刷新//
TH0=0xC0;
/*initvalues*/
TL0=0x00;
Flag_Fresh=1;
Tcounter++;
if(Tcounter>
TIME_CYLC)
{Flag_clac=1;
//周期到,该重新计算转速了
voidit_timer1()interrupt3/*interruptaddressis0x001b*/
TF1=0;
//定时器T1用于单位时间内收到的脉冲数
//要速度不是很快,T1永远不会益处
Flag_Err=1;
//如果速度很高,我们应考虑另外一种测速方法,:
脉冲宽度算转速
voidmain(void)
Disbuf[0]=0;
//开机时,初始化为0000
Disbuf[1]=0;
Disbuf[2]=0;
Disbuf[3]=0;
init_timer0();
init_timer1();
while
(1)
{
if(Flag_Fresh)
{Flag_Fresh=0;
DisplayFresh();
//定时刷新数码管显示
if(Flag_clac)
{Flag_clac=0;
ClacSpeed();
//计算转速,并把结果放入数码管缓冲区
Tcounter=0;
//周期定时清零
TH1=TL1=0x00;
//脉冲计数清零
if(Flag_Err)//超量程处理
//数码管显示字母'
EEEE'
Disbuf[0]=0x9e;
Disbuf[1]=0x9e;
Disbuf[2]=0x9e;
Disbuf[3]=0x9e;
while
(1)
{DisplayFresh();
//不再测速等待复位i
}
//在数码管上显示一个四位数
voidDisplayFresh()
P2|=0xF0;
LED_SEG0=0;
LED_DAT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- keshe