缔冠期刊网

多功能波形发生器设计

2022-06-09

陈红,谢勤岚

(中南民族大学实验中心,湖北武汉430074)

摘要:设计一种多功能波形发生器,以C8051F040单片机为控制器,控制波形发生器MAX038和功放实现输出正弦波、方波、三角波。该多功能波形发生器使用键盘调整波形频率,通过液晶显示屏显示频率,使用键盘选择不同的功能模式,实现外测电压的信号采集、数据存储和波形再现;可以实现USB串口传输并将接收到的信号进行波形再现。采集和由串口接收到的数据可通过I2C总线方式存入数据存储器中,也可以在单片机内部存储器中存入波形数据,再将其显示。

教育期刊网 http://www.jyqkw.com
关键词 :波形发生器;MAX038;C8051F040单片机;I2C

中图分类号:TN911-34;TP937 文献标识码:A 文章编号:1004-373X(2015)12-0110-05

收稿日期:2014-12-15

基金项目:国家自然科学基金(61178087)

0 引言

在现代电子技术的研究及应用领域中,常常需要价格便宜、简单易用、高精度且频率可调的信号源。而信号源的核心是波形发生器,因此设计实用的波形发生器是很有必要的[1]。

波形发生器可以由晶体管、运算放大器等通用器件构成,但更多的则是用专门的函数信号发生器集成电路实现。早期的波形发生器集成芯片,如L8038、BA205、XR2207/2209等,它们的功能较少、精度不高,频率上限只有300 kHz,无法产生更高频率的信号,调节方式也不够灵活,频率和占空比不能独立调节,二者互相影响[2]。目前市场上主要的波形发生芯片有美国Harris公司的ICL8038和美国MAXIM公司的MAX038。ICL8038只能产生300 kHz以下的频段波形,而且频率调节与占空比调节不能独立进行,无法满足信号源频率的高精度要求。相比而言MAX038 芯片有着ICL8038 芯片无法实现的优点。因此本设计使用高精度波形发生芯片MAX038,该芯片电路连接简单,只需很少的外部电路就可以产生频率在0.1~40 MHz的高精度、高稳定度的宽频带波形[3]。同时结合Silicon Labs公司的C8051F040单片机,使其可以满足多任务、实时性要求。

1 波形发生器总体设计

采用C8051F040单片机为核心,设计制作可以调节频率的多功能波形信号发生器[4]。芯片MAX038产生信号的频率可以通过调整电流和外接电容的大小来控制,因此本设计主要采用控制电流的方法来控制MAX038所产生的频率。该信号发生器能同时产生3路输出可调的正弦波、方波和三角波,并且占空比可以连续调节。

系统可以检测外部电路模拟信号,通过一个电压跟随器对检测的信号进行缓冲和隔离后,再经过单片机C8051F040 内集成的A/D 将信号转换为数字信号并存入AT24C02中。当需要输出时再通过D/A转换,转换成模拟信号,由D/A0 端口输出,经MAX038 芯片产生波形,并由液晶显示器1602 显示其频率。也可以通过USB 串口接受从电脑中下载的数据,并存入AT24C02中,同样可以再通过D/A 转换,转换成模拟信号,由D/A0端口输出,经MAX038产生波形,通过液晶显示器显示频率[5]。系统可以通过4×4键盘输入频率值,从而达到直接控制MAX038产生波形的目的,并能够用1602液晶显示器显示波形的频率。系统还可以在单片机中存入波形信号,然后通过功率放大器,直接产生波形。波形发生器框图如图1所示。

2 波形发生器硬件设计

2.1 波形发生模块

将C8051F040单片机的D/A0端口通过一个电阻直接与芯片MAX038的IN 管脚相连,通过控制D/A0端口的电压值的变化来控制IN 管脚的电流产生变化,从而达到控制波形频率的目的。本信号发生器通过3 路MAX038芯片能同时产生3路输出可调的正弦波、方波、三角波波形,输出的波形稳定性好、精度高,占空比可以连续调节。信号输出部分再采用低损耗电流反馈型宽带运放MAX477作电压放大,很好地解决了带宽和带负载能力的要求。

