基于单片机的低频信号发生器设计

2014-08-20 17:31任小青王晓娟田芳
现代电子技术 2014年16期
关键词:幅值

任小青+王晓娟+田芳

摘 要: 主要介绍以AT89C51单片机为核心部件的低频信号发生器的设计方法及工作原理。系统采用单片机扩展外部存储器和DAC接口技术,简化了仪器硬件设计。通过波形选择电路读取波形信号经离散化处理之后的波代码, 并通过D/ A 转换,还原成所需要的波形。通过改变存储器输出波代码的速度来调节输出信号的频率,改变放大器的放大倍数来调节输出信号的幅值。此外还讨论了波形离散化处理方法及数据采样点数与存储容量的关系, 并给出了系统结构图和软件框图。

关键词: 低频信号; 数据离散化; 幅值; 典型信号

中图分类号: TN710?34 文献标识码: A 文章编号: 1004?373X(2014)16?0014?04

Design on low?frequency signal generator based on SCM

REN Xiao?qing1, WANG Xiao?juan1, TAN Fang2

(1. School of Mechanical Engineering, Qinghai University, Xining 810016, China;

2. Modern Education Technology Center, Qinghai University, Xining 810016, China)

Abstract: The design approach and working principle of a low?frequency signal generator based on AT89C51 are introduced. The hardware design was simplified by using external memory extended with SCM and DAC interface technology. The wave code after discretization processing of waveform signal is read out though a waveform selection circuit, and reverted to the needed waveform by the D/A converter. The output signal frequency is adjusted by changing the wave code output speed of the memory. The amplitude is adjusted by changing the magnification of the amplifier. The waveform discretization processing method, and the relation between data sampling number and storage capacity are discussed. The system structure chart and software flow chart are given.

Keywords: low?frequency signal; data discretization; amplitude; typical signal

0 引 言

在工业测量控制系统的开发过程中, 常需要采用信号发生器为控制系统提供输入信号来模拟实际输入,并根据输出的频率响应特性来对系统进行调校。该系统不但能提供多种波形信号,而且信号的频率和幅值的大小也很容易控制。用它来模拟多种工况下的真实输入信号, 以达到降低开发成本、提高项目开发效率的目的。本文介绍了以AT89C51单片机为控制核心的低频信号发生器的硬件组成和工作原理。这里利用单片机的强大控制和计算能力,结合DAC接口技术产生频率和幅度都可调的正弦、方波、三角波等典型的波形信号来模拟不同的工况[1]。

1 低频信号发生器的工作过程及硬件组成

该系统的工作过程是通过波形选择电路使AT89C51读入预置的波代码表,根据矩阵键盘电路输入的频率值结合系统时钟与复位电路中的晶振频率,计算出相应的控制码,用来控制将数据输送到D/A转换器的速度,最终实现控制输出信号频率的目的。此频率通过LED进行显示。D/A转换器将数字信号转换成模拟量,并通过改变ADC0832的输入基准电压,来调整输出信号的幅值。其主要组成包括主控电路、波形选择电路、矩阵键盘和数码显示电路、信号输出电路。系统硬件组成框图1所示。

1.1 主控电路

主控电路以AT89C51为进程和任务的调度核心,辅以外围电路构成,主要完成波形数据表的读取。其根据键盘输入的频率值,计算出相应的控制参数,来控制输出信号的频率,并用LED显示频率值。系统电路原理如图2所示。 AT89C51的P0口与HD7279芯片进行连接,使用HD7279管理LED显示和键盘输入操作。P1口和波形选择按钮连接,P2口用来做A/D转换与DAC0832进行连接。同时给出了时钟和复位电路的连接。

图1系统硬件结构图

1.2 波形选择电路

波形选择电路通过开关按钮S1~S6对单片机发出波型选择信号,S2选取正弦波,S3选择三角波,以此类推。如图2所示,当按钮被按下后,与地相通,这时相应的连接线上就会出现一个低电位信号,中断系统会向AT89C51发出指令,让其对P1口进行扫描,当扫描到这个低电信号的位置后,就从EPROM调入相应的波形数据表。

