《虚拟仪器》课程设计-基于MFC和单片机的智能电压表.doc_第1页
《虚拟仪器》课程设计-基于MFC和单片机的智能电压表.doc_第2页
免费预览已结束,剩余16页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学虚拟仪器课程设计说明书目录绪论1i.虚拟仪器的组成1ii.虚拟仪器的特点11方案确定21.1设计要求21.2方案确定32硬件模块32.1系统总流程图32.2 cd4051多路选择开关32.3 pga 202程控放大器42.4 ad7705模数转换器53单片机程序93.1 主函数93.2 ad7705相关程序103.3 pga放大倍数选择程序123.4 cd4051通道选择函数123.5 串口函数123.6 其它子函数134上位机程序135元件清单146小结15参考文献16绪论虚拟仪器(virtualinstruction,简称为vi)是虚拟技术的一个重要组成部分。它是由计算机技术、测量技术和微电子技术高速发展而孕育出的一项革命性技术。这一创新使得用户能够根据自己的需要定义仪器功能,而不像传统仪器那样受到仪器厂家的限制。虚拟仪器的出现彻底改变了传统的仪器方法,开辟了测控技术的新纪元。20世纪80年代中期,美国国家仪器公司(nationalinstrument,简称为ni)首先提出的“软件就是仪器”(thesoftwareistheinstrument)这一概念便是对虚拟仪器最本质的论述和表达。正是这个概念为用户定义、构造自己的仪器系统提供了完美的解决途径。i.虚拟仪器的组成虚拟仪器由硬件和软件两部分构成。硬件由计算机和i/o接口设备组成,按功能可分为3个主要部分:信号输入:完成信号的采集、放大和a/d转换,将被测信号变成标准信号(一般用电压信号)以利于计算机处理。对于多量程采集卡,只需根据传感器输出选择量程即可。信号输出:将计算机产生的数字信号经过信号调理转换成适合于被测系统的激励信号。这两部分由i/o接口设备(如:数据采集卡、gpib总线仪器、vxi总线仪器、pxi总线仪器和串口系统等)完成。信号处理:利用计算机对所采集的信号进行分析、显示和存储等,pc机是硬件平台的核心。软件是虚拟仪器的核心,仪器的功能由用户在软件平台上编程实现。目前最常用的软件开发工具是美国ni公司的labwindows/cvi2和labview。ni公司的虚拟仪器平台labview简化了虚拟仪器系统的开发过程,缩短了系统开发和调试的周期。即使是个编程的新手,也能用全图形化方式编程的labview很快地”画”出程序来。因为labview是真正面向科学家和工程师的编程语言。ii.虚拟仪器的特点与传统仪器相比,虚拟仪器具有下面一些特点:(1)虚拟仪器的软硬件都具有开放性、模块化、互换性、可重复使用等特点。一般运行于windows环境,可以同时启用多个应用,而且用户可以根据需要灵活组合,大大提高了使用效率,克服了传统仪器功能专一限制很死的缺点。(2)大大地降低了测试成本。传统测量多采用硬件设备或仪器,这些设备本身的制造成本就很高,在实验室或研究所内使用还可以。但是,在野外、工作现场,设备的搬运、维护费用很高,使测试成本大大地提高,有时甚至无法实现。而虚拟仪器是借助于计算机以软件为核心,随着计算机的微型化,携带非常方便,有人形象地说“把实验室拎着走”。由于所有信号有一个公用的量化、分析和处理通道,减少了复杂的开关矩阵和信号电缆。因此,采用虚拟仪器既省去了大量设备硬件的制造成本,也减少了搬运维护等费用,对于经济条件较紧张的我国来说更具有现实意义。(3)使用效率高。传统仪器都是自成系统、功能单一、体积庞大、仪器繁多,而虚拟仪器只需要一台计算机,其它必须的硬件如a/d、d/a等都是固定在计算机插槽上的,体积小,使用起来非常方便。虚拟仪器是一种软件化的测量装置,软件的灵活性与复用性使用户可以根据自己的需要定义测量装置,也可以灵活地组合仪器。模块化和规范化的设计为虚拟仪器组建自动测试系统提供了极大的方便。资源可重复使用,做完实验后,pc机又可转入它用,不仅虚拟仪器工作台的pc机可以一机多用,而且即使实验室也可以一室多用,节约了设备资源,提高了利用率,可缓解高校实验室空间不足的局面。(4)功能更强大,处理能力更强。信号处理理论的不断完善和计算机运算能力的大大提高,使虚拟仪器具有强大的数据处理能力。这就是通常所说的“一台有采集卡的计算机加上用户自己开发的vi,就具有了几个实验室仪器的测试能力”。(5)远程访问和交互式操作。通过internet真正实现软硬件资源的共享。这样研究人员可不到现场就能高效地进行实验,而把工作重点放在实验结果的处理分析上,大大提高了科技人员的工作效率,降低了劳动强度。将多种测试集于一体的方法缩短了测试时间,提高了测试速度。(6)测量精度更高。传统仪器的操作件都是物理实体,操作次数多了可能会出现滑丝、指示不准等机械故障,导致测量误差大。而虚拟仪器主要是软件完成,操作简单,受电缆长度、阻抗和仪器修正因素的影响较小,提高了测量的准确性和可重复性,测量精度也会相应提高。1方案确定1.1设计要求1.设计一个智能化的电压采集、测量、监控系统,该系统以单片机和虚拟仪器技术为核心并具有如下功能:(1).能对0-5v范围变化的模拟信号进行连续采样,并在pc机中进行实时显示,采样频率不低于10hz;(2).具有数据记录功能,能够将采集到的数据以文件形式保存在pc机中; (3).能对系统存在的随机误差和系统误差进行校正;(4).系统具有自动量程选择功能,量程至少4档可调;(5).具有自动电压监控功能,当采样值大于4v时,点亮报警指示灯。2.要求完成的主要任务:(1).合理设计系统总体方案,并画出方框图;(2).正确选择a/d和pga,要求系统测量最大量程时, 测量分辨率达到1mv以内,最小量程时测量分辨率达到1uv以内;(3).要求系统具有随机误差和系统误差校正功能,具有自动量程选择功能;(4).pc机软件由labview或c/c+编程实现,要求操作方便,界面美观;(5).设计说明书应详细说明设计思路、特点和电路工作原理。1.2方案确定本次设计是基于单片机和mfc编程的智能数字电压表。使用cd4051作为多路选择开关,用于误差校正。 pga202可编程放大器,用于自动量程的切换时的电压放大。单片机采用stc90c516rd+,用于对电路板上各个芯片的控制。上位机界面用mfc编程,主要实现了采集电压的显示,超量程报警和数据存储功能。2硬件模块2.1系统总流程图ad770516位pga202程控放大cd40518路选择pc机单片机输入电压总的电路连接图请看附图1。2.2 cd4051多路选择开关cd4051引脚图:图2.1 cd4051引脚图引脚功能描述: a0a2: 地址端 i0/o0i7/o7: 输入输出端 inh: 禁止端 o/i: 公共输出/输入端 vdd: 正电源 vee: 模拟信号地a0a2地址线真值表:表2.1 cd4051真值表2.3 pga 202程控放大器pga 202芯片,其放大增益为1,10,100,1000满足具有四档量程,模拟输入电压的最大值为5v,对应的量程分别为5000mv档,500mv档,50mv档,5mv档。pga引脚图如下:图2.2 pga202引脚图pga202引脚介绍:a0、a1:增益数字选择输入端+vcc-vcc:+15v和-15v电源+vin、-vin:同相和反相输入端filter a、filter b:输出滤波端vout sence:输出检测端与输出端相接digital comnon:数字公共地端vos adjust:偏置调整端vref:参考电压输入端vout:输出端将a0,a1分别接到单片机的p1.0,p1.1脚,通过单片机程序控制,输出高/低电平来控制其增益。来实现自动量程转换功能。1倍对应5v,依次,1000倍对应5mv档。由于pga 202供电电源为+/-15v的差分电源,而系统供电电源为5v。故采用a0515s-2w来放大电压。2.4 ad7705模数转换器本次设计精度的要求为:最大量程05v时, 测量分辨率达到1mv以内,最小量程05mv时测量分辨率达到1uv以内,根据这一要求可知adc至少要有13位。ad7705为16位,且具有分辨率从、宽动态范围、自校准、低功耗、优良的抗造性能等优点,所以选择ad7705,其引脚图如图。ad7705的内部结构主要包括由缓冲器和增益可编程放大器(pga)组成的前端模拟调节电路、-调制器、可编程数字滤波器等部件。片内的增益可编程放大器pga可选择1、2、4、8、16、32、64、128八种增益之一,将不同摆幅范围的各类输入信号放大到接近a/d转换器的满标度电压再进行a/d转换,有利于提高转换质量。当电源电压为5 v,基准电压为2.5 v时,器件可直接接受从020 mv至02.5 v摆幅范围的单极性信号和从020 mv至02.5 v范围的双极性信号,负极性电压相对ain()引脚而言,这两个引脚应偏置到恰当的正电位上。不允许在器件的任何引脚施加相对于gnd为负电压的信号。图2.3 ad7705引脚图ad7705的引脚介绍:sclk:串行接口时钟输入端。mclk in : 芯片工作时钟输入。可以是晶振或外部时钟,其频率范围为500khz 到5mhz。mclk out:时钟信号输出。当用晶振作为芯片的工作时钟时,晶振必须接在mclk in 和mclkout之间。如果采用外部时钟,mclk out可用于输出反相时钟信号,以作为其他芯片的时钟源。该时钟输出可以通过编程来关闭。cs:片选端,低电平有效。reset: 芯片复位端口。当该端为低电平时,ad7705芯片内的接口逻辑、自校准、数据滤波器等均为上电状态。ain1( + ) 、ain1( - ):分别为第1 个差分输入通道的正端与负端。ain2( + ) 、ain2( - ):分别为第2 个差分输入通道的正端与负端。ref in( + )、ref in( - ):分别为参考电压的ref in( + ) 、ref in( - ):分别为参考电压的正端与负端。din :串行数据输入端。dout:转换结果输出端。drdy:a/ d 转换结束标志。drdy为低电平,表明数据寄存器中有新的数据数据可用。drdy为高电平,表示数据寄存器数据在更新,这时不能读数据,避免在数据寄存器更新的过程中读出不可靠的数据。ad7705 的片内寄存器1.通信寄存器可读/ 写的8 位寄存器,上电复位后缺省值为零,对该寄存器执行写操作,决定下一次操作是写还是读,同时决定这一次读操作或写操作针对哪个寄存器,并控制对哪一个输入通道进行采样也就是说所有的寄存器(包括通信寄存器本身和输出数据寄存器) 进行读操作之前必须首先写通信寄存器,然后才能读选定的寄存器。通信寄存器各位定义如表2.2所示表2.2通信寄存器0/drdyrs2rs1rs0r/wstbych1ch0 0/drdy :写操作时此位必须为0,以保证对通信寄存器写操作的顺利完成。若将“1”写到此位,则后续的各位将不能被写入该寄存器。读操作时表示数据寄存器数据是否准备好。0/drdy与引脚定义相同,即低电平时数据寄存器中的数据可读,高电平时数据寄存器数据在更新,不能读。rs2rs0:寄存器选择位。用于选择下次操作要访问的8个片内寄存器之一,如表2.3所示表2.3 寄存器选择rs2 rs0 rs0 寄存器寄存器位数0 0 0 通信寄存器8位0 0 1 设置寄存器8位0 1 0 时钟寄存器8位0 1 1 数据寄存器16位1 0 0 测试寄存器8位1 0 1 无操作1 1 0 偏移寄存器24位1 1 1 增益寄存器24位r/w:读/ 写选择,指出下次对寄存器的操作是读还是写。 “1”表示下一次是读操作。 “0”表示下一次是写操作。stby :等待模式stby =“1”时器件处于等待或掉电状态,此时电流约10a。stby =“0”时为正常工作模式。ch1、ch0:选择输入通道。ch1ch0=00 选择通道1, ch1ch0=01 选择通道22.设置寄存器设置寄存器也是一个可读/写的8位寄存器,用于设置工作模式、校准方式和输入增益等。在通信寄存器选择后才能进行读或写。设置寄存器的位定义如表 2.4所示表2.4设置寄存器md1md0g2g1g0b/ubuffsyncmd1、md0:工作模式选择位,用于选择工作模式,具体含义见表2.5。表2.5工作模式选择md1md0工作模式功能00正常工作模式转换器进行正常a/d转换01为自校准模式一次完成零标度和满标度校准10零刻度校准零刻度系统校准,零基准电压由外部提供g2、g1、g0:增益选择位,设置pga的增益如表2.6所示表2.6增益选择g2g1g0增益设置0001001201040118100161013211064111128b/u:单/ 双极性工作选择位“0”表示选择双极性。 “ 1”表示选择单极性。buf:输入缓冲控制位 “0”表示无缓冲, “1”表示缓冲器传入通道,可处理高阻抗信号源。fsync: 滤波器同步位。该位为“1”时滤波器的节点、控制逻辑、校准逻辑等复位,为“1”正常处理数据。3.时钟寄存器时钟寄存器是一个可读/写的8 位寄存器,用于设置有关ad7705运行频率参数和a/d转换输出更新速率。时钟寄存器的位定义如表2.7。表2.7时钟寄存器zerozerozeroclkdisclkdivclkfs1fs0zero:必须在这些位上写零,以确保tm7705正确操作。否则,会导致器件的非指定操作。clkdis主时钟禁止位。逻辑“1”表示阻止主时钟在mclkout引脚上输出。禁止时,mclkout输出引脚处于低电平。clkdiv:时钟分频器位,clkdiv置为逻辑1时,mclkin引脚处的时钟频率在被ad7705使用前进行2分频;clkdiv置为逻辑0,则mclkin引脚处的频率实际上就是器件内部的频率。clk:时钟位。clk位应根据tm7705的工作频率而设置。如果转换器的主时钟频率为2.4576mhz(clkdiv=0)或为4.9152mhz(clkdiv=1),clk应置“0”。如果器件的主时钟频率为1mhz(clkdiv=0)或2mhz(clkdiv=1),则该位应置“1”fs1、fs0:滤波器选择位,与clk一起决定器件的输出更新率,在mclk in的时钟频率正确和clkdiv位的设置也恰当的情况下,输出更新率如表2.8所示。表2.8fs1、fs0与clk决定的器件输出更新率clkfs1fs0输出更新率(hz)000200012501010001120010050101601102501115004.数据寄存器16位只读寄存器,由两个8位的存贮单元组成,用于存放最新的转换结果。输出时msb在前,如果接收微控制器需要lsb在前,例如8051系列,读取的时候应该分两次读,每次读出8位分别倒序,而不是整个16位倒序。ad7705需接入外部晶振,采用2.4576mhz的频率。3单片机程序3.1 主函数#include #include #define uchar unsigned char#define uint unsigned int/*-ad7705引脚声明-*/sbit led = p01;/led闪烁,说明程序和ad7705正常工作sbit alarm= p02;/alarm变亮,说明测试电压超过4vsbit drdy = p03;sbit cs = p04;sbit so = p05;sbit sck = p06;sbit si = p07;sbit pga0 = p10;sbit pga1 = p11;floatwc_b;floatwc_k;/*-子函数声明-*/void delay(uint z);/延时void ad_writebyte(uchar x);/写一个字节函数uint read(void);/读转换数据函数void init_ad7705(void);/ad7705初始化函数void init_uart(void);/串口初始化函数void channelchose(uchar);/选择cd405通道void gainselect(uchar);/选择pga增益void delayus2x(uchar);voiddelayms(uchar);/*-主函数-*/void main()uint a;float b;init_uart();init_ad7705();channelchose(0x00);gainselect(0);while(1)if(drdy = 0)ad_writebyte(0x38);led = led;if(drdy = 0)/等待drdy变低a = read();if(a52400)alarm = 0;/led灯已先接高电平elsealarm = 1;b = 5*(float)a/65536);printf(%f, b);delayms(5);由于pga放大倍数过大时会导致程序跑飞,所以在总程序中并未加入自动量程切换的功能,自动量程切换功能程序将在分程序中讲解。另外,由于这次设计编写的误差校正功能并未达到想要的效果,所以也未加入。3.2 ad7705相关程序初始化程序:void init_ad7705(void)ad_writebyte(0x20);/ad7705初始化-读第1通道ad转换值,写时钟寄存器ad_writebyte(0x04);/改刷新频率为20不分频ad_writebyte(0x10);/下写setup寄存器ad_writebyte(0x44);/delay(3);往ad7705写入一个字节子程序:void ad_writebyte(uchar x)/写一个字节子程序uchar i;cs = 0;sck = 1;for(i=0; i8; i+)sck= 0;/delay(1);si = (bit)(x&0x80);/delay(1);sck = 1;/delay(1);x=1;si = 1;/so = 1;cs = 1;从ad7705读两个字节数据子程序:uint read(void)/读数据子程序uchar i;uint w;w = 0;cs = 0;sck = 0;for(i=0; i16; i+)sck = 0;w=1;if(so = 1)w |= 0x01;sck = 1;cs = 1;return w;3.3 pga放大倍数选择程序voidgainselect(uchar x)switch(x)case 0: pga1 = 0;pga0 = 0;break;case 1: pga1 = 0;pga0 = 1;break;case 2: pga1 = 1;pga0 = 0;break;case 3: pga1 = 1;pga0 = 1;break;default:break; pga的a1和a0脚需接单片机p1.1和p1.0。3.4 cd4051通道选择函数voidchannelchose(uchar x)p2 = x;cd4051的地址线c、b、a需对应接单片机p2.2、p2.1、p2.0。3.5 串口函数串口初始化函数:voidinit_uart(void)scon = 0x50;/模式1,8-bit uart,使能接收tmod |= 0x20; /定时器,模式2,8-bit自动重装值计数th1 = 0xfd;/初值0xfd,晶振11.0592时,波特率9600ti=1;/用系统自带的printf函数,ti必须等于1,否则无法发送,不能tr1=1;/使能定时器1es=1; /串口中断使能ea=1; /全局中断使能串口中断函数:void uart_ser(void) interrupt 4if(ti)/发送成功ti置位/ti=0;/用系统的printf的时候,如果又用到中断的话,那么这句话就得屏蔽,否/则无法发送3.6 其它子函数两个延时函数:void delayus2x(uchar t)while(t-);大概延时2t微秒。voiddelayms(uchar t)while(t-)delayus2x(245);delayus2x(245);大概延时1ms,以上两个函数都是在11.0592m晶振下正常延时。4上位机程序上位机程序采用mfc编写,主界面如图4.1所示。主要有电压数据显示和数据保存功能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论