amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 5490|回复: 66

普通51机+电阻阵列=数字波形发生器-打造低价正弦波发生器

  [复制链接]
发表于 2013-4-22 23:57:57 | 显示全部楼层 |阅读模式
本帖最后由 chaily 于 2013-4-23 00:01 编辑

采用一片STC单片机和一组电阻阵列,再加上数组实现各种波形输出。这里使用了一个正弦波函数组合,使用一组完整I/O口推挽输出驱动电阻阵列,无需D/A。一个完整周期输出100个点,改变输出时间间隔则改变函数波的频率。
图中测试点1波形为直接输出的波形,经过简单滤波和射极跟随后可驱动后级电路。
因采用的是8位输出,分辩率不是太高,波形未经过滤波前可看出函数阶梯,滤波后可使用于要求不太严格的场合。函数波具有超高的频率稳定性和灵活的可控性(几张图中频率不完全一致是因为示波器采样设置的原因,实际上频率稳定性和普通晶振电路输出的稳定性相当),可通过不同的函数组输出三角波,锯齿波,梯形波,正弦波和一些意想不到的古怪的波形~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-4-23 00:04:46 | 显示全部楼层
还请LZ上传一份资料,让我等菜鸟好好的学习一下
发表于 2013-4-23 00:16:18 | 显示全部楼层
这个创意不错
发表于 2013-4-23 00:31:00 | 显示全部楼层
电阻基本上是2倍阻值递增的,楼主给解释下呗,电阻都一样不行吗?
 楼主| 发表于 2013-4-23 00:34:02 | 显示全部楼层
进口小开关 发表于 2013-4-23 00:31
电阻基本上是2倍阻值递增的,楼主给解释下呗,电阻都一样不行吗?

那个是数学问题,实际上就是应该从高位到低位以2的倍数递增,但由于手头没有高精度电阻,只使用了接近的电阻~~
发表于 2013-4-23 00:41:51 | 显示全部楼层
chaily 发表于 2013-4-23 00:34
那个是数学问题,实际上就是应该从高位到低位以2的倍数递增,但由于手头没有高精度电阻,只使用了接近的 ...

数学盲,希望楼主给科普下,顺便我再补补数学
 楼主| 发表于 2013-4-23 00:49:41 | 显示全部楼层
进口小开关 发表于 2013-4-23 00:41
数学盲,希望楼主给科普下,顺便我再补补数学

简单的说,就是1/2=1/4 + 1/8 + 1/16 + 1/32 + 1/64 + 1/128 + .........+ 1/N (N等于无穷大),不知道能否理解,纯粹是数学问题呵呵
发表于 2013-4-23 00:53:40 | 显示全部楼层
本帖最后由 monkeynav 于 2013-4-23 00:58 编辑

倒退回了最原始的DAC结构,电阻精度无保证,输出谐波巨大。。。
LZ这种情况,应该考虑DSD方式,也就是Sigma-Delta DAC。
输出一串脉冲,经过滤波之后,得到想要的信号。

这里有种更简单的办法,可以把任意一个数字IO口,变成性能不错的DAC输出:

构建一个一阶Delta-sigma调制器,程序如下,使用汇编或者用硬件(verilog)实现最好
int acc;
int output;
while(1)
{
acc += output;
GPIO = bit_C;// ALU的溢出位
while(!timeout);
}
其实就是不断把输出期望值累加到一个寄存器中,如果加法发生溢出,则设IO为高,否则设为低。
模拟电路部分,需要给输出脚加个RC无源滤波,一阶二阶都可以

我用这个方法,做过两个东西:
1,心电信号发生器,平台STM32,时钟1M,0-150Hz实测信噪比80dB
2,音频回放,平台PSOC3,时钟4M,0-14k实测信噪比50dB

这个最主要优势是成本低,也没有PWM的基频泄漏,同时精度很高。
在这里输出级噪声和带宽的关系是“软”的,可以用更大噪声换取更大带宽。而PWM带宽受基波频率限制,大了之后损失精确度。