1.3 矩阵键盘和数码显示电路

键盘和显示电路由HD7279芯片进行管理,无需外围电路,只需要外接少量的电阻,即可构成完善的显示、键盘接口电路。而与CPU的接口采用SPI串行接口方式,使用方便。

键盘可以输入波的频率值,系统会根据这个值计算出相应的控制量,控制数据向ADC0832的输出速度,达到控制频率的目的。

1.4 信号输出电路

AT89C51将波形数据表中的数据读出后,根据键盘输入的频率,算出控制量,将数据按一定的速度逐一输入到D/A转换器中,由输出数据的速度来调整信号的频率。通过放大器LM082,将D/A转换器输出电流模拟量转换为电压模拟量,其幅值可通过改变输入基准电压Vref来调整。

2 波形信号的离散化处理

工控系统中一般使用周期性信号,其变化规律可以用波码表来存储,该表记录了信号在一个周期中幅值的变化。其通过将信号波离散、计算幅值后得到。幅值位数和1个周期内采样的次数,共同决定了输出波形的精度。现对典型周期信号正弦波进行离散化处理[2]如图3所示。在其一个周期内取N等分离散点,计算出相对应各个点的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π为中心对称,且(0~π)区间内又以[π2]为轴对称。故只需计算[14] 周期内各个点的正弦值,具体步骤如下:

(1) 计算(0~[π2])区间各个离散点的正弦值;

(2) 根据轴对称关系,将(0~[π2])区间各个离散点的正弦值倒序复制到([π2]~π)区间的离散点上;

(3) 根据中心对称关系,将(0~π)区间各个点正弦值求补后,依次复制到(π~2π)区间的离散点上,这样就得到了整个周期的正弦值;

(4) 根据DAC的转换位数,将得到的这些数据换算后依次存入E2PROM中, 这样就得到一个完整的正弦波码表。

图3 正弦波形的离散化

由图3可见,离散处理后的正弦曲线,实际上变成了一个阶梯曲线,当N值越小这种阶梯化的状态越明显,误差也就越大,为了能减小这种失真,就必须在一个周期内,使N取得足够大。 这样可以使阶梯波更好地拟合正弦曲线,有效地减少失真 。当然这样做会增大波码表的大小,相应地也就占用了更多的存储器空间,而且用DAC 复现波形的速度也会相应的降低。如果一个周期中正弦信号的离散点有4 096个,每点占用1 B,那么正弦信号的波码表需要占4 KB;如果每个离散点占2 B,则容量将增加1倍[3]。

波形复现速度和离散点个数成比例关系,但减少失真度和增加离散点却不是线性关系,所以合理选择离散点数是十分重要的。如果一个周期曲线有其确定的函数表达式,那么就可以对其进行离散处理,然后通过DAC转换,复现这个函数。输出信号频率的上限受数据传送速度、数据锁存器及DAC 转换时间等因素的影响[4],其频率一定不会很高,也就是说本系统可以实现任意低频波形的复现。

3 信号发生器软件设计

该系统软件由整机初始化、DAC输出、键盘及显示等三大模块组成,由汇编语言编写全部程序,其流程如图4所示。

系统开机或复位后,首先进行初始化,其包括对键盘显示模块初始化及开中断设置等。完成初始工作状态设置后,根据波形选择开关,单片机读取存储器中不同的波形数据,然后进入DAC 主程序模块,键盘中断服务程序根据不同按键的键值计算出相应的控制量,控制数据输出速度,用来实现对波频率的控制。键盘及显示模块的管理可由编程芯片HD7279 完成,单片机只需要执行按键中断服务程序,由此可以腾出更多时间进行波形数据处理,使得输出波形更为平滑。

图4 软件结构总体程序流程

其中键盘扫描及显示部分程序如下:

PORT EQU 0CFA0H

CSEG AT 4000H

LJMP START

CSEG AT 4100H

START: MOV DPTR,#00CFE9H

MOV A,#0D1H ;清显示

MOVX @DPTR,A

