数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 15670|回复: 71

[工仪] 制作低成本基于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: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 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 22:57:42 | 显示全部楼层
maijinzhi 发表于 2021-8-11 15:41
总体成本还不算贵,ad9833也就十几块钱,单片机不是常用型号

这个单片机是红遍大江南北的stm8s103/003的马甲呀!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-11 23:01:43 | 显示全部楼层
qrut 发表于 2021-8-11 11:18
ad9833看了一下资料应该支持方波,就输出带宽应该很可怜,我感觉都不如正弦加一级比较器整形来的好,我买 ...

这个芯片输出的正弦和锯齿波幅度是0~0.6V.但是输出方波是0~3.3V.根本没法在后级处理里面统一
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 01:32:53 | 显示全部楼层
qrut 发表于 2021-8-11 23:05
统一了也没用,带宽必定及其有限~

没必要强行追求高频的方波 一般都是正弦波的十分之一以下才好用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 22:05:47 | 显示全部楼层
haohaott 发表于 2021-8-12 16:47
你好砖家,请问能搞成1500MHz的么?

显然不能哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-15 14:47:38 | 显示全部楼层
jlhgold 发表于 2021-8-13 08:53
可以考虑加个比较器 这样能输出方波

这样就需要多路选择器了,模拟部分会弄得很复杂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 21:59:27 | 显示全部楼层
安徽亳州电子 发表于 2021-8-17 08:28
这个低频做次声波武器不错,外加信号放大功率驱动后直接秒掉广场舞聚集,而且神不知鬼不觉。 ...

哈哈哈哈 有点用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 22:01:18 | 显示全部楼层
阿赖 发表于 2021-8-18 18:16
太牛了,怎么学习这些知识呢?

千古电路一大抄
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-21 00:32:09 | 显示全部楼层
liangxin22 发表于 2021-8-19 18:16
这种可以用于步进电机的控制吗

不可以哦,步进电机控制可比这个简单多了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-22 13:38:12 | 显示全部楼层
sharehej 发表于 2021-8-19 09:55
楼主牛逼!期待早日出套件!

套件就算了,屏幕没备货
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-24 15:52:41 | 显示全部楼层
wlxpc 发表于 2021-8-24 11:27
请教下楼主, U6B AD8042的作用主要是考虑做隔离输出吗? 还是有其他设计考虑?
VPOS和VGAIN的设计: 这颗MCU的 ...

ad8042用来加偏置电压。
用的pwm 速度10k
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-30 23:43:19 | 显示全部楼层
wlxpc 发表于 2021-8-25 10:25
加偏置电压只要U6A就行了吧, 后面还加了一个U6B, 是为了隔离+反向吗?

主要是剩着一路运放也没处用,就干脆把反向反回来了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-16 10:07:02 | 显示全部楼层

感谢支持
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-24 16:18 , Processed in 0.280801 second(s), 16 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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