找回密码
 注册
关于网站域名变更的通知
查看: 531|回复: 1
打印 上一主题 下一主题

单片机电压频率测试系统

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-8-15 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在生产过程中,整机的参数检测是产品质量的保证,以往一般用工装测试并且结合万用表、示波器等读出读数,进行判断。0 \! ~6 [4 F4 x8 P$ F2 m
  我们用单片机对工装进行了改造。用改造后的工装测试时,只要把需检测的参数上下限输入单片机,把工装的针角对准待测点,然后把待测件通上电源,如果有报警声,即可根据报警指示灯的标志判断是哪一个参数出错。系统框图见图1。1 U! N8 |/ V: O% a
  若CPU采用PHILIPS公司的89C52,内含4K字节的EPROM,用户可将工作程序固化在EPROM中,并可重复烧写。; M$ N, F8 V1 B1 P
  CPU外接晶体的振荡频率为12Hz,则
2 Z8 R* ]1 h( L% j  机器周期=12×振荡周期4 V) ?0 e. m  f5 N5 X  ^+ v
      =12×112μs
6 m( l9 z, [) p      =1μs
( N' I5 b  g& c3 i- `2 X+ ]/ P  CPU的复位电路采用手动复位与上电复位相结合的设计(图2);ADC 0809芯片内部无时钟,在与89C52接口时,可利用其地址锁存允许信号ALE获得。/ x6 T! \& z; J5 P( Y
  因为,89C52 ALE时钟频率=# [" q  S' c8 G+ N: Z
  1/6×CPU振荡频率: T4 d" Z: a) _. `
  =1/6×12MHz=2MHz$ ~/ w# {/ z9 i  k
  所以,CPU ALE经双D触发器(7474)四分频后得500kHz振荡频率提供给0809。89C52的P0口用作复用数据总线。由于0809具有三态输出锁存器,故其8位数据输出引脚D0~D7可直接与89C52的数据总线P0口相连。地址译码引脚A、B、C端分别接到89C52的低三位数据线P00、P01、P02。1N0~1N7是分时进行选择控制的,选择哪一路由ADC0809的地址选择线A、B、C决定。0809的转换启动(START)信号和八路模拟输入开关的地址锁存允许(ALE)信号分别由89C52的P27、P26口提供,输出允许(OE)引脚用89C52的P25口来启动。- H6 e4 a3 x- M
  报警电路图见图3。89C52的P10~P17作为1N0~1N7 8路电压越界报警指示,P21口作为频率越界报警指示。P20口接报警蜂鸣器,用作报警辅助指示。4 s0 {( w5 ?& @/ |- ~  m
  由于0809采集电压范围为0~5V,而被测试板卡电压一般有正负之分,且幅度大于5V,因此设计了正负电压采集系统,并利用分压电路将测试范围扩大。0809的1N6、1N7用来采集负电压,1N0~1N5用来采集正电压。负电压采集电路(图4)利用NE5532实现,改变R33、R34参数即可改变电压测试范围。正电压分压电路如图5。( P6 o( r# W5 S6 U$ a; C
  D13、D14为0809保护电路,防止1N1端口电压大于5V,损坏0809。C17用来滤除测试电压中的交流部分。R13=R14=R15采用精密电阻,则此时,电压测试范围为:& X0 |3 U5 G1 J# _) `  B
  F=5V÷1/3=15V基本上能满足测试要求。若想获得更大的测试范围,给R14并联更多电阻即可。本系统采用精密电阻,可满足一般5%测试误差的要求。
  V& r+ L6 U6 B4 u8 |! L' s  89C52 T0口设为计数器工作方式。由于每检测一个从1到0的负跳变需用2个机器周期,这就要求被采样的电平至少维持一个完整的机器周期,由上述可知,本系统机器周期为1μs,因此89C52采样最大频率为500kHz。对于小于500kHz的频率经整形后,就可直接送入T0口,大于500kHz的频率就要通过分频、整形后,方可送入T0口。
+ c5 Q6 A! |4 ^* y* f  程序设计框图如图6所示,现将各部分简要介绍如下:- @, b% b% i$ S! ?8 X1 S1 Y! F& Q
  1初始化1 s0 [6 d4 D* }9 s; `
  (1)20H单元为电压报警状态字,初值为00H,0~7位为电压报警位。21H单元为频率报警状态字,初值为00H,0位为频率报警位。
& J/ ~% x& a/ M2 N* L0 S  (2)30-3FH单元分别为待测电路电压上下界常数,4A-4DH为频率计数值上下界常数。$ i- t( j* L: o, o8 G
  2测频率子程序+ ]9 b. t; b4 V4 _* t$ Q$ X& x1 F; |
  频率的测试原理是在给定时间(T)内测出读入的脉冲数(N),则待测频率f=N/T。
5 ?* @! {( Z2 X( I3 [+ C  w  在本系统中,用89C52内部的定时器/计数器来完成这项工作,令T0为定时方式,T1为计数方式。将T0、T1均设为方式1。# H5 v" U& u' E% f" o
  将定时时间设为100ms,则T0应装入的时间常数(T0初值),可计算如下:
2 O. S) N7 |0 w. C. q' T1 B& J  因为,定时时间=(216-T0初值)×机器周期
  c' |# V/ I* A! ~  所以,T0初值=216-定时时间÷机器周期
) J6 Y: L5 C. t# d( y( Y9 i. I  =216-100ms÷1μs' w% V/ h9 A, [" o
  =64536D
+ ^2 e+ O) n! d, K" O, [  =FC18H
& `9 M3 u+ O- y- w' V: `  将T0初值分别装入16位数TH0和TL0。; ^3 k% ~0 h$ x# d
  由于89C52计数器的外接输入端的最大频率为500kHz,而我们通常需测频率为数兆赫或数十兆赫,因此本系统采用了分频电路。设分频K倍,实测上下限频率分别为f1、f2,频率计数值上界常数为F1,下界常数为F2。4 ]& N- L9 ?7 s
  则F1=(f1/k×500kHz×100ms)÷500kHz2 F/ d1 V- F; L) [
  =1/K×100ms×f1
1 J- }' @2 K& i. E. o4 f4 w  同理F2=1/K×100ms×f2
/ ~9 H! y1 T, w) I! t0 i  把十进制的F1、F2转换为16进制后,再把高低位分别存入相应的单元(4A-4DH)供频率判断程序使用。
6 r0 ?6 i) S" e8 o, h  3频率判断程序
8 p2 Q" F& m/ {# n) ^  M# F& j  先判断测出的频率值高位,若高位不相等,即马上可判断出是否越界,若高位相等,则判断低位,若结果越界,则用置位指令把20H单元的相应位置“1”。$ u4 B6 K" h9 b8 O* P" t0 O) m( |7 f& }
  在A/D转换时,选择了用软件延时方式。0809共可以测八路电压信号,开始时把通道号置1,然后发启动信号,调延时程序(延时定为200ms。由于0809转换时间为100μs,8个通道为800μs,延时定为200ms足够),读A/D转换数据,再判断电压是否越界,最后通道号加1,直到每个通道都检测完毕。
, U8 Q% y& N$ r% ?) q, }0 O  电压上下限参数的确定:0809的分辨率为8位,最大输入电压为5V,即2-1=255对应的是满量程5V。为了测得超过5V的电压,本系统采用分压电路,电压上下限参数按以下公式确定
* z: P9 I9 l5 \( x  V=v/5k×256. Z* @. E. Y" ]: t
  其中V为十进制上下限参数,v为预测电压上下限,K为分压系数。
- p* x* g- U8 f1 G) P( J; r  把V转换为16进制数存入相应的内存单元(30-3FH),供判断程序使用。
. _4 H0 u* {% W/ W; ^  5发报警信号% J! i  V- h6 y9 c0 H$ ?. K
  若20H内容不为零,则发报警声,并且相应电压报警信号灯D0~D7亮。: e1 E0 Y" \* G, }; A9 }1 Y& I& x$ N! O) f
  若21H内容不为零,则发报警声,频率报警信号灯D8亮。3 K' Y; }: Z# J: z5 ~8 c& S
  6适用范围广,可重复利用:采用可擦除CPU,更改几个参数,即可满足不同的测试要求。

该用户从未签到

2#
发表于 2016-8-15 15:50 | 只看该作者
路过捧场,谢谢分享!5 F1 \  W) b" Z( ~3 P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-27 06:32 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表