LOOP10: MOVX A,@DPTR

ANL A,#0FH

JZ LOOP10 ;有键按下?没有则循环等待

MOV A,#0A0H ;显示\消隐命令

MOVX @DPTR,A

MOV A,#40H ;读FIFO命令

MOVX @DPTR,A

MOV DPTR,#0CFE8H ;读键值

MOVX A,@DPTR

MOV R7,A

MOV DPTR,#0CFE9H ;写显示RAM命令

MOV A,#81H ;选中LED2

MOVX @DPTR,A

MOV A,R7

ANL A,#0FH ;取后半字节

MOV 30H,#01H;

MOV 31H,#01H;

JNB P1.5,TFU

MOV 30H,A ;30H存放调频值

SJMP L1

TFU: MOV 31H,A ;31H存放调幅值

L1: MOV DPTR,#TAB

MOVC A,@A+DPTR ;取段显码

MOV DPTR,#0CFE8H ;写显示RAM

MOVX @DPTR,A

MOV DPTR,#0CFE9H ;写显示RAM命令

MOV A,#80H ;选中LED1

MOVX @DPTR,A

MOV A,R7

ANL A,#0F0H

SWAP A ;取后半字节

MOV DPTR,#TAB

MOVC A,@A+DPTR ;取段显码

MOV DPTR,#0CFE8H ;写显示RAM

MOVX @DPTR,A

MOV DPTR,#0CFE9H

4 结 语

该系统具有如下特点: 系统结构简单,采用集成化元器件,工作稳定。可以输出多种波形,也就是说可以对任何具有确定函数表达式的曲线进行输出。输出信号容易控制,通过改变DAC输入基准电压来改变信号幅值,通过改变发送到DAC数据的速度可以改变频率。但该系统受到DAC0832转换位数和建立时间的限制,波形的输出信号频率不能太高,若采用其他转换位数更高、建立时间更短的D/A转换芯片,如采用DAC712 来代替DAC0832,能使输出波的频率范围更大。

参考文献

[1] 李杏春.单片机原理及使用接口技术[M].北京:北京航空航天大学出版社,1996.

[2] 李华.MCS?51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1993.

[3] 于枫,王鼎.微型计算机原理及应用[M].长春:吉林科学技术出版社,1996.

[4] 何利民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1995.

[5] 毛群.基于AD9851的受控正弦信号发生器设计[J].现代电子技术,2012,35(1):187?188.

[6] 李朋飞,王勇,黄秋兰.基于DDS的任意波信号发生器设计[J].现代电子技术,2012,35(12):72?74.

键盘和显示电路由HD7279芯片进行管理,无需外围电路,只需要外接少量的电阻,即可构成完善的显示、键盘接口电路。而与CPU的接口采用SPI串行接口方式,使用方便。

键盘可以输入波的频率值,系统会根据这个值计算出相应的控制量,控制数据向ADC0832的输出速度,达到控制频率的目的。

1.4 信号输出电路

AT89C51将波形数据表中的数据读出后,根据键盘输入的频率,算出控制量,将数据按一定的速度逐一输入到D/A转换器中,由输出数据的速度来调整信号的频率。通过放大器LM082,将D/A转换器输出电流模拟量转换为电压模拟量,其幅值可通过改变输入基准电压Vref来调整。

2 波形信号的离散化处理

工控系统中一般使用周期性信号,其变化规律可以用波码表来存储,该表记录了信号在一个周期中幅值的变化。其通过将信号波离散、计算幅值后得到。幅值位数和1个周期内采样的次数,共同决定了输出波形的精度。现对典型周期信号正弦波进行离散化处理[2]如图3所示。在其一个周期内取N等分离散点,计算出相对应各个点的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π为中心对称,且(0~π)区间内又以[π2]为轴对称。故只需计算[14] 周期内各个点的正弦值,具体步骤如下:

(1) 计算(0~[π2])区间各个离散点的正弦值;

(2) 根据轴对称关系,将(0~[π2])区间各个离散点的正弦值倒序复制到([π2]~π)区间的离散点上;

