基于单片机设计的简易信号源
扫描二维码
随时随地手机看文章
1. 引言
信号发生器在教学、试验、测控等各个领域有十分广泛的应用,其输出信号的频率范围覆盖了各个频段,从甚低频到甚高频,操作方式也从手动旋钮到程控,产生的波形从传统的正(余)弦波和脉冲波形,发展到现在能产生各种任意波形。以前的信号发生器往往独占一个机箱,而现在的一些应用中,它只是一块插在计算机中的扩展卡,还有一些信号发生器设计成一个独立的小模块,通过RS-232C或RS-422,RS-485等串行总线和计算机连接。
其实,在许多固定的控制应用中,只要求信号发生器产生单一波形,或可数的几个波形。如果仅仅要求产生单一的正(余)弦波或者脉冲波形,可以利用传统的振荡器电路。当信号频率有所选择时,问题仍然比较简单。但若产生的信号波形比较复杂时,电路的设计也同样变得很复杂。加之传统振荡器电路由于有较大的温度漂移,需要较长的预热时间,为达到较高的频率精度,需仔细调节电路各个参数。
数字频率合成技术的采用,大大简化了信号发生器的设计。但在某些特定情况,需要的仅仅是几个单独的波形,这时我们可以使用单片机和DAC芯片,用十分简单的电路产生所需要的波形。
2. 电路设计及编程考虑
单片机简易信号发生器电路框图如图1,仅由一片AT89C2051单片机,一片DAC0832和由运放组成的低通滤波器组成。AT89C2051内部有 2KB的FLASH存储器,可以保存运行程序和波形参数,128字节的RAM可以用于存放波形参数。由于采用了数字合成技术,可以产生各种简单或复杂的波形。
工作过程说明如下;(1)决定产生的信号波形;通电稳定工作以后,单片机首先读取P3.0和P3.1引脚信号,决定程序应跳转的地址。每个跳转地址有一个输出波形。(2)将保存在FLASH中的样本数据送往DAC0832,供其转换成模拟电压。
首先应将波形参数转换成样本数据。假若每周期有N个样本数据,则第K个样本数据的计算方法为:
DK=127(1+SIN(2πK/N) K=0,1,2,……N-1
由于在实际产生波形的过程中,数据由运行程序逐个取得送出,在产生周期波时是一个循环过程。因此必须考虑程序取数、送数、循环等操作的时间开销。对于 MCS51系列单片机,在晶振频率为12MHz时,每条指令的执行时间为1~2μs。为了使波形足够光滑,每周期的点数应尽可能多,这样要求单片机发送样本数据的速率尽量快。由于送数周期的限制,在增加样本点数时,输出信号频率会降低。同时从程序存储器空间取数时需要较长的时间,当样本数据的个数不多时,可以把样本数据先移到RAM中,程序执行时直接从RAM中取数送往DAC,就能增加发送样本数据的速率。
下面以产生单一4800Hz正弦波为例,说明程序设计过程。参数N的计算见后面的说明。
ORG 0000H
MOV R0,#0
MOV R1,#4
MOV R2,#124
MOV DPTR,#200H
MOV A,#0
MOVD: MOVC A,@A+DPTR ;将样本数据从FLASH
MOV @R1,A ;移到内部RAM中,
INC R0 ;可以减少送数时间
INC R1
MOV A,R0
DJNZ R2,MOVD
MOV R0,#04
DOUT: MOV A,@R0 ;轮流送数到DAC
MOV P1,A
INC R0
CJNE R0,#128,DOUT
MOV P1,#128 ;从起点开始重新送样本数据
MOV R0,#04 ;
SJMP DOUT ;送数循环结束
;
ORG 0200H ;样本数据表
DB 0147
DB 165
……
以上程序中,DOUT标号开始的一段循环程序送样本数据。该段循环程序指令经过精心选择,N个样本数据共用4条指令,执行时间为5μs。但对4800 Hz的信号频率,信号周期为208.3333μs,计算得到样本数据的个数N=208.3333/5=41.6667。由于样本数据的个数不能为小数,可以考虑采用4舍5入,以得到最接近的信号频率。因此取样本个数为42,但信号周期变为210μs,信号频率为4762Hz,频率误差很大,达不到使用要求。
为此,可采用多周期综合技术。多周期综合的方法就是在计算样本数据时,将M个周期一并考虑。即N个样本数据代表了M个信号周期的波形,使每个周期的样本数与要求值最接近。计算公式如下:
DK=127(1+SIN(2лMK/N) K=0,1,2,3……N-1
为此,需合理确定N和M的值。
M的值可如下确定;取单周期样本数据个数的小数部分,除1的结果既为M。对f0=4800Hz,可知M恰好等于3。
下面计算N;已知每个样本数据需要5μs,样本周期数为3,信号频率为4800 Hz,则
N=3/4800*1000000/5=125
由此可知样本数据的计算公式:
DK=127(1+SIN(6л/125)) K=0,1,2……124
实用中,用该信号源产生了4800Hz正弦波,400Hz正弦波、480Hz正弦波和1000Hz方波四种波形。400Hz、480Hz正弦波和1000Hz方波的波形参数计算此处略。实测表明四种信号的频率误差都小于0.5Hz。
如果信号频率比较低,样本数据很多,就不需要把样本数据先移到RAM中,而直接从FLASH中取得样本数据送往DAC。对正弦波来说,当每周期有20个以上的样本数据时,就有比较好的波形。对于矩形波来说,每周期只需要2个样本数据。
3. 小结
以上电路虽然简单,但有比较精确的波形。由于波形参数完全由软件预先设定,除了产生正弦波、方波以外,还能产生梯形波或sin(x)/x等形状复杂的波形。可以将电路设计成嵌入式结构,从而在一些工业生产现场得到应用。
参考文献
1 余永权.ATMEL89系列(MCS-51兼容)FLASH单片机原理及应用.电子工业出版社.1997年
2 蒋焕文,孙续.电子测量.中国计量出版社.1988年