哈理工智能仪器设计报告_第1页
哈理工智能仪器设计报告_第2页
哈理工智能仪器设计报告_第3页
哈理工智能仪器设计报告_第4页
哈理工智能仪器设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、哈 尔 滨 理 工 大 学课 程 实 践 题 目: 智能仪器原理及设计 姓 名: xxxxxxxx 班 级: 测控12-5班 学 号: 1205010510 指导教师: 苑惠娟 成 绩: 完成时间: 2015年6月18日 目录目录2一、实验目的及其意义31.1 实验目的31.2 实验意义3二、实验内容42.1 设计波形42.2 设计内容42.3 实验用设备4三、实验要求43.1 绘制原理图及线路板图43.2 编写程序完成以下任务43.3 实验安排5四、 硬件电路设计54.1 单片机电路54.2 显示及键盘接口电路54.3 D/A转换电路64.4 USB串口模块74.5 时钟电路和复位电路74.

2、6 8路LED94.7 PCB设计图9五、 程序设计10六、 软硬件调试16七、 波形图17八、 心得体会18九、 参考文献18一、实验目的及其意义1.1 实验目的 (1) 设计动态LED显示、键盘,画出原理图及线路板图,使学生对智能仪器中最基本的输入输出方法具有感性认识。 (2) 通过一个相对完整的程序编程,使学生能够将单片机知识和智能仪器的设计融会贯通,同时掌握对智能仪器的软件构成及“硬件软化”方法。1.2 实验意义波形发生器作为一种常用的信号源,是现代测试领域内应用最广泛的通用仪器之一。波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器

3、。函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。在 70 年代前,信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。同时,主要表现为两

4、个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。在 70 年代后,微处理器的出现,可以利用处理器、A/D/和 D/A,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实质是采用微处理器对 DAC的程序控制,就可以得到各种简单的波形。 90 年代末,出现几种真正高性能、高价格的函数发生器、但是HP公司推出了型号为 HP770S的信号模拟装置系统,它由 HP8770A任意波形数字化和 HP1776A波形发生软件组成。HP8770A实际上也只能产生8 中波形,而且价格昂贵。不久以后,Analogic公

5、司推出了型号为 Data-2020的多波形合成器,Lecroy 公司生产的型号为9100 的任意波形发生器等。 到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可过 GHz 的DDS 芯片,同时也推动了函数波形发生器的发展,2003 年,Agilent的产品 33220A能够产生 17 种波形,最高频率可达到 20M,2005 年的产品N6030A 能够产生高达 500MHz 的频率,采样的频率可达 1.25GHz。由上面的产品可以看出,函数波形发生器发展很快近几年来,国际上波形发生器技术发展主要体现在以下几个方面:(1) 过去由于频率很低应用的范围比较狭小,输出波形频率的提高,

6、使得波形发生器能应用于越来越广的领域。波形发生器软件的开发正使波形数据的输入变得更加方便和容易。波形发生器通常允许用一系列的点、直线和固定的函数段把波形数据存入存储器。同时可以利用一种强有力的数学方程输入方式,复杂的波形可以由几个比较简单的公式复合成 v=f (t)形式的波形方程的数学表达式产生。从而促进了函数波形发生器向任意波形发生器的发展,各种计算机语言的飞速发展也对任意波形发生器软件技术起到了推动作用。目前可以利用可视化编程语言(如Visual Basic ,Visual C 等等)编写任意波形发生器的软面板,这样允许从计算机显示屏上输入任意波形,来实现波形的输入。 (2) 与VXI资源

7、结合。目前,波形发生器由独立的台式仪器和适用于个人计算机的插卡以及新近开发的VXI模块。由于VXI总线的逐渐成熟和对测量仪器的高要求,在很多领域需要使用VXI系统测量产生复杂的波形,VXI的系统资源提供了明显的优越性,但由于开发VXI模块的周期长,而且需要专门的VXI机箱的配套使用,使得波形发生器VXI模块仅限于航空、军事及国防等大型领域。在民用方面,VXI模块远远不如台式仪器更为方便。 (3) 随着信息技术蓬勃发展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,可以执行多种功能。而且外形尺寸与价格,都比过去