(3) 根据中心对称关系,将(0~π)区间各个点正弦值求补后,依次复制到(π~2π)区间的离散点上,这样就得到了整个周期的正弦值;

(4) 根据DAC的转换位数,将得到的这些数据换算后依次存入E2PROM中, 这样就得到一个完整的正弦波码表。

图3 正弦波形的离散化

由图3可见,离散处理后的正弦曲线,实际上变成了一个阶梯曲线,当N值越小这种阶梯化的状态越明显,误差也就越大,为了能减小这种失真,就必须在一个周期内,使N取得足够大。 这样可以使阶梯波更好地拟合正弦曲线,有效地减少失真 。当然这样做会增大波码表的大小,相应地也就占用了更多的存储器空间,而且用DAC 复现波形的速度也会相应的降低。如果一个周期中正弦信号的离散点有4 096个,每点占用1 B,那么正弦信号的波码表需要占4 KB;如果每个离散点占2 B,则容量将增加1倍[3]。

波形复现速度和离散点个数成比例关系,但减少失真度和增加离散点却不是线性关系,所以合理选择离散点数是十分重要的。如果一个周期曲线有其确定的函数表达式,那么就可以对其进行离散处理,然后通过DAC转换,复现这个函数。输出信号频率的上限受数据传送速度、数据锁存器及DAC 转换时间等因素的影响[4],其频率一定不会很高,也就是说本系统可以实现任意低频波形的复现。

3 信号发生器软件设计

该系统软件由整机初始化、DAC输出、键盘及显示等三大模块组成,由汇编语言编写全部程序,其流程如图4所示。

系统开机或复位后,首先进行初始化,其包括对键盘显示模块初始化及开中断设置等。完成初始工作状态设置后,根据波形选择开关,单片机读取存储器中不同的波形数据,然后进入DAC 主程序模块,键盘中断服务程序根据不同按键的键值计算出相应的控制量,控制数据输出速度,用来实现对波频率的控制。键盘及显示模块的管理可由编程芯片HD7279 完成,单片机只需要执行按键中断服务程序,由此可以腾出更多时间进行波形数据处理,使得输出波形更为平滑。

图4 软件结构总体程序流程

其中键盘扫描及显示部分程序如下:

PORT EQU 0CFA0H

CSEG AT 4000H

LJMP START

CSEG AT 4100H

START: MOV DPTR,#00CFE9H

MOV A,#0D1H ;清显示

MOVX @DPTR,A

LOOP10: MOVX A,@DPTR

ANL A,#0FH

JZ LOOP10 ;有键按下?没有则循环等待

MOV A,#0A0H ;显示\消隐命令

MOVX @DPTR,A

MOV A,#40H ;读FIFO命令

MOVX @DPTR,A

MOV DPTR,#0CFE8H ;读键值

MOVX A,@DPTR

MOV R7,A

MOV DPTR,#0CFE9H ;写显示RAM命令

MOV A,#81H ;选中LED2

MOVX @DPTR,A

MOV A,R7

ANL A,#0FH ;取后半字节

MOV 30H,#01H;

MOV 31H,#01H;

JNB P1.5,TFU

MOV 30H,A ;30H存放调频值

SJMP L1

TFU: MOV 31H,A ;31H存放调幅值

L1: MOV DPTR,#TAB

MOVC A,@A+DPTR ;取段显码

MOV DPTR,#0CFE8H ;写显示RAM

MOVX @DPTR,A

MOV DPTR,#0CFE9H ;写显示RAM命令

MOV A,#80H ;选中LED1

MOVX @DPTR,A

MOV A,R7

ANL A,#0F0H

SWAP A ;取后半字节

MOV DPTR,#TAB

MOVC A,@A+DPTR ;取段显码

MOV DPTR,#0CFE8H ;写显示RAM

MOVX @DPTR,A

MOV DPTR,#0CFE9H

4 结 语

