数码之家

标题: 制作低成本基于AD9833的10Hz~10MHz正弦锯齿波信号发生器 [打印本页]

作者: 2545889167    时间: 2021-8-11 01:47
标题: 制作低成本基于AD9833的10Hz~10MHz正弦锯齿波信号发生器
好久没来发帖,主要是近一年实在是在太忙了,玩的东西荒废好久。这两天终于有空玩还是受yi情影响,虽然不是隔离,但是被困在家里,闲着没事索性有空填了两个坑。
第一个已经发了,算是近古坑,刚挖了只一两个月就填了:做了一个低频ID卡/门禁卡读写复制器 支持偏频:https://www.mydigit.cn/thread-268309-1-1.html

本帖这个是个中古坑,挖了一年多,可算填了。还要好多远古坑不知道要什么时候有空填了,最近管kong开始逐步解除了,又得忙起来板砖干活了。
挖坑时间在一年半前
去年三月就开始画PCB了

[attach]1244520[/attach]
前前后后改了三版 程序也断断续续写了好久
第一版奇怪的bug

[attach]1244521[/attach]
第二版因为没有低功耗 设置关闭波形输出的时候整个升压系统和模拟系统都在供电,所以在电池应用里面实在是受不住

[attach]1244519[/attach]
最终的第三版 又完全重新改了电源系统,加了电源路径管理 支持插外部电源时整体由外部电源供电,且在无波形输出时切断整个模拟域


原理图

考虑到25MHz的有源晶振价格比较高,所以使用了STM8的HSE作为晶振振荡器,直接给STM8超频连接25MHz的晶振,使用CKO时钟输出给AD9833提供时钟
这样25MHz无源晶振就非常便宜了,当然需要高精度的频率的话,PCB上也预留了有源晶振的位置
而STM8内部为了防止跑飞(实际上实测CPU直接跑26MHz也没什么事),CPU工作在25MHz/8=3.125MHz的频率,而外设全部工作在25MHz。

[attach]1244522[/attach]
设计的七阶巴特沃兹低通滤波器,3dB通带带宽10MHz

[attach]1244512[/attach]

因为设计就是低成本向的,元件选取上整体成本已经非常低了,整个上面最贵的就是AD9833主核心,模拟器件全是买拆机货,一两元还包邮。其他的东西都是东拼西凑拆的。屏幕是某垃圾店卖的IIC屏幕,当时买了10片一直没用


PCB图

[attach]1244517[/attach]
正面去掉了影响按按键的元件,且加上按键丝印

[attach]1244516[/attach]
背面电源管理完全重做 本来是不想用0402元件的
实在塞不下没办法只得用了 ,还用了sod302的小二极管 sot323的小三极管

[attach]1244518[/attach]

实现的参数
支持波形:正弦波、锯齿波

输出正弦波3dB带宽:10Hz~10MHz
实际波形较好带宽:高速模式20Hz~8MHz 低速模式20Hz~10KHz
频率分辨率:高速模式0.1Hz 低速模式0.01Hz
频率精度:取决于晶振
数控可调幅度:-28dBV~+12dBV 相当于40mVpp~4Vpp ---》100倍可调范围
幅度调节步进:0.1dBV
数控可调偏移:-3.3V~+3.3V
偏移调节步进:0.01V


程序前前后后写了很久,最后这几天一口气写完了,极限优化下,把STM8的瘦小8K容量塞的满满当当一点不剩(当然再优化优化榨一榨还有可能在优化出一两百个bytes把)
flash占用刚好8192bytes 其中程序7Kb,字库1.5Kb。字库剩下的576bytes塞在容量640byte的EEPROM里面

[attach]1244515[/attach]
flash区塞满证据

[attach]1244513[/attach]
eepreom区还能再塞48bytes

[attach]1244514[/attach]


-----------------我是分割线--------------------




实物 做了两个 正面 其中有一个屏幕还没贴胶

[attach]1244523[/attach]

