DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 332|回复: 0
打印 上一主题 下一主题

利用FPGA与单片机相结合设计的波形发生器

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:42:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    摘要:利用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转换器输出。其系统原理框图如下:


500)this.style.width=500;" border=0>

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


500)this.style.width=500;" border=0>
图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_romrom_addressrom_addressrom_addressnull;
           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]
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-23 12:36 , 耗时 0.133750 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表