用CPLD和单片机设计任意波形发生器
基于单片机的波形发生器设计及实现

基于单片机的波形发生器设计及实现引言:波形发生器是电子设备中常用的测试设备,它可以产生各种波形信号,如正弦波、方波、三角波等,对于电子工程师来说是非常重要的仪器。
本文将介绍一种基于单片机的波形发生器的设计及实现方法。
设计目标:1.可以产生正弦波、方波和三角波等多种波形信号。
2.波形发生器的频率范围可以调节,并且稳定可靠。
3.实现简单、成本低廉、易于维护。
硬件设计和实现:波形发生器的核心部件是单片机,通过单片机的高精度计数器和时钟模块可以实现频率的调节和控制。
其基本原理是通过单片机的IO口输出不同的电平来产生不同的波形。
1.信号发生部分:通过单片机的IO口输出电平控制信号发生电路。
正弦波的发生电路可以采用RC振荡器电路,方波和三角波的发生电路可以采用计数器和比较器。
2.频率调节和控制部分:使用单片机内部的定时器和计数器来控制波形的频率和周期。
通过改变定时器的工作模式和计数器的计数值,可以实现不同频率的波形信号输出。
3.显示和控制部分:通过LCD显示屏显示波形参数和频率,并且可以使用按键控制频率的调节和选择不同的波形。
软件设计和实现:1.初始化设置:包括单片机的IO口设置、定时器和计数器的初始化、LCD显示屏的初始化等。
2.频率调节和控制:通过按键扫描和中断处理函数来实现频率的调节和控制。
按键的按下和释放可以触发相关的中断服务程序,从而实现频率的增加和减少。
3.波形产生:通过定时器中断来控制波形的产生。
当定时器溢出时,会触发中断服务程序,从而改变IO口的电平状态,实现不同波形信号的输出。
测试与结果:进行相应的软硬件调试后,我们可以成功实现基于单片机的波形发生器。
通过按键可以选择不同的波形类型,并且可以根据需要调节波形的频率。
总结:本文介绍了一种基于单片机的波形发生器的设计与实现方法。
通过使用单片机的IO口、定时器和计数器,可以实现不同波形信号的输出和频率的调节。
这种波形发生器具有成本低廉、稳定可靠、易于维护等优点,可以满足电子工程师对波形发生器的基本需求。
基于CPLD的智能波形发生器

来, 应用 于频 率 范 围宽 , 率 步 进 小 , 能 多 的 波 形 频 功
发 生器 中 , 从而 使其 各 自扬长 避 短 , 连 壁 合 了 。 珠
l 功 能
具 有产生 正弦波 、 三角波 、 方波 功能 ; 由键盘 输 可 入生 成上述 三种 波 形 的线 性 组合 波 形 或 由 基 波及 其
上, 但在 实 现 复杂 的控 制 时序 上 占用 资 源很 多 , 又显
谐 波线性组 合 波形 ; 有 波形 存 储 功 能 ; 出 波形 的 具 输
频率 范 围 10 z 0 Hz 频 率 可 调 , 率 步 进 间 隔 0 H 一5 K , 频
≤lOI; 出波形 幅度 可调 , 围 0—5 步进 0 1 OI 输 - z 范 V, .V;
1 r
l
YES
\
N o
—
\
R AM
1
、 l
: : : /
Y ES
r
、 ~ J 、
‘
启 CL 动 PD
1
J 达 LrL1 9
N O
: L
—
I
l
l
¨ 2 h r f
图 2 MC 85 软 件 控 制 原 理 流 程 图 S7 1
去 执行 相应 的初 始 化 子 程 序 : 算 一 个 周 期 某 波 形 计
初 J 始化
1 r、
显 示
NO
—
I
l
/ — \
, — e o ,
、 、\
、
1r
/
YES
l启 Al 动
I数 转 I 据换
▲
关 示 CL 显 禁P D
单片机波形发生器的设计

单片机波形发生器的设计波形发生器是一种能够产生不同类型波形信号的电子设备,常用于电子实验、测试和通信系统中。
在单片机技术的发展下,设计一款基于单片机的波形发生器已经变得相对简单和便捷。
本文将从硬件设计和软件编程两个方面,详细介绍如何设计一款基于单片机的波形发生器。
第一部分:硬件设计硬件设计是波形发生器设计的基础,它涉及到信号源、滤波电路、放大电路等多个方面。
1.信号源波形发生器需要一个稳定的、可调节的信号源。
在单片机中,可以使用定时器/计数器模块产生一个稳定的方波信号。
通过调整定时器的计数值和预分频系数,可以改变方波的频率。
造成方波到正弦波,可以通过模拟滤波电路。
2.滤波电路为了将方波信号变成正弦波,需要使用低通滤波器。
一种简单的低通滤波器是RC电路,通过调整电阻和电容值,可以改变滤波器的截止频率。
为了实现更好的滤波效果,可以使用更复杂的滤波电路,如椭圆滤波器或数字滤波器。
3.放大电路波形发生器输出的信号一般较小,需要经过放大电路才能达到合适的信号水平。
放大电路一般选择运算放大器(Op Amp),通过调整反馈电路中的电阻值和放大器的放大倍数,可以调节波形发生器输出的信号幅度。
第二部分:软件编程软件编程是实现波形发生器的核心部分,它涉及到单片机内部的定时器、IO口、中断等多个模块。
1.定时器配置在单片机中,定时器模块可以根据设定的计数值和预分频系数产生指定频率的方波信号。
通过配置定时器的工作模式、计数值和预分频系数,可以实现对方波频率的调节。
2.IO口配置通过配置IO口,可以将波形输出到外部设备,如示波器或音响设备。
通过将IO口输出为PWM信号,可以将方波信号转化为模拟信号,并通过滤波电路进行进一步处理。
3.中断处理在波形发生器中,需要使用中断来实现定时器计数值的更新和波形输出的控制。
通过编写中断处理函数,可以在指定的时间间隔内进行定时器计数值的更新,并控制IO口输出波形信号。
总结:通过对单片机波形发生器的硬件设计和软件编程进行详细说明,可以发现设计一款基于单片机的波形发生器并不复杂。
基于CPLD和单片机的任意波形发生器设计

基于CPLD和单片机的任意波形发生器设计
引言
在电子工程设计与测试中,常常需要一些复杂的、具有特殊要求的信号,要
求其波形可任意产生,频率方便可调。
通常的信号产生器难以满足要求,市场
上出售的任意信号产生器价格昂贵。
结合实际需要,我们设计了一种任意波形
发生器。
电路设计中充分利用MATLAB 的仿真功能,将希望得到的波形信号
在MATLAB 中完成信号的产生、抽样和模数转换,并将得到的数字波形数据
存放在数据存储器中,通过单片机和CPLD 控制,将波形数据读出,送入后向通道进行A/D 转换和放大处理后得到所需的模拟信号波形。
利用上述方法设计的任意波形发生器,信号产生灵活方便、功能扩展灵活、信号参数可调,实现
了硬件电路的软件化设计。
具有电路结构简单、实用性强、成本低廉等优点。
系统框图
任意波形发生器的设计思想,是利用MATLAB 的强大仿真功能,方便、快
捷的生成给定频率、周期、脉宽的任意波形数据;并将数据预存在数据存储器中。
在单片机控制下,利用CPLD 电路产生地址读出数据,送入D/A 转换电路,得到所需的任意波形信号。
系统结构框图如图1;图中分频电路和地址发生器由CPLD 实现。
图1 系统框图
电路设计及实现
单片机控制电路
单片机采用AT89C52 芯片,通过软件编程产生所要求的控制信号。
主要的
控制参数包括:信号周期、脉宽;分频电路的开始信号、地址发生器的复位信号; E2PROM 的选通信号;D/A 转换电路的选通信号。
在具体电路中,端口P1.0 控。
基于cpld集成芯片实现任意波形发生器

