数码之家

 找回密码
 立即注册
搜索
查看: 12208|回复: 70

[工仪] 制作低成本基于AD9833的10Hz~10MHz正弦锯齿波信号发生器

    [复制链接]
发表于 2021-8-11 01:47:23 | 显示全部楼层 |阅读模式
好久没来发帖,主要是近一年实在是在太忙了,玩的东西荒废好久。这两天终于有空玩还是受yi情影响,虽然不是隔离,但是被困在家里,闲着没事索性有空填了两个坑。
第一个已经发了,算是近古坑,刚挖了只一两个月就填了:做了一个低频ID卡/门禁卡读写复制器 支持偏频:https://www.mydigit.cn/thread-268309-1-1.html

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


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


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


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


原理图

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


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



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


PCB图


正面去掉了影响按按键的元件,且加上按键丝印


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



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

输出正弦波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里面


flash区塞满证据


eepreom区还能再塞48bytes




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




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



背面


电源部分特写


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

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



开启波形输出 耗电76mA



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

电池图标:


直接显示电压



对于强迫症,增加一个一键归零调整模式,如果频率调的很乱,想要一次性弄成整数,不再需要一位一位的去调整归零!!
普通模式下:调节编码器只改变对应位,比如依次增加编码器



这时候长按向下键开启一键归零模式


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



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




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



开始说波形发生性能

一、高频性能

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


7MHz下显示1.84V


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



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


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


二、低频性能

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



低频输出100Hz 幅度1.92V


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



低频输出30Hz 幅度1.74V


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



低频输出5Hz 幅度0.66V




三、增益性能

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

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



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



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

  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


10dBV输出


6dBV输出 理论2Vpp


0dBV输出 理论1Vpp


-6dBV输出 理论500mVpp


-12dBV输出 理论250mVpp


-20dBV输出 理论100mVpp


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



三角波的幅度性能




40mV




四、偏移性能

偏移0.5V


偏移1V


偏移2V


最大偏移3.3V


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




四、低速高精度模式

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


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


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



微调增加10mHz  示波器显示999.982Hz

微调增加40mHz  示波器显示1.00000KHz 满足强迫症的某些精确频率调控需求



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


而高速模式则没什么问题


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



next


本帖子中包含更多资源

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

x

打赏

参与人数 26家元 +499 收起 理由
q562379863 + 20 大佬出品,必属精品!
jf201006 + 20 原創內容
sharehej + 15 謝謝分享
ch104517745 + 20
newnet1234 + 20 優秀文章
cushion + 20 原創內容
ljlun + 20 優秀文章
moontree + 20 謝謝分享
weizaisifang + 20 謝謝分享
benli + 20 優秀文章

查看全部打赏

本帖被以下淘专辑推荐:

 楼主| 发表于 2021-8-11 01:48:30 | 显示全部楼层
本帖最后由 2545889167 于 2021-8-11 10:23 编辑

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


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

电路板GBR文件


原理电路图


固件,基础功能



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

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

本帖子中包含更多资源

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

x

打赏

参与人数 4家元 +70 收起 理由
zhongyidiy + 10 優秀文章
benli + 20 優秀文章
jpdd521 + 20 一摘使瓜好,再摘令瓜稀。三摘尚自可,摘绝.
abigbell + 20

查看全部打赏

回复 支持 2 反对 0

使用道具 举报

发表于 2021-8-11 02:18:40 | 显示全部楼层
你的输出阻抗如果是50欧姆的话,输出幅度单位调整为dBm会更加通用点,高频信号发生器一般都是用dBm作为输出幅度的。 不过你这个频率低于10M, 估计你主要作为低频使用,那也说得过去
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-11 02:22:48 | 显示全部楼层
夜里面发帖居然没人回哎,都睡了吗

打赏

参与人数 1家元 +2 收起 理由
听雨亭 + 2 凌晨2点的夜猫子不多

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-11 02:28:44 | 显示全部楼层
go2net 发表于 2021-8-11 02:18
你的输出阻抗如果是50欧姆的话,输出幅度单位调整为dBm会更加通用点,高频信号发生器一般都是用dBm作为输出 ...

是50欧输出。不过这种低频,用不用50欧其实也没影响。其实主要还是看换算好的电压峰峰值幅度来使用了,具体用dbm还是dbv我觉得主要是个调整的时候的显示罢了
回复 支持 反对

使用道具 举报

发表于 2021-8-11 02:32:03 | 显示全部楼层
dalao又出新作了
回复 支持 反对

使用道具 举报

发表于 2021-8-11 05:32:24 来自手机浏览器 | 显示全部楼层
技术贴,顶,我玩不转
回复 支持 反对

使用道具 举报

发表于 2021-8-11 08:50:36 | 显示全部楼层
顶一下,虽然看不懂,但无疑是很牛牛的
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:07:15 | 显示全部楼层
大佬一出手就是精华
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:17:23 | 显示全部楼层
牛!                    
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:20:13 | 显示全部楼层
本帖最后由 zzy_85569381 于 2021-8-11 09:22 编辑

高科技,出套件不?再弄个矩形波就完美了
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:41:05 | 显示全部楼层
归归归归零:lol::lol::lol:
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:42:28 | 显示全部楼层
大佬这个是工作需要做的吗
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:45:54 | 显示全部楼层
:lol:看一下,不错精品。哪天不懒了可以搞一个,但是就是一个字拖。好多有板了就懒得焊。:sweat:
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:55:49 | 显示全部楼层
来膜拜大神,期待设计个低成本电池内阻仪
回复 支持 反对

使用道具 举报

发表于 2021-8-11 10:04:05 来自手机浏览器 | 显示全部楼层
给大佬献上膝盖!:lol:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-11 10:23:25 | 显示全部楼层
zzqqzzz 发表于 2021-8-11 09:42
大佬这个是工作需要做的吗

显然不是哦
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2021-8-11 10:24:28 | 显示全部楼层
zzy_85569381 发表于 2021-8-11 09:20
高科技,出套件不?再弄个矩形波就完美了

这芯片不支持哦。出来的方波幅度和别的不一样
回复 支持 反对

使用道具 举报

发表于 2021-8-11 11:18:18 | 显示全部楼层
zzy_85569381 发表于 2021-8-11 09:20
高科技,出套件不?再弄个矩形波就完美了

ad9833看了一下资料应该支持方波,就输出带宽应该很可怜,我感觉都不如正弦加一级比较器整形来的好,我买的那个dds任意波方波输出惨不忍睹~

打赏

参与人数 2家元 +30 收起 理由
ljlun + 10 还剩10m
zzy_85569381 + 20 专业

查看全部打赏

回复 支持 0 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-24 16:25 , Processed in 0.187200 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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