背面
[attach]1244524[/attach]

电源部分特写
[attach]1244525[/attach]

开机后页面:依次显示频率、系统电压、幅度、偏移、波形类型

开机不开波形输出时:耗电16mA

[attach]1244527[/attach]

开启波形输出 耗电76mA

[attach]1244526[/attach]

专门绘制的电池图标,长按最右边按键切换(自动记忆,下次上电保持设置)

电池图标:
[attach]1244528[/attach]

直接显示电压

[attach]1244529[/attach]

对于强迫症,增加一个一键归零调整模式,如果频率调的很乱,想要一次性弄成整数,不再需要一位一位的去调整归零!!
普通模式下:调节编码器只改变对应位,比如依次增加编码器
[attach]1244573[/attach]
[attach]1244574[/attach]
[attach]1244575[/attach]
这时候长按向下键开启一键归零模式
[attach]1244576[/attach]

再拧一格编码器,所有低于调整位的位数全部归零!!!强迫症福音有没有!!!!

[attach]1244577[/attach]

甚至可以直接拧出9999999!而不需要在普通模式下一位一位的去调
[attach]1244578[/attach]



-----------------------------我是分割线---------------------------



开始说波形发生性能

一、高频性能

设置幅度2V 6MHz下显示1.9V   此时频谱非常纯净
[attach]1244536[/attach]

7MHz下显示1.84V
[attach]1244537[/attach]

9MHz下已经可以看到起伏 ,幅度降到1.68Vpp,可以看到没滤干净的第二奈奎斯特区镜像频率分量了

[attach]1244534[/attach]

10MHz时就更明显了,幅度降到1.48Vpp,这时候镜像分量更加大了
[attach]1244535[/attach]

所以高频段虽然说DAC可以到二分之一采样率的输出,但是鉴于滤波器的过渡带宽度,其实一般只用到25MHz/3=8MHz以下的频率,保证三个以上采样点输出的正弦波效果才会好。


二、低频性能

由于AD9833单端输出转AD603差分输入有偏置的原因,所以在信号处理电路中加了一个隔直电容,虽然带宽已经非常小了,但是还是有影响
具体测得3dB带宽在10Hz
低频输出200Hz 幅度1.92V

[attach]1244538[/attach]

低频输出100Hz 幅度1.92V
[attach]1244539[/attach]

低频输出50Hz 幅度1.84V 开始有所下降 但是并不影响

[attach]1244540[/attach]

低频输出30Hz 幅度1.74V
[attach]1244541[/attach]

低频输出10Hz 幅度1.1V 达到-3dB

[attach]1244542[/attach]

低频输出5Hz 幅度0.66V
[attach]1244543[/attach]



三、增益性能

用AD603控制增益,增益可调范围为40dB,也就是100倍,基本上足够日常使用
幅度可调:-28dBV~+12dBV 相当于40mVpp~4Vpp
实际上由于AD603增益还是有些差异,所以我做的两个一个最高输出4V,一个只有3.6V。这种需要校准调整下,不属于原理问题,此处不详述

由于AD603是对数增益调整,所以实际调整显示的dB,在使用上有些反人类,所以要转换到电压显示。
让stm8这种小身板计算对数实在是过于为难 且对数库需要占用非常多空间,所以研究了下决定用线性插值。
打开matlab
画了下线性插值间距造成的误差
0.5dB插值间隔 到+12dBV误差可以控制在2mV以内

[attach]1244510[/attach]

1dB插值间隔 到+12dBV误差可以控制在8mV以内。
实际上在高幅度区显示的是x.xxV,分辨率到10mV,所以用1dB间隔,精度也够了。低幅度区,更不影响了。
毕竟几mV的显示误差不值当浪费多一倍的空间

[attach]1244511[/attach]