2021/7/22
5
DDS的基本原理是基于采样定理,将模拟信号进行 采集,经量化后存入存储器中,通过寻址ห้องสมุดไป่ตู้找表输 出波形数据,再经过D/A转换滤波即可恢复模拟波 形。基本框图如下
2021/7/22
6
实现DDS有三种技术方法 a 采用高性能DDS单片电路 b 采用低频正弦波DDS单片电路 c 设计基于CPLD芯片的个人方法
言编程,对硬件结构和工作方式进行重构,再由可 编程逻辑器件控制数据的输出,经D/A转换器转换 成相应模拟信号。在设计过程中,以Altera公司的 EPM7128SLC84-15 芯 片 为 设 计 器 件 。 讨 论 了 DDS 技术的基本组成结构、工作原理和特点
2021/7/22
2
在现代电子测量仪器中,任意波形发生器 (Arbitrary Waveform Generator,AWG)作为最新 一类的信号源,正日益受到人们的重视,国内外的 许多科研单位和高等院校也纷纷着手研制AWG。 但目前使用的AWG大部分是利用分立元件实现的, 体积大、可靠性差、准确度低。
c方案三:采用直接数字频率合成器 ,可用硬件或软件 实现。即用累加器按频率要求相对应的相位增量进行累 加,再以累加相位值作为地址码 ,经D/A转换、滤波即 得所需波形。方法简单,频率稳定度高,易于程控。
d 方案四:采用单片机控制动态生成程序 ,该方法引入
动态编程和吞时钟技术,使用8031便可产生50kHz的正
基于CPLD集成芯片实现DDS技术的 任意波形发生器
姓名:黄先英,刘祧 指导老师:裴东,王全洲 学生届别:2005 专业:电子信息工程 班级:电子甲班
2021/7/22
51单片机制作的波形发生器

51单片机制作的波形发生器相信很多朋友都可能接触到一个波型发生器的制作,可能刚刚入门,做的东西也不会说是很复杂。
可能就一个矩形波,或者是三角波。
但是网上的很多资料是忽悠人的,就此,我也提供一个比较完整的波型发生器 C51 原代:该系统的软件比较典型:包括键盘的应用,显示的应用和 DA 转换器的应用。
本设计中,输出的波形有三种:正弦波,方波,三角波。
方波的输出最为简单,只要按照设定的周期值将输出的电压改变即可。
三角波的输出也比较简单,单片机的输出只要完成数字量递增和递减交替进行即可。
、正弦波的输出最麻烦,如果在软件中计算出输出的各点电压值,将会浪费很多的 CPU 时间,以至于无法满足频率的要求。
通常最简单的方法是通过手动的方法计算出输出各点的电压值,然后在编写程序时以数组的方式给出。
当需要时,只要按照顺序进行输出即可。
这种方法比运算法速度快且曲线的形状修改灵活。
在本设计中将 360 度分为 256 个点,则每两个点之间的间隔为1.4 度,然后计算出每个点电压对应的数字量即可。
只要反复输出这组数据到 DAC0832, 就可以在系统输出端得到想要的正弦波。
具体程序如下:#include ;#define uchar unsigned char#define uint unsigned int#define DAdata P0uchar code Sinetab[256]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xab,0xad,0xaf,0xb1,0xb2,0xb4,0xb6,0xb7,0xb9,0xba,0xbc,0xbd,0xbf,0xc0,0xc1,0xc3,0xc4,0xc5,0xc6,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xce,0xcf,0xd0,0xd1,0xd1,0xd2,0xd2,0xd3,0xd3,0xd3,0xd2,0xd2,0xd1,0xd1,0xd0,0xcf,0xce,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc6,0xc5,0xc4,0xc3,0xc1,0xc0,0xbf,0xbd,0xbc,0xba,0xb9,0xb7,0xb6,0xb4,0xb2,0xb1,0xaf,0xad,0xab,0xaa,0xa8,0xa6,0xa4,0xa2,0xa0,0x9e,0x9c,0x9a,0x98,0x96,0x94,0x92,0x90,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82, 0x80,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71, 0x6f,0x6d,0x6b,0x69,0x67,0x65,0x63,0x61, 0x5f,0x5d,0x5b,0x59,0x57,0x55,0x54,0x52, 0x50,0x4e,0x4d,0x4b,0x49,0x48,0x46,0x45, 0x43,0x42,0x40,0x3f,0x3e,0x3c,0x3b,0x3a, 0x39,0x37,0x36,0x35,0x34,0x33,0x32,0x31, 0x31,0x30,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c, 0x2c,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, 0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x30, 0x31,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x39,0x3a,0x3b,0x3c,0x3e,0x3f,0x40,0x42, 0x43,0x45,0x46,0x48,0x49,0x4b,0x4d,0x4e, 0x50,0x52,0x54,0x55,0x57,0x59,0x5b,0x5d, 0x5f,0x61,0x63,0x65,0x67,0x69,0x6b,0x6d, 0x6f,0x71,0x73,0x75,0x77,0x79,0x7b,0x7d, };uchar code Triangletab[58]={0x1a,0x21,0x28,0x2f,0x36,0x3d,0x44,0x4b, 0x52,0x59,0x60,0x67,0x6e,0x75,0x7c,0x83,0x8a,0x91,0x98,0x9f,0xa6,0xad,0xb4,0xbb,0xc2,0xc9,0xd0,0xd7,0xde,0xe5,0xde,0xd7,0xd0,0xc9,0xc2,0xbb,0xb4,0xad,0xa6,0x9f,0x98,0x91,0x8a,0x83,0x7c,0x75,0x6e,0x67,0x60,0x59,0x52,0x4b,0x44,0x3d,0x36,0x2f,0x28,0x21,};uchar code Squaretab[2]={0x56,0xaa};uchar code disp1[]={"Sine Wave ""Triangle Wale ""Square Wave "};uchar idata disp2[16]={"Frequency:Hz"};uchar code Coef[3]={10,100,200};uchar idata WaveFre[3]={1,1,1};uchar code WaveTH[]={0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, };uchar code WaveTL[]={0xf2,0x78,0xfb,0x3c,0x63,0x7d,0x8f,0x9d,0xa8,0xb1, 0x17,0x0b,0xb2,0x05,0x37,0x58,0x70,0x82,0x90,0x9b, 0x4d,0xa7,0xc4,0xd3,0xdc,0xe2,0xe6,0xea,0xec,0xee };uchar Wavecount,THtemp,TLtemp;uchar Waveform;sbit rs=P2^5;sbit rw=P2^6;sbit e=P2^7;sbit DA=P2^0;sbit KEY=P3^2;void delay(uchar i){uchar j;for(;i>;0;i--)for(j=20;j>;0;j--);}void busy(){uchar temp;temp=0x00;rs=0;rw=1;while((temp&0x80)==0x80) {P0=0xff;e=1;temp=P0;e=0;}}void WR_Com(uchar temp) {busy();rs=0;rw=0;P0=temp;e=1;e=0;}void WR_Data(uchar num){busy();rs=1;rw=0;P0=num;e=1;e=0;}void disp_lcd(uchar addr,uchar *temp1) {uchar i;WR_Com(addr);delay(100);for(i=0;i;0;i--){P0=0x30;rs=0;rw=0;e=1;e=0;delay(100);P0=0x38;rs=0;rw=0;e=1;e=0;delay(100);}void lcd_Reset(){WR_Com(0x01);delay(100);WR_Com(0x06);delay(100);WR_Com(0x0c);delay(100);}void SineOUT(uchar Wavecount) {DAdata=Sinetab[Wavecount++]; Wavecount=0;DA=0;}void TriangleOUT(uchar Wavecount) {DAdata=Triangletab[Wavecount++]; if(Wavecount>;57)Wavecount=0;DA=0;DA=1;}void SquareOUT(uchar Wavecount) {DAdata=Squaretab[Wavecount++];if(Wavecount>;1)Wavecount=0;DA=0;DA=1;}void timer() interrupt 1{TH0=THtemp;TL0=THtemp;if(Waveform==0)SineOUT(Wavecount); else if(Waveform==1)TriangleOUT(Wavecount); else if(Waveform==2)SquareOUT(Wavecount); }void key_int() interrupt 0 {uchar keytemp,keytemp1;uint WaveCoef;EA=0;TR0=0;keytemp1=0;delay(10);while(!KEY);keytemp=~P2&0x1e; keytemp>;>;=1;while(keytemp!=8){keytemp=~P2&0x1e;keytemp>;>;=1;if(keytemp!=keytemp1){keytemp1=keytemp;switch(keytemp){case 1:if(++Waveform==3)Waveform=0;break;case 2:if(++WaveFre[Waveform]==11)WaveFre[Waveform]=1;break;case 4:if(--WaveFre[Waveform]==0)WaveFre[Waveform]=10;break;}THtemp=WaveTH[Waveform*16+(WaveFre[Waveform]-1)]; TLtemp=WaveTL[Waveform*16+(WaveFre[Waveform]-1)];WaveCoef=WaveFre[Waveform]*Coef[Waveform]; disp2[13]=WaveCoef%10+0x30;WaveCoef/=10;disp2[12]=WaveCoef%10+0x30;WaveCoef/=10;disp2[11]=WaveCoef%10+0x30;WaveCoef/=10;disp2[10]=WaveCoef%10+0x30;WaveCoef/=10;disp_lcd(0x80,&disp1[Waveform*16]);disp_lcd(0xc0,disp2);}}TH0=THtemp;TL0=THtemp;Wavecount=0;TR0=1;}void main(){uint WaveCoef;uchar i;lcd_ini();lcd_Reset();WaveCoef=WaveFre[Waveform]*Coef[Waveform]; disp2[13]=WaveCoef%10+0x30;WaveCoef/=10;disp2[12]=WaveCoef%10+0x30;WaveCoef/=10;disp2[11]=WaveCoef%10+0x30;WaveCoef/=10;disp2[10]=WaveCoef%10+0x30;WaveCoef/=10;disp_lcd(0x80,&disp1[Waveform*16]);disp_lcd(0xc0,disp2);i=0;DAdata=0x00;DA=0;TMOD=0x01;IT0=1;ET0=1;EX0=1;EA=1;while(1);}。
基于CPLD的多波形发生器的设计

