目录 绪 论………………………………………………………………………… 2
第1章 参数计算与设备选型………………………………………………3
1.1 控制芯片 ……………………………………………………………3
1.2 测速发电机………………………………………………………… 4
1.3 模数转化器件——ADC0809……………………………………… 6
第2章 系统设计…………………………………………………………… 9
2.1 系统方框图 ………………………………………………………… 9
2.2 硬件设计………………………………………………………… 10
2.2.1 直流测速发电机……………………………………………… 10
2.2.2 ADC0809与单片机连接…………………………………… 10
2.2.3 数码管……………………………………………………………11
2.2.4 综合接线图………………………………………………………11
2.3 软件设计 ……………………………………………………… 12
2.3.1 程序设计思路说明………………………………………………12
2.3.2 总程序控制流程图………………………………………………13
2.3.3 ADC0809工作流程图及程序……………………………………14
2.3.4 显示部分工作流程图及程序………………………………… 15
第3章 结论 ……………………………………………………………18
参考文献…………………………………………………………………… 19
绪论
在现代工业自动化高度发展的时期,几乎所有的工业设备都离不开电机,形形色色的电机在不同领域发挥着很重要的作用。与之而来的问题是,如何更好地控制电机,对于不同的场合,对电机的控制要求是不同的,但大部分都会涉及到直流电机的转速测量,从而利用转速来实施对直流电机的控制。 直流电机转速作为直流电机的一项重要技术指标,在各个应用场合都有重要的研究价值,例如在发动机,电动机,机床主轴等旋转设备的试验运转和控制中,常需要分时或连续测量,显示其转速及瞬时速度等,转速是其他大部分技术参数的计算来源,因此,准确测量直流电动机的转速具有重要的研究意义和理论价值。 目前,对直流电动机的速度检测方法很多,从整体上可分为模拟检测和数字检测方法。 模拟检测:即利用测速电机作为发电机,通过检测反电势E的大小和极性可得到转速N和电机转向,采用这种方法直接可以得到转速N和输出电压的特性曲线,直观,但也有很多不足,比如在高速和低速情况下实际输出偏离理想特性。 数字检测技术:即通过分析数字信号产生的一系列脉冲间接获取电机转速。如光电旋转编码器是将检测圆盘划分为等距的三个同心圆,最外环和次外环分别用等距的黑白条纹分开,且最外环和次外环的缝隙位置相位差为90度,用于判断电机的转速,最内环只有一个黑条纹,用作定位脉冲或者是复位脉冲,利用光电编码器输出的脉冲可以计算转速,具体的又可分为M法,T法和M\T法。 此外,市场上已经有了技术成熟的电机测速装置,如利用霍尔元件设计制作的直流电机测速仪等,凭借其精度高,稳定性好等优势占有重要的一席之地。 而本次微机控制原理课程设计的任务是直流电机速度的测量与显示。主要要求是通过测速直流发电机作为传感器,检测直流电机的转速,并输出与转速相关的电压,通过ADC0809芯片将测速发电机输出电压转换成电压的数字信号。控制芯片采用AT89C51将采集转换后的数字信号进行处理,得到转速,并通过四位数码管予以显示。整体上能够完成从转速检测到数据处理到显示的一整套功能。
第一章 参数计算与设备选型
1.1 控制芯片 本课题中控制芯片的作用主要是与ADC0809相连接,采集模数转换后得到的8位二进制码,经过公式计算后得到电压值,同时连接四位数码管进行显示。综合考虑,选用AT89C51即满足要求。 一.简介 AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 二. AT89C51引脚图如下: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8085.tmp.png
图1-1 AT89C51引脚图
三.主要特性 ·与MCS-51 兼容 ·4K字节可编程FLASH存储器 ·寿命:1000写/擦循环 ·数据保留时间:10年 ·全静态工作:0Hz-24MHz ·三级程序存储器锁定 ·128×8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路 1.2 测速直流发电机 一.简介 直流测速发电机是一种测速元件,它把转速信号转换成直流电压信号输出。直流测速发电机广泛地应用于自动控制、测量技术和计算机技术等装置中。对直流测速发电机的主要要求是:(1)输出电压要严格地与转速成正比,并且不受温度等外界条件变化的影响;(2)在一定的转速下,输出电压要尽可能的大;(3)不灵敏区要小。 二.分类 直流测速发电机可分为励磁式和永磁式两种。励磁式由励磁绕组接成他励,永磁式采用矫顽力高的磁钢制成磁极。由于永磁式不需另加励磁电源,也不因励磁绕组温度变化而影响输出电压,故应用较广。 三.输出特性 根据已经学过的直流发电机的工作原理知,电刷两端的感应电势: Ea=CeΦn=Ken (2-1) 由上可知:1.电刷两端的感应电势与电机的转速成正比;2.直流发电机能够把转速信号换成电势信号,从而用来测速。 他励测速发电机接线图如下: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8086.tmp.png
图1-2 他励测速发电机接线图
在上图正方向得: Ua=Ea-IaRa (2-2) Ia=Ua/RL (2-3) 负载时测速发电机的输出电压为: (2-4)
本课题选用55CY61系列他励测速发电机,主要参数如下:
根据负载时测速发电机的输出电压公式知,直流测速发电机的输出电压与转速成正比,即Ua=Cn。采用55CY61时,最大转速2000r/min时最大输出电压为40v,因此C=50. 由于ADC0809要求输入模拟电压信号在0~5v之间,因此需要有滑动变阻器进行电压范围调整,调整后输入到ADC0809的电压值缩小倍数为K=8。例如,当检测到电压值为U=1V时,对应的转速为: n =U*K*C=1*8*50=400r/min 再将运算后的n值用数码管显示出来即可。
1.3 模数转化器件——ADC0809 一.简介 ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。是目前国内应用最广泛的8位通用A/D芯片。 二.引脚图 file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8096.tmp.png 图1-3 ADC0809引脚图 ADC0809各脚功能如下: D7-D0:8位数字量输出引脚。
IN0-IN7:8位模拟量输入引脚。
VCC:+5V工作电压。
GND:地。
VREF(+):参考电压正端。
VREF(-):参考电压负端。
START:A/D转换启动信号输入端。
ALE:地址锁存允许信号输入端。
(以上两种信号用于启动A/D转换) .
EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。
OE:输出允许控制端,用以打开三态数据输出锁存器。
CLK:时钟信号输入端(一般为500KHz)。
A、B、C:地址输入线。
三.主要特性 1)8路输入通道,8位A/D转换器,即分辨率为8位。 2)具有转换起停控制端。 3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时) 4)单个+5V电源供电 5)模拟输入电压范围0~+5V,不需零点和满刻度校准。 6)工作温度范围为-40~+85摄氏度 7)低功耗,约15mW。
四.分辨率 ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。A/D转换器的位数决定着信号采集的精度和分辨率。8为A/D转换器的精度为: 1/28=0.39% 因此,输入为0~5v时,分辨率为: 5/(28-1)=0.0196V 五.工作时序 图4所示是ADC0809的工作时序图。从该时序图可以看出,地址锁存信号ALE在上升沿将三位通道地址锁存,相应通道的模拟量经过多路模拟开关送到A/D转换器。启动信号START上升沿复位内部电路,START的下降沿启动转换,此时转换结束信号EOC呈低电平状态,由于逐位逼近需要一定过程,所以,在此期间,模拟输入量应维持不变,比较器要一次次比较,直到转换结束,此时变为高电平。若CPU发出输出允许信号OE(输出允许为高电平),则可读出数据。另外,ADC0809具有较高的转换速度和精度,同时受温度影响也较小。 file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8097.tmp.png 图1-4 ADC0809的工作时序图
六.A/D转换器的其他技术指标 1.量化误差 ADC把模拟量变为数字量,用数字量近似表示模拟量,这个过程称为量化。量化误差是ADC的有限位数对模拟量进行量化而引起的误差。实际上,要准确表示模拟量,ADC的位数需很大甚至无穷大。一个分辨率有限的ADC的阶梯状转换特性曲线与具有无限分辨率的ADC转换特性曲线(直线)之间的最大偏差即是量化误差。 2.偏移误差 偏移误差是指输入信号为零时,输出信号不为零的值,所以有时又称为零值误差。假定ADC没有非线性误差,则其转换特性曲线各阶梯中点的连线必定是直线,这条直线与横轴相交点所对应的输入电压值就是偏移误差。 3.满刻度误差 满刻度误差又称为增益误差。ADC的满刻度误差是指满刻度输出数码所对应的实际输入电压与理想输入电压之差。 4.线性度 线性度有时又称为非线性度,它是指转换器实际的转换特性与理想直线的最大偏差。 5.绝对精度 在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值,称为绝对精度。对于ADC而言,可以在每一个阶梯的水平中点进行测量,它包括了所有的误差。 6.转换速率 ADC的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。
第2章 系统设计
2.1 系统方框图
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80A8.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80A9.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AA.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AB.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AC.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AD.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AE.tmp.png
图2-1 系统方框图
2.2 硬件设计 2.2.1 直流测速发电机
本课题选用55CY61系列他励测速发电机,由于ADC0809对输入模拟量信号要求电压在0~5V范围内,而测速直流发电机的输出电压普遍在几十伏,因此需要利用滑动变阻器使满额时电压值为5V。接线如图: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80BF.tmp.png 图2-2 发电机接线图 图中,RV1起到了电压范围调整的作用,R1与C1构成了RC滤波电路,可有效滤除测速直流发电机输出中的杂波。R2主要是限流电阻。
2.2.2 ADC0809与单片机连接 ADC0809与51单片机之间的连接主要有两部分,一是地址部分,0809的A,B,C三个引脚决定IN0~IN7的选通,即地址问题, 因系统中只用了IN0通道,因此将A,B,C接地,即000选定IN0;二是D0~D7的数据端口,接51单片机的P0口的八位;其次,由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89C51单片机的P3.7端口上,也就是要求从P3.7输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了。其他控制引脚,EOC接P2.0口,OE接P2.1口,START接P2.2口。 综上所述,接线方式如下图所示: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80CF.tmp.png 图2-3 ADC0809与单片机接线图 2.2.3 数码管 选用四位共阳数码管对转速值进行显示。数码管的位选端接P3口的低四位,段选端接P1口。此外,段选端应连接330Ω的上拉电阻,本处使用排阻,位选端应用PNP型三极管作为数码管的驱动。 2.2.4 电源模块 file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80D0.tmp.jpg 图2-4 电源模块电路图
2.2.4 综合接线图 将上述模块综合,衔接后,得到如下系统接线图: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80E1.tmp.jpg
图2-5 系统接线图
2.3 软件设计 2.3.1 程序设计思路说明 针对与转速对应的电压值的测量,严格按照ADC0809要求的时序图设定相关控制端口的状态,读入转换后的数据,数学运算处理成转速后用数码管显示,数码管采用动态扫描法显示,在中断中完成动态扫描。
2.3.2 总程序控制流程图 file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80E2.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80E3.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F3.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F4.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F5.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F6.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F7.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F8.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F9.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80FA.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810B.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810C.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810D.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810E.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810F.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8110.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8111.tmp.png 图2-6 总程序控制流程图
2.3.3 ADC0809工作流程图及程序 启动ADC0809对模拟量输入信号进行转换,通过判断EOC(P2.0引脚)来确定转换是否完成,若EOC为0,则继续等待;若EOC为1,则把OE置位,读入数据。 流程图如下:
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8112.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8123.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8124.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8125.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8126.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8127.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8128.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8129.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps812A.tmp.png
N file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps812B.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813B.tmp.png Y file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813C.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813D.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813E.tmp.png
图2-7 ADC0809工作流程图
该部分程序如下:
sbit EOC=P2^0; sbit OE=P2^1; sbit ST=p2^2; sbit CLK=P3^7;
uchar dat;
void main()
{ ST=0; ST=1; ST=0; while(EOC==0); OE=1; dat=P0; OE=0;
TMOD=0X11; TH1=(65536-2)/256; TL1=(65536-2)%256; TR1=1; ET1=1; EA=1; }
void timer1(void) interrupt 3 { CLK~=CLK; }
2.3.4 显示部分工作流程图及程序 四位数码管的显示采用中断法控制,动态扫描,定义变量jishu轮流扫描四位,在disp_busf数组中存放转速的四位,在定时/计数器T0中,每次进入中断时显示以为,当时间足够小时能达到人眼的停留效应,完成动态显示。 工作流程图如下:
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813F.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8140.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8141.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8142.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8153.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8154.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8155.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8156.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8157.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8158.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8159.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps815A.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps815B.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps816C.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps816D.tmp.png
N file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps816E.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps816F.tmp.png Y file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8170.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8171.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8172.tmp.png 图2-8 显示部分工作流程图
该部分程序如下:
uchar code wei[4]={0x01,0x02,0x04,0x08}; uchar code disp_code[10]={0x03,0x9f,0x25,0x0d,0x99, 0x49,0x41,0x1f,0x01,0x09}; uchar speed; uchar disp_busf[4];
void main()
{ TMOD=0X11; TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; ET0=1; EA=1; while(1) { disp_busf[0]=speed%10; disp_busf[1]=speed%100/10; disp_busf[2]=speed%1000/100; disp_busf[3]=speed/1000; } }
void timer0(void) interrupt 1 { TH0=(65536-10)/256; TL0=(65536-10)%256; P0=wei[jishu]; P2=disp_code[disp_busf[jishu]]; jishu++; if(jishu>=4) jishu=0; }
第3章结论
通过为期两个星期的微机控制原理课程设计,我对课堂上学到的微机控制原理的理论知识有了更深的理解,而且在亲自动手设计的过程中使知识形象化,了解了很多元件的用途,用法,以及很多细节问题。 在设计硬件电路过程中,虽然对AT89C51单片机非常熟悉,但它与ADC0809搭配测量模拟量的工作方式还不是很熟悉,因此我通过查阅相关书籍和上网查找有关知识,明白了二者接线的方式。尤其是第一次使用ADC0809, 除了输入通道和输出通道外,其他控制端口也要准确配置,特别是CLK端需要大约500KHz的工作频率,由于其自身内部并不存在时钟电路,因此需要外接。因此我采用了51的定时器T1输出方波,接入0809的CLK端。 在绘制电路图时,我应用了比较熟悉的Proteus绘图仿真软件,如果按照传统的画法,数码管以及0809的数据输出端的连线非常多,画面非常凌乱。因此我采用总线方式,是画面看起来非常简洁美观。 软件设计即程序编写工作有一些麻烦,首先要进行数据转换,由于直流测速发电机的输出电压在几十伏,而0809的输入电压被限定在0~5V,因此需要用滑动变阻器进行电压范围的缩小,数据处理中需要将电压按公式换算成转速。其次是显示部分,开始我用了一套复杂的动态扫描方法,即在main函数的循环中不断扫描各位,同时显示出该位的数字,但这种方法太过冗长,占用资源,因此我放弃了这种麻烦的方法,采用了在中断中循环扫描的思想,而且用一个数组,一个变量jishu即可完成位选和段选的赋值。这样,程序看起来非常简练。 总而言之,这次的课设让我收获颇丰,除了理论知识的充实外,也提高了自己应用软件,查找资料的能力,是对自身综合素质的一个提高。最后,非常感谢两位指导老师的指点与帮助,使我较好的完成了此次课程设计。
第4章 参考文献 1 何立民.MCS-51系列单片机应用系统设计.北京:北京航空航天大学出版社,1990 2 王晓明.电动机的单片机控制.北京:北京航空航天大学出版社,2002 3 张淑清.单片机原理及应用技术.北京:国防工业出版社,2010 4 温淑焕.微机原理及其应用.北京:中国农业科学技术出版社,2010
|