积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 单片机 >> 应用论文
  相关分类: 相关文章 | 应用论文 | 新产品 | 下载 |
利用FPGA与单片机相结合设计的波形发生器
 
作者:刘 薇 王建立   来源:微计算机信息    点击数:84   更新时间:2008-7-11
您可以添加到网摘 让更多人关注此文章:

    摘要:利用FPGA与单片机相结合的方法,使用单片机控制FPGA产生频率为10Hz~20kHz的正弦波,锯齿波,三角波和四路分别占空比0到100%可调的PWM波形。该波形发生器以单片机(MCS8031)为中心控制单元,由上位机界面,波形发生模块和D/A转换模块组成。采用DDS(直接数字频率合成)技术,通过VHDL语言,单片机C语言,VC++语言实现了对正弦波,锯齿波,三角波频率以及四路PWM波占空比的设置和发生。
关键词: FPGA;单片机;VHDL;DDS

1 引言


可编程逻辑器件(PLD)及EDA技术的应用成为电子系统设计的潮流。FPGA是一种新兴的可编程逻辑器件(PLD),与其它PLD相比,具有更高的密度、更快的工作速度和更大的编程灵活性。单片机以其体积小、功能齐全、价格低廉、可靠性高等方面所具有的独特优点,长期以来被广泛的应用在各领域。


基于FPGA的高密度、高速度、现场可编程的能力和单片机强大的数据处理功能,制作了波形发生系统,用于产生频率为10Hz~20kHz的正弦波,锯齿波,三角波和四路分别占空比0~100%可调的PWM波。


2 系统设计


整体设计由四个部分组成:上位机部分,单片机部分,FPGA部分,模拟电路部分。


波形发生器以单片机(MCS8031)为中心控制单元,由上位机控制界面,波形发生模块和D/A转换模块组成,采用DDS(直接数字频率合成)技术,将要求的波形数据存储于FPGA内构建的ROM当中,单片机跟据上位机的命令输出查表地址等信息至FPGA,FPGA产生相应得波形数据经D/A转换器输出。其系统原理框图如下:




图1  系统原理框图


2.1 单片机部分


在设计中采用MCS8031为处理器,选择P1.0,P1.1作为波形选择信号,P1.2作为FPGA的复位信号,P2.5作为DACO832的片选端,P0口作为低8位地址和数据线。单片机接收来自上位机的命令信息后将相应的波形设置信息输出到FPGA,并控制DAC0832的使能。


单片机接收并处理来自上位机的数据信息流程图如图2所示:


 


图2  单片机接收并处理上位机数据流程图


2.2 FPGA部分及模拟电路部分


波形发生采用DDS技术可以很方便地产生各种高质量的波形。DDS技术是从相位概念出发之结合成所需要波形的一种频率合成技术。以正弦波为例,首先要按照一定的采样点数将正弦波形一个周期的数据信息存于ROM表中,表中包含着一个周期正弦波的数字幅度信息,每个地址对应正弦波中0到360度范围内的一个相位点的幅度值,查找表时即是把输入的地址相位信息映射成正弦波幅度的数字量信号,以驱动D/A转换电路。DDS方法通过查找表输出信号的频率可由下式给出:


Fout=(x*[Fclk])/Y;     Y为2的N次幂;


其中频率控制字与输出信号的频率成正比,因此可以通过改变寻址的步长来改变输出信号的频率,因为在确定了累加器的位宽N和寻址位宽M,以及系统时钟Fclk后,随着步长X的增加,在每次累加器循环的一个周期中,输出的M为查找表的地址个数就会减少,相应输出一个中期波形的时间也就会减少,输出信号的频率相应增加,这就是DDS的方法。


需要注意的是,随着步长和输出频率的增加,输出信号的采样点数会减少,会降低产生波形的精度和平滑度,因此也限制了输出信号的最高频率,而且由采样定理可知,所产生的信号频率不能超过时钟频率的一半,在实际应用中,为了保证信号的输出质量,输出的频率不要高于时钟频率的33%,以避免混叠或谐波落入有用输出频带内。


为了提高所产生的波形频率,采用高频率特性的FPGA(ALTERA EPF10K10LC84-4)。后级电路采用有较高的转换速度的DAC0832作为D/A转换。


在FPGA内实现ROM表的资源是有限的,并且ROM表的大小随着地址位数和数据位数的增加成指数递增关系,因此在满足采样信号性能的前提条件下,如何减少资源的开销就是一个重要的问题。在实际设计时,充分利用了正弦波信号周期内的对称性和算术关系来减少ROM表资源的开销,因此通过一个正弦表的前1/4周期就可以通过相位变换得到其整个波形周期的采样值,这样就节省了将近3/4的资源。