f. e o g ag ntue f c ne eh o g , ab 50 7 hn; H i nj n st i c &Tcn l yH ri 102 ia 1 l i I ito S e o n C
Ab t a t A i d o liwa e o m e e a o e i n d b s d o i c i i l e u n y s n h sst c n l g , st eM CU o e sr c : kn f mu t — v f r g n r t r sd sg e a e n d r t g t q e c y t e i e h o o y a h i e d a f r c r
d wn p le wi t d l t n a d S n a e s me t e a l e u n y v l e o v f r a e a c r t l ip a e o , u s d h mo u a i n O o , tt a i , l f q e c a u fwa e o msc n b c u a e y d s l y d o h m r
h g — p e p r t n l mp i e n x e d c re t ic i. t u v f r sm u a i n a d f l s e u t h w h t i h s e d o e a i a o a l ra d e tn u r n r u t Ou p twa e o m i lto n e d t t s l s o t a i f c i e r s t e s s e a d wi i h rp a tc l a u a i h p e ii n c a a t rsi , i h s a i t mu tf n to . h y t m n t h g e r c i a l e h s h g — r c so h r c e i t h g — t b l y, h v c i l u c i n i
基于51单片机的波形发生器的设计

基于51单片机的波形发生器的设计引言:波形发生器是一种可以生成特定频率、特定波形的电子设备。
它广泛应用于科研、教学和产业生产等领域,可以用于信号发生、信号测试、信号仿真等各种任务。
本文将介绍一个基于51单片机的波形发生器的设计方案。
一、系统硬件设计1.系统框架该波形发生器系统采用51单片机作为主控芯片,主要包括三个部分:信号生成模块、显示模块和控制模块。
其中,信号生成模块负责产生各种特定频率、特定波形的信号;显示模块用于展示信号参数等相关信息;控制模块负责接收用户输入并对波形发生器进行控制。
2.硬件连接信号生成模块与主控芯片之间通过I/O接口相连,用于传输数据和控制信号。
显示模块通过串口与主控芯片相连,用于显示相关信息。
控制模块通过按键、旋钮等输入设备与主控芯片相连,用于接收用户输入。
二、系统软件设计1.系统初始化在系统初始化阶段,主控芯片需要完成引脚、定时器、串口等相关资源的初始化工作。
同时,还需要设置一些全局变量和参数的初始值。
2.信号生成模块信号生成模块通过定时器产生特定频率的时钟信号,并根据用户输入的参数生成相应的信号波形。
主控芯片利用定时器中断函数进行波形生成,并将生成的信号数据存放在缓冲区中。
3.显示模块显示模块负责将信号波形显示在液晶屏上,并显示相关参数,如频率、幅度等。
主控芯片将信号数据从缓冲区中读取,并通过串口发送给显示模块进行显示。
4.控制模块控制模块负责接收用户输入的控制指令,并通过按键、旋钮等输入设备完成用户交互。
主控芯片通过中断函数实时读取用户输入并进行相应的控制操作。
三、系统功能设计1.频率设置功能用户可以通过控制模块设置波形发生器的频率,可以选择固定频率或者可调频率。
利用定时器时钟频率与定时器中断的时间间隔来控制波形的频率。
2.波形选择功能用户可以通过控制模块选择不同的波形类型,如正弦波、方波、三角波、脉冲波等。
主控芯片根据用户指令设置波形参数,并生成相应的波形信号。
基于单片机和FPGA的DDS任意波形信号发生器的设计

基于单片机和FPGA的DDS任意波形信号发生器的设计摘要:本文主要对任意波形信号发生器的软硬件设计进行了相关的研究,并提出了一种新的设计思路,以现场可编程器件FPGA和单片机芯片为核心,设计任意波形信号发生器的硬件连线电路和编写相关软件程序,实现了上位机对硬件模块部分产生任意波形信号的控制。
关键词:信号发生器任意波形AT89C51FPGA1 引言任意波形发生器是电子技术领域应用最为广泛的电子测量仪器,它是信号源发展方向的代表。
由于DDS技术的查找合成波形的方法能够满足产生任意波形的要求,所以,目前大多数生产任意波形发生器的厂家都利用DDS技术来实现任意波形发生器。
本设计采用TMEL公司的单片机芯片和Xilinx公司的Virtex-Ⅱ系列FPGA芯片来实现任意波形信号发生器硬件部分的电路设计,采用美国NI公司的Labwindows/CVI作为开发平台,开发一个任意波形信号发生器的波形编辑软件,从而实现任意波形信号发生器软件模块对硬件模块产生相应波形信号的控制。
2 系统硬件设计在不影响功能的情况下,本设计简化了硬件部分的电路设计,把设计分成了多个实现模块,主要有单片机实现模块和FPGA实现模块。
单片机实现模块主要是由ATMEL公司的AT89C51芯片实现,该模块是用来完成数据传输、通信和控制数据处理电路工作等功能的。
FPGA实现模块是由Xilinx公司的FPGA芯片XC2V3000结合一些其他电路实现的,主要是用来完成DDS数据处理,实现任意波形的输出。
2.1单片机实现模块本设计选用ATMEL公司的单片机芯片AT89C51,AT89C51采用ATMEL技术,与MCS-51指令集和输出管脚相兼容,是一种高效微控制器。
本设计利用AT89C51主要是来控制显示、键盘以及FPGA电路。
单片机芯片AT89C51与液晶显示器的连线图如图1所示,AT89C51与液晶显示器通过P0口和P2口的部分位连接实现,并通过AT89C51芯片的和功能端实现读写控制。
基于cpld的dds波形发生器