8、的类似产品减少了一半。 在研制、生产、测试和维修各种电子元件、部件及整机设备时,都需要用信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器、它可以产生多种波形信号,如正弦波、三角波、方波等,因而广泛用于通信、雷达、导航、宇航等领域。 此次课程设计使我们能够学以致用,将自己所学的理论知识用于实践,提高我们动手能力,也使我们初步掌握一些分析问题和解决问题的方法,使我们从中体会到理论问题转化为实际问题所要经过的过程和两者之间的差距。二、实验内容2.1 设计

9、波形 输出方波和正弦波。2.2 设计内容(1) 设计数字式波形发生器,画出硬件电路原理图。(2) 编写程序生成各种波形,而且频率可调。(3) 确定所生成的波形频率范围。(4) 用键盘控制生成的波形及频率。(5) 数码管显示输出波形的类型及频率。2.3 实验用设备HC6800实验板,示波器,计算机三、实验要求3.1 绘制原理图及线路板图 (1) 6位数码显示(动态数码管显示方式)。 (2) 6个按键,4个发光管显示。3.2 编写程序完成以下任务 (1) 键盘识别。 (2) 动态LED显示。 (3) 使用按键通过D/A输出要求的波形并显示频率。 3.3 实验安排 序号实践内容实践天数实践场所1熟悉

10、HC6800实验板硬件电路;设计及绘制硬件电路原理图,PCB图2实验室2设计键盘控制程序和LED显示程序,并调试1实验室3设计波形发生程序并调试,完成设计报告2实验室合计完成设计5实验室4、 硬件电路设计4.1 单片机电路图4-14.2 显示及键盘接口电路功能:LED显示,按键扫描。由LED数码管显示器和独立按键组成,独立按键与89C51的P1口相连,而单片机的P0口与LED数码管连接。当某一按键按下一次时,扫描程序扫描到之后,通过P0口将信号发送到LED。扫描及显示利用程序实现,不断扫描独立按键,当某一按键按下时,随即执行程序段,完成相应的功能。当按下键1输出正弦波,键2输出方波,键3控制频

11、率调小,键4控制频率调大。图4-2-1 共阴极数码管图4-2-2 六路独立按键4.3 D/A转换电路功能:将波形样值编码转换成模拟值,输出波形。 由一片PCF8591组成。PCF8591是具有I2C总线接口的8位A/D及D/A转换器。有四路A/D转换输入,1路D/A模拟输出,也就是既可以作D/A转换也可以作A/D转换。PCF8591靠数据线SDA和时钟线SCL和90C51联系。单片机以I2C协议向PCF8591发送数字编码,产生不同的输出。利用采样定理对各种波形进行抽样,然后把各种采样值进行编码,收到的数字量存入各个波形表,执行程序时通过查表的方法依次取出,经过D/A转换后输出就可以得到波形。

12、如N个点构成波形的一个周期,则PCF8591输出N个样点值后,样值点形成运动轨迹,即一个周期。利用单片机的中断时间控制输出周期的速度,也就是控制输出的波形的频率。图4-3 D/A转换电路电路图4.4 USB串口模块图4-44.5 时钟电路和复位电路单片机的时钟信号用来提供单片机内各种微操作的时间基准;复位操作则使单片机的片内电路初始化,使单片机从一种确定的状态开始运行。 (1) 时钟电路单片机的时钟信号通常用两种电路形式得到:内部振荡和外部振荡方式。图4-5-1 时钟部分电路图在引脚XTAL1和XTAL2外接晶体振荡器或陶瓷谐振荡器,构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当

13、外接晶振后,就构成了自积振荡,并产生振荡时钟脉冲。晶振通常选用6MHZ、12MHZ、或24MHZ。单片机的时序单位振荡周期:晶振的振荡周期,又称时钟周期,为最小的时序单位。状态周期:振荡频率经单片机内的二分频器分频后提供给片内CPU的时钟周期。因此一个状态周期包含2个振荡周期。机器周期:1个机器周期由6个状态周期12个振荡周期组成,是计算机执行一种基本操作的时间单位。指令周期:执行一条指令所需的时间。一个指令周期由1-4个机器周期组成,依据指令不同而不同. (2) 单片机的复位状态当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,根据应用的要求,复位操作

