
开源协议
:LGPL 3.0
描述
[ TinyAWG ]
必看前言
开源协议:
LGPL 3.0
作者声明:
本项目为作者个人凭兴趣爱好制作并开源分享,并非盈利和商业目的。对于制作遇到的问题或者建议可以向作者反馈,有时间会解答。对于倒卖或抄袭剽窃等行为产生的后果作者概不负责。
项目使用了立创开源的zynq核心板,感谢大佬分享:https://oshwhub.com/z_star/zynq7020-core-board-and-various-rf-modules
成本计算:
核心板:60元(这价格是我9月份时制作的成本,使用7010芯片,后面内存大涨价那没办法了)
电源芯片一共15元,板对板连接器9元,AD9744芯片10元,OPA2673IRGVT芯片6元,信号继电器16元,MCX母座8元,屏幕63元,DAC8562SDGSR芯片7元,其他芯片和二极管等10元,阻容以15元来算
加上制作zynq核心板一共220元,其他外壳和螺丝等并不是必需的,不计入。
B站视频展示:https://www.bilibili.com/video/BV1a42QBUECC/
制作文档(一定要看,之后更新和修复都写在这文档):https://ai.feishu.cn/docx/BGycd4URIot8Aoxs3vLcBdq2nFc?from=from_copylink
项目特点
- 使用ZYNQ7010作为主控
- 采样率200MSa/s,波形点数65536(64K)
- 输出幅度10Vpp可调,偏置±5V可调,相位和频率可任意设置
- 正弦波输出3db带宽35M,单频可产生至70M以上,输出阻抗50欧
- 带宽内平坦度良好,33M前维持在2db,15M前维持在1db
- 内置基本函数和各种高级波形输出,各类波形参数可设置
- 结合上位机导入波形,手绘波形进行播放
- 自定义扫频功能
- 内置信号调制功能
系统框图

实物展示




设计说明
电源设计
正负电源轨使用两个LMR544006 DCDC芯片产生正负6.5V,输出到各模拟芯片并加上电感电容滤除纹波

电池使用宽电压充电芯片和升压芯片产生12V,路径管理用了简单的MOS管背靠背

输出级电路设计
该电路设计实际上参考的是DHO914S的AWG电路

PL(FPGA)设计
本系统使用的PL时钟为200M,为了减少面积,没有在FPGA写很多模块,写了一个简单的AXI Lite接口寄存器模块以及一个基于BRAM的流水线结构DDS