使用4M的计数频率,3阶调制器,输出级采用对称恒流源结构(让IO灌电流和拉电流的能力完全相同),理论上可以在4kHz内,达到100dB的信噪比。
那些几块钱一个的24bit 96k音频DAC,有90dB以上信噪比,就是这种原理做出来的,当然内部调制器阶数更高也更复杂,具体有matlab工具箱可以设计。
http://www.mathworks.com/matlabc ... delta-sigma-toolbox
如果靠电阻阵列,很难做到16bit INL 1LSB误差,信噪比/谐波失真更是悲剧,看看TI的器件页面,16bit以上全是D-S方式的
 楼主| 发表于 2013-4-23 01:00:29 | 显示全部楼层
monkeynav 发表于 2013-4-23 00:53
倒退回了最原始的DAC结构,电阻精度无保证,输出谐波巨大。。。
LZ这种情况,应该考虑DSD方式,也就是Sigma ...

成本低于3元否?我这个成本低于3元。。。。。
发表于 2013-4-23 01:02:21 | 显示全部楼层
图片看不到哦
发表于 2013-4-23 01:10:05 | 显示全部楼层
chaily 发表于 2013-4-23 01:00
成本低于3元否?我这个成本低于3元。。。。。

你的一定到不了20dB信噪比,精度也过不了8%
电阻阵列DAC,至少应该是T形网络,尤其是电阻本身就不好的情况下。
有些开发板/古董设备的VGA输出,确实是T形网络DAC做的。

其实,3块钱可以买个很靠谱的外置DAC,一个声卡IC才5块,音频DAC也有2-3块的。

有时候,板子上就那么点空间,片子也就只剩一个引脚
这个算法,在IC合适的情况下,一下子可以变出十几个DAC
 楼主| 发表于 2013-4-23 01:12:10 | 显示全部楼层
monkeynav 发表于 2013-4-23 01:10
你的一定到不了20dB信噪比,精度也过不了8%
电阻阵列DAC,至少应该是T形网络,尤其是电阻本身就不好的情 ...

无语中。。。。。看来这位兄台没有理解莫坛的精神~~
发表于 2013-4-23 01:19:29 | 显示全部楼层
monkeynav 发表于 2013-4-23 00:53
倒退回了最原始的DAC结构,电阻精度无保证,输出谐波巨大。。。
LZ这种情况,应该考虑DSD方式,也就是Sigma ...

不是很懂,你这个是不是就是PWM加RC滤波做的DA?
发表于 2013-4-23 01:54:10 | 显示全部楼层
qwe2231695 发表于 2013-4-23 01:19
不是很懂,你这个是不是就是PWM加RC滤波做的DA?

http://www.mathworks.com/matlabcentral/fx_files/19/4/dsdemo2.gif
发表于 2013-4-23 03:24:01 来自手机 | 显示全部楼层
chaily 发表于 2013-4-23 01:12  无语中。。。。。看来这位兄台没有理解莫坛的精神~~

楼主理解了莫坛的精神,但你理解monkeynav在说什么吗?
发表于 2013-4-23 03:33:06 来自手机 | 显示全部楼层
monkeynav 发表于 2013-4-23 01:54  http://www.mathworks.com/matlabcentral/fx_files/19/4/dsdemo2.gif

我看了兄弟的图,感觉就是PWM类的DAC,总之要依赖滤波环节。你一直强调信噪比高于楼主的电路,这个我不能确定,我能确定的是同样的CPU下楼主的输出频率更高。另外,楼主的滤波和跟随太粗糙。
 楼主| 发表于 2013-4-23 08:55:17 | 显示全部楼层
本帖最后由 chaily 于 2013-4-23 09:22 编辑
Sullivan 发表于 2013-4-23 03:24
楼主理解了莫坛的精神,但你理解monkeynav在说什么吗?