MAX038所产生的波形的频率是由COSC引脚的电容量和IN引脚的电流所决定的。假设C8051F040单片机的D/A0端口的输出电压为VIN,D/A0端口与IN管脚相连的电阻大小为RIN,COSC 引脚所接的电容的大小为CF,则MAX038所产生的波形的频率(单位:MHz)为:

当在FADJ引脚施加一个±2.4 V 范围的电压时,可使输出频率有±70%的变化,此时可以实现对频率进行精确的调整[4]。

MAX038所产生的波形的占空比是由DADJ引脚的电压变化来控制的,当DADJ引脚的电压在±2.4 V范围内变化时,输出波形的占空比将在15%~85%之间变化。

MAX038 产生的正弦波、方波或三角波,具体的输出波形由地址A0和A1的输入数据进行设置,如表2所示(其中X表示无关)。波形发生器能同时3路输出3种波形,所以将3路MAX038的输出波形的选择地址分别设置成为表1所示的3种固定状态。

图2为MAX038的基本电路连接(此图中A0和A1 选择为输出矩形波)。

2.2 功放模块

波形发生器对输出波形具有一定的功率要求,因此要对MAX038 的输出信号进行功率放大。MAX477 是MAXIM 公司开发的一款低噪声、低微分增益和阶段误差、高转换速率、高精度、高输出电流的高频运算放大器,其-3 dB 带宽可达到300 MHz,最小输出电流为100 mA。因此选用MAX477 对输出信号进行功率放大。图3为功放模块的原理图,通过调节反馈电阻值可以改变输出电压的放大倍数,其中电压最大可放大10 倍左右,整个系统的输出功率可达到数瓦。

2.3 USB接口模块

采用CH372 芯片来接收由串口传来的数据。CH372 是一个USB 总线的通用设备接口芯片,遵守USB1.1 协议。在本地端,CH372 具有8 位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机、DSP等控制器的系统总线上。

2.4 数据存储

数据存储主要用于存储外测电压的信号数据以及从USB 串口接收到的数据,采用的存储芯片为AT24C02。AT24C02的特点是支持I2C总线数据传送协议,相应的存储器电路如图4所示。采用由主器件控制传送数据的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。

2.5 键盘模块

为了减少I/O口的占用,波形发生器的键盘采用矩阵式键盘。图5为键盘原理图。

2.6 液晶显示模块

波形发生器采用1602液晶显示屏。1602液晶显示屏具有外接电路简单,操作方便等特点,能够同时显示16×2,即32 个字符。1602 液晶显示器具体电路如图6所示。

3 软件设计

3.1 软件总设计与总流程图

系统采用C8051F040 单片机。C8051F040 单片机是完全集成的混合信号片上系统型MCU,具有64 个数字I/O 引脚,片内集成了一个CAN 2.0B 控制器,并集成有ADC 和DAC。其中ADC 为真正12 位、100 KSPS 的ADC,并带有PGA 和8 通道模拟多路开关;DAC 有两组,为12 位DAC,且具有可编程数据更新方式[6]。程序采用C 语言编写,操作C8051F040 对外围器件进行控制[7],总流程图如图7所示。

3.2 波形发生程序

产生波形时对MAX038的控制只需控制其IN脚所输入的电流。该电流应由C8051F040 提供,而电流是一个模拟量。因此,在这里需要用到C8051F040中的D/A转换器,将数字量转换成模拟量。

C8051F040中的D/A 转换器有两组,每组D/A 转换器的输出摆幅均为0 V到VREE-1LSB,对应的输入码范围是0x000~0xFFF。由于三路MAX038 所输出的信号为同一频率,所以在此将只用到第一组D/A转换器。

输入给D/A转换器的数据来源有3种:第一种是从键盘获得的需要产生的波形的频率;第二种是单片机内部存储的波形数据;第三种是来自于外部信号存储于AT24C02存储器中的波形数据。本程序均可将其完好的转换成模拟信号。

3.3 外测电压采集程序

外测电压为模拟量,要将其进行存储与处理,应当对其进行数字化,在此就需要用到A/D 转化器。C8051F040中的12位A/D 转换器中需要转换的12 b数据存储于2 B 存储器中,2 B 存储器分别为高字节存储器ADC0H和低字节存储器ADC0L。

3.4 USB串口程序

