数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 6083|回复: 67

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

    [复制链接]
发表于 2021-8-11 01:47:23 | 显示全部楼层 |阅读模式

认识众多玩家高手/拆客/DIY爱好者,查阅更多资源,一起学习技术知识

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

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

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

TIM截图20210810233620.jpg
前前后后改了三版 程序也断断续续写了好久
第一版奇怪的bug

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

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


原理图

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

TIM截图20210810234616.jpg
设计的七阶巴特沃兹低通滤波器,3dB通带带宽10MHz

AD9833_Filter.JPG

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


PCB图

TIM截图20210810233319.jpg
正面去掉了影响按按键的元件,且加上按键丝印

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

TIM截图20210810233337.jpg

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

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

Cache_-199078cffbb99575..jpg
flash区塞满证据

Cache_-53b18e1a32d31524..jpg
eepreom区还能再塞48bytes

Cache_-2160dc593dacf44a..jpg


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




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

TIM截图20210810234706.jpg

背面
TIM截图20210810234718.jpg

电源部分特写
TIM截图20210810234727.jpg

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

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

TIM截图20210810234756.jpg

开启波形输出 耗电76mA

TIM截图20210810234738.jpg

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

电池图标:
TIM截图20210810234856.jpg

直接显示电压

TIM截图20210810234903.jpg

对于强迫症,增加一个一键归零调整模式,如果频率调的很乱,想要一次性弄成整数,不再需要一位一位的去调整归零!!
普通模式下:调节编码器只改变对应位,比如依次增加编码器
TIM截图20210810235708.jpg
TIM截图20210810235715.jpg
TIM截图20210810235721.jpg
这时候长按向下键开启一键归零模式
TIM截图20210810235758.jpg

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

TIM截图20210810235813.jpg

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



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



开始说波形发生性能

一、高频性能

设置幅度2V 6MHz下显示1.9V   此时频谱非常纯净
TIM截图20210810235043.jpg

7MHz下显示1.84V
TIM截图20210810235053.jpg

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

TIM截图20210810235000.jpg

10MHz时就更明显了,幅度降到1.48Vpp,这时候镜像分量更加大了
TIM截图20210810235032.jpg

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


二、低频性能

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

TIM截图20210810235102.jpg

低频输出100Hz 幅度1.92V
TIM截图20210810235110.jpg

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

TIM截图20210810235120.jpg

低频输出30Hz 幅度1.74V
TIM截图20210810235127.jpg

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

TIM截图20210810235133.jpg

低频输出5Hz 幅度0.66V
TIM截图20210810235140.jpg



三、增益性能

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

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

0.5dB_Div.jpg

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

1dB_Div.jpg

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

  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
TIM截图20210810235218.jpg

10dBV输出
TIM截图20210810235210.jpg

6dBV输出 理论2Vpp
TIM截图20210810235151.jpg

0dBV输出 理论1Vpp
TIM截图20210810235227.jpg

-6dBV输出 理论500mVpp
TIM截图20210810235234.jpg

-12dBV输出 理论250mVpp
TIM截图20210810235243.jpg

-20dBV输出 理论100mVpp
TIM截图20210810235258.jpg

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

TIM截图20210810235320.jpg

三角波的幅度性能

TIM截图20210810235201.jpg
TIM截图20210810235426.jpg

40mV

TIM截图20210810235434.jpg


四、偏移性能

偏移0.5V
TIM截图20210810235345.jpg

偏移1V
TIM截图20210810235353.jpg

偏移2V
TIM截图20210810235400.jpg

最大偏移3.3V
TIM截图20210810235407.jpg

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

TIM截图20210810235415.jpg


四、低速高精度模式

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

长按右键切换低速模式 两个模式的频率各自保存 自动储存到EEPROM
TIM截图20210810235444.jpg

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

TIM截图20210810235502.jpg

微调增加10mHz  示波器显示999.982Hz
TIM截图20210810235601.jpg
微调增加40mHz  示波器显示1.00000KHz 满足强迫症的某些精确频率调控需求

TIM截图20210810235544.jpg

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

而高速模式则没什么问题
TIM截图20210810235646.jpg

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

TIM截图20210810235659.jpg

next


打赏

参与人数 26M币 +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 | 显示全部楼层
游客请登录后查看回复内容

打赏

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

查看全部打赏

回复 支持 2 反对 0

使用道具 举报

发表于 2021-8-11 02:18:40 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-11 02:22:48 | 显示全部楼层
游客请登录后查看回复内容

打赏

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

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-11 02:28:44 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2021-8-11 02:32:03 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 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 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:41:05 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:42:28 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:45:54 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2021-8-11 09:55:49 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2021-8-11 10:04:05 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-11 10:23:25 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-11 10:24:28 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2021-8-11 11:18:18 | 显示全部楼层
游客请登录后查看回复内容

打赏

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

查看全部打赏

回复 支持 反对

使用道具 举报

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

本版积分规则

轻APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2021-10-22 07:28 , Processed in 0.390000 second(s), 28 queries , Redis On.

Powered by Discuz!

© 2006-2021, MyDigit.cn

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