monkeynav的那个早先有了解过,但我没有去研究过,不是很清楚,至于16位甚至以上的分辩率,不是什么场合都用的上。频率方面,其实我是不想用带D/A的单片机,本来带D/A的单片机也很多,只是我这个方案有几个优点,是频率改变时间短,合成速度快,可以由外部通讯改变频率控制字自由控制,主要体现的是利用函数组合输出各种波形的理念。所用的单片机是STC11系列的,工作在12MHz晶振最高输出1.8KHz的正弦波。
 楼主| 发表于 2013-4-23 09:04:13 | 显示全部楼层
monkeynav 发表于 2013-4-23 00:53
倒退回了最原始的DAC结构,电阻精度无保证,输出谐波巨大。。。
LZ这种情况,应该考虑DSD方式,也就是Sigma ...


另外,用PWM方式输出经过滤波以后变成正弦,先不说需要比较好的滤波电路,光是频率大幅度改变的时候波形失真就是个问题。而且在同等的CPU下,DSD方式输出更低的频率,我这个相当于直接合成信号,和DDS原理是接近的。
另外,也许您没搞懂,几乎所有的DAC内部,实际上完成D/A转换的还是电阻阵列,只是位数问题,用的电阻精度比较高而已。说这个8位输出谐波大只是因为位数低,上了16位以上,如果函数组写的好的,能99.99%的接近纯正弦波,而DSD方式永远做不到的喔~~~
发表于 2013-4-23 09:34:58 | 显示全部楼层
楼主能详细科普下
发表于 2013-4-23 20:55:17 | 显示全部楼层
同样cpu频率下,
DSD能得到最高信号频率可能远低于8 bit R2R模式的最高信号频率吧
发表于 2013-4-23 21:02:16 | 显示全部楼层
本帖最后由 dhbighead 于 2013-4-23 21:07 编辑

要是我刚开始学电子的时候 就会觉得monkeynav在找茬,但是现在觉得monkeynav提的更进一步的说 学习i
R 2R型的DAC阶数越高,电阻对输出的影响越大,还要受到引脚电源的影响,如果只是做DDS的话,时域上可能看不出什么问题,频域上估计就很难看了

=========================
另外,也许您没搞懂,几乎所有的DAC内部,实际上完成D/A转换的还是电阻阵列,只是位数问题,用的电阻精度比较高而已。说这个8位输出谐波大只是因为位数低,上了16位以上,如果函数组写的好的,能99.99%的接近纯正弦波,而DSD方式永远做不到的喔~~~
=========================
实际上完成D/A转换的还是电阻阵列   是吗?
发表于 2013-4-23 22:44:16 | 显示全部楼层
DSD完全和PWM不同,也和电阻阵列有根本区别
发表于 2013-4-23 22:46:18 | 显示全部楼层
权电阻。。。。
发表于 2013-4-23 22:51:20 | 显示全部楼层
N年前的方式,小日本的书里面还专门有一节教怎么配电阻的,用相同阻值的电阻按照不同排列组合获得不同比例的阻值,以及使用小阻值电阻弥补大阻值电阻误差等等等等。。。实际应用更多的是R-2R网络,可以参考本坛古大湿的一件作品。
发表于 2013-4-24 00:01:07 | 显示全部楼层
chaily      权电阻              线性受限于电阻的精度  输出频率高
monkeynav   PDM   脉冲密度调制  线性度好              输出频率低
发表于 2013-4-24 09:11:36 来自手机 | 显示全部楼层
mark   这么好的东西
发表于 2013-4-24 09:46:49 | 显示全部楼层
ordinary 发表于 2013-4-24 00:01
chaily      权电阻              线性受限于电阻的精度  输出频率高
monkeynav   PDM   脉冲密度调制  线 ...

简单搜索一下cnki或者ieee,就可以发现,PDM和Delta-Sigma根本不是一回事
不要这么快下结论