基于C PLD 的D D S 波形发生器舒鹏飞李白万时彪赵含彬(武汉大学,湖北武汉430079)脯要]本系统利用单片机A T89C 52与C PL D 诓PM 7128SLC 84—15)结合,采用D D FS(直接频率数字频率合成)技术,构成一个波形稳定、精度较高的信号发生器。
单片机控制频率、幅度步进,C PL D 集成了大部分电路。
系统大大简化,输出波形可以在正弦波、方波及三角渡间切换。
p 猢]直接教字频率合成器;C PL D ;相位累加器;双口P ,A M1971年,美国学者J .T i er ne y 的“A D i gi t a l Fre quencyS ynt he —si ze r ”一文首次提出了以全数字技术,从相位出发直接合成所需波形的一种原理。
到了80年代后期,随着微电子技术的发展,直接数字频率合成(D i r ec t D i gi t a l Fr eque ncySynt hes i s 简称D D S 或D D FS)得到了飞速的发展,它以其特有的优越性能和特点成为现代频率合成技术中的姣姣者。
1D D S 基本原理D D S 技术的基本原理是利用采样定理,通过查表法产生波形。
它的基本的电路原理图用图1表示。
相位累加器由N 位加法器与N 位累加器级联构成。
每来一个时钟脉冲f s ,控制宇k 与累加器输出的累加相位数据相加,把相加后的结果送到累加器的数据输八端,使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。
用相位累加器输出的数据作为波形存储器(R A M )的相位取样地址。
这样就可完成相位到幅值转换。
波形存储器的输出送到D /A 。
D /A 将数字形式的波形幅值转换成所要求合成频率的模拟形式信号。
由此可见,相位累加器在每一个时钟脉冲输入时,频率控制字累加一次。
相位累加器输出的数据就是合成信号的相位,输出的频率就是D D S 输出的信号频率。
|L CD b;c 肿:l 姐ZLG7赫829b 簟片饥罂∞D T ^.n9C 显赶7132I 苍片1r儿4×4l 髓,队l刮呲∞:吲D AC 0900图1D D S 原理位2系统功能模块与硬件电路基于D D S 技术的基本原理,可以把整个系统分为频率合成器,存储器,模拟输出与幅度控制几个主要的模块。
基于单片机的波形发生器_毕业设计论文

基于单片机的波形发生器_毕业设计论文摘要:本文详细介绍了一种基于单片机的波形发生器的设计与实现。
波形发生器是一种广泛应用于电子测量、科研和教学等领域的仪器设备。
本设计采用了单片机作为控制芯片,利用其强大的计算和控制能力实现了多种波形的生成。
通过研究和分析不同波形的特点,采用相应的算法和模拟电路设计,实现了正弦波、方波和三角波的发生功能。
本文还介绍了硬件电路的设计和软件的编写,并对波形发生器的性能进行了测试和分析。
1.引言波形发生器是一种可以产生各种形状的周期信号的仪器设备,广泛应用于电子测量、科研和教学等领域。
随着数字技术和单片机技术的发展,基于单片机的波形发生器具有体积小、成本低、灵活性强等优点,逐渐代替了传统的模拟波形发生器。
2.系统设计2.1系统框架本系统采用了单片机作为控制芯片,配合DAC芯片和锁相环电路,构建了一个完整的波形发生器系统。
单片机负责控制波形的生成参数,通过DAC芯片将数字信号转化为模拟电压输出,锁相环电路则负责对时钟信号进行处理和同步。
2.2波形生成算法根据不同波形的特点,本设计实现了正弦波、方波和三角波的发生功能。
正弦波的生成采用了Taylor级数展开方法,方波的生成利用了比较器的电平调制,而三角波的生成则通过DAC芯片将数字递增或递减的信号转化为模拟电压输出。
3.硬件设计3.1单片机选型与外围电路设计本设计选用了XX单片机作为控制芯片,并根据其技术手册设计了相应的外围电路。
外围电路包括时钟电路、复位电路和供电电路等,保证了单片机的正常运行。
3.2DAC芯片选型与接口设计为了将数字信号转化为模拟电压输出,本设计选用了XXDAC芯片,并设计了合适的接口电路。
通过控制单片机的输出端口和DAC芯片的输入端口连接,实现了数字到模拟的转换。
3.3锁相环电路设计为了保证波形的准确性和稳定性,本设计添加了锁相环电路。
该电路利用比较器和VCO实现了对时钟信号的同步与输出。
4.软件设计4.1系统初始化系统初始化包括单片机寄存器的初始化和外围设备的初始化,为后续的波形生成做好准备。
利用单片机和CPLD实现高速信号发生器_何其锐

第29卷 第1期2006年3月电子器件Chinese J ournal Of Elect ron DevicesVol.29 No.1Mar.2006收稿日期:2005205230作者简介:何其锐(19752),男,硕士,目前从事信号处理等相关方向的研究,heqr @.Accomplished High 2Speed Signal G enerators by Use of MCU and CPLDH E Qi 2rui ,YA N G J i an 2j un ,L I A O Yun ,Z H A N G Yi 2de ,J I A N G Quan(Dept.of Opto 2Elect ronic Technolog y ,U ES T of China ,Cheng du 610054,China )Abstract :This paper present s a design of high 2speed signal generators ,which simulates a p ulse signal gen 2erated by a laser to detect t he work of a laser detector.Based on V HDL ,logic and synchronous sequential cont rol circuit ,which is kernel of t his system ,is designed in an EPM3128A CPLD chip.It realizes t hat a high 2speed and 12bit AD9762D/A converter is controlled by a low 2speed and 8bit of 89C51MCU.A non 2periodic p ulse signal is generated ,t he widt h of t he p ulse can be adjusted f rom 200ns to 3μs ,and t he time interval is 50ns.The signal generators f ully meet t he demand of detecting t he work of t he laser detector.K eyw ords :MCU ;CPLD ;high 2speed ;signal generators EEACC :1265利用单片机和CPLD 实现高速信号发生器何其锐,杨健君,廖 云,张义德,蒋 泉(电子科技大学光电信息学院,成都610054)摘 要:主要介绍了一种高速信号发生器的设计,用于模拟外来激光束产生的脉冲信号以检测激光探测仪是否正常工作。
基于单片机的波形发生器设计及实现

基于单片机的波形发生器设计及实现一、设计方案波形发生器是一种能够产生不同频率、幅度和波形形式的信号的电路设备。
在本设计中,我们将采用单片机作为控制核心,利用其内部计时器和输出引脚来实现波形的产生。
具体的设计方案如下:1. 选择单片机:选用一款适合波形产生器设计的单片机,如ATmega328P等。
2.编程开发:利用单片机的C语言编程开发,在程序中实现波形发生器的控制逻辑,包括波形形状、频率、幅度等参数的设定和控制。
3.输出电路设计:设计适合单片机输出信号的电路,包括放大、滤波和隔离等功能,以确保输出信号的质量和稳定性。
4.外部控制接口:设计外部控制接口,包括旋钮、按键等,方便用户对波形发生器进行参数设定和调节。
5.功率供应:提供稳定的电源供应,确保波形发生器正常工作。
二、实现过程1.单片机编程:首先编写C语言程序,实现波形发生器的控制逻辑。
通过设置定时器的计数值和输出引脚的状态来产生不同形状的波形,如正弦波、方波、三角波等。
同时,通过按键和旋钮来实现频率和幅度的调节。
2.输出电路设计:设计一个简单的输出电路,将单片机的输出信号放大和滤波,以获得较为稳定和可靠的输出信号。
同时,通过隔离电路来防止单片机受到外部干扰。
3.外部控制接口:设计旋钮和按键的连接电路,将它们与单片机的GPIO引脚相连,实现参数的设定和调节。
通过旋钮来调节频率,通过按键来切换波形形状和设定幅度。
4.功率供应:设计一个合适的功率供应电路,为单片机和输出电路提供稳定的电源,以保证波形发生器的正常工作。
5.调试测试:将所有部件组装在一起,通过示波器等仪器对输出信号进行观测和测试,调节参数使得波形发生器产生符合要求的波形,并记录各种参数值,以便后续使用和改进。
三、实现效果经过上述步骤的设计和实现,我们成功地搭建了一个基于单片机的波形发生器。
该波形发生器可以产生多种波形形状,如正弦波、方波、三角波等,同时支持频率和幅度的调节。
通过外部控制接口,用户可以方便地对波形发生器进行参数的设定和调节,使得波形发生器具有较好的灵活性和易用性。
基于CPLD多波形信号发生器设计说明