对于PWM波部分,采用分频器,累加器与比较器结合的方式实现,对于各个部分采用模块化设计分别实现,并在顶层文件中连接在一起可以方便进行修改,扩展和移植。


正弦波,三角波,锯齿波的部分VHDL源程序如下:


p_rom:process(clk,reset)


  begin


    if clk'event and clk='1' then


        clk_rom<=clk_rom + frq_data;


           case p1 is


              when "00"=>rom_address<=clk_rom( 19 downto 13)+"000000000";


              when "01"=>rom_address<=clk_rom( 19 downto 13)+"010000000";


              when "10"=>rom_address<=clk_rom( 19 downto 13)+"011111111";


              when others=>null;


           end case;


     end if;


end process p_rom;       


2.3 上位机部分


利用Windows系统中提供的串行通讯功能完备的ActiveX控件即MSComm控件实现与单片机的通信。MSComm控件具有编程容易实现,简捷方便等优点,但仅在对话框中使用。根据波形发生器的特点和要求,MSComm控件可以完全实现要求。


像其他控件一样,通信空间也是用一系列的属性和用户接口,控件提供了许多属性,大部分属性仅和Modem有关,下面将常用的属性做一下简要说明:


CommPort:设置并返回通信口号,缺省值为COM1。


Settings:设置并返回波特率、奇偶校验、数据位、停止位的字符串。其中波特率的范围为300b/s到19200b/s。


PortOpcn:设置并返回通信口的状态,同时用来打开和关闭通信口。


InputLen:决定每次Input读入的字符个数,缺省为0,表示读取接收缓冲区的全部内容。


Input:读入并清除接收缓冲区的字符。


InBuferCount:返回接收缓冲区已接收的字符数,通过置0可清除接收缓冲区。


Output:将发送的字符串或数组写到发送缓冲区。


InputMode:定义Inpput属性获得数据的方式。


Rthreshold:设置、返回在通信控件置ComEvRecieve并激发OnComm事件前要接收的字符数。


SThreshold:设置、返回通信控件置ComEvSend并激发OnComm事件前发送缓冲区中的最少字符数。


另外,由于在VC界面中出现的是10到20k的整型数据,因此需要将此频率数据转换成16位的频率控制字送给单片机,转换程序如下:


void CWaveDlg::CalculateFreq(unsigned  int unFreq)


{


              double m;


        m=unFreq*0.0001024;


           m=m*1024;


           CommandMCU.uchLowData= (unsigned char) m%256;


           CommandMCU.uchHighData=m/256;


           return;


}


3 结束语


本文作者创新点:采用了直接数字频率合成(DDS)技术,经过仿真,电路测试,输出波形上完全达到了设计的要求。与以往的采取波形存储和波形复现方式的波形发生器相比,基于DDS的波形发生器可以很方便的实现频率的调制功能,产生的波形可以达到很高的频率分辨率,输出频率的转换速度快,而且在频率转换时,DDS输出波形的相位是连续的。


 


参考文献:


1.王凤臣,李庆瑞等.基于DDS的波形发生器在HIRFL-CSR电源控制系统中的应用[J].微计算机信息,2006,22:3-5


2.段传华.直接数字频率合成器的原理及应用[J].电讯技术,1995年10月,35(5).


3.侯博亨等.VHDL硬件描述语言与数字逻辑电路设计.成都电子科技大学出版社.1997.


4.徐志军等.CPLD/FPGA的开发与应用.北京:电子工业出版社.2002

[1]



相关文章
· 单片机4×4矩阵式键盘的课程设计[29]
· 一种基于FPGA实现层析重建的加速方法[19]
· 基于单片机的数字正弦机研制[45]
· 基于FPGA的FFT处理器设计[18]
· 图形LCD模块ACM19264ASB的汉字显示[13]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM处理器应用开发4步骤

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
各种冲值卡批发销售!独家特价!
特价销售GPS车载导航系统!
数字电视批发销售!你想不到的价格!
品牌相机批发销售!你想不到的价格!
品牌手机批发销售!你想不到的价格!
笔记本电脑批发销售!你想不到的价格!
那一年我做了鸭子2
那一年我做了鸭子1
等你十年(下)
等你十年(上)
 
热门下载 [更多]
 
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
[ ] 实用电源电路集锦
 
论坛新帖 [更多]
 
新店开业,部分开发板&元器件特...
[原创]VB编程RS232串口...
红外摄像机控制故障分析与处理方...
红外防水摄像机在智能视频监控中...
步进电机不用驱动芯片能驱动吗?...
我要选一块双串口,带AD的单片...
[分享]运放和功放的区别是什么...
4×4矩阵式键盘的课程设计...
做过高速信号滤波的高手帮忙...
做视频信号放大器,各位有什么好...

 
赞助商 [更多]
 


ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网