折腾了一个下午,终于将一个功能强大、价格超级便宜的DDS信号发生器给搞定了.
有图才有真相,先看一张照片:

用M2K口袋口袋仪器测试到的生成的正弦波,测到的频率为9.968MHz
再通过界面看看这个信号是如何生成的:

240*240分辨率的屏幕上实现了各种波形及参数的调节。
调节方式有下拉选框、滑动棒多种方式,这UI是不是很酷?(别人写的,我只是修改了一下)
屏幕是不是很熟悉?这是我们硬禾学堂非常偏好的1.54寸240*240分辨率的彩色LCD、用SPI驱动,中景园淘宝店15.5元能买到。

整个系统上,就这个屏最贵,RP2040批量价格只有5元RMB,搭配LDO、高速运放、Flash等,全部下来不到50元RMB。
除了屏以外的其它部分的电路如下面这个板子所示:

另一个版本的DDS信号发生器
能够产生的信号:
波形:正弦波、脉冲、高斯、Sinc、指数、噪声,其实可以任意,目前的界面中就先支持这6种
频率范围:DC-20MHz,可精准调节
幅度:8Vpp,可精准调节
直流偏移:-4V ~ +4V可精准调节
另外脉冲信号可以调节上升沿、下降沿等
也许你会很吃惊,这么高速的模拟信号用啥DAC产生的呢?只有不到1块钱的20只电阻,用R-2R的方式构成了10bits的DAC,当然为了对得起10位的分辨率,电阻要选用1%以上的精度,常规的5%精度的电阻,阻值就有5%的偏差,在输出的波形上就会有凹凸不平的“雀斑”,看到国外有个小哥在用了1%精度的电阻的情况下,还用万用表精挑细选出尽可能接近1K/2K的电阻,毕竟1%的电阻也不值几个钱。

在我们以往的认知里,要做高速的DDS,那必须要用FPGA啊,单片机的IO怎么能推得动呢?何况是5块钱的单片机?

典型的FPGA+DAC构成的DDS信号发生器框图
树莓派的RP2040真的能做得到,秘密就在于其PIO(可编程IO),这玩意的神奇之处有很多文章都已经讲了,我在这里也没有办法讲清楚,只是给大家揭晓这个答案,有兴趣的同学可以自己去深挖。
RP2040通过PIO直接连接20个电阻构成的DAC网络,输出级加上低通滤波和双电压供电的高速运放,就能够输出我们需要的幅度、直流偏移的模拟信号了,这部分的电路也不在这里展开,在电子森林的项目平台里有很多相关的文章。
准备好硬件,如何让集按键控制、图形化界面、高速DDS输入任意波形整个复杂的系统通过软件实现?
就连7、8年编程经验的老司机估计也会望洋兴叹一阵。
而我,一个几乎没有任何编程史的板农赤膊上阵,用了一个下午的时间就把这玩意给鼓捣出来了,怎么做到的?秘笈如下:
网上有开源的DDS信号发生器程序,用树莓派Pico实现20MHz的任意波形产生
网上有开源的MicroGUI程序,正好支持我们用到的这款LCD屏幕的控制器ST7789
网上还有一位小哥结合上面两个开源的程序,制作的一款DDS信号发生器如下:
(当然这些资料是我在前期关注RP2040的技术信息时看到并刻意收藏起来的。没有这些信息,我绝对没有胆量开始硬件设计的。)

他用得LCD屏幕是320*240的,而我的硬件用的是240*240的,控制器也不同。
那我的任务就是基于这位小哥的使用指南,结合他使用的开源程序,自己修改代码从320*240的屏幕上适配到我的240*240屏幕上。
幸好这些开源的代码都是基于MicroPython的,虽然我也就是能够看懂MicroPython的语句,但熟练使用真的谈不上。
不过不怕啊,就想用LED调试硬件一样,在不同的地方设置打印信息Print(‘1')....就能方便追踪每一行语句的执行情况,修改相应的参数看看发生什么变化。
就这样。。。。竟然Work了。
但我将最终的程序以main.py脱机运行,并在M2K上能够验证设置的波形参数的时候,心情还是很激动的。
我竟然真的让它工作了!
要说这一切,归功于:
1 开源的力量!
2 MicroPython太好用!
3 RP2040很强大!
后面我会在这个系统上加入其它的一些功能,不仅能够生成模拟信号,还能够提供各种数字信号,比如调试单片机、MCU的调试器、能够生成SPI、I2C等测试信号的综合调试助手。
相关资料可以点击”阅读原文“跳转到电子森林的百科资源页面。