第一章绪论1.1研究容及意义高精度的信号源对通信系统、电子对抗以及各种电子测量技术十分重要。
随着电子技术的发展,对信号源频率的准确度、稳定度,以及频谱纯度等方面要求越来越高。
传统的信号发生器由于波形精度低,频率稳定性差等缺点,已经不能满足许多实际应用的需要。
本系统设计的函数发生器是以可编程逻辑器件CPLD为核心,采用直接频率合成技术,通过数模转换电路,构成一个精度较高,波形稳定的函数信号发生器。
较传统的频率合成技术相比,直接频率合成技术(Direct Digital Synthesis,简称DDS),具有频率分辨率高、频率转变速度快、输出相位连续、相位噪声低、可编程和全数字化、便于集成等突出优点,使其得到越来越广泛的应用,成为众多电子系统中不可缺少的组成部分。
在现代电子技术中,信号源在各种实验应用和实验测试处理中应用非常广泛作,为激励源,仿真各种测试信号。
本文根据信号波形的产生特点,采用基于 CPLD/FPGA 的 VHDL 硬件描述语言,仿真实现了多波形发生器的设计。
仿真结果输出较高精度、稳定的波形信号,可以满足测量或各种实际需要,方便、简易实用。
1.2国外研究概况传统的波形发生器多采用模拟电路或单片机或专用芯片,由于成本高或控制方式不灵活或波形种类少不能满足实际需求。
目前市场上的数字信号发生器主要采用直接数字合成技术,这种波形发生器不仅可以产生可变频的载频信号、各种调制信号,同时还能和计算机配合产生用户自定义的有限带宽的任意信号,可以为多领域的测试提供宽带宽、高分辨率的测试信号。
从目前发展状况来看,国外数字信号发生器的研制和生产技术已经较为成熟。
国市场上的波形发生器,其电路形式有采用运放及分立元件构成;也有采用单片集成的函数发生器,而在现代电子系统设计中, DDS技术发展迅速,由于其易于单片集成,积小,价格低,功耗小,因此其应用也越来越广泛。
并且在相对带宽、频率转换时间、高分辨力、相位连续性、正交输出以及集成化等一系列性能指标方面远远超过了传统频率合成技术所能达到的水平,为系统提供了优于模拟信号源的性能。
基于CPLD和单片机的多功能信号发生器

摘要随着科技的发展,对信号发生器的各方面要求越来越高。
传统的信号发生器由于波形精度低,频率稳定性差等特点,已经不能满足许多实际应用的需要。
而且市场上出售的多功能信号发生器价格昂贵,为了适应实际的需要,设计一种多功能信号发生器。
本文介绍了一种基于EDA(电子设计自动化)技术的多功能信号发生器,它采用CPLD(复杂可编程逻辑器件)与单片机结合的方法,可以产生递增锯齿波、递减锯齿波、三角波、阶梯波、方波、正弦波共6种波形。
它运用DDS(直接数字频率合成技术)技术的基本工作原理,通过Quartus II 9.0软件和VHDL语言编程,由CPLD控制数据输出,经数模转化器转换成相应的模拟信号。
整个信号发生器以单片机(STC89C52RC)为控制中心,主要由电源模块、按键电路模块、液晶显示模块、调幅模块、波形生成模块、滤波模块等组成。
另外为了更好的完成本次毕设,本次设计CPLD选用Altera公司的EPM240CT100C5。
关键词:多功能信号发生器;EDA;复杂可编程逻辑器件;DDS;VHDLAbstractWith the development of technology, signal generator have become increasingly demanding in all aspects. Traditional signal generators can not meet the needs of many practical applications because of low precision waveform, frequency stability characteristics of poor and high price in the market. According to the really demands, we design a multi-function signal generator.In this paper, we introduce a multi-function signal generator based on EDA (Electronic Design Automation) technology. It uses the method of combining CPLD (Complex Programmable Logic Devices) and SCM which can generate incremental ramp wave, decreasing saw tooth wave, triangle wave, ladder wave, square wave, sine wave. It uses the basic working principle of DDS(Direct Digital Frequency Synthesis) technology, through the Quartus II 9.0 software and the VHDL programming language, and the CPLD control data output by the digital-analog converter which converts the corresponding analog signal .The SCM (STC89C52RC) is the control center of the signal generator which is composed of power supply module, the key circuit module, LCD module, the AM module, the waveform generating module, filter module and other components. In addition to better completion of this complete set, this design uses Altera Corporation EPM240CT100C5.Key words:signal generator;EDA;CPLD;DDS;VHDL目录摘要........................................................ I Abstract ..................................................... II 目录....................................................... III 1 绪论. (1)1.1 研究课题的目的及意义 (1)1.2 国内外现状 (1)1.3 本设计的目标 (2)2 信号发生器设计方案 (3)2.1 传统的信号发生器设计方案 (3)2.2 基于微处理器和数字/模拟转换器的设计方案 (3)2.3 直接数字频率合成技术 (5)2.4 DDS方案选择 (5)3 CPLD及开发语言简介 (9)3.1 CPLD简介 (9)3.2 开发语言和开发环境的选择 (10)3.2.1 VHDL语言简介 (10)3.2.2 Verilog HDL语言简介 (11)3.2.3 开发语言及开发环境的选择 (12)3.2.4 VHDL语言与C语言的联系与区别 (12)3.3 编程及开发环境之我见 (14)4 多功能信号发生器硬件电路设计 (17)4.1 整体电路设计分析 (17)4.2 单片机最小系统设计 (17)4.2.1 单片机选型 (17)4.2.2 STC89C52RC单片机简介 (18)4.2.3 单片机最小系统 (19)4.3 按键电路设计 (20)4.4 显示电路设计 (21)4.5 幅度控制电路设计 (22)4.5.1 DAC0832简介 (22)4.5.2 幅度控制电路分析 (24)4.6 波形生成电路设计 (25)4.7 低通滤波模块设计 (26)4.7.1 低通滤波器选择 (26)4.7.2 低通滤波器仿真设计 (29)4.8 CPLD最小系统设计 (30)4.9 电源模块设计 (33)5 多功能信号发生器软件设计 (36)5.1 单片机软件设计 (36)5.2 CPLD软件设计 (38)5.2.1 CPLD内部构成 (39)5.2.2 三角波模块的程序流程图及分析 (41)5.2.3 矩形波模块的程序流程图 (42)5.3 Quartus II简介和仿真 (44)5.3.1 Quartus II简介 (44)5.3.2 CPLD软件仿真和实际波形图 (45)6 制作与调试 (50)6.1 电源的制作与调试 (50)6.2 单片机电路的制作与调试 (51)6.3 CPLD电路部分制作与调试 (52)6.4 整体电路调试 (52)6.4.1 整体硬件电路调试 (53)6.4.2 整体软件调试 (56)6.5 总结心得 (58)结束语 (60)致谢 (61)参考文献 (62)附录A 多功能信号发生器原理图 (63)附录B 单片机程序 (65)附录C CPLD程序 (73)1 绪论1.1 研究课题的目的及意义多功能信号发生器用于产生被测电路所需特定参数的电测试信号。
基于CPLD和单片机的波形发生器设计_刘继文