那个算法输出信号的带宽,是时钟的1/2。滤波之后,即为低通滤波器的带宽。
有时候,某些执行器不需要低通滤波器,比如电机或者扬声器,可以直接用恒流源推动
发表于 2013-4-24 11:42:56 | 显示全部楼层
楼主,这个可以拿来输出音频信号吗??效果怎么样??
 楼主| 发表于 2013-4-24 15:09:58 | 显示全部楼层
lr120363092 发表于 2013-4-24 11:42
楼主,这个可以拿来输出音频信号吗??效果怎么样??

可以输出音频信号,就是和普通的正弦波接到喇叭上的差不多,没多大意义。现在我重新改造了一下,在上面加了按键,可以调整输出的正弦波的频率,能粗调和细调,从1Hz到1800Hz范围,400Hz以下频率可以精确到个位。也可以再增加程序输出三角波,锯齿波,方波等。
 楼主| 发表于 2013-4-24 17:53:14 | 显示全部楼层
本帖最后由 chaily 于 2013-4-24 18:02 编辑

好吧,反正都是函数波,再来点奇怪的波形吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-4-24 18:09:57 | 显示全部楼层
谢楼主。
 楼主| 发表于 2013-4-24 18:12:18 | 显示全部楼层
monkeynav 发表于 2013-4-23 22:44
DSD完全和PWM不同,也和电阻阵列有根本区别

然后既然都是函数波,就再来点更更奇怪的波形,我看你DSD怎么做得出来,嘿嘿~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-4-25 09:21:49 | 显示全部楼层
chaily 发表于 2013-4-24 18:12
然后既然都是函数波,就再来点更更奇怪的波形,我看你DSD怎么做得出来,嘿嘿~

...

吐(wu)槽(zhi)不(wu)能(wei)

http://en.wikipedia.org/wiki/Super_Audio_CD
http://en.wikipedia.org/wiki/Direct_Stream_Digital

爱立信实验室的测试数据

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-4-25 20:26:42 | 显示全部楼层
monkeynav 发表于 2013-4-25 09:21
吐(wu)槽(zhi)不(wu)能(wei)

http://en.wikipedia.org/wiki/Super_Audio_CD

不知道楼上说的这个怎么用单片机实现,有详细点的资料么?
头像被屏蔽
发表于 2013-4-25 22:39:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2013-4-27 14:44:27 | 显示全部楼层
我用COWBOY的 DA电路效果不错,你这个我搭建了,效果没有你的 那么好
[img][/img]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
头像被屏蔽
发表于 2013-4-27 15:42:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2013-4-27 15:56:16 | 显示全部楼层
权电阻网络是轨到轨的,但2R网络好像不是,出来的波形在同等位数下比不上权电阻网络。但权电阻网络不足的是要使用的阻值类别太多。
 楼主| 发表于 2013-4-27 15:58:18 | 显示全部楼层
lr120363092 发表于 2013-4-27 14:44
我用COWBOY的 DA电路效果不错,你这个我搭建了,效果没有你的 那么好
[/img] ...

权电阻网络是轨到轨的,但2R网络好像不是,出来的波形在同等位数下比不上权电阻网络。但权电阻网络不好的是要使用的阻值类别太多。
头像被屏蔽
发表于 2013-4-28 12:08:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2013-4-28 18:41:35 | 显示全部楼层
chaily 发表于 2013-4-24 18:12
然后既然都是函数波,就再来点更更奇怪的波形,我看你DSD怎么做得出来,嘿嘿~

...

闲来无事,搭了个简单的电路来验证Delta-Sigma DAC的性能。
滤波网络使用的最简单的无源2阶低通RC滤波器,DAC使用的100MHz时钟,Sigma累加器使用12bit分辨率:


既然要来奇怪的波形,就来点更更更奇怪的波形吧,你看我Delta-Sigma DAC是怎么做得出来的,嘿嘿~
(1)奇怪阶梯。这相似度有没有99%?


(2)既然要YY,那就YY得更彻底一点。这细节够丰富吧?


