差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
pwm_verilog [2022/05/07 13:07] gongyu [3. 双PWM产生更高频率的信号] |
pwm_verilog [2022/05/07 13:23] (当前版本) gongyu [5. 双PWM产生更高频率的信号] |
||
---|---|---|---|
行 171: | 行 171: | ||
### 5. 双PWM产生更高频率的信号 | ### 5. 双PWM产生更高频率的信号 | ||
如果将PWM和R-2R的原理结合起来,会如何?比如如果你的板子上有两根数字IO,能否通过这两根数字IO上的PWM-DAC得到更好的性能提升?比如我们如果想得到一个10位分辨率的DAC,如果只是用1根数字IO,396MHz的主频,相当于转换率为396MHz/1024, 如果用2根数字IO,两个PWM输出,一个PWM负责10位中的高5位,另一个PWM负责处理10位中的低5位,二者之间合成的时候按照R-2R的原理,也就是其中一个的负载阻抗是另一个的1/32,转换率就提升了32倍,也就是最高转换率可以达到396MHz/32 = 12.375Msps,理论上生成5MHz以内的任意波形是没有问题了。 | 如果将PWM和R-2R的原理结合起来,会如何?比如如果你的板子上有两根数字IO,能否通过这两根数字IO上的PWM-DAC得到更好的性能提升?比如我们如果想得到一个10位分辨率的DAC,如果只是用1根数字IO,396MHz的主频,相当于转换率为396MHz/1024, 如果用2根数字IO,两个PWM输出,一个PWM负责10位中的高5位,另一个PWM负责处理10位中的低5位,二者之间合成的时候按照R-2R的原理,也就是其中一个的负载阻抗是另一个的1/32,转换率就提升了32倍,也就是最高转换率可以达到396MHz/32 = 12.375Msps,理论上生成5MHz以内的任意波形是没有问题了。 | ||
+ | {{ :daul_pwm_schem_sm.jpg |}} | ||
如果要生成我们最常用的8位DAC呢? | 如果要生成我们最常用的8位DAC呢? | ||
行 176: | 行 177: | ||
- 设置PWM DAC的精度为8位,使用两个输出管脚分别驱动外部电阻1.5K和24K(1.5x16),查找表的高4位分配给连接1.5K的输出管脚,查找表的低4位分配给连接24K(1.5K的16倍)的输出管脚。 | - 设置PWM DAC的精度为8位,使用两个输出管脚分别驱动外部电阻1.5K和24K(1.5x16),查找表的高4位分配给连接1.5K的输出管脚,查找表的低4位分配给连接24K(1.5K的16倍)的输出管脚。 | ||
- DAC的转换时钟为12MHz*33/16 = 24.75MHz,相当于一个24.75MHz的并行8位DAC,正弦波表的查找时钟也使用这个24.75MHz的时钟,最高可以生成10MHz的任意波形(按照主时钟40%的转换率 + 7阶椭圆滤波器的方式) | - DAC的转换时钟为12MHz*33/16 = 24.75MHz,相当于一个24.75MHz的并行8位DAC,正弦波表的查找时钟也使用这个24.75MHz的时钟,最高可以生成10MHz的任意波形(按照主时钟40%的转换率 + 7阶椭圆滤波器的方式) | ||
+ | |||
+ | 下面为双PWM-DAC为DDS生成正弦波信号发生器的代码: | ||
Verilog代码: | Verilog代码: | ||
行 221: | 行 224: | ||
endmodule | endmodule | ||
</code> | </code> | ||
- | 得到的结果: | + | |
+ | |||
+ | 改变频率控制字可以得到不同的输出信号频率: | ||
{{ :dualpwmwave.jpg |}}<WRAP centeralign> 生成的3.077MHz的正弦波形图 </WRAP> | {{ :dualpwmwave.jpg |}}<WRAP centeralign> 生成的3.077MHz的正弦波形图 </WRAP> | ||
{{ :dualpwmfft.jpg |}}<WRAP centeralign> 生成的3.09375MHz的频谱 </WRAP> | {{ :dualpwmfft.jpg |}}<WRAP centeralign> 生成的3.09375MHz的频谱 </WRAP> |