该系统具有如下特点: 系统结构简单,采用集成化元器件,工作稳定。可以输出多种波形,也就是说可以对任何具有确定函数表达式的曲线进行输出。输出信号容易控制,通过改变DAC输入基准电压来改变信号幅值,通过改变发送到DAC数据的速度可以改变频率。但该系统受到DAC0832转换位数和建立时间的限制,波形的输出信号频率不能太高,若采用其他转换位数更高、建立时间更短的D/A转换芯片,如采用DAC712 来代替DAC0832,能使输出波的频率范围更大。

参考文献

[1] 李杏春.单片机原理及使用接口技术[M].北京:北京航空航天大学出版社,1996.

[2] 李华.MCS?51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1993.

[3] 于枫,王鼎.微型计算机原理及应用[M].长春:吉林科学技术出版社,1996.

[4] 何利民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1995.

[5] 毛群.基于AD9851的受控正弦信号发生器设计[J].现代电子技术,2012,35(1):187?188.

[6] 李朋飞,王勇,黄秋兰.基于DDS的任意波信号发生器设计[J].现代电子技术,2012,35(12):72?74.

键盘和显示电路由HD7279芯片进行管理,无需外围电路,只需要外接少量的电阻,即可构成完善的显示、键盘接口电路。而与CPU的接口采用SPI串行接口方式,使用方便。

键盘可以输入波的频率值,系统会根据这个值计算出相应的控制量,控制数据向ADC0832的输出速度,达到控制频率的目的。

1.4 信号输出电路

AT89C51将波形数据表中的数据读出后,根据键盘输入的频率,算出控制量,将数据按一定的速度逐一输入到D/A转换器中,由输出数据的速度来调整信号的频率。通过放大器LM082,将D/A转换器输出电流模拟量转换为电压模拟量,其幅值可通过改变输入基准电压Vref来调整。

2 波形信号的离散化处理

工控系统中一般使用周期性信号,其变化规律可以用波码表来存储,该表记录了信号在一个周期中幅值的变化。其通过将信号波离散、计算幅值后得到。幅值位数和1个周期内采样的次数,共同决定了输出波形的精度。现对典型周期信号正弦波进行离散化处理[2]如图3所示。在其一个周期内取N等分离散点,计算出相对应各个点的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π为中心对称,且(0~π)区间内又以[π2]为轴对称。故只需计算[14] 周期内各个点的正弦值,具体步骤如下:

(1) 计算(0~[π2])区间各个离散点的正弦值;

(2) 根据轴对称关系,将(0~[π2])区间各个离散点的正弦值倒序复制到([π2]~π)区间的离散点上;

(3) 根据中心对称关系,将(0~π)区间各个点正弦值求补后,依次复制到(π~2π)区间的离散点上,这样就得到了整个周期的正弦值;

(4) 根据DAC的转换位数,将得到的这些数据换算后依次存入E2PROM中, 这样就得到一个完整的正弦波码表。

图3 正弦波形的离散化

由图3可见,离散处理后的正弦曲线,实际上变成了一个阶梯曲线,当N值越小这种阶梯化的状态越明显,误差也就越大,为了能减小这种失真,就必须在一个周期内,使N取得足够大。 这样可以使阶梯波更好地拟合正弦曲线,有效地减少失真 。当然这样做会增大波码表的大小,相应地也就占用了更多的存储器空间,而且用DAC 复现波形的速度也会相应的降低。如果一个周期中正弦信号的离散点有4 096个,每点占用1 B,那么正弦信号的波码表需要占4 KB;如果每个离散点占2 B,则容量将增加1倍[3]。

波形复现速度和离散点个数成比例关系,但减少失真度和增加离散点却不是线性关系,所以合理选择离散点数是十分重要的。如果一个周期曲线有其确定的函数表达式,那么就可以对其进行离散处理,然后通过DAC转换,复现这个函数。输出信号频率的上限受数据传送速度、数据锁存器及DAC 转换时间等因素的影响[4],其频率一定不会很高,也就是说本系统可以实现任意低频波形的复现。

3 信号发生器软件设计

该系统软件由整机初始化、DAC输出、键盘及显示等三大模块组成,由汇编语言编写全部程序,其流程如图4所示。