(3)挑战一下极限,XY显示。测试一下Delta-Sigma DAC的速度。


再来点别的:
(1)100KHz正弦信号输出


(2)Delta-Sigma信号波形。看仔细了,不是PWM。


(3)100KHz信号示波器截图。可以于LZ位的180Hz的正弦波做个对比。


(4)最后是100KHz信号FFT,hanning窗。这信噪比没有60dB也至少有50dB了吧?单单这一项指标,就可以把加权电阻方案甩得不见踪影。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-5-3 16:55:58 | 显示全部楼层
mitchell 发表于 2013-4-28 18:41
闲来无事,搭了个简单的电路来验证Delta-Sigma DAC的性能。
滤波网络使用的最简单的无源2阶低通RC滤波器 ...

您好,我最近在做一个音频发生器,还在找思路中,可以共享资料给我吗?谢谢!
 楼主| 发表于 2013-5-14 10:46:47 | 显示全部楼层
本帖最后由 chaily 于 2013-5-14 10:59 编辑
mitchell 发表于 2013-4-28 18:41
闲来无事,搭了个简单的电路来验证Delta-Sigma DAC的性能。
滤波网络使用的最简单的无源2阶低通RC滤波器 ...


纯粹是位数问题,不能否定你的信噪比很高,但如果说DSD能把权电阻甩一边这个绝对不同意,你能和32位或者64位权电阻比?这么说吧,实际上要精度最高,信噪比最高要求的,如果在不计成本的情况下,恐怕还是权电阻的设计占优势喔,8位权电阻肯定是很粗糙的啦,莫坛的精神之一是用最简单原始的东西打造最艰巨或者常规认为的不可能任务,比如用51机在显示器上输出玩俄罗斯方块,或者用2个IO口输出到1602液晶显示数据,又或者用普通无D/A的51机做成一个MP3,甚至手动驱动LCD1602。这些都是一些会摆布基础元素的人玩的东西,好比用51机写模拟通讯程序,会比直接用高级MCU直接调用通讯协议的函数来得有趣~

一直对cowboy的作品很敬仰~~莫坛精神的典范~~
挑战极限(一)!小玩意,AT89C2051驱动彩显玩方块游戏 http://www.amobbs.com/forum.php? ... &highlight=2051
小玩意,单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器 http://www.amobbs.com/forum.php? ... &highlight=2051
任意2个io直接驱动LCD1602,并且不需外加芯片。 http://www.amobbs.com/forum.php? ... %B1%E5%8A%A8%2B1602
最低成本的1602 LCD驱动方式---人肉驱动 http://www.amobbs.com/forum.php? ... %B1%E5%8A%A8%2B1602
发表于 2013-5-14 11:20:04 | 显示全部楼层
chaily 发表于 2013-5-14 10:46
纯粹是位数问题,不能否定你的信噪比很高,但如果说DSD能把权电阻甩一边这个绝对不同意,你能和32位或者6 ...

你有没有发现自己的话是前后矛盾的?如果要回归到莫坛的精神上面,那么就不应该做“不计成本”的假设。DSD比8位权电阻精度/信噪比高,的确是因为位数高。但是,即使是12bit的DSD也比8位的权电阻方案成本更低或者相当。而且,增加DSD的位数轻而易举,几乎不增加成本;增加权电阻的位数难于上青天,成本极高。

另外:32位或者64位权电阻的DAC,可能整个银河系都找不到
发表于 2013-5-14 11:45:10 | 显示全部楼层
mark      
发表于 2013-5-27 10:16:07 | 显示全部楼层
chaily 发表于 2013-5-14 10:46
纯粹是位数问题,不能否定你的信噪比很高,但如果说DSD能把权电阻甩一边这个绝对不同意,你能和32位或者6 ...