收稿日期:2010-06-20作者简介:男,1984年生,助教,张家口市,075024基于CPLD 和单片机的波形发生器设计刘继文 王海东河北建筑工程学院摘 要 介绍了一种基于CPLD 和单片机的波形发生器的设计,在M AT LAB 仿真环境下的任意波形产生原理和实现方法.采用单片机AT89S51作为控制器,分频器和地址发生器由CPLD 实现,其输出的数字信号由DAC0832进行转换后得到模拟信号.波形的幅值和频率的控制通过键盘电路和在单片机中编程来实现.关键词 波形发生器;复杂可编程逻辑器件;单片机;分频器中图分类号 TP20 引 言波形发生器又称信号源,它是用来产生被测电路所需特定参数的电测信号.波形发生器是一种常用的电子仪器,其输出一般为几种标准信号,如正弦波、方波,三角波、锯齿波等.波形发生器设计的总体思想是在单片机的控制下,利用CPLD 电路产生地址读出数据,从而送入D/A 转换电路完成给定的频率,周期,脉宽的波形数据.CPLD(Com plex Prog rammable Log ic Dev ice),即复杂可编程逻辑器件,是从PAL 和GAL 器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围,它是一种用户根据各自需要而自行构造逻辑功能的数字集成电路.采用这种设计思想将含有特定参数的波形数据预先存在波形数据存储器中,通过软件编程来完成波形的变换.这种方法设计的波形发生器,信号产生灵活方便、功能扩展灵活、信号参数可调,实现了硬件电路的软件化设计.具有电路结构简单、实用性强、成本低廉等特点.1 系统的设计111 系统总体结构如图1所示,系统的总体结构分别由单片机电路,晶振电路,分频电路,地址发生电路,波形数据存储电路和D/A 转换电路构成.这里用AT89S51单片机作为控制电路,键盘采用总线方式与单片机连接,并提供必要的人机接口;分频电路与地址发生电路采用CPLD 芯片,这部分电路是系统的重点和设计难点,用来完成总线的切换和其他逻辑控制;波形数据存储器采用28C64芯片,用来存储不同的波图1形,每一种波形存储一个周期的量化后的值,作为信号采样点;D/A 转换电路采用DAC0832芯片,这里采用两片DAC0832,分别用来实现频率控制和幅度控制;晶振电路作为计数器的计数频率源.112 设计原理在功能上,单片机与CPLD 有很强的互补性.单片机与CPLD 的接口方式有两种:一种是独立方式,其最大的优点是CPLD 中的接口逻第28卷第3期2010年9月 河北建筑工程学院学报J OUR NAL O F HEBEI INSTITUTE OF AR C HITEC TU RE A ND C IVIL EN GINEERING Vol 128No 13Sep.2010辑无需遵循单片机内固定总线方式的读/写时序,CPLD 的逻辑设计与接口的单片机程序设计可以分先后相对独立地完成;另一种是总线方式,其特点是传输速度快,节省CPLD 芯片的I/O 口[1].相对于非总线方式,单片机编程简捷.本次设计采用单片机与CPLD 的总线接口方式.设计中,在波形数据存储器28C64中存入的是每种波形一个周期量化后的值.为了方便,一种波形量化了256个值,存入波形数据存储器后占用256个字节,并且在其中的地址是连续的,如果依次选通这些地址,那么这些地址上对应的内容便通过波形数据存储器中的数据位发送出去,把数据位连接到DA C0832,通过数模转换便得到每个量化值所对应的模拟值.把256个地址选通一遍,便会产生一个周期的波形,循环的选通,便会产生连续的波形.CPLD 的作用是设计一个计数器作为波形数据存储器的地址发生器,计数器计数的范围是0到255.以下是在28C64中存入的方波程序代码,且仅为一个周期:ORG 0000HT AB:;FANGBODB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0DB 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255DB 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255DB 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255DB 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255END计数器的计数频率源来自外部的有源晶振,在计数器和晶振之间加一个分频器便会产生不同的计数频率,从而产生不同频率的波形.113 DAC0832的性能及工作原理DAC0832是双列直插式8位分辨率D/A 转换集成芯片,与微处理器完全兼容,能够完成数字量输入到模拟量(电流)输出的转换.图2内部结构图.其主要参数如下:分辨率为8位,转换时间为1L s,满量程误差为?1LSB,参考电压为(+10~-10)V,供电电源为(+5~+15)V.从图2中可见,在DA C0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称图2为DA C 寄存器,它的锁存信号也称为通道控制信号XFER [2].图2中,当ILE 为高电平,片选信号CS 和写信号WR1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的输出随输入而变化.此后,当WR1由低电平变高时,控制信号成为低电平,此时,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据DB 的变化而变化.对第二级锁存来说,传送控制信号XFER和写信号WR2同时为低电平时,二级锁存控制信号为高电平,8位的DAC 寄存器的输出随输入而变化,此后,当WR2由低电平变高时,控制信号变为低电平,于是将输入寄存器的信息锁存到DAC 寄存器中.波形的幅度由两个DAC0832控制,把其中一个DAC0832的输出接到另一个DAC0832的参考电压输入端V REF 上,通过单片机直接对第一个DAC0832输入不同值,来产生不同值控制幅度.115第3期 刘继文 王海东 基于CPLD 和单片机的波形发生器设计2 波形在M AT LA B 中的仿真211 环节库及框图的建立在Simulink 中,设有十多种典型的环节,分列在信号源(Sour ces)、输出信号源(Sinks)、线性(Line -ar)、非线性(Nonelinear)、离散(Discr et)等几大类图标子菜单中[3].开始建立框图,可在MAT LAB 的命令窗中,键入simulink,屏幕上会出现两个视窗.一个是上述的几类库图标,另一个是供绘制框图用的空白视窗,如图3右上方页面所示.图3 仿真框图建立界面双击Sinka 图标,屏幕上会弹出子图标,如图3左方所示.其中包扩示波器、数字显示、输出到文件等等.双击Sources 图标则弹出图3右下方的页面,包括信号发生器、阶跃信号、斜坡信号、时钟信号、随机序列等等.为了建立所需的框图,可以用鼠标拖拽的方法,将所要的环节移到那个空白的文件中,排列在需要的位置上.当环节布置好后,把各环节的端口按框图连接起来,连接的方法是把鼠标指在线段的始端,按下左键不放,移动鼠标,一直引到线段的终点端口再释放.此时在终点上将出现箭头.212 参数的设定用/双击左键0的方法,逐个打开各个环节的参数设定窗口以修改其中的参数,这些参数可以用M ATLAB 中任何合法的方式表示.如双击Sig nal Generator 这个图标,则会弹出如图4的窗口.图4 仿真参数设定界面116 河北建筑工程学院学报 第28卷上图中的窗口可以用来设定波的形状、频率、幅值以及仿真的起始和终止时间等参数.213 仿真的运行仿真以正弦波为例来进行演示.在仿真框图菜单项=Sim ulation >的下拉菜单中选择=Star t >项,系统就开始仿真,在输出的示波器上可以看到正弦波的波形.同时Start 项就变为Sto p 项,在任何时候单击它,仿真就会停止.此外又可以用M AT LAB 程序对送来的数据直接进行处理,也可以将结果送给一个特定的文件,以便日后进行详细的处理.正弦波形如图5所示.图5 仿真结果界面3 结束语由于采用了单片机和CPLD 的设计方法,设计的波形发生器具有较大的灵活性和可扩展性.同时,在波形数据存储器中存储了多种信号样式,这样就可以辅助单片机的控制实现多种信号样式的复合.采用MAT LAB 编程的方法将产生的波形数据按照H EX 文件的INT EL 格式存放,然后将这些波形数据整批次烧录入数据存储器中.采用这种方法,波形数据生成简单,快捷;可根据需要在软件程序中方便地修改信号参数;无需改动硬件电路即可实现信号参数的功能扩展.参 考 文 献[1]黄任.A V R 单片机与CPL D/FP GA 综合应用入门.北京:北京航空航天大学出版社,2004[2]National Semico nducto r Cor po ration,IN C.DA C0830/DA C08328-Bit uP Compatible,Double -Buffered D to A Con -ver ters.w ww 1national 1co m[3]张德丰.M atlab 数值分析与应用.北京:国防工业出版社,2007Design of Waveform Generator Based on CPLD and SCMLiu Jiw en 1,Wan g Ha idong 1Hebei Institute of A rchitecture and Civ il Eng ineeringAbstract A desig n of w av eform g enerator based on CPLD and SCM is introduced.U nder MAT LABSimulation env ir onm ent,the arbitrary w av eform generates principle and realizing m ethod.T he w aveform g enerato r is used as a controller of SCM AT89S51.Frequency div ider and address g en -er ator are achiev ed by the CPLD,the output of the dig ital signal com es fr om DAC 0832conver ting analog signals obtained.The amplitude of w avefor m and the contr olling o f fr equency ar e achieved thr ough keyboard circuit and prog aming in SCM.Key words w avefo rm generator;CPLD;SCM ;fr equency divider 117第3期 刘继文 王海东 基于CPLD 和单片机的波形发生器设计。
单片机和CPLD构成的任意波形产生器