串口程序是由写入命令与读出数据来组成的。在此将根据CH372 芯片的写入、读出时序图来编写具体程序。命令写入程序的步骤如下:

(1)将A0置1,使芯片可以写命令;

(2)将命令值写到P3端口,用空函数延时一次;

(3)将WR拉到低电平0,用空函数延时一次;

(4)将WR拉到高电平1,用空函数延时一次。

以下为命令写入程序的代码:

void wr_cmd_ch372(uchar cmd)

{

a0=1; //将A0置1

P3=cmd; //将命令值写到P3端口

nop(); //空函数

wr_ch372=0; //将WR拉到低电平0

nop();

wr_ch372=1; //将WR拉到高电平1

nop();

}

数据读出程序的步骤如下:

(1)将A0置0,使芯片可以读取数据,用空函数延时一次;

(2)将RD拉为低电平0,用空函数延时一次;

(3)读出P3端口的数据,用空函数延时一次;

(4)将RD拉为高电平0,用空函数延时一次;

(5)把接收到的数据返回给主程序。

以下为数据写入程序的代码:

int rd_dat_ch372()

{

int dat;

a0=0; //将A0置0

nop();

rd_ch372=0; //将RD拉为低电平0

nop();

dat=P3; //读出P3端口的数据

nop();

rd_ch372=1; //将RD拉为高电平0

nop();

return dat; //把接收到的数据返回给主程序

}

当选择USB串口传输模式后,应先将中断打开,以获取CH372的中断请求。进入中断时应向CH372写入GET_STATUS 命令,命令代码为0x22,作用是获取CH372的中断状态并通知CH372取消中断请求,否则单片机会不停的响应CH372 的中断命令。然后再向CH372 中写入RD_USB_DATA 命令,命令代码是0x28,作用是从当前USB中断的端点缓冲区中读取数据块并释放当前缓冲区。

3.5 存储程序

从外测电压采集到的数据以及从USB串口接收的数据都必须存储到数据存储器当中。本多功能波形发生器的数据存储器采用AT24C02 芯片,存储方法采用I2C总线方式存储。I2C总线在传送数据过程中共有3种类型信号是:开始信号、结束信号和应答信号。

开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。存储程序开始代码如下:

void star(t )

{

sda=1;

nop();

scl=1;

nop();

sda=0;

nop();

}

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。存储程序结束伪代码如下:

void stop()

{

sda=0;

nop();

scl=1;

nop();

sda=1;

nop();

}

应答信号:接收数据的器件在接收到8 b 数据后,向发送数据的器件发出低电平脉冲,表示已收到数据。若未收到低电平脉冲,为保证程序的正常运行,将在一段时间后认定器件已经收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。应答信号的代码如下:

void respons()

{

uchar i;

scl=1;

nop();

while((sda==1)&&i<250)i++;

scl=0;

nop();

}

3.6 矩阵键盘

确定矩阵式键盘上何键被按下时采用“ 行扫描法”。在实际应用中,由于电压存在抖动现象,所以在程序设计时要设计一个消抖程序。由于抖动现象为小概率事件,所以检测两次便可消除抖动现象的影响。

在检测完后,还要有一个松手程序,用于检测是否已经松手,否则按下一次将会产生很多键盘信号。第一行键盘扫描的代码如下:

uchar keyscan()

{

P1=0x7f;

temp=P1;

i(f temp!=0x7f)

{

delay(5);

P1=0x7f;

temp=P1;

i(f temp!=0x7f)

{

temp=temp&0xf0;

switch(temp)

{

case 0x77:num=1;break;

case 0x7b:num=2;break;

case 0x7d:num=3;break;

case 0x7e:num=4;break;

}

}

P1=0x7f;

temp=P1;

while(temp!=0x7f)

{

P1=0x7f;

temp=P1;

}

}r

eturn num;

}

3.7 液晶显示程序

由于波形发生器的显示部分只用于写,故只考虑写入部分的程序。在此主要依据1602的时序图来完成对液晶显示的程序编写。液晶显示程序分为写入数据与写入命令两部分,且写入方法大体相同。写入数据的程序步骤为:

(1)将数据/命令选择端RS设置成为高电平,即为写入数据;

(2)将数据写入输入P0端口,然后延时5 ms;

(3)将使能信号置为高,再次延时5 ms;

