如何用dds 产生频率可调的方波
想用ise的 dds ip做一个方波信号源。
频率变化从1M到40M左右,最好是以步长(比如1M)通过旋钮调节可以连续变化。
比如,dds时钟用100M,相位累加器位宽设为18位,这时频率分辨率大概是381Hz。
现在问题是如果取相位累加器最高位作为输出信号,当2^18不是△cita的整数倍时,或是初始相位设置不当时,由于每次溢出的相位累加器的值不一致,
得到的方波不是周期信号。
不知道这个问题怎么解决?
请给位大神指点下~谢谢了
取相位累加器最高位作为输出信号,这尼玛 截断的也太多了些吧……高8位差不多
期待大牛回答…
你的意思用高8位做个运算(比如与)然后输出一个信号?
这还是有误差啊~ 关键是我要的信号频率很大的时候,比如二三十M~
You use the MSB of phase accumulator to get a squarewave and hope it will generate the same frequency go through LUT and DAC. For the phase jump over the 1st /4th quadrant and 2th/3rd quadrant, it will change the squarewave's polarity( 1 to 0 and 0 to 1). Maybe we can do some kind of "smooth" action over the edge.
你是直接把累加器输出的最高位作为方波信号了?那应该没问题啊,输出方波的最小频率应该是时钟频率的2^18分之一,你要连续可调的话,只要调节输入频率字K的大小就可以
问题是当K很大时(要使所得方波频率为10M多或20M多时,远小于clk频率100M的一半),相位累加器最高位并不是每次经过N个clk周期变化一次,有时比N多1,有时少1,
相邻两次 高电平和低电平时间也不一样,这次高电平多一个clk,下次可能少一个,即占空比不一样,使所得信号有很大抖动~
而且即使当K较小时,也是有抖动发生,抖动的出现与否和抖动大小与k的具体取值有关,这个示波器是观察的到的~如何解决呢
“phase jump over the 1st /4th quadrant and 2th/3rd quadrant”
具体在什么情况下发生? 也就说 squarewave's polarity 出错的几率 跟△cita的具体取值有关了?
再个如何对出错的地方 "smooth"?
一定要顶!
DDS频率调整本来就和位数相关,你输入常数为K每变化1频率变化为381hz
在调整输入常数的过程中肯定有频率不是方波的情况。
另外,输出截位太高了吧,一般18位要留个8位10位的
截断后对输入常数变化就更不敏感了,你要连续的变化,反应快
要么累加位数高截断输出也要高位数
要么别用DDS
你如果频率值间隔大的话,不如直接选择分频呢。
dds也是一种分频器,就是分频比选择的多而已
你用100M产生40M的方波,相当于40M的每个周期只有2.5个点,也就是说连续两个周期的40M信号有5个点,及第一个周期是2个点,第二个周期是3个点;换句话说,第一个周期是50M的信号,第二个周期是33.3M的信号。这样每个方波周期不等,用示波器产看抖动非常大。只有能整除的频率才没有抖动。
利用这种方法不管怎么做,都会有一些频率是抖动的。
可以解决的办法:
1,使用正弦通过DAC输出,将输出的正弦通过电压比较器比较输出方波。这样任何频率都比较稳定,不会抖动。
2,在每个周期的上升沿和下降沿插值,当然每个沿插值不一样,不让方波从0到1突然变化。相当于是每个周期是不规则的T形波输出,通过DAC输出后,再通过LPF就能得到稳定的方波波形输出。这种方法比较复杂。因为正对不同的频率都有不同的插值。
高速DA数模转换模块(DAC900E),很适合用FPGA控制产生任意波:
http://item.taobao.com/item.htm?id=25736860907
那是不是插入一个点就尅有了呢? 我尝试了一下,插入一个点后,有点效果,但是效果不大
为什么非要用IP核
Ok, good information
期待个鞥深入地讨论,谢谢/。
谢谢分享,好好学习下。
已经按照小编方法搞定方波,谢谢了