PS(ARM)设计
GUI和事件交互的逻辑太繁琐太多了,各种逻辑写了一大坨
├── src/ # 项目主源代码目录
│ ├── .cache/ # IDE缓存目录
│ │ └── clangd/ # Clangd语言服务器缓存
│ ├── .clangd # Clangd语言服务器配置文件
│ ├── .compile_commands/ # 编译命令存储目录
│ ├── CMakeLists.txt # CMake主配置文件,定义项目结构和构建规则
│ ├── Hello_worldExample.cmake # 示例CMake模块,展示项目构建配置
│ ├── UserConfig.cmake # 用户自定义CMake配置文件
│ ├── app.yaml # 应用程序配置文件
│ ├── compile_commands.json # 编译命令配置文件(同顶层)
│ ├── helloworld.c # 项目主入口文件
│ ├── lscript.ld # 链接脚本,定义内存布局和代码段分配
│ ├── platform.c # 平台抽象层实现,提供硬件无关的API
│ ├── platform.h # 平台抽象层头文件,定义API接口
│ ├── DAC8562/ # DAC8562数模转换器驱动目录
│ │ ├── DAC8562.c # DAC8562驱动实现,包含初始化和输出控制
│ │ └── DAC8562.h # DAC8562驱动头文件,定义接口和常量
│ ├── MAX17048/ # MAX17048电池监测芯片驱动目录
│ │ ├── export/ # 驱动导出文件目录
│ │ ├── max17048.c # MAX17048驱动实现,用于电池状态监测
│ │ └── max17048.h # MAX17048驱动头文件
│ ├── display/ # 显示模块目录
│ │ ├── lcd.c # LCD显示驱动实现
│ │ └── lcd.h # LCD显示驱动头文件
│ ├── gui/ # 图形用户界面目录
│ │ ├── custom.h # 自定义GUI组件定义
│ │ ├── events_init.h # GUI事件初始化头文件
│ │ ├── events_init_mod.c # 调制模式GUI事件处理
│ │ ├── events_init_normal.c # 普通模式GUI事件处理
│ │ ├── events_init_scan.c # 扫描模式GUI事件处理
│ │ ├── events_init_system.c # 系统设置GUI事件处理
│ │ ├── gui_guider.c # GUI导览器实现,管理界面切换
│ │ ├── gui_guider.h # GUI导览器头文件
│ │ ├── lv_font_ZiHunDaHei_18.c # 自定义中文字体(恣魂大黑体18号)
│ │ ├── setup_scr_mod.c # 调制模式界面设置
│ │ ├── setup_scr_normal.c # 普通模式界面设置
│ │ ├── setup_scr_scan.c # 扫描模式界面设置
│ │ ├── setup_scr_system.c # 系统设置界面设置
│ │ ├── widgets_init.c # GUI组件初始化实现
│ │ └── widgets_init.h # GUI组件初始化头文件
│ ├── hardware/ # 硬件驱动目录
│ │ ├── gpio.c # GPIO通用输入输出驱动实现
│ │ ├── gpio.h # GPIO驱动头文件
│ │ ├── i2c.c # I2C总线驱动实现
│ │ ├── i2c.h # I2C总线驱动头文件
│ │ ├── intc_timer.c # 中断控制器和定时器驱动实现
│ │ ├── intc_timer.h # 中断控制器和定时器驱动头文件
│ │ ├── spi.c # SPI总线驱动实现
│ │ ├── spi.h # SPI总线驱动头文件
│ │ ├── ws2812.c # WS2812 LED驱动实现
│ │ └── ws2812.h # WS2812 LED驱动头文件
│ ├── lvgl/ # LVGL图形库目录
│ │ ├── CMakeLists.txt # LVGL库CMake配置
│ │ ├── Kconfig # Kconfig配置文件,用于功能选择
│ │ ├── component.mk # Makefile组件配置
│ │ ├── lv_conf.h # LVGL库配置头文件
│ │ ├── lv_port_disp.c # LVGL显示端口实现
│ │ ├── lv_port_disp.h # LVGL显示端口头文件
│ │ ├── lv_port_indev.c # LVGL输入设备端口实现
│ │ ├── lv_port_indev.h # LVGL输入设备端口头文件
│ │ ├── lvgl.h # LVGL库主头文件
│ │ ├── lvgl.mk # LVGL库Makefile
│ │ └── src/ # LVGL库源代码(未展开)
│ ├── output_ctrl/ # 输出控制模块目录
│ │ ├── output_ctrl.c # 输出控制逻辑实现
│ │ ├── output_ctrl.h # 输出控制头文件
│ │ ├── user_dds.c # 用户DDS(直接数字合成)实现
│ │ └── user_dds.h # 用户DDS头文件
│ └── touch/ # 触摸控制模块目录
│ ├── ft6336.c # FT6336触摸控制器驱动实现
│ ├── ft6336.h # FT6336触摸控制器驱动头文件
│ ├── touch.c # 触摸接口实现
│ └── touch.h # 触摸接口头文件
GUI设计
采用LVGL框架,版本8.3.1。一开始使用GUI_GUIDER软件设计界面的布局,后面就脱离了这个软件,自己新增了各种控件和交互逻辑

外壳设计
分成了上下两部分,电池垫在最下面,上面挖出屏幕的口子,四周开一堆散热孔,整体连接都依赖于螺柱和上下的螺丝。推荐嘉立创3D打印,树脂嘉立创black材料。质感很好
测试
测试1MHz方波,占空比50%.示波器测量得到上升时间20.44ns

测试35MHz正弦,峰峰值1V。示波器测量得到峰峰值728mV,故3db带宽为35MHz

测试1MHz正弦。频谱得到单音信号质量

测试1-40MHz正弦信号扫频,频谱最大值保持得到迹线,3db在35MHz,带内较平坦

测试AM调制信号产生

测试扫频

参考资料
https://github.com/MatthiasElectronic/AWG_DHO8-900
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程



评论