单片机和CPLD构成的任意波形产生器
吴秋兰
【期刊名称】《电子工程师》
【年(卷),期】2001(27)11
【摘要】介绍了一种采用复杂可编程逻辑器件 (CPLD)与单片机相结合的方法设计的新型任意波形发生器 (AWG) ,其中波形合成采用了直接数字合成 (DDS)技术。
本系统能输出频率和幅度可调的任意波形。
【总页数】4页(P4-6)
【关键词】复杂可编程逻辑器件;单片机;任意波形产生器
【作者】吴秋兰
【作者单位】山东大学
【正文语种】中文
【中图分类】TP368.1;TN791
【相关文献】
1.基于CPLD和单片机的任意波形发生器设计 [J], 任绪科;赵俊渭;周明
2.基于CPLD和单片机的任意波形发生器设计 [J], 任绪科;赵俊渭;周明
3.高速任意调制波形产生器研制 [J], 沈忠义;杨江平
4.一种基于CPLD实现的数字化PWM波形产生器 [J], 冯小平;张林;赵焕军
5.基于直接射频合成的一种任意波形信号产生器的FPGA实现 [J], 赵云;王李军;徐建良
因版权原因,仅展示原文概要,查看原文内容请购买。
基于CPLD的任意波形发生器

基于CPLD的任意波形发生器[日期:2006-09-20] 来源:电子产品世界作者:倪卫宁肖宛昂石寅[字体:大中小]引言任意波形发生器(Arbitrary Wave Generator,以下简称AWG)在通信系统、测试系统等方面得到广泛应用。
本文利用自主研制的150MSPS(Million Sampling Per Second)12位DAC(Digital An alog Converter)和300MSPS 12位DAC,基于CPLD技术,设计了一种AWG。
要产生的波形通过上位机软件设置,然后将波形数据下载到AWG,AWG在CPLD的高速控制电路下将波形数据送高速DAC进行转换形成所要的波形。
下面先分析AWG的硬件结构。
任意波形发生器的硬件结构AWG的工作过程是,首先接收上位机送来的波形数字信号存储到SRAM,然后启动控制电路从SRAM取出数据送DAC进行数摸转换,转换后的模拟信号送低通滤波器形成波形。
如果DAC工作在150MSPS的速度下,可以以150MHz的频率送数据到DAC进行转换,微控制器的晶振输入一般工作在40MHz以下,没有这么高的速度送出数据到DAC,所以考虑采用CPLD构建硬件控制电路。
数据首先传送到SRAM,然后在CPLD硬件控制电路的控制下,以150MHz的频率从S RAM中取数送DAC转换。
其体系结构如图一所示。
如果要形成正弦周期信号,每周期4个点就可以合成一个波形,此时可以输出约38MHz的高频信号。
图一AWG硬件结构CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)是在传统的PAL、GAL基础上发展而来的,具有多种工作方式和高集成、高速、高可靠性等明显的特点,在超高速领域和实时测控方面有非常广泛的应用。
与FPGA相比,CPLD比较适合计算机总线控制、地址译码、复杂状态机、定时/计数器、存储控制器等I/O密集型应用,且无须外部配置ROM、时延可预测等。
基于单片机的任意波形发生器的设计

根据本设计的任务要求跟指导老师的要求,我就选择了下面的一些器件跟电脑软件来完成本设计。在硬件系统上我采用了主控制芯片是STC89C52的单片机跟AD9833的模块,以及DAC0832数模转换芯片,在软件上我就选择了Protel99sE来设计本任务的电路的原理图跟PCB图。接下来我就根据要求画出电路图跟PCB图,然后向学校申请一个实验室,之后进行手工焊制电路板。
七十年代的时,我们已经步入了频率合成的第三个时代,那是因为直接数字合成DDS技术的诞生,它的诞生是来源于超大规模集成电路结合数字信号处理理论而形成的伟大的技术。也就在七十年代,DDS的概念被J.Tiemey和CM.Tader等人开始提出假象来:首先是利用数字方式累加相位来完成的相加和作为一个地址,然后再用刚刚那个地址通过正弦函数表的查询而得到正弦波幅度的离散数字的序列,之后通过数模转换器跟显示器输出来正弦波。DDS具有众多优点,突出的优点有变频的速度快,频率连续性强等,也就因为这些优点使它在这短短几十年的时间里发展如此的迅速,我们现在还在运用它来作为一些电子产品的芯片。
如图2.1所示是DDS的一般构造。这个非线性函数 可以表示为正弦信号的函数。开始应该选择一个函数 ,然后再将这个函数进行数字量化,接着以x、y为地址跟数据,最后按循序的输入到波形存储器中合成一个正弦波。波形存储器中的地址是被DDS运用相位累加技术来控制的,在一个周期中,它最后的结果都是通过相位累加器把前一个相位的增量相加的。为了改变DDS最终的输出值就应该改变相位的增量,在输出频率周期中的稳定性就决定最终输出频率的稳定性。因为本设计中的波形是通过周期内取连续的点而完成的,所以它显示的波形是呈现星星点点的,而且不是一个连续的波形,这是必须通过波形滤波器来过滤掉一些不需要的错误波形,最后就能在示波器呈现出相对比较稳定的,不失真的正弦波。
基于单片机驱动CPLD的PWM正弦信号发生器设计