附上生成线性插值数组的代码:

  1. clc
  2. clear all

  3. begin_dBV = -40;
  4. end_dB = +20;
  5. dBV_Lin_0P5 = begin_dBV:1:end_dB;
  6. dBV_Lin_0P1 = begin_dBV:0.1:end_dB;

  7. mV_Lin_0P5 =  10.^(dBV_Lin_0P5/20) *1000;
  8. mV_Lin_0P1 =  10.^(dBV_Lin_0P1/20) *1000;

  9. Test_mV_Lin_0P5 = round(mV_Lin_0P5*10);
  10. Test_mV_Lin_0P1 = interp1(dBV_Lin_0P5,Test_mV_Lin_0P5,dBV_Lin_0P1,'linear');

  11. figure
  12. plot(dBV_Lin_0P1,mV_Lin_0P1-Test_mV_Lin_0P1/10);
  13. title('线性插值的误差');
  14. xlabel('输入对数电压 dBV');
  15. ylabel('输出误差 mV');


  16. fid=fopen('dB_data.txt','wt');
  17. fprintf(fid,'%g,',Test_mV_Lin_0P5);
  18. fclose(fid);
复制代码


以1KHz输出为例测试输出幅度调节

12dBV输出 理论4Vpp
[attach]1244547[/attach]

10dBV输出
[attach]1244546[/attach]

6dBV输出 理论2Vpp
[attach]1244544[/attach]

0dBV输出 理论1Vpp
[attach]1244548[/attach]

-6dBV输出 理论500mVpp
[attach]1244549[/attach]

-12dBV输出 理论250mVpp
[attach]1244550[/attach]

-20dBV输出 理论100mVpp
[attach]1244551[/attach]

-28dBV输出 理论40mVpp 还是有一些噪声的
显示示波器频率计显示是不准的 因为这垃圾示波器他触发不了了
注意到由于运放的电压失调和PWM的精度问题,实际上这里的基线平均值为19mV (校准可以解决)

[attach]1244552[/attach]

三角波的幅度性能

[attach]1244545[/attach]
[attach]1244558[/attach]

40mV

[attach]1244559[/attach]


四、偏移性能

偏移0.5V
[attach]1244553[/attach]

偏移1V
[attach]1244554[/attach]

偏移2V
[attach]1244555[/attach]

最大偏移3.3V
[attach]1244556[/attach]

在最大偏移的时候开最大幅度是会出现削顶失真的 (因为顶到了电源轨) 使用时需要注意

[attach]1244557[/attach]


四、低速高精度模式

由于在25MHz的时钟下输出频率分辨率只有约0.1Hz,所以如果给AD9833以25MHz的八分频时钟,可以得到约0.01Hz的分辨率
长按左键切换高速模式
[attach]1244561[/attach]

长按右键切换低速模式 两个模式的频率各自保存 自动储存到EEPROM
[attach]1244560[/attach]

在低速模式下可以实现频率微调
比如现在示波器显示999.970Hz

[attach]1244562[/attach]

微调增加10mHz  示波器显示999.982Hz
[attach]1244567[/attach]
微调增加40mHz  示波器显示1.00000KHz 满足强迫症的某些精确频率调控需求

[attach]1244566[/attach]

当然低速模式也有问题,由于没有低通滤波器滤除第二奈奎斯特区的频率分量
大于10Khz的时候就不能用了,所以需要注意适用范围
比如低速模式100KHz,可以看到清晰的采样点
[attach]1244570[/attach]

而高速模式则没什么问题
[attach]1244571[/attach]

低速模式降低到10KHz,则没什么问题

[attach]1244572[/attach]

next



作者: 2545889167    时间: 2021-8-11 01:48
本帖最后由 2545889167 于 2021-8-11 10:23 编辑

套件暂时不考虑,别问了。屏幕只买了10片,不够做套件的。而且时间精力也折腾不起


本设计是开放电路板工程文件和固件:
不过总的来说 我觉得应该没多少玩家 毕竟工程巨大,且比较复杂 调试起来也需要很多设备(至少得有示波器吧) 要的知识储备也不少

电路板GBR文件
[attach]1244584[/attach]