即使不限成本,32位权电阻DAC也是造不出来的,更别说64位。
实际中的,电阻实现的DAC,到了16bit,INL就会超过+-2LSB
位数再多一些,不仅成本突破天际,误差也会突破天际。
高于16位的DAC,市面上出售的,仅有Delta-sigma一种类型,也就是DSD。
另外,LZ的论断“位数越高,信噪比越高”,不知道是哪里看来的高论?或者是lz自己发明的?

mitchell大侠使用了一个很有技巧的代码,就实现了低成本和高性能,没有比这更符合“莫坛精神“的了。
发表于 2013-6-6 21:34:22 | 显示全部楼层
不错阿,学习了
发表于 2013-6-11 20:43:50 | 显示全部楼层
记号,学习了
发表于 2013-6-11 21:29:55 | 显示全部楼层
楼主给了我灵感了,段式LCD估计也能用这个方法来驱动
发表于 2013-6-12 18:01:52 | 显示全部楼层
mark。。。。。。
发表于 2013-6-12 19:00:50 | 显示全部楼层
嗯嗯不错 启发思路了
发表于 2013-11-2 03:18:48 | 显示全部楼层
mitchell 大侠超NB! 学习了!
发表于 2014-5-22 02:22:48 来自手机 | 显示全部楼层
这个有点像SPWM
发表于 2014-5-22 02:42:54 来自手机 | 显示全部楼层
想了想觉得是:脉宽固定的,只改变信号的周期
发表于 2014-5-22 07:35:46 来自手机 | 显示全部楼层
怎么赶脚一个是时间换精度,一个是空间换精度
发表于 2014-6-15 17:59:20 | 显示全部楼层
建议LZ共享源码,让大家验证,更有说服力
发表于 2014-9-4 14:45:13 | 显示全部楼层
求楼主共享程序代码
发表于 2014-12-8 14:12:57 | 显示全部楼层
我这里也有一个仿真的,我看人家的可以调节幅度,用程序,但现在这个不行,请教大神调节幅度程序怎么写?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2014-12-9 22:42:33 | 显示全部楼层
monkeynav 发表于 2013-4-23 00:53
倒退回了最原始的DAC结构,电阻精度无保证,输出谐波巨大。。。
LZ这种情况,应该考虑DSD方式,也就是Sigma ...

学习下,有进一步的资料吗?
发表于 2015-9-23 15:03:57 | 显示全部楼层
mark一下
发表于 2015-9-23 15:12:08 | 显示全部楼层
买到合格的“高精度电阻”,并且质检合格此电阻,,才是DIY者的麻烦。。。
例外有个相反,买“数字电位器芯片”做输出电阻?是不是更方便?
发表于 2015-9-23 21:19:44 | 显示全部楼层
这个创意不错
发表于 2015-9-23 21:44:26 | 显示全部楼层
wkman 发表于 2015-9-23 15:12
买到合格的“高精度电阻”,并且质检合格此电阻,,才是DIY者的麻烦。。。
例外有个相反,买“数 ...

买DAC是不是更方便
发表于 2015-9-25 22:32:51 | 显示全部楼层
chaily 发表于 2013-5-14 10:46
纯粹是位数问题,不能否定你的信噪比很高,但如果说DSD能把权电阻甩一边这个绝对不同意,你能和32位或者6 ...

DSD方式不仅精度高,而且具有单调性,不要求高精度匹配的电阻网络用以实现高精度输出。
这样才是真正的莫坛精神:)虽然DSD需要比较高的时钟来驱动,而且噪声从低频到高频指数上升,但是依赖输出滤波器就可以滤除这些带外噪声。
发表于 2018-7-10 16:45:34 | 显示全部楼层
楼主,你的信号发生器的方法很新颖,很独特,能否贴出C程序,我目前在找这方面的资料,你的方法正是我要学习的,做一个出来玩玩
发表于 2018-12-11 20:48:41 | 显示全部楼层
mark   这么好的东西
发表于 2018-12-11 21:29:17 | 显示全部楼层
好玩               
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2020-2-29 10:39

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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