基于单片机驱动CPLD的PWM正弦信号发生器设计前面几期给读者介绍了单片机+CPLD系统设计,本篇继续挖掘CPLD潜力,给出一种单片机驱动CPLD的PWM正弦信号发生器设计,充分体现了CPLD的灵活多变,配合单片机控制,其妙无穷,以下方案均在Mini51板上实现。
脉宽调制PWM(Pulse Width Modulation)是利用数字输出信号对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
一、PWM原理PWM是一种对模拟信号电平进行数字编码的方法。
通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。
电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。
通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。
只要带宽足够,任何模拟值都可以使用PWM进行编码。
如图1所示,用一系列等幅不等宽的脉冲来代替一个正弦半波,正弦半波N等分,看成N个相连的脉冲序列,宽度相等,但幅值不等;用矩形脉冲代替,等幅,不等宽,中点重合,面积(冲量)相等,宽度按正弦规律变化。
图1用PWM波代替正弦半波SPWM波形——脉冲宽度按正弦规律变化而和正弦波等效的PWM波形。
二、基于CPLD的PWM方案一个PWM发生器必须包括计数器,数据比较器,另外就是配置PWM参数的时钟分频寄存器和占空比寄存器,结构框图如图2所示,这些电路都可以用CPLD来实现。
图2PWM控制器结构框图高频时钟信号经分频器驱动计数器,计数器如图3所示,总是从Bottom到Top 的循环计数,计数器的输出和占空比寄存器里的数据经数据比较器比较,输出PWM信号,当计数器输出小于占空比设定值时输出低电平(0),否则输出高电平(1),如图3(b)(c)所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机频率计的设计说明书开封大学参赛成员:郭东卫王超参赛指导教师:杨志帮侯静基于单片机频率计的设计指导老师-杨志帮、侯静核心器件: AT89C52 74HC163在电子工程设计与测试中,常常需要一些复杂的、具有特殊要求的信号,要求其波形可任意产生,频率方便可调。
通常的信号产生器难以满足要求,市场上出售的任意信号产生器价格昂贵。
结合实际需要,我们设计了一种任意波形发生器。
电路设计中充分利用MATLAB的仿真功能,将希望得到的波形信号在MATLAB中完成信号的产生、抽样和模数转换,并将得到的数字波形数据存放在数据存储器中,通过单片机和CPLD控制,将波形数据读出,送入后向通道进行A/D转换和放大处理后得到所需的模拟信号波形。
利用上述方法设计的任意波形发生器,信号产生灵活方便、功能扩展灵活、信号参数可调,实现了硬件电路的软件化设计。
具有电路结构简单、实用性强、成本低廉等优点。
一、系统框图任意波形发生器的设计思想,是利用MATLAB的强大仿真功能,方便、快捷的生成给定频率、周期、脉宽的任意波形数据;并将数据预存在数据存储器中。
在单片机控制下,利用CPLD电路产生地址读出数据,送入D/A转换电路,得到所需的任意波形信号。
系统结构框图如图1;图中分频电路和地址发生器由CPLD实现。
图1 系统框图二、电路设计及实现单片机控制电路单片机采用AT89C52芯片,通过软件编程产生所要求的控制信号。
主要的控制参数包括:信号周期、脉宽;分频电路的开始信号、地址发生器的复位信号;E2PROM的选通信号;D/A转换电路的选通信号。
在具体电路中,端口P1.0控制分频电路的启动、P1.1控制地址发生器的清零,P2.0控制28C256和AD7545的选通信号。
单片机工作在定时器0方式,软件设计利用C语言实现。
流程图如图2所示。
图2 软件流程图三、波形数据生成MATLAB作为一款优秀的数学工具软件,具有强大的运算功能;可以方便的产生各种信号波形,在软件中实现波形信号的产生、抽样和模数转换。
设计的任意波形发生器,数据存储器选用28C256芯片,信号波形通过MATLAB仿真产生;得到的波形数据存放在数据存储器28C256中。
具体设计中,我们要求产生周期为200ms,脉宽为5ms的单/调频混合信号,其中单频信号的脉宽为4ms,频率为30KHz;调频信号的脉宽为1ms,频率为30KHz_35KHz。
在MATLAB中设定抽样率为500KHz,得到了2500个波形数据。
这些混合波形数据在烧录入数据存储器的过程中,由于波形数据较多,直接用手工录入数据存储器中不仅费时且容易出错。
为克服这一弊端,通过MATLAB编程的方法将产生的波形数据按照HEX文件的INTEL格式存放,然后将这些波形数据整批次烧录入数据存储器中。
采用上述方法,波形数据生成简单,快捷;可根据需要在软件程序中方便地修改信号参数;无需改动硬件电路即可实现信号参数的功能扩展。
四、CPLD逻辑设计分频电路采用两片74HC163实现。
通过分频电路,将12MHz的晶振标准频率分频后,得到500KHz的抽样频率,作为地址发生器的时钟。
分频电路的工作由单片机控制。
地址发生器电路由3片74HC163组成,时钟频率为500KHz,有分频电路提供;和预存的波形数据抽样频率相一致,以实现数据的无失真读出。
电路设计中,采用ALTRA公司的EPM7128AETC100-10芯片,在MAX+PLUSⅡ开发环境中完成分频缏泛偷刂贩⑸鞯缏返纳杓啤;贑PLD的电路设计,可以省去大部分的中小规模集成电路和分离元件;使得电路具有集成度高、工作速度快、编程方便、价格低廉的显著优点。
通过CPLD和数据预生成的信号实现方法,无需改变硬件电路,即可实现信号参数的任意调整;同时外围电路十分简单,为工程调试和应用带来了方便。
五、D/A转换电路D/A转换电路的实现如图3所示。
电路中,AD7545将波形数据转换为模拟信号;LF353进行信号滤波和整形。
根据项目要求,要实现输出波形程序设计主要解决按键控制输出三角波、方波、锯齿波和正弦波的问题。
按键控制:根据设计要求和按键控制输出波形的变化,程序应设计不断查询检测按键的状态,以便输出对应的波形。
对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块设置ID号进行标识,这样每按一次键,ID的值就不一样。
因此,我们不同的波形用flag标识:当flag=0时,输出三角波;当flag=1时,输出方波;当flag=2时,输出锯齿波;当flag=3时,输出正弦波。
我们规定,每次按下K键,分别给出不同的flag值就能实现任务。
输出模拟电压:由于DAC0832和单片机AT89C51采用直通方式,因此只要往数据输入端送数字量,从后面的运放输出端就可得到模拟电压。
输出的电压根据公式计算到。
由此在需要输出某个电压值时,求出对应的数字值,通过P2口输出,就可以得到所需的模拟电压。
为了方便编程我们将DAC0832的输出封装为一个子函数,用形参表示待输出的数值。
程序中用4个子函数分别表示产生不同的波形,程序设计的流程图如图所示图简易波形发生器程序流程图根据程序流程图,写出单片机C语言程序清单:#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define DAC0832 P2 // 将DAC0832定义为P2口#define ALL 65536 // 将ALL定义为65536#define Fosc 12000000 // 频率为12MHzuchar TH_0,TL_0,flag1,flag=0;uint FREQ=100,num;float temp;uchar code sin_num[]={0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,3,3,4,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,12,12,13,14,15,15,16,17,18,18,19,20,21,22,23,24,25,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,44,45,46,47,49,50,51,52,54,55,56,57,59,60,61,63,64,66,67,68,70,71,73,74,75,77,78,80,81,83,84,86,87,89,90,92,93,95,96,98,99,101,102,104,106,107,109,110,112,113,115,116,118,120,121,123,124,126,128,129,131,132,134,135,137,139,140,142,143,145,146,148,149,151,153,154,156,157,159,160,162,163,165,166,168,169,171,172,174,175,177,178,180,181,182,184,185,187,188,189,191,192,194,195,196,198,199,200,201,203,204,205,206,208,209,210,211,213,214,215,216,217,218, 219,220,221,223,224,225,226,227,228,229,230,230,231,232,233,234, 235,236,237,237,238,239,240,240,241,242,243,243,244,245,245,246, 246,247,247,248,248,249,250,250,251,251,251,252,252,253,253,253, 253,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255}; /************端口设置*********/sbit cs=P3^6;sbit change=P3^2;/************延时1m s*********/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/************初始化函数*********/void init(){TMOD=0X01; //设定工作模式1temp=ALL-Fosc/12.0/256/FREQ; //定时器初值计算TH_0=(uint)temp/256;TL_0=(uint)temp%256;EA=1; //开总中断EX0=1; //开外部中断IT0=1; //设定下降沿有效工作方式ET0=1; //设定定时器工作在定时方式TR0=1; //开定时器中断}/************切换波形函数*********/void changefreq(void){if(change==0){flag++;if(flag==4) {flag=0;num=0;}}TH_0=(uint)temp/256;TL_0=(uint)temp%256;}/************三角波函数*********/void sanjiaobo(void){for(num=0;num<255;num++){cs=0;DAC0832=num;cs=1;}for(num=255;num>0;--num){cs=0;DAC0832=num;cs=1;}}/************方波函数*********/void fangbo(void){cs=0;DAC0832=0xff;cs=1;for(num=0;num<255;num++);cs=0;DAC0832=0x00;cs=1;for(num=255;num>0;num--);}/************锯齿函数*********/void juchibo(void){cs=0;DAC0832=++num;cs=1;}/************正弦函数*********/void zhengxianbo(void){for(num=0;num<255;num++){cs=0;DAC0832=sin_num[num];cs=1;}for(num=255;num>0;num--){cs=0;DAC0832=sin_num[num];cs=1;} }/************外部中断服务函数*********/ void ext0()interrupt 0{changefreq(); //引用频率改变函数}/************定时器中断函数*********/ void timer0()interrupt 1{TH0=TH_0;TL0=TL_0; //重新装初值TR0=0;switch(flag){case 0:{sanjiaobo();TR0=1;break;}case 1:{fangbo();TR0=1;break;}case 2:{juchibo();TR0=1;break;}case 3:{zhengxianbo();TR0=1;break;}default:;}}/************主函数*********/void main(){init();while(1);}结语采用上述方法设计的任意波形发生器,通过软件和硬件结合,充分发挥MATLAB强大的仿真功能,尽可能的减少了硬件开销。