基于FPGA的三相函数信号发生器设计
2.1 分频模块设计
为了对波形频率精确控制,不同频率段需要不同的输入频率。项目设计中采用50 MHz外部有源晶振,利用FPGA内部锁相环将频率锁定在40.96 MHz,然后该频率进行10 MHz,100 MHz,1 000 MHz,10 000 MHz,如图4所示,这样就得到了5个不同的频率区间,最后通过5选1数据选择器由单片机选择所需要的时钟频率。时钟频率与输出波形频率之间具体关系,如表l所示。本文引用地址:https://www.eepw.com.cn/article/191582.htm
2.2 波形产生模块设计
2.2.1 正弦波
正弦波的数据需要转换为*.mif文件后存放到ROM中,mif文件有固定格式规定了每个字的位宽WIDTH、总字数DEPTH、地址进制基数ADDR-ESS_RADIX和数据进制基数DATA_RADIX。在Matlab环境中编程计算出正弦波数据,然后生成mif文件。
EP2C8T144C8拥有较充裕的存储空间。因此,设计中为了提高精度在ROM中存放4 096个正弦数据,频率控制字、相位控制字由单片机控制产生,经过相位累加器组成地址发生器,产生的地址连到ROM的地址线上进行查表得到波形数据。
2.2.2 方波
方波算法比较容易实现。由于其只有高低电平两种状态。因此,只需要在一个周期的时间中间位置翻转电平即可。由于相位累加器的值是线形累加的,地址address的值也是线形累加的,对所给地址值address进行判断,当地址值的最高位为O时,便将波形幅值各字位赋值1,否则赋值0。就可以实现最简单的占空比50%的方波。
为了实现占空比可调,设计中增加一个变量PWM_zkb[11..0],让地址值与WM_zkb[11..O]比较,Adress[11..0]PWM_zkb[11..0]时,输出Data_out[11..0]=“11111111111l”,否则输出为“000000000000”,如图3~图6所示,PWM_zkb[11..0]由单片机控制,经过锁存后送到方波发生器与Adress[11..0]比较后产生占空比可调的方波。
2.2.3 三角波
三角波的生成原理与方波生成原理相似,也是对地址Address的值进行判断,当其最高位为0时,取其O~ll位为三角波的波形幅值,即令Data_out[11..0]=Address[11..0]。当其最高位为l时,对其0~1l位的值取反后再作为三角波的波形幅值,即令Data_out[11..0]=not(Address[11..0])。
2.2.4 锯齿波
锯齿波的产生也是基于上述原理,是对地址Address的值进行判断,当其最高位为O时,取其0~ll位为三角波的波形幅值,即令。Data_ out[11..0]=Address[11..0]。当其最高位为1时,对其最高位的值取反后作为锯齿波的波形幅值,即令Data_out,[11..0]=Address[11..0]and“011111111111”。
2.3 相移的实现
在A相地址的基础上,增加一个累加器,输入段分别是A相地址和偏移值,经过累加之后得到B相波形地址,然后根据此地址对ROM寻址或者在地址的基础上生成方波、三角波和锯齿波。如图5所示,A相、B相及B相、C相之间的偏移量有单片机控制,数据经过锁存后送入累加器。
评论