(4)将使能信号置为低。

液晶显示程序代码为:

void write_data(uchar dat)

{

rs=1; //令选择端RS设置成为高电平

P0=dat; //将数据写入输入P0端口

delay(5);

en=1; //将使能信号置为高

delay(5);

en=0; //将使能信号置为低

}

4 结语

本系统以C8051F040 为核心,使用键盘操作,通过控制MAX038可以实现正弦波、方波、三角波的输出,并通过液晶显示屏可以显示波形的频率,可以通过键盘调整频率,操作方便简单。通过键盘选择不同的模式,还可以使用A/D转换器实现外来信号的采集,应用CH372芯片接收USB 串口传输来的信号,并将这些数据通过I2C 总线方式存储到存储芯片之中,再通过D/A 转换器可以将其波形再现。另在单片机内部储存有波形信号,同样可以通过D/A转换器直接将其波形再现。

教育期刊网 http://www.jyqkw.com
参考文献

[1] 张吉林,张晴.MAX038 及函数信号发生器[J].南昌大学学报:理科版,2000,24(4):350-355.

[2] 金斗焕,王少军.采用MAX038制作的函数信号发生器[J].电子元器件应用,2001(1):33-35.

[3] MAXIN 公司.MAX038 技术资料[EB/OL].[2011-04-17].http://wenku.baidu.com.

[4] 潘琢金.C8051F040 混合信号ISP flash 微控制器数据手册[M].深圳:新华龙电子有限公司,2004.

[5] 李朝青.单片机原理及串行外设接口技术[M].北京:北京航空航天大学出版社,2008.

[6] 王为青,程国钢.单片机Keil Cx51 应用开发技术[M].北京:人民邮电出版社,2007.

[7] 童长飞.C8051F系列单片机开发与C语言编程[M].北京:北京航空航天大学出版社,2005.

论文中心更多

期刊百科
期刊投稿 期刊知识 期刊审稿 核心期刊目录 录用通知 期刊版面费 投稿期刊推荐 学术问答
基础教育
小学语文 中学语文 小学数学 中学数学 小学英语 中学英语 物理教学 化学教学 生物教学 政治教学 历史教学 地理教学 科学教学 音乐教学 美术教学 体育教学 信息技术 班主任管理 校长管理 幼教 教育管理 微课教学 作文教学 德育教学 教学设计
医学论文
内科医学 外科医学 预防医学 妇科医学 检测医学 眼科医学 临床医学 药学论文 口腔医学 中西医 中医学 外科 护理 基础医学 急救医学 老年医学 医学实验 儿科医学 神经医学 兽医学 肿瘤医学 综合医学
职业教育
教育学原理 电影文学教育 学前教育 教育学管理 高等教育学 教育技术学 职业技术教育 成人教育学 特殊教育学 教育心理学 家庭教育 教育毕业 中专中职教育 教学设计 国学教育 学术研究 大学教育
药学卫生
社区门诊 医药学 医患关系 医院管理 疾病预防 保健医学 公共卫生 医学教育
文科论文
农业经济 工商管理毕业 会计毕业 行政管理 法律毕业 市场营销 经济毕业 汉语言文学 财务管理 物流管理 人力资源 旅游管理 国际贸易 物业管理 新闻学 企业管理 金融银行 社会科学 食品安全 办公档案 审计学 税务税收学 外国文学 哲学
理科论文
机电毕业 土木工程 计算机毕业 电气毕业 建筑毕业 电子商务 工程毕业 设计毕业 机械制造 汽车毕业 园林毕业 农学毕业 数控毕业 软件技术 水利工程 环境生态 畜牧渔业 化工毕业 科技创新 石油矿藏
论文格式
开题报告 论文题目 摘要关键词 目录提纲 论文致谢 参考文献 附录其他 论文答辩
职业论文
教育论文 经济论文 科技论文 财会论文 管理论文 医学论文 法学论文 文学论文 工业论文 建筑论文 农业论文 水利论文 计算机论文 社科论文 机械论文 生态环境 中西文化

先发表后付款 不成功可退款

权威机构认证 专注期刊10余年 1000余家杂志社长期合作

缔冠期刊网

首页 网站地图 返回顶部
Copyright © 1998- 缔冠期刊网