




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、集成运放参数测试仪程序设计 内容摘要:该课题设计的运算放大器闭环参数测试系统是基于 msc-51 单片机控制模块,并且 由 lcd(liquid crystal display)显示模块,键盘模块,数据采集和转换模块,采用 dds 芯 片(ad9851)实现了 40khz4mhz 的扫频输出模块等五部分组成。采用辅助运放测试方法,可 对运放的输入失调电压、输入失调电流、交流差模开环电压增益和交流共模抑制比以及单位增 益带宽进行测量。在软件上,用 c 语言来编程实现。其要实现的功能包括:对来自 tlc2543a/d 转换的数字信号进行接收、分析、计算和对结果的显示;通过不同键值的接收、分析来控制
2、对 不同对象的测量,并在 lcd 上显示对应的人机界面;对来自 dds 的高频信号源的频率进行控制 来实现对集成运放的带宽参数的测试和显示。而且具有自动量程转换、自动测量功能和良好的 人机交互性。 关键词:单片机 c 语言 dds lcd 人机交互界面 the instrument for testing the parameters of integrated operation amplifier program design abstract:this system is designed based on c51 microcontroller to measure the close
3、 loop parameters of the operation amplifier. the system conclude five modules: lcd (liquid crystal display) display module, keyboard module, data collection module, conversion module, and the module of generating sweep sine-wave signal with frequency range from 40 khz to 4 mhz, using the dds chip of
4、 ad9851. the system can measure the input offset voltage、the input offset current、the open loop ac differential mode voltage gain、the ac common mode rejection ratio and unit gain bandwidth,using the measure method of assistant amplifier. the data can be display on the lcd which is using of c program
5、. and the function concludes: receiving, analysing and calculating the digital signals from tlc2543a/d then send them to show; accepting different key value on keyboards, analysing and processing it for controlling the measurement of different target and display on the lcd with different computer in
6、terface; controlling the bandwidth of hf signal source from dds chip to measure the integrated transport bandwidth parameters and display the result. whats more c51 microcontroller can control relays to complete auto measurement range switching ,auto measuring and good interface. key words:mcu clang
7、uage dds lcd interface 目 录 前言 .1 一、系统原理框图 .1 二、硬件单元电路设计与实现 .2 (一)、四个参数的测试电路.2 ioc v io i vd a cmr k (二)单位增益带宽测量电路.3 (三)测试的信号源 .3 vdcmr ak、 (四)峰峰值检测电路的设计.4 (五)a/d 采样电路 .4 (六)扫频信号源.4 (七)键盘接口电路.5 (八)显示接口电路.5 三、软件设计 .6 (一)软件功能设计.6 (二)系统软件框图和程序流程图.6 (三)软件模块设计.7 四、系统测试 .19 (一)程序调试方法 .19 (二)软件调试 .19 (三)联机调
8、试 .20 五、结束语 .20 六、感谢词 .20 参考文献 .20 附录一 .21 附录二 .22 附录三 .36 (一)tlc2543 .36 (二)lcd 液晶显示器.36 附录四 .38 集成运放参数测试仪 程序设计 前言 目前国内外市场上各种型号的集成运放参数测试仪已经相当多,而且普遍性都采用“辅助 放大器的测量方法” ,使测试仪的整个系统具有稳定性好,精确度高,范围大的特点,而且测 试仪测试参数一般包括:正向最大输出电压+,负向最大输出电压-,正向最大共模输出 opp v opp v 电压+,负向最大共模输出电压-,正转换速率+ ,负转换速率-,静态工作电流, icm v icm
9、v r s r s q i 输入失调电压,共模抑制比,开环增益带宽乘积 bw,输入失调电流,开环电压增益 ioc v cmr kiio ,基极偏置电流等 15 项。 vd a ib i 但这种测试仪有一种共同的特点电路系统复杂,成本高,因此在某些应用领域中不能普遍 使用。在此我们根据 gb344286半导体集成电路运算电压放大器测试方法的基本原理规定 的测试方法来设计,主要测试参数包括:输入失调电压,共模抑制比,开环增益宽带 ioc v cmr k 乘积 bw,输入失调电流,开环电压增益等 5 个,而且用 msc51 系列单片机作为中央处理 io i vd a 器,这样大大降低了成本,并且具有
10、显示功能,使用方便,体积小,适合搬移,系统稳定。 在软件方面,汇编语言是能直接控制单片机的底层语言,而且在控制硬件和位操作等方面 表现很优异,程序运行时效率也很高,但当用汇编语言来编制复杂的数学运算类型的程序时就 显得有些不方便。而使用 c51 高级语言开发 msc51 系列单片机比汇编语言优越地多,如程序 编写直观易懂、便于移植、便于修改和维护、便于进行模块化程序设计、提高计算精度等。虽 然高级语言在产生代码方面会比较长些,而且运行速度相对来说会慢些但对于当今作为开发的 计算机软件来说优化程序的编译已经不是问题。在次我们结合了该设计自身的特点和需要,综 合分析了以上的优、缺点最后决定采用 c
11、 语言来编程,实现这个课题的功能,从而也提高其使 用性。该成品可方便用于小型实验或个人实验室等场合。 一、 系统原理框图 该系统包括软件和硬件两个方面,程序被下载到单片机中,自动进行一系列测试工作,而 且可以通过良好的人机界面对其进行选择、控制。其整体系统原理框图如图 1 所示。 运 放 参 数 测 试 电 路 数据采集 测试参数选择 高频信号源 增 益 控 制 单 片 机 lcd 显示输出 键 盘 输 入 图 1 系统原理框图 二、硬件单元电路设计与实现 (一)、四个参数的测试电路 ioc v io i vd a cmr k 按照 gb344286半导体集成电路运算(电压)放大器测试方法的基
12、本原理规定的辅助直 流测试法,可实现运算放大器直流参数的准确测量。该方案的测试原理如图 2 所示。 + - + - 被测运放 辅助运放 rf r1 ri ri r2 k1 k2 r r vl rf 数字电压表 (4位半以上) 图 2 gb344286 规定的运算放大器直流参数测试方法 它是国标推荐的测试方法也是目前国际普遍采用的一种测试方法,具有稳定性好、精度高、 范围大等特点,可测量各种集成运算放大器的输入失调电压、失调电流、共模抑制比、差模开 环增益等参数,测试方便,测量输出的电压范围合适。而辅助运放对系统增益的稳定性有很关 键的作用,虽然也会引起自激,但可以通过一定的方法来抑制。 测试这
13、四个参数的电路可以集成在两个电路里。首先可以将测试、这两个参数的电 ioc v io i 路通过继电器做成一个电路系统,如图 3 所示。电容 cu 是补偿分布电容,用来抑制自激的发 生,而 cu 的值是通过实验获得的:先将数百皮法的瓷片电容接入电路选定位置,观察自激信 号的变化,直到取得使自激信号最小的电容值为止。然后将测试、这两个参数的电路 vd a cmr k 也集成一个电路系统,如图 4 所示。这样通过两个核心测量电路就可以完成所有参数测试,同 时通过对继电器的控制实现了测量的自动化,而且大大简化了电路。 1 2 3 4 5 6 78 k23 r1 r11 1k r12 1k 1 1 3
14、 3 2 2 w1 50k r3 100 r4 100 r51m r6 1m rf220k rf1 20k r7 30k r8 30k 3 2 6 1 5 74 u1 1m 5 4 2 7 1 8 3 6 14 11 10 13 12 9 u2 7650 c4c3 104*2+12v q1 npn d1 diod e 3 2 1 84 u3a tl 082 +12v -12v -12v +12v +12v +12v -12v r13 30k cu cr2 cr1 r 300 1 2 j1 co n2 5 6 7 u3b tl 082 图 3 输入失调电压和输入失调电流测试电路 r11 1k r
15、121k r13 1k r14 100 r15 43k w2 50k c7 47uc8 1u r3100 r4 100 rf220k r7 30k r8 30k 3 2 6 1 5 74 u1 1m 5 4 2 7 1 8 3 6 14 11 10 13 12 9 u2 7650 c4c3 104*2 rf1 20krl 10k r1 +12v b 1 c 2 e 3 q2npn d4 diod e 1 2 3 4 5 6 78 k21 3 2 1 84 u3a tl 082 3 2 1 84 u4a tl 082 5 6 7 u4b tl 082 +12v -12v -12v +12v d3
16、 diod e +12v -12v +12v +12v -12v r14 30k cu cr2 r 300 1 2 j2 co n2 4v 5h z 图 4 电压增益和共模抑制比测试电路 其测试电路和过程如下: 、当继电器 1、4 分别脚接向 3、6 脚时,测得辅助运放的输出电压记为 vl0 ,则有: l0 fi i io v rr r v 、当继电器 1、4 分别脚接向 2、5 脚时,测得辅助运放的输出电压记为 vl1,则有: r vv rr r i l0l1 fi i io 、当把信号源输出(电压为 vs)接到继电器的第 1 脚时,测得辅助运放输出电压为 vl0,则 有 )db(lg20
17、i fi lo s vd r rr v v a 、当把信号源输出(电压为 vs)接到继电器的第 4 脚时,测得辅助运放输出电压为 vl0,则 有 )db(lg20 i fi lo s cmr r rr v v k 通过上述方法就可测得所要测试的四个参数。 (二)单位增益带宽测量电路 单位增益带宽测量电路为一个反向比例放大器,从 p1.3 口输入正弦信号的幅值,改变信 号频率,当 p1.3 口的输入电压幅值下降到 3db 时的频率即为单位增益带宽。 (三)测试的信号源 vdcmr ak、 用文氏电桥电路实现产生 4v、5hz 的正弦波。它是由 rc 振荡电路构成的低频正弦信号 发生器。通过调节电
18、路中的电阻和电容值的大小,可以产生不同频率和幅度的正弦信号,而且 信号比较纯。该电路简单、信号幅度稳定,其稳定度优于 1%。经过仿真后发现该电路只能产 生 400khz 以内的信号,但这个频率范围已经满足我们的要求。 (四)峰峰值检测电路的设计 3 2 6 1 5 74 u2 tl 710 c1 cap c2 cap c3 cap c4 cap r1 10k r2 10k r3 10k r4 10k r5 10k r6 10kd1 diode d2 diode 1 2 j1 con2 vcc input3 2 1 84 u1a op07 图 5 峰值检波图 该电路主要由一个二极管和两个电容组成
19、,用于检测扫频信号源的峰值。实际测量表明, 该峰值检测电路在 40khz4mhz 具有很好的线性度。该电路如图 5 所示。 (五)a/d 采样电路 为保证测量精度,该部分电路采用 12 位串行口tlc2543。电路如图 6 所示。 ea /vp 31 x1 19 x2 18 re se t 9 rd 17 wr 16 int 0 12 int 1 13 t0 14 t1 15 p10 1 p11 2 p12 3 p13 4 p14 5 p15 6 p16 7 p17 8 p00 39 p01 38 p02 37 p03 36 p04 35 p05 34 p06 33 p07 32 p20 21
20、 p21 22 p22 23 p23 24 p24 25 p25 26 p26 27 p27 28 psen 29 al e/p 30 tx d 11 rx d 10 ic1 at 89s51 an 0 1 an 1 2 an 2 3 an 3 4 an 4 5 an 5 6 an 6 7 an 7 8 an 8 9 gnd 10 an 9 11 an 10 12 re f- 13 re f+ 14 /cs 15 da ta o ut 16 da ta input 17 i/o clk 18 eo c 19 vcc 20 ic18 tl c2543 /wr /rd vcc d0 d1 d2 d
21、3 d4 d5 d6 d7 p20 p21 p22 c2 0.1 c6 1 2 3 4 5 6 7 8 9 10 11 12 jp1 tl c2543 in po rt p15 p16 p17 se rial a/d p23 p24 re se t ke y_in t0 c7 c8 jzhe n vcc int 1 p3.3 t0 t1 p10 p11 p12 p13 p14 c3 10u 图 6 a/d 采样电路图 (六)扫频信号源 采用直接数字频率合成芯片(ad9851)来产生扫频信号。它的频率稳定度完全由有源晶振 的频率稳定度决定,具有较高的频率输出范围,而且可以直接由单片机的输出来控制
22、频率的大 小。经过输出扫频测试,dds 芯片可以在 10 秒内连续、稳定输出频率在 40khz4mhz 范围内连 续变化的正弦波。其电路原理图如图 7 所示。 ad9851 采用并行送控制字的方式将频率控制字送入芯片。频率控制字 fsw 与最终合成的 信号频率 0 f 之间的转换公式为: 32 0 2/fswff c 若系统时钟频率 c f 为 30mhz,则最大分辨率 0 f =30106232hz=0.007hz。远超出本题 1khz 分 辩力的要求。 d3 1 d2 2 d1 3 d0 lsb 4 pgnd 5 pvcc 6 w_clk 7 fq_ud 8 ref_clk 9 agnd
23、10 avdd 11 rset 12 vout n 13 vout p 14 vinn- 15 vinp+ 16 dacbp 17 avdd 18 agnd 19 ioutb 20 iout 21 reset 22 dvdd 23 dgnd 24 d7 msb slo ad 25 d6 26 d5 27 d4 28 ic1 ad9851 r1 l12 l6 l9 l1 c13 c19 c20c21c10c18 vcc vcc vcc 1 - 2 out 3 + 4 xtal 2 c25 c27 c28 c29 l13 in 1 23 out 4 u2 upc1651 c22c23 l15 l1
24、6 c30 vcc vcc vcc r2 r10 c26 l14 1 2 3 4 5 6 7 8 j2 1 2 3 4 j3 1 1 2 2 j4 1 1 2 2 j5 r9 r8 vcc 图 7 扫频信号源图 (七)键盘接口电路 键盘的接收部分电路如图 8 所示: in/cl k 1 in 2 in 3 in 4 in 5 in 6 in 7 in 8 in 9 in 10 in 11 in 13 io 14 io 15 io 16 io 17 io 18 io 19 io 20 io 21 io 22 io 23 u1 gal22v10b25l p(24) 1 2 3 4 5 6 7 8
25、9 pr2 4.7k vcc 12 34 key0 12 34 key1 12 34 key2 a0 2 a1 3 a2 4 a3 5 a4 6 a5 7 a6 8 a7 9 b0 18 b1 17 b2 16 b3 15 b4 14 b5 13 b6 12 b7 11 e 19 dir 1 u2 74als245 vcc vcc d0 d1 d2 d3 d4 d5 d6 d7 key_cs key_int 1 2 3 4 5 6 7 8 j1 i/o 图 8 键盘接收电路图 当有按键时就触发外中断 0,再通过控制片选端(key_cs)来读取当前按键的键值,这个信 号是由 74ls138 实现
26、的,其地址为 c000h;键值的编辑则是采用一块 pld 芯片gal22v100 和 一个双向选通芯片 74ls245 来实现;数据的读入和其他的数据一样都是通过总线的方式, (74als245 的输出端 b0 到 b7 与单片机的 p0 口相连接)。键值的四位由低到高分别对应 p0.0、p0.1、p0.2、p0.3。该键盘中各键的功能分配如下: key0:屏幕复位,键值为 0; key1:进入参数测试界面,键值为 1; key2:进入幅频特性测试界面,键值为 2。 (八)显示接口电路 采用 msc-g12864 液晶显示器。该液晶显示器的管脚分配和管脚功能使用如表 1 所示,根 据资料我们在
27、硬件设计时将其管脚与单片机的连接如下: 控制线:p2.3 连 cs2,p2.2 连 cs1,p2.1 连 r/w,p2.0 连 r/s,p2.4 连 e; 数据线:d0d7 分别与 p0.0p0.7 相连接; 因此液晶显示器和单片机的接口电路连接如图 9 所示。 表 1 液晶显示器管脚分配 20191817161514131211 slkslavoutrstbcs2cs1db7db6db5db4 10987654321 db3db2db1db0er/wrsvovddvss 4 5 6 u3b 74hc00 rst 11 12 13 u3d 74hc00 e /cs1 /cs2 r/s r/w
28、/rst ea/vp 31 x1 19 x2 18 reset 9 rd 17 wr 16 int0 12 int1 13 t0 14 t1 15 p10 1 p11 2 p12 3 p13 4 p14 5 p15 6 p16 7 p17 8 p00 39 p01 38 p02 37 p03 36 p04 35 p05 34 p06 33 p07 32 p20 21 p21 22 p22 23 p23 24 p24 25 p25 26 p26 27 p27 28 psen 29 ale /p 30 txd 11 rxd 10 ic1 at89s51 /oe 1 d0 2 d1 3 d2 4 d
29、3 5 d4 6 d5 7 d6 8 d7 9 gnd 10 le 11 o7 12 o6 13 o5 14 o4 15 o3 16 o2 17 o1 18 o0 19 vcc 20 ic2 74ls573 /oe 1 d0 2 d1 3 d2 4 d3 5 d4 6 d5 7 d6 8 d7 9 gnd 10 le 11 o7 12 o6 13 o5 14 o4 15 o3 16 o2 17 o1 18 o0 19 vcc 20 ic8 74ls573 /wr /rd vcc vcc d0 d1 d2 d3 d4 d5 d6 d7 d0 d1 d2 d3 d4 d5 d6 d7 d0 d1
30、d2 d3 d4 d5 d6 d7 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 high 8bit a dress lo ck a 1 b 2 c 3 e1 4 e2 5 e3 6 y0 15 y1 14 y2 13 y3 12 y4 11 y5 10 y6 9 y7 7 ic20 74hc138 vcc 7524 cs tl c0820 cs 1 2 3 ic21a 74ls02 4 5 6 ic21b 74ls02 8 9 10 ic21c 74ls02 11 12 13 ic21d 74ls02 /wr 628128 adh
31、 8 628128 adh 8 key_cs /rd key_rd lcd_wr c6 p15 p16 p17 p24 reset key_int 0 c8 jz hen vcc int1 p3.3 t0 t1 p10 p11 p12 p13 p14 12 ic28a 74ls04 r24 33/2w vccq1 bd140 r7 10k p3.4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 lcd2 msc-g12864 d0 d1 d2 d3 d4 d5 d6 d7 e r/w r/s vo vcc gnd /cs2 /cs1 vo
32、ut /rst le d+ le d- c7 w2 15k vcc vo 1 2 3 jmp vout 图 9 显示接口电路图 三、 软件设计 (一)软件功能设计 软件系统以界面直观、利于操作、便于维护和升级为基础。而且为了增强系统的抗干扰 性,还增加了软件陷阱处理,防止软件的“跑飞”。 对于软件功能的设计不仅仅是对程序的简单设计,还包括对各电路间接口的设计,接口 设计描述的是软件如何与外界系统进行通信,软件内部如何通信、以及软件和软件的使用人员 之间如何通信等问题。一个接口意味着一个信息流(例如,数据或控制流等) ,因此,在这里 的一个重点就是要实现如何更好的分配数据和控制流,从而实现整个功
33、能。 (二)系统软件框图和程序流程图 at89c52 是美国 atmel 公司生产的低电压,高性能 cmos 8 位单片机,片内含 8k bytes 的 flash rom 和 256 bytes 的 sram。器件采用 atmel 公司的高密度、非易失性存储技术生产, 与标准 mcs-51 指令系统及 8052 产品引脚兼容。本系统以单片机 at89c52 为主控核心,系统软 件和硬件的接口框图如图 10 所示,程序流程图如图 11 所示。与单片机相连的接口电路还包括 键盘接口电路,lcd 接口电路,转换模块接口电路。 图 10 系统软件和硬件的接口框图 图 11 程序流程图 (三)软件模块
34、设计 软件设计工作是建立在自顶而下和模块化的设计方法之上的。这就是说,软件应在逻辑上 分割为实现特定功能部分的子程序,既程序编写的模块化,这样无论在设计、编码、还是以后 的维护上都提供了很大的方便。在此我们根据接口电路的需要可以把该程序分为六个模块:主 程序模块、显示模块、键盘模块、高频输出模块、转换模块、数据处理模块。虽然每个模块之 间都是利用数据的传送将他们联系起来,但在功能的实现上都是独立的。 tlc2543 读入信号 自动测试 计算每路的值 计算参数 uio、uco、avd 、kcmr 并显示 输出频率为 4m400khz 的 波形 计算带宽增益 键值 1 有按键 键值 0 键值 2
35、初始化界面 初始化界面 键 盘 输 入 51 单片机 lcd 显示 a/d 转换 模块 测 试 板 主程序模块 该模块主要包括 main()函数。 在将程序进行模块化时当然还要将各个子程序联系起来,在主程序里就是要实现它们之间 逻辑关系的联系,而且基于单片机自身的特点,主程序应该是一个死循环的过程,否则程序执 行完一次程序后就会跑飞,而不能实现整体功能,因而使整个系统处于瘫痪状态,此时只能通 过重新断电和通电才能使系统重新运行,即使这样该系统还是会再次进入瘫痪状态。因此只能 利用死循环来解决这个问题,这也是对单片机编程的一种常用的方法。 在主程序模块中,主要实现的功能为:刚开机时,对外围设备进
36、行初始化设置,然后显示 主界面,即欢迎界面;等待按键,通过按键标志来判断是否要调用按键处理函数 keycl()。在 keycl()函数中包括对不同键值的判断,并调用数据采集、分析、处理、显示等函数。因此主函 数的流程图如图 12 所示。该主函数处于一种死循环的状态。 开始 显示主界面 有按键 否 判断键值,并调用显示模块、 调用键盘模块子程序、转换 模块和数据处理模块子程序 结束 n y 图 12 主函数流程图 主函数的程序如下所示: /*/ /* 主函数 */ /*/ void main() unsigned char k,adbuf,dabuf,rambuf; idata unsigned
37、 int *para= ad2543(0 x0c); /预先将要读取数据的通道数送入 dabuf=0 xff; p3_4=1; /改变继电器 intlcd(); /* 调初始化函数 */ clear(); /* 调清屏函数 */ ea=1; ex0=1; it0=1; flag=0; fw(); /复位 while(1) /使程序处于死循环 if(flag=1) /当有按键按下时 keycl(); /调用键盘处理函数包括对数据采集、分析、计算 其中 intlcd()函数,clear()函数和 fw()函数将在附录一里给出。 显示模块 显示模块主要是负责跟液晶显示器接口的程序模块,包括液晶的驱动
38、程序和结果显示程 序。该模块主要是由 xianshi()函数组成,它的功能是将处理结果数据显示在 lcd 上。流程图如 图 13 所示。其中调用了写中文函数 whz(),写西文函数 wcode()。流程图如图 14 所示,以及两 个判忙函数 busym(),busyr(),两个写指令函数 pr1(),pr4(),两个写数据函数 pr2(), pr5(),该模块在设计时主要考虑单片机和液晶之间的管脚连接,以及液晶自身的地址分配。 在此我们参考了液晶显示器的使用手册,分析了在硬件上单片机的管脚分配情况,因此单片机 和液晶的接口电路如图 9。其地址控制说明如图 15 所示,接口管脚电平说明如表 2
39、所示。 开始 取出要计算 的每一位 调用写西文函数显 示结果 结束 开始 液晶忙 送要显示的数据 结束 n y 图 13 显示模块流程图 图 14 写中、西文函数流程图 图 15 地址控制说明图 表 2: lcd 管脚电平说明表 pin no.symbolleveldescription 1vss0vground 2vdd5.0vsupply voltage for logic 3vo-input voltage for lcd 4rsh/lh:date signal, l:instruction signal 5r/wh/lh:read mode, l:write mode 6eh,h-lc
40、hip enable signal 7db0h/ldata bit 0 8db1h/ldata bit 1 9db2h/ldata bit 2 10db3h/ldata bit 3 11db4h/ldata bit 4 12db5h/ldata bit 5 13db6h/ldata bit 6 14db7h/ldata bit 7 15cs1hchip select signal for ks0108b(1) 16cs2hchip select signal for ks0108b(2) 17rstblreset signal 18vout-5voutput voltage for lcd 1
41、9sla4.2vside light anode 20slk0vside light cathode 由液晶显示器的资料可知 lcd 是由两片ks0108b组成,且在液晶显示器上片选 cs1,cs2 都 是高电平有效,e 脚:芯片使能端,是高电平或下降沿到来时有效,即只有当它为高电平或下 降沿来时才能进行读、写入数据或者写指令操作,当该管脚为低电平时为忙状态,因此结合硬 件电路的设计可得到液晶显示器的地址分配为: #define cwadd2 xbyte0 xb400 /*第二片写状态地址*/ #define cradd2 xbyte0 xf600 /*第二片读状态地址*/ #define d
42、wadd2 xbyte0 xb500 /*第二片写数据地址*/ #define cwadd1 xbyte0 xb800 /*第一片写状态地址*/ #define cradd1 xbyte0 xfa00 /*第一片读状态地址*/ #define dwadd1 xbyte0 xb900 /*第一片写数据地址*/ #define display_on 0 x3f; /开显示 #define display_off 0 x3e; /关显示 #define para1 0 x40; /*设置列地址*/ #define start_line0 0 x0c0; /*开始显示行为第 0 行*/ #define
43、 page 0 xb8 /设置页地址 在显示数据之前一定要进行对液晶进行判忙工作,只有当液晶处于空闲状态才能对液晶进 行写入操作,因此在开始对液晶进行写入指令和数据之前要先调用两个判忙函数,一个是 busym()即对左片判忙,还有一个是 busyr()即对右片进行判忙。而且只有当液晶是处于空 闲和开状态的时候,才能进行下一个操作,否则将在此进入死循环中。 其中写指令函数 pr1(),pr4(),主要功能是设置液晶显示器的地址;写数据函数 pr2(), pr5()是在地址设置后将要显示的数据写入到液晶显示器中;写中文函数 whz()是显示中文字符, 写西文函数 wcode()是显示西文字符。以下
44、给出了 xianshi()函数具体程序,其它的程序在附录里 给出,这里就不一一详述。 /*/ /* 显示结果 */ /*/ void xianshi(void) float k; int j; unsigned char i,last,hang,lie; for(i=64;i=100;i+=6) wcode(i,4,47); j=4; /求出每一位数,便于在 lcd 上显示 for(i=0;i0;j-) /要显示的数据共 5 位从最后一位开始显示 k=averagei-(int)averagei; /获得最后一位小数 if (k0.000000) k=0.000000; averagei=(i
45、nt)averagei; last=k*10; / 将获得的最后一个小数转换为整数,便于显 示 lie=64+j*7; /要显示的数据的行、列 hang=7-i; if (j=5) /要显示的数据共 5 位,有四位小数 wcode(lie,hang,46); /显示小数点 lie=lie+5; j-; wcode(lie,hang,last); averagei=averagei/10; /求出下位数据 键盘模块 该模块主要包括中断函数 int1() interrupt 0 和 keycl()函数。 为了使该系统更具人性化,在硬件上加入了三个按键,相应地在软件上也离不开这个模块。 这三个按键分
46、别用来在:初始界面,参数测试界面和增加功能的带宽测试界面之间转换。当有 键按下,就会产生一个下降沿脉冲从而触发中断的发生。在中断函数中调用一个延时程序实现 消抖,如果确定有按键按下则将中断标志变量置 1,即 flag=1;在主程序中,通过对这个标志 变量的查询,来决定是否调用函数 keycl()。在该函数中具体实现不同按键要显示的对应界面, 并进行不同的操作。如果当前按下第一个键,则调用复位函数 fw(),返回到初始的欢迎界面, 显示“欢迎使用”这四个字;如果按下的是第二个键,在液晶的顶部中间显示要测试的四个参 数 、然后调用参数测试函数 ad2543()读取不同通道的数据,并通过对继电 io
47、c v io i vd a cmr k 器的控制来读入相同通道中不同参数所需要的电压值,然后调用 sort()函数去掉采集的数据中 的一个最大值和一个最小值,并将获得的数据转换为真实的电压值,调用函数 jisuan()将数据进 行平均后再计算参数结果,最后调用函数 xianshi()将处理完的结果显示出来;如果按下的是第 三个键,则显示频带宽度界面,并调用函数 highsource()输出高频信号,频率的分辨率为 1khz。该模块的流程图如图 16 所示。 开始 结束 第一个按键 n y 调用主界面 第二个按键 采集 ad2543 中 的数据并进行分 析和显示 第三个按键 控制 ad9851
48、产 生信号源 y y n n 图 16 键盘模块程序流程 /*/ /* 键盘中断 */ /*/ void int1() interrupt 0 delay(100); if (p32=0) /消抖 keyv=keyaddr; flag=1; /*/ /* 按键处理函数 */ /*/ void keycl(void) unsigned char i,j,k; flag=0; /清除按键标志 if (keyv=0) /当按下第一个键时 fw(); /显示主界面即复位 else if(keyv=1) /当按下第二个键时 zdcs(); /调用显示参数测试界面 k=0 x0c; /选择通道 0 for
49、(i=0;i5;i+) /需要 5 个数据 /采集数据时要采集 8 组 for(j=0;j8;j+) ad0ij=ad2543(k); delay(0 x30); /在每次采集之间调用延时程序 delay(0 x60); /在要选部通道之间延时 /通过改变继电器获得所需的不同电压 if(i=0) /获得 vlo 当 i=0 时 jdq0=1; /当 i=1 时闭合开关获得 vli if (i=1) /输入时信号源当 i=2 时换通道获得 vlo 用来计算 avd jdq0=0; jdq1=0; k=k+0 x10; if (i=2) /i=3 时获得 vlo 是用来计算 dcmr jdq1=1
50、; if (i=3) /更换通道 获得信号源电压 jdq1=0; k=k+0 x10; /通道数加 1 /因为输入通道数时只有前面的四位数有效 sort(); /去掉一个最大值和一个最小值,并转换为真实的电压值 jisuan(); /将数据进行平均,后再进行计算参数结 果 xianshi(); /显示获得的结果 else if(keyv=2) highsource(); /输出高频信号,频率的分辨率为 1khz flag=0; /清除按键标志 其中 jdq0,jdq1:继电器通断标志变量; falg:按键标志变量,有键按下则为 1,否则为 0; keyv:存放不同按键的键值; ad0ij:存放
51、来自通道的电压信号的数据,idata unsigned int ad058存放参数测试所需 要的 5 组数据,又把每个所需要的数据采集的 8 次,因此每组数据中包括 8 个数据,这样真正 采集的数据应该是 40 个。 高频输出模块 void highsource()函数是控制 dds 产生正弦波的,产生的正弦波的分辨率为 1khz。以下 是 ad9851 的部分管脚功能说明: 41,2825(d0d7):是8位的数据输入口,其中d0(4脚)是低位,d7(25脚)是高位; 5(pgnd):接地端; 6(pvcc):电源端; 这两个管脚都是当频率取输入数据的六倍时用的; 7(w_clk):数字载入
52、端,上升沿有效,由单片机控制,与p1.5相连; 8(fq_ud):频率刷新端,上升沿有效,由单片机控制,与p1.6相连; 9(ref_clk):系统时钟,是外部输入,直接用10m晶振产生; 10、19(agnd):模拟信号接地端; 11、18(avdd):模拟信号电源端; 21(iout):输出口,产生的信号源输出口,必须接负载后再接入示波器; 22(reset):复位端,高电平时复位,当该管脚是低电平时处于正常工作,该管脚由单片机 控制,与p1.7相连。 ad9851芯片具有输入数字信号直接输出对应频率的正弦波的功能的芯片,有以上的管脚 说明可知,数据输入端只有8个口即d0d7,但ad985
53、1允许输入的数据范围为40位,因此在 程序中要用串并合用的方法,每次送入8位数据,并送w_clk端一个脉冲,使芯片接受送入的 数据,共送5次,先送入的为高电位,送完后将fq_ud信号置1,使送入得数据有效,产生所需 要频率的正弦波。该模块的程序流程如图17所示。highsource()函数如下所示: /*/ /* 产生高频信号 */ /*/ void highsource() unsigned char i, j; idata unsigned long step; idata unsigned long addr=0 x22222222; /频率的最大值约为4m idata unsigned
54、 char zanc5=0 x00,0 x22,0 x22,0 x22,0 x22; unsigned char *p= /高频信号源地址 unsigned char *p1= unsigned int k; step=0 x01000000; /频率变化的步进值 fq_up=0; w_clk=0; reset=1; j+; /延时作用 j+; reset=0; for(k=1;k0 x0f78;k+) /产生信号源,由于指针之间不能直接付值所以 用 /zanc变量作为它的中间变量 p= p1= for(i=1;i5;i+) zanci=*p1; p1+; for(i=0;i5;i+) *p=
55、zanci; w_clk=1; /送频率控制字,先高位,后低位 j+; j+; w_clk=0; fq_up=1; /产生一个上升沿 j+; fq_up=0; delay(100); if (addrstep) step=0 x10000; addr-=step; /改变频率值 开始 频率值 为 0 送时钟脉冲和刷新脉冲 结束 n y 送频率字 改变频率值 图 17 高频输出模块图 转换模块 该模块主要包括 ad2543()函数,主要实现采集通道中的数据,并将模拟信号转换为数字信 号。 从测试板输出的信号仍然是模拟信号,而单片机只能对数字信号进行处理,因此对于单片 机而言是不可能识别模拟信号的
56、大小,只能判断有无电压的输入,所以测试板中的信号通过峰 峰值检测后必须经过 a/d 转换才能和单片机相连,被程序读入并做相应的处理。 转换模块的程序主要是负责读取来自 tlc2543 的数据,该芯片有 11 路模拟信号输入通道 (an0an10),两个参考电压输入端(ref+,ref-)和 5 个控制管脚。其接口电路如图 6 所示。 它们的功能分别为: an0an10:11 路模拟输入通道 ref+:正参考电压,输入端 ref-:负参考电压,输入端,一般直接接地 ioclk:输入输出脉冲,当读输出数据时下降沿有效,当输入地址时,上升沿有效,输入端 data input:地址选择端,输入当前要转
57、换的模拟信号的通道号,四位串行输入,输入端 data out:12 位数字串行信号输出口,输出端 eoc:输出结束标志,转换结束后自动置 1,输出端 cs:片选信号,低电平有效,输入口 开始 结束 位操作方式送通 道数 位操作方式先读高 8 位,再读后 4 位 图 18 转换模块的程序流程图 转换模块的程序流程如图 18 所示,其工作原理为:转换输出电平的量程大小为正负参考 电压之差,输入模拟信号的电压范围即为正负参考电压的大小,一般 ref+大小要小于或等于 v+;当要开始 a/d 转换时,先使该芯片有效,即使/cs 信号端为低电平,连续输入四个 ioclk,在 ioclk 的上升沿处在 d
58、ata input 端口输入要转换的通道地址,高位在前,低位在后, 通道地址的范围为 0 到 10,并且在 ioclk 的第四个脉冲的下降沿到来时,读入选择的通道中的 模拟信号并开始转换;调用延时函数作为其转换时间,然后单片机要给 a/d 芯片的 ioclk 端口 连续 16 个脉冲,在每个脉冲的下降沿到来时读取 a/d 中的一位数据,先读入的数据为高位, 在程序中利用左移功能,将前 12 位数据保存在变量 ad 中,后 4 位数据为无效数据舍去,然 后返回到上级函数。其实在该函数中采用送通道数和读数据在同一个时刻进行,事实上读的数 据是上次送的通道数的结果。因此在主函数中预先调用一次 ad2
59、543()函数作为预先送通道数的 操作。ad2543()函数如下所示: /*/ /* 读取 ad2543 中的数据 */ /*/ unsigned int ad2543(unsigned char tin) /tin 是通道数 unsigned int ad; unsigned char i,j; cs=1; for(i=0;i10;i+) ; cs=0; cjn=tin; for(i=0;i8;i+) /通过循环将获得的数据保存在 cjn 中 cj=dout; din=cj7; cjn=cjn1; cj0=cj; sclk=1; j+; /脉冲高电平保持时间 sclk=0; ad=cjn*1
60、6; /先读出来的是高 8 位 cjn=tin; /还是原来的通道 for(i=0;i8;i+) cj=dout; din=cj7; cjn=cjn1; cj0=cj; sclk=1; j+ ; sclk=0; ad=ad+cjn/16; /只需要后读入数据中低 4 位 cs=1; /片选无效 return(ad); 数据处理模块 该模块主要包括 sort()函数和 jisuan()函数。 其中 sort()函数主要是将获得的 5 组 40 个数据中每组的最大值和最小值去掉,并转换为真 实的电压值,范围为电压为 05v。jisuan()函数是将去掉最大值和最小值后每组数据进行平均, 然后再参考
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出纳实务网课试题及答案
- 初级财务考试题库及答案
- 动态广告设计的创作试题及答案
- 全面掌握国际商业美术设计师考试试题及答案原则
- 餐饮hr面试题目及答案
- 2024年纺织品检验员考试挑战试题及答案
- 2024年助理广告师考试细节注意试题及答案
- 2024广告设计师考试常见误区分析试题及答案
- 安全监理考核试题及答案
- 商业美术设计师创意资源利用试题及答案
- 素养为本的教学评一体化教学设计核心理念
- 译林版三年级上册英语书单词表
- 康复科并发症二次残疾
- (新版)拖拉机驾驶证科目一知识考试题库500题(含答案)
- 2025年中考物理一轮复习:物理学与社会发展 专项练习
- DL∕T 526-2013 备用电源自动投入装置技术条件
- 2024年北京大兴区九年级初三一模英语试题和答案
- 食品生物化学 知到智慧树网课答案
- 2024年江苏国信新丰海上风力发电有限公司招聘笔试冲刺题(带答案解析)
- 学术交流英语(学术写作)智慧树知到期末考试答案2024年
- 国家卫生部《综合医院分级管理标准》
评论
0/150
提交评论