系统开机或复位后,首先进行初始化,其包括对键盘显示模块初始化及开中断设置等。完成初始工作状态设置后,根据波形选择开关,单片机读取存储器中不同的波形数据,然后进入DAC 主程序模块,键盘中断服务程序根据不同按键的键值计算出相应的控制量,控制数据输出速度,用来实现对波频率的控制。键盘及显示模块的管理可由编程芯片HD7279 完成,单片机只需要执行按键中断服务程序,由此可以腾出更多时间进行波形数据处理,使得输出波形更为平滑。

图4 软件结构总体程序流程

其中键盘扫描及显示部分程序如下:

PORT EQU 0CFA0H

CSEG AT 4000H

LJMP START

CSEG AT 4100H

START: MOV DPTR,#00CFE9H

MOV A,#0D1H ;清显示

MOVX @DPTR,A

LOOP10: MOVX A,@DPTR

ANL A,#0FH

JZ LOOP10 ;有键按下?没有则循环等待

MOV A,#0A0H ;显示\消隐命令

MOVX @DPTR,A

MOV A,#40H ;读FIFO命令

MOVX @DPTR,A

MOV DPTR,#0CFE8H ;读键值

MOVX A,@DPTR

MOV R7,A

MOV DPTR,#0CFE9H ;写显示RAM命令

MOV A,#81H ;选中LED2

MOVX @DPTR,A

MOV A,R7

ANL A,#0FH ;取后半字节

MOV 30H,#01H;

MOV 31H,#01H;

JNB P1.5,TFU

MOV 30H,A ;30H存放调频值

SJMP L1

TFU: MOV 31H,A ;31H存放调幅值

L1: MOV DPTR,#TAB

MOVC A,@A+DPTR ;取段显码

MOV DPTR,#0CFE8H ;写显示RAM

MOVX @DPTR,A

MOV DPTR,#0CFE9H ;写显示RAM命令

MOV A,#80H ;选中LED1

MOVX @DPTR,A

MOV A,R7

ANL A,#0F0H

SWAP A ;取后半字节

MOV DPTR,#TAB

MOVC A,@A+DPTR ;取段显码

MOV DPTR,#0CFE8H ;写显示RAM

MOVX @DPTR,A

MOV DPTR,#0CFE9H

4 结 语

该系统具有如下特点: 系统结构简单,采用集成化元器件,工作稳定。可以输出多种波形,也就是说可以对任何具有确定函数表达式的曲线进行输出。输出信号容易控制,通过改变DAC输入基准电压来改变信号幅值,通过改变发送到DAC数据的速度可以改变频率。但该系统受到DAC0832转换位数和建立时间的限制,波形的输出信号频率不能太高,若采用其他转换位数更高、建立时间更短的D/A转换芯片,如采用DAC712 来代替DAC0832,能使输出波的频率范围更大。

参考文献

[1] 李杏春.单片机原理及使用接口技术[M].北京:北京航空航天大学出版社,1996.

[2] 李华.MCS?51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1993.

[3] 于枫,王鼎.微型计算机原理及应用[M].长春:吉林科学技术出版社,1996.

[4] 何利民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1995.

[5] 毛群.基于AD9851的受控正弦信号发生器设计[J].现代电子技术,2012,35(1):187?188.

[6] 李朋飞,王勇,黄秋兰.基于DDS的任意波信号发生器设计[J].现代电子技术,2012,35(12):72?74.

猜你喜欢
幅值
多尺度串联非线性能量阱的减振效能及阻尼连接方式研究
新型固化剂加固土动态力学特性试验研究
AFM轻敲模式下扫描参数对成像质量影响的研究
基于频响函数识别结构非线性模态参数的方法
控制系统参数对伺服动刚度的影响
《液压与气动》常用单位的规范
基于S变换的交流电网幅值检测系统计算机仿真研究
Prevention of aspiration of gastric contents during attempt in tracheal intubation in the semi-lateral and lateral positions
水泵水轮机在水轮机制动工况下压力脉动的模型试验研究
正序电压幅值检测及谐波抑制的改进