《机电一体化课程设计.doc》由会员分享,可在线阅读,更多相关《机电一体化课程设计.doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章 数据采集1.1 数据采集系统数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。在该系统中需要将模拟量转换为数据量,而 A/D是将模拟量转换为数字量的器件,还需要考虑的指标有:分辨率、转换时间、转换误差等等。而单片机是该系统的基本的微处理系统,它完成数据读取、处理及逻辑控制,数据传输等一系列的任务。在该系统中采用的是8051系列的单片机。双机通信的串行口可以采用RS232C标准接口,由芯片MAX232实现双机的通信。而数据的显示则采用的是LED数码管。数据采集系统一般由信号调理电路,多路切换电路,采样保持电路,A/D,单片机等组成。完成课程设计所需要的
2、系统框图如图1.1所示:A/D转换器单片机单片机LED显示器键盘MAX232采集信号图1.1 系统框图1.2 方案论证1.2.1 A/D模数转换的选择A/D转换器的种类很多,就位数来说,可以分为8位、10位、12位和16位等。位数越高其分辨率就越高,价格也就越贵。 (1)逐渐逼近式A/D转换器:它是一种速度快、精度较高、成本较低的直接式转换器,其转换时间在几微秒到几百微秒之间。(2)双积分A/D转换器:它是一种间接式的A/D转换器,优点是抗干扰能力强,精度比较高,缺点是数度很慢,适用于对转换数度要求不高的系统。(3)并行式A/D转换器:它又被称为flash(快速)型,它的转换数度很高,但她采用
3、了很多个比较器,而n位的转换就需要2n-1个比较器,因此电路规模也极大,价格也很贵,只适用于视频A/D转换器等数度特别高的领域。鉴于上面三种方案,在本设计选用的是逐渐逼近式A/D转换器ADC0809.1.2.2单片机的选择单片机是一种面向大规模的集成电路芯片,是微型计算机中的一个重要的分支。此系统是由CPU、随即存取数据存储器、只读程序存储器、输入输出电路(I/O口),还有可能包括定时/计数器、串行通信口、显示驱动电路、脉宽调制电路、模拟多路转换器及A/D转换器等电路集成到一个单块芯片上,构成了一个最小但完善的计算机任务。本设计选用的是AT89C52.1.2.3 串行口的选择该串行口选用标准的
4、RS-232C接口,它是电平与TTL电平转换驱动电路。常用的芯片是MAX232,MAX232的优点是:(1)一片芯片可以完成发送转换和接收转换的双重功能。(2)单一电源+5V供电(3)它的电路设计与连接比较简单而且功能齐全。1.2.4 显示部分LED数码显示管是一种由LED发光二极管组合显示字符的显示器件。它使用了8个LED显示管,其中7个用于显示字符,1个用来显示小数点,故通常称之为八段发光二极管数码显示器。对LED数码显示器的控制可以采用按时间向它提供具有一定驱动能力的位选和段选信号。第二章 硬件部分2.1 主机部分 该系统是一个主从式多路数据采集系统,主机和从机均用单片机实现,它的主机部
5、分负责数据处理和显示,主机和从机之间用RS-232进行通信。它由AT89S52、MAX232、LED数码显示器组成。2.1.1 主机部分原理图设计其原理图如图2.1所示图2.1 主机部分电路原理图2.1.2 单片机(1)单片机的概述单片机是一种集成的电路芯片采用了超大规模技术把具有运算能力(如算术运算、逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换及A/D转换器等电路集成到一块构成单片机。
6、总而言之单片机的特点有以下几个方面:集成度高、存储容量大、外部扩展能力强、控制功能强、低电压、低功耗、性能价格比高、可靠性高等(2) 简介AT89C52AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、
7、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其引脚图,如图2.2所示图2.2 AT89C52的引脚图它一共有40个引脚,引脚又分为四类。其中有四个电源引脚,用来接入单片机的工作电源。工作电源又分主电源、备用电源和编程电源。还有两个时钟引脚XTAL1、XTAL2。还有由P0口、P1口、P2口、P3口的所有引脚构成的单片机的输入/输出(IO)引脚。最后一种是控制引脚,控制引脚有四条,部分引脚具有复位功能。2.1.3 LED数码显示器的应用原理LED数码显示器就是由发光二极管组成的,其内部结构如图所示,LED数码显示器有两种连接方式
8、:(1)共阴极接法:把发光二极管的阴极连在一起构成共阴极,使用时公共阴极接地。每个发光二极管的阳极与输入端相连。如图2.3所示(2)共阳极接法。把发光二极管的阳极连在一起构成共阳极,使用时共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。如图2.4所示 图2.2 LED内部结构 图2.3 共阴极接法 图2.4 共阳极接法为了显示字符,要为LED显示器提供显示段码(或称字形代码),组成一个“8”字的七段,再加上1个小数点位,共计八段。各段位码位的对应关系如表2.1所示。 表2.1 段位码对应关系段位码D7D6D5D4D3D2D1D0位码段dpgfedcba 2.2 从机部分 该系统的从机
9、负责A/D模数转换,并应答主机的命令,需要用到ADC0809、AT59C52,又由于它们两个的时钟频率不一样,所以又要用到一个74LS74。2.2.1 从机的电路原理图设计该部分需要对模拟量进行一次模数转换,则要用到一个ADC0809,又因为它们之间的时钟频率不一样又需要用到一个74LS74对其进行一个二分频的工作,这个只需要将74LS74的第3根引脚与单片机AT89C52的第30根引脚相连,将74LS74 的第9根引脚与ADC0809的时钟信号引脚相连。单片机AT89C52的P0口与ADC0809的D0D7相连,而ADC0809的ADDA、ADDB、ADDC分别与P0口的低三位相连。其用到的
10、MAX232与主机部分的电路连接方法一样。其电路图如2.5所示 图2.5 从机部分电路设计图2.2.2 单片机之间的通信(1)串口通信RS-232C计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。(2)接口的物理结构 RS-232C接口连接器一般使用型号为DB-25的25芯插头座,通常插头在DCE端,插座在DTE端。一些设备与PC机连接的RS-232-C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。所以采用DB-9的9芯插头座,传输线采用屏蔽双绞线。两个DB-9的连接如图2.6所示图2.6 两个DB-9的连接图(2)
11、 简介MAX232MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电,可以实现TTL电平与RS-232C电平相互转换。MAX232内部结构图如图2.7所示图2.7 MAX232的内部结构图内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、
12、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚GND、16脚VCC(+5v)。引脚结构图如图2.8所示: 图2.8 MAX232的引脚结构图其中引脚1-6(C1+、V+、C1_、C2+、C2-、V-)用于电源电压转换,只要在外部接入相应电解电容即可;引脚7-10和引脚11-14构成两组TTL信号电平与RS-232C信号电平的转换
13、电路,对应引脚可直接与单片机串行口的TTL电平引脚和PC的RS-232C电平引脚相连。单片机与MAX232的连接如图2.9所示图2.9 单片机与MAX232的连接图2.2.3 模数转换器ADC0809按模拟量转换成数字量的原理可以分为3种:双积分式、逐次逼近式及并行式A/D转换器。而该系统选用的是ADC0809,下面就具体的介绍一下ADC0809的工作原理。1、 C0809的介绍ADC0809是八通道的八位逐次逼近式A/D转换器。由单一的5V电源供电,片内带有锁存功能的8选1的模拟开关。由C、B、A的编码来决定所选的模拟通道。转换时间为100us。转换误差为1/2LSB。它的引脚的排列及其功能
14、,其引脚图见2.10图2.10 ADC0809的引脚图IN7IN0 :八个通道的模拟输入量。ADDA、ADDB、ADDC:模拟通道地址线。当CBA=000时,IN0输入,当CBA=111时,IN7输入。ALE:地址锁存信号。START:转换启动信号,高电平有效。D7D0:数据输出线。三态输出,D7是最高位,D0是最低位。OE:输出允许信号,高电平有效。CLK:时钟信号,最高频率为 640KHZ。EOC:转换结束状态信号。上升沿后高电平有效。Vcc:+5V电源。Vref:参考电压。2、ADC0809时序图及其接口电路ADC0809的时序图如图2.11所示: 图2.11 ADC0809的时序图其工
15、作过程是:ALE的上升沿将A、B、C端选择的通道地址锁存到8位A/D转换器的输入端。START的下降验启动8位A/D转换器进行转换。A/D转换开始使EOC端输出低电平。A/D转换结束,EOC输出高电平。该信号通常可作为中断申请信号。OE为读出数据允许信号。OE端为高电平时,可以读出转换的数字量。硬件电路设计时,需根据时序关系及软件进行设计。ADC0809与AT89C52单片机的接口方式,如图2.12所示:图2.12 ADC0809与单片机的连接图由于ADC0809具有输出3态锁存器,其八位数据输出引脚可直接与数据总线相连。地址译码引脚A、B、C分别与地址总线低三位A0、A1、A2相连,以选通I
16、N0IN7中的一个通道。在启动A/D转换时,由单片机的P3.4控制A/D转换器的地址锁存和转换启动,由于ALE和START连在一起,因此AD0809在锁存通道的同时,也启动了A/D转换器。在读取转换结果时,用低电平的读信号RD,产生的正脉冲作为OE信号,用以打开三态输出锁存器。将转换结果输出。而低电平的写信号WR则表示转换结束状态信号。第三章 软件部分3.1 简介KeilUvision2Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(UVISION)将这些组合在一起。Keil有以下几个特点:1、 全功能的源代码编辑器;2、
17、 器件库用来配置开发工具设置;3、 项目管理器用来创建和维护用户的项目;4、 集成的MAKE工具可以汇编、编译和连接用户嵌入式应用;5、 所有开发工具的设置都是对话框形式的;6、 真正的源代码级的对CPU和外围器件的调试器;3.2 主机程序设计本软件系统有一个主程序,四个子程序,四个子程序分别为向串口发送数据子程序、LED数据显示子程序、延时子程序、主机串口接受中断子程序。(1)主程序主程序对系统进行初始化,主要是进行定时/计数的初始化,然后调用键盘扫描程序,再根据按下的键来调用向串口发送数据子程序将相应的数据发送给串行口。当没有键按下时,则送一个数F给LED显示器。其流程图见图3.1(2)向
18、串口发送数据子程序 该程序首先将数据发送到串行口,当T1=0时,表明传送结束。其流程图如3.2所示(3)LED显示程序该子程序用的数码管动态显示方式。先将单片机的P2.7口选通进行位选,然后将位选的值发送给单片机P1口。接着将单片机的P2.6口选通进行段选,然后将要显示的数字的值发送给P0口。然后调用延时,接着将P2.7、P2.6口置0,下面是重复上面的过程,直到要显示的数字全部显示在数码上。其流程图如3.3所示。(4)主机串口接受中断子程序。当RI =1时,接受串口过来的数据,并对该数据进行处理,接下来用处理过的数据调用LED显示程序。如图3.3所示开始初始化启动定时器1开中断再根据扫描到的
19、键盘号,发送相应的数据给串口,调用一个演示在LED上显示F判断是否有按键按下YN图3.1主程序数据发送到串行口当T1=0时,则传送结束TI=0图3.2 向串口发送数据子程序 开始显示个位显示十分位显示百分位显示小数点结束图3.3 LED显示程序、开始接受数据对数据进行相关处理调用演示结果图3.4 主机串口接受中断子程序3.3 从机部分程序设计该部分的程序包括一个主程序、三个子程序,三个子程序分别为从机串口接受中断函数向串口发送数据子程序和模数转换子程序ADCON。(1)主程序主程序是进行系统的初始化,由于主从两个单片机要进行通信,所以两个单片机的初始化应该是相同的,并调用A/D转换。其流程图如
20、图3.5所示(2)从机串口接受中断函数因为发送完成和接受到新字节都会触发串口中断,因此串口中断程序里用if(RI)来表示接受中断,然后将RI清0。再判断接受到的数据第4位是否为1,如果为1,则按照主机发送过来的通道进行采集,如果为0,则调用循环采集程序。如图3.6所示(3)模数转换子程序ADCON先要选通ADC0809,又因为ADC0809具有8个通道,利用For循环进行8次采集,接下来选择转换通道,F8HFFH用以选择输入模拟信号的通道IN0IN7的选择,首先从第一个通道开始,然后执行一条读取转换结果的指令,再将转换得到的结果送给串行口,再依次循环,将通道号自增1,直到8个通道全部转换完。其
21、流程图如图3.7所示(4)向串口发送数据子程序程序首先将数据发送到串行口,当T1=0时,表明传送结束。开始初始化启动定时器1开中断调用Adcon()结束图3.5主程序开始接收串口数据判断接受到的数据第4位是否为1YN按选定的通道号采集选定循环采集方式结束图3.6 从机串口接受中断函数开始选定通道号开始转换转换结束将得到的数据发送给串口结束图3.7模数转换子程序ADCON参考文献1 严洁.单片机原理及其接口技术.机械工业出版社,2010,65-1052 范红刚.51单片机自学笔记.北京航空航天大学出版社,20093 高云.基于MSP430的温室多路数据采集系统.农机化研究,2009,No.84
22、常铁原,王欣,陈文军. 多路数据采集系统的设计.电子技术应用,2008,No.115 叶红海,李丽敏.基于单片机的多路数据采集系统的设计与实现.2008,No.46 彭伟.单片机C语言程序设计实训100例.电子工业出版社,2009,46-48,104-1107 杨居义,杨晓琴,王益斌等.单片机课程设计指导.清华大学出版社,2009,135-1418 刘刚,秦永左,朱杰斌.单片机原理及应用.北京大学出版社,2006,76-98,134-155附录1主机部分程序#include#define uchar unsigned char#define uint unsigned intsbit k1=P
23、34;sbit smgd=P26;sbit smgk=P27; uchar Pre_KeyNo=16,KeyNo=16;uchar code LEDData=0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07, 0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79, 0X71/*延时子程序*/void Delay(uint x) uchar i; while(x-)for(i=0;i120;i+);/*LED显示子程序*/void Display_Result(int d) smgk=1; P0=0X7C; smgd=1;P0=LEDDatad/10
24、0; /显示百位Delay(5);smgd=0;smgk=0;smgk=1;P0=0X7D; smgd=1;P0=LEDDatad/10%10; /显示十位Delay(5);smgd=0;smgk=0;P0=0x7E;smgd=1;P0=LEDDatad%10; /显示个位Delay(5);smgk=0;smgd=0;smgk=1;P0=0X7C;smgd=1;P0=0x80; /显示小数点Delay(5);smgd=0;smgk=0;/*向串口发送数据子程序*/void putc_to_serialport(uchar C) SBUF=C; while(T1=0);TI=0;Display(
25、) smgK=1; P1=0X01; Smgd=1; P0=OXOF; /*主程序*/ void main() P0=0x00; SCON=0x50; /串口工作于方式1 TMOD=0x20; /T1工作于模式2 PCON=0x00; /波特率不加倍 TH1=0xFD; /波特率为9600 TL1=0xFD; TI=RI=0; TR1=1; /启动定时器1 IE=0x90; /允许串口中断 while(1) Delay(100); if(P3!=0X0F) Keys_Scan(); swith(KeyNo) case 0:putc_to_serialport(0X00); break; cas
26、e 1:putc_to_serialport(0XF8); break; case 2:putc_to_serialport(0XF9); break; case 3:putc_to_serialport(0XFA); break; case 4:putc_to_serialport(0XFB); break; case 5:putc_to_serialport(0XFC); break; case 6:putc_to_serialport(0XFD); break; case 7:putc_to_serialport(0XFE); break; case 8:putc_to_serialpo
27、rt(0XFF); break; case 16:Display() /*主机串口接受中断函数*/void Serial_INT() interrupt 4 if(RI) int i,j,m; long int n; uchar c; c=SBUF; i=c*0x05; j=i*0x10; n=j*0x10; m=n/0xFF; Display_Result(m); 从机部分程序# include #define uchar unsigned char#define uint unsigned intsbit ST=P32;sbit EOC=P36;sbit OE=P37;void Delay
28、(uint x) uchar i;while(x-) for(i=0;i120;i+);/*向串口发送数据子程序*/void putc_to_SerialPort(uchar c) SBUF=c; while(TI=0);TI=0;/*A/D转换子程序*/void Adcon() int j,m=0XF8; uchar n; for(j=0,P0=m;j+;j8) ST=0;ST=1;ST=0; while(EOC=0); OE=1; n=P1; putc_to_SerialPort(n); m+;/*主程序*/void main() TMOD=0X20; /T1工作于模式2 SCON=0X5
29、0; /串口工作于方式1 PCON=0X00; /波特率不加倍 TH1=0XFD; TL1=0XFD; TI=RI=0; IE=0X90; /允许串口中断 TR1=1; /启动定时器1 while(1) Delay(100); Adcon();/*从机串口接受中断函数*/void serial_INT() interrupt 4if(RI) RI=0; int i,c; uchar val; c=SBUF; i=c&0X08; /判断接收到的第四位是否为1,如果为1,则按选定的通道采集,否则就是循环采集 switch(i) case 0: Adcon();break; case 8: P0=c; ST=0;ST=1;ST=0; while(EOC=0); OE=1; val=P0; putc_to_SerialPort(val); break;