单片机频率和相位的测量
1、测量频率参数
测量频率参数只需要一个通道(电压或电流)的脉冲信号,设选用电压通道,由于是低频50Hz左右,因此要采用测周期的方案来换算出频率参数(低频测周期比较精确,高频测频率比较精确)。
由于电压通道接到单片机的外部中断INT0,只要计数两次INT0中断的间隔时间便可换算出频率。间隔时间采用定时器1统计,设晶体振荡器为12MHz,则一个机器周期为1μS,测量的结果保存在75H、74H中,程序如下:
测频准备阶段的程序:
SETB EX0;允许外部中断0中断,以便于测频
MOV TH1,#0
MOV TL1,#0
MOV TMOD,#10H
外部中断0中断服务程序:
SETB TR1
JNB P3.2,$
JB P3.2,$
CLR TR1
MOV 74H,TL1
MOV 75H,TH1
RETI
2、 测量相位参数
在测频的基础上,利用另外一个通道即电流通道产生的外部中断1中断信号,我们只要统计两个通道的中断间隔时间即得到两个通道相位之间的误差时间,再除以一个周期(测频率时已经测出)的时间,再乘以360,即为相位差。设测量结果报存在77H、76H中,程序如下:
测相准备阶段的程序:
SETB EX0;允许外部中断0中断
SETB EX1;允许外部中断0中断
MOV TH1,#0
毕业论文http://www.751com.cn
SETB TR1
RETI
外部中断1中断服务程序:
CLR TR1
MOV 76H,TL1
MOV 77H,TH1
RETI
测频用到了外部中断0,测相也用到了外部中断0,要区别两个含义不同的外部中断0,需要用一个标志位加以区别。以上检测程序就基本完成了,下面的就是关于这批数据的计算和换算程序了。
现在从70H~77H中均保存了有效数据,这些数据还都没有经过计算和换算,还都是“半成品”,但是我们要清除这里边都是什么数据。复述一遍:
71H、70H中为电压的A/D转换结果
73H、72H中为电流的A/D转换结果
75H、74H中为频率参数的机器周期数
77H、76H中为相位参数的机器周期数(实际上是电压和电流脉冲的时间差)
3、频率的计算
频率参数的原始数据被保存在75H、74H中,他还仅仅是一个机器周期数或微秒数(对应于12MHz的晶振),但由它便可获得频率值,因为它是在一个正弦波周期中取得的微秒数,只要求其倒数便可。但是我们选择的AT89C52型号的单片机内部没有求倒数的硬件支持,必须用程序运算,考虑到我们要获得4位数的结果(即XX.XX Hz),由于75H、74H中本文来自辣文论文网的数约为2 0 0 0 0左右,则用100000000这么大的数去除以75H、74H中的数即可。而1 0 0 0 0 0 0 0 0这么大的数需要4个字节来保存,并为05 F5 E1 00H,我们定义7FH7EH7DH7CH中保存该常熟,即:
PINLVJISUAN:
MOV 7FH,#05H
MOV 7EH,#0F5H
MOV 7DH,#0E1H
MOV 7CH,#00H;则被除数7FH7EH7DH7CH中的值为1 0 0 0 0 0 0 0 0。1389