原理电路图
[attach]1244585[/attach]

固件,基础功能
[attach]1244586[/attach]


此处约法三章:
1、严禁用于商业用途(包括不限于闲鱼等有偿出售、论坛赚积分)仅供学习和交流。一旦发现有人用于商业用途,追查到底!
2、拒绝伸手党,下载附件请猛砸m币,如果没有m币的,请积极回帖。不要下载了东西,跟没来过似的~
3、希望大家使用以后 有bug及时反馈 有好的意见 想法 欢迎提出来

一摘使瓜好,再摘令瓜稀。三摘尚自可,摘绝抱蔓归。

作者: go2net    时间: 2021-8-11 02:18
你的输出阻抗如果是50欧姆的话,输出幅度单位调整为dBm会更加通用点,高频信号发生器一般都是用dBm作为输出幅度的。 不过你这个频率低于10M, 估计你主要作为低频使用,那也说得过去
作者: 2545889167    时间: 2021-8-11 02:22
夜里面发帖居然没人回哎,都睡了吗
作者: 2545889167    时间: 2021-8-11 02:28
go2net 发表于 2021-8-11 02:18
你的输出阻抗如果是50欧姆的话,输出幅度单位调整为dBm会更加通用点,高频信号发生器一般都是用dBm作为输出 ...

是50欧输出。不过这种低频,用不用50欧其实也没影响。其实主要还是看换算好的电压峰峰值幅度来使用了,具体用dbm还是dbv我觉得主要是个调整的时候的显示罢了
作者: 无语·回忆    时间: 2021-8-11 02:32
dalao又出新作了
作者: 649850    时间: 2021-8-11 03:00
大佬巨制
作者: azhen    时间: 2021-8-11 05:32
技术贴,顶,我玩不转
作者: zzs09    时间: 2021-8-11 08:50
顶一下,虽然看不懂,但无疑是很牛牛的
作者: beiling    时间: 2021-8-11 09:07
大佬一出手就是精华
作者: leifeng    时间: 2021-8-11 09:17
牛!                    
作者: zzy_85569381    时间: 2021-8-11 09:20
本帖最后由 zzy_85569381 于 2021-8-11 09:22 编辑

高科技,出套件不?再弄个矩形波就完美了

作者: zzqqzzz    时间: 2021-8-11 09:41
归归归归零:lol::lol::lol:
作者: zzqqzzz    时间: 2021-8-11 09:42
大佬这个是工作需要做的吗
作者: gl542400    时间: 2021-8-11 09:45
:lol:看一下,不错精品。哪天不懒了可以搞一个,但是就是一个字拖。好多有板了就懒得焊。:sweat:
作者: west001    时间: 2021-8-11 09:55
来膜拜大神,期待设计个低成本电池内阻仪
作者: kirsuze    时间: 2021-8-11 10:04
给大佬献上膝盖!:lol:
作者: 2545889167    时间: 2021-8-11 10:23
zzqqzzz 发表于 2021-8-11 09:42
大佬这个是工作需要做的吗

显然不是哦
作者: 2545889167    时间: 2021-8-11 10:24
zzy_85569381 发表于 2021-8-11 09:20
高科技,出套件不?再弄个矩形波就完美了

这芯片不支持哦。出来的方波幅度和别的不一样
作者: qrut    时间: 2021-8-11 11:18
zzy_85569381 发表于 2021-8-11 09:20
高科技,出套件不?再弄个矩形波就完美了

ad9833看了一下资料应该支持方波,就输出带宽应该很可怜,我感觉都不如正弦加一级比较器整形来的好,我买的那个dds任意波方波输出惨不忍睹~
作者: 冷雪飞    时间: 2021-8-11 12:25
学习了,好贴,超详细的介绍,楼主辛苦,真如楼主所说,工程说大不大说小不小,其所需设备小玩家可能都不具备,也只好看看了
作者: 8139    时间: 2021-8-11 15:23
看上楼主的普源了:lol:
作者: 8139    时间: 2021-8-11 15:23
qrut 发表于 2021-8-11 11:18
ad9833看了一下资料应该支持方波,就输出带宽应该很可怜,我感觉都不如正弦加一级比较器整形来的好,我买 ...