14、通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。图4-5-2 复位电路单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器

15、复位后的状态为确定值统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。51单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。51单片机在系统复位时,将其内部的一些重要寄存器设置为特定的值,至于内部RAM内部的数据则不变。4.6 8路LED发光二极管用于按键检测,检查按键扫描是否成功,以验证程序的有效性。图4-6 8路LED4.7 PCB设计图5、 程序设计#in

16、clude<reg52.h>#include <I2C.H>#define PCF8591 0x90 /PCF8591 ?unsigned char AD_CHANNEL;unsigned long xdata LedOut8;unsigned char D=127;unsigned char flag=0,time1=0,timeflag=0,num=1;unsigned char signal=0;float freq;unsigned int frequence,freqtemp=0;float time=1000;unsigned int time0;unsig

17、ned char code SinTab250=109,112,114,117,119,122,125,127,130,133,135,138,140,143,145,148,150,153,155,158,160,162,165,167,169,171,173,176,178,180,182,184,186,187,189,191,193,194,196,197,199,200,202,203,204,206,207,208,209,210,211,212,213,213,214,215,215,216,216,216,217,217,217,217,217,217,216,216,216,

18、215,215,214,213,213,212,211,210,209,208,207,206,204,203,202,200,199,197,196,194,193,191,189,187,186,184,182,180,178,176,173,171,169,167,165,162,160,158,155,153,150,148,145,143,140,138,135,133,130,127,125,122,119,117,114,112,109,106,104,101,98,96, 93, 90, 88, 85, 83, 80, 77, 75, 72,70, 67, 65, 63, 60

19、, 58, 55, 53, 51, 49,46, 44, 42,40, 38, 36, 34,32, 30, 29, 27, 25, 23, 22, 20, 19,17, 16, 15, 13,12, 11, 10, 9, 8, 7, 6, 5, 4,4, 3, 3, 2, 2, 1, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8,9, 10, 11, 12 ,13, 15, 16, 17, 19,20, 22, 23, 25, 27, 29, 30, 32, 34, 36, 38, 40, 42, 44, 46, 49, 51, 53, 55,

20、 58, 60, 63, 65, 67, 70, 72,75, 77, 80, 83, 85, 88, 90, 93, 96, 98, 101,104,106,109; sbit key1=P11;sbit key2=P12;sbit key3=P13;sbit key4=P14;sbit key5=P15;sbit key6=P16;sbit ssss=P34;#define uchar unsigned char#define uint unsigned intuchar dis_buf; /?uchar temp;uchar key; /?void delay0(uchar x); /x

21、*0.14MSvoid keydown(void);#define delayNOP(); _nop_();_nop_();_nop_();_nop_();/ ? LED ? 0 12 3 4 56 78 9 a b cd e funsigned char code LED7Code = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71;sbit LS138A = P22; /?138?A?P2.2? sbit LS138B = P23; /?138?B?P2.3?sbit LS138

22、C = P24; /?138?C?P2.4?sbit ceshi=P34;void delay(unsigned int i); /?char DelayCNT; /? LED ?, ? 0-9 - unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;unsigned char flag1=0,flag2=0,flag3=0;/*DAC ?, ? */bit DACconversion(unsigned char sla,unsigned char c, unsigned ch

23、ar Val) Start_I2c(); /? SendByte(sla); /? if(ack=0)return(0); SendByte(c); /? if(ack=0)return(0); SendByte(Val); /?DAC? if(ack=0)return(0); Stop_I2c(); /? return(1);/* * ? */void delay(unsigned int i) char j; for(i; i > 0; i-) for(j = 200; j > 0; j-);void keydown()if(key1=0)delay(1);if(key1=0)