球球的dds是哪个型号的?
作者: qrut    时间: 2021-8-11 15:32
8139 发表于 2021-8-11 15:23
球球的dds是哪个型号的?

这款https://www.mydigit.cn/thread-71-1-1.html
作者: maijinzhi    时间: 2021-8-11 15:41
总体成本还不算贵,ad9833也就十几块钱,单片机不是常用型号
作者: 石墨    时间: 2021-8-11 16:57
高科技精华贴
   
楼主在昌平?
作者: 我不是小连    时间: 2021-8-11 17:47
期待有成品可购买的
作者: gu_572101993    时间: 2021-8-11 19:06
连硬件带软件一起玩的,就是牛人,此贴必顶。
作者: mhtlov    时间: 2021-8-11 19:41
这个坑,非常伟大
作者: 8139    时间: 2021-8-11 19:54
石墨 发表于 2021-8-11 16:57
高科技精华贴
   
楼主在昌平?

然后准备上门自提一个?:lol:
作者: ploestar    时间: 2021-8-11 20:00
好牛逼的样子
作者: huig    时间: 2021-8-11 21:51
不错不错,非常棒的设计,留存备用以便需要谢谢
作者: 2545889167    时间: 2021-8-11 22:57
maijinzhi 发表于 2021-8-11 15:41
总体成本还不算贵,ad9833也就十几块钱,单片机不是常用型号

这个单片机是红遍大江南北的stm8s103/003的马甲呀!
作者: 2545889167    时间: 2021-8-11 23:01
qrut 发表于 2021-8-11 11:18
ad9833看了一下资料应该支持方波,就输出带宽应该很可怜,我感觉都不如正弦加一级比较器整形来的好,我买 ...

这个芯片输出的正弦和锯齿波幅度是0~0.6V.但是输出方波是0~3.3V.根本没法在后级处理里面统一
作者: qrut    时间: 2021-8-11 23:05
2545889167 发表于 2021-8-11 23:01
这个芯片输出的正弦和锯齿波幅度是0~0.6V.但是输出方波是0~3.3V.根本没法在后级处理里面统一 ...

统一了也没用,带宽必定及其有限~
作者: 2545889167    时间: 2021-8-12 01:32
qrut 发表于 2021-8-11 23:05
统一了也没用,带宽必定及其有限~

没必要强行追求高频的方波 一般都是正弦波的十分之一以下才好用
作者: ws1-1    时间: 2021-8-12 04:43
谢谢分享!
作者: rogerllg    时间: 2021-8-12 12:47
又出大作了,赞~
作者: hzw6834    时间: 2021-8-12 12:49
工程巨大,一个字:牛
作者: haohaott    时间: 2021-8-12 16:47
你好砖家,请问能搞成1500MHz的么?
作者: 2545889167    时间: 2021-8-12 22:05
haohaott 发表于 2021-8-12 16:47
你好砖家,请问能搞成1500MHz的么?

显然不能哦
作者: jlhgold    时间: 2021-8-13 08:53
可以考虑加个比较器 这样能输出方波:lol:
作者: cat_li    时间: 2021-8-14 12:35
这个厉害了
作者: 2545889167    时间: 2021-8-15 14:47
jlhgold 发表于 2021-8-13 08:53
可以考虑加个比较器 这样能输出方波

这样就需要多路选择器了,模拟部分会弄得很复杂
作者: ljlun    时间: 2021-8-15 15:14
做得相当不错,网上撸过任意波形发生器,就是贵点
作者: 安徽亳州电子    时间: 2021-8-17 08:28
这个低频做次声波武器不错,外加信号放大功率驱动后直接秒掉广场舞聚集,而且神不知鬼不觉。
作者: ch104517745    时间: 2021-8-18 16:32
这个手艺。真不错哦。
作者: 阿赖    时间: 2021-8-18 18:16
太牛了,怎么学习这些知识呢?
作者: 2545889167    时间: 2021-8-18 21:59
安徽亳州电子 发表于 2021-8-17 08:28
这个低频做次声波武器不错,外加信号放大功率驱动后直接秒掉广场舞聚集,而且神不知鬼不觉。 ...

哈哈哈哈 有点用
作者: 2545889167    时间: 2021-8-18 22:01
阿赖 发表于 2021-8-18 18:16
太牛了,怎么学习这些知识呢?

千古电路一大抄
作者: sharehej    时间: 2021-8-19 09:55
楼主牛逼!期待早日出套件!:praise:
作者: 小兔乖乖呢    时间: 2021-8-19 12:24
腻害,辛苦写这么详细了
作者: szset99    时间: 2021-8-19 16:03
如果没有m币的,请积极回帖
作者: keye    时间: 2021-8-19 17:03
漂亮,图文并茂
作者: liangxin22    时间: 2021-8-19 18:16
这种可以用于步进电机的控制吗:loveliness:
作者: 2545889167    时间: 2021-8-21 00:32
liangxin22 发表于 2021-8-19 18:16
这种可以用于步进电机的控制吗

不可以哦,步进电机控制可比这个简单多了
作者: 2545889167    时间: 2021-8-22 13:38
sharehej 发表于 2021-8-19 09:55
楼主牛逼!期待早日出套件!

套件就算了,屏幕没备货
作者: wlxpc    时间: 2021-8-24 11:27
请教下楼主, U6B AD8042的作用主要是考虑做隔离输出吗? 还是有其他设计考虑?
VPOS和VGAIN的设计: 这颗MCU的规格书貌似没看到有DAC?  请问是用PWM调占空比实现的吗? PWM频率设为多少比较合适??
作者: 2545889167    时间: 2021-8-24 15:52
wlxpc 发表于 2021-8-24 11:27
请教下楼主, U6B AD8042的作用主要是考虑做隔离输出吗? 还是有其他设计考虑?
VPOS和VGAIN的设计: 这颗MCU的 ...

ad8042用来加偏置电压。
用的pwm 速度10k
作者: zhaocz    时间: 2021-8-25 00:31
太牛了,就是M币受不起啊。
作者: wlxpc    时间: 2021-8-25 10:25
2545889167 发表于 2021-8-24 15:52
ad8042用来加偏置电压。
用的pwm 速度10k

加偏置电压只要U6A就行了吧, 后面还加了一个U6B, 是为了隔离+反向吗?
作者: caohuihu    时间: 2021-8-28 00:09
666666厉害。。。
作者: 超强电子科技    时间: 2021-8-28 10:11
好东西  学习了  :lol::lol:
作者: dos565    时间: 2021-8-29 23:15
牛!:praise:
作者: ATOP设计幸福    时间: 2021-8-30 10:04
虽然看不懂,感觉还是很高大上的:praise::praise::praise:
作者: 2545889167    时间: 2021-8-30 23:43
wlxpc 发表于 2021-8-25 10:25
加偏置电压只要U6A就行了吧, 后面还加了一个U6B, 是为了隔离+反向吗?

主要是剩着一路运放也没处用,就干脆把反向反回来了
作者: djloory    时间: 2021-8-31 01:45
学习了,楼主大神级人物啊!
作者: 2545889167    时间: 2021-9-16 10:07
dos565 发表于 2021-8-29 23:15
牛!

感谢支持
作者: Facbit    时间: 2023-4-10 16:59
太猛了,学习一下

作者: 309919807    时间: 2023-12-23 15:42
厉害哦
作者: wfy2008    时间: 2024-2-6 17:14
大佬是全能型选手,啥都会。!
作者: 张大虾    时间: 2024-12-7 16:16
真的很使用,感谢哥哥





欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4