24、TR0=0;TR1=0;signal=1;flag1=1;flag2=0;flag3=0;freq=100000/(0.250*1000*num);frequence=(unsigned int)freq;while(key1=0);TR0=1;TR1=1;if(key3=0)delay(1);if(key3=0)TR0=0;TR1=0;signal=3;flag3=1;flag1=0;flag2=0;freq=10000/(0.002*1000*num);frequence=(unsigned int)freq;while(key3=0);TR0=1;TR1=1;if(key4=0)dela

25、y(1);if(key4=0)TR0=0;TR1=0;num+=1;if(flag1=1)freq=100000/(0.250*1000*num);frequence=(unsigned int)freq;if(flag2=1)freq=100000/(0.22*1000*num);frequence=(unsigned int)freq;if(flag3=1)freq=10000/(0.002*1000*num);frequence=(unsigned int)freq;while(key4=0);TR0=1;TR1=1;if(key5=0)delay(1);if(key5=0)TR0=0;

26、TR1=0;num-=1;if(num=0)num=1;if(flag1=1)freq=100000/(0.250*1000*num);frequence=(unsigned int)freq;if(flag2=1)freq=100000/(0.22*1000*num);frequence=(unsigned int)freq;if(flag3=1)freq=10000/(0.002*1000*num);frequence=(unsigned int)freq;while(key5=0);TR0=1;TR1=1;/*/main() unsigned int i,j,LedNumVal=1 ;

27、unsigned int LedOut10; DelayCNT=0;EA=1;/? ET0=1;/?T0? TMOD=0X01;/?1?0.05? TR0=1;/? TH0=-1000/256;/? TL0=-1000%256;/ ?while(1)DACconversion(PCF8591,0x40, D); /DAC?keydown(); /? if(freqtemp!=frequence) freqtemp=frequence; LedOut0=Disp_Tabfrequence%10000/1000; LedOut1=Disp_Tabfrequence%1000/100|0x80; i

28、f(flag1=1|flag2=1) LedOut2=Disp_Tabfrequence%100/10; else LedOut2=Disp_Tabfrequence%100/10; LedOut3=Disp_Tabfrequence%10; LedOut4=Disp_Tab0; /? LedOut5=Disp_Tabsignal; /? for( i=0; i<8; i+) P0 = LedOuti; switch(i) /?switch ?138? ? ? case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS1

29、38B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break; case 4:LS138A=0; LS138B=0; LS138C=1; break;case 5:LS138A=1; LS138B=0; LS138C=1; break;case 6:LS138A=0; LS138B=1; LS138C=1; break;case 7:LS138A=1; LS138B=1; LS138C=1; break; for (j = 0 ; j&

30、lt;90 ;j+) ; /? time0=(int)time; P0 = 0; void Timer0 (void) interrupt 1 using 1/?TH0=(65535-1000)/256;/? TL0=(65535-1000)%256;/ ?timeflag+;if(timeflag=num)timeflag=0;if(flag1=1)/?time1+;if(time1=250)time1=0;D=SinTabtime1;if(flag2=1)/?D+;if(D=220)D=0;if(flag3=1)flag+;/?flag=flag%100;if(flag<=50)D=

31、0;if(flag>50)D=255;6、 软硬件调试 在单片机编程中主要出现问题: (1) 键盘扫描时,多次扫描的问题,最终加入循环语句,是按键松开时执行,解决。 (2) 共256个样值点的正弦波输出时,不能完整显示的问题,采用每隔3个样值点输出一个的方案,减少样值数量从而增大输出频率。 (3) 中断时间问题,因为定时器中断时间过短引起的波形不能正常显示问题。最终考虑了D/A转换时间,以及程序段的执行时间,使一次中断时间不小于100毫秒,得以解决。 (4) 数码管显示的闪动问题,加大了对动态显示数码管的扫描频率,更改了由浮点数构成的频率计算公式,解决了计算引起的程序执行时间过长问题。正弦波频率范围问题,通过计算子程序段执行时间,定时器中断时间,DA转换

温馨提示

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

评论

0/150

提交评论