
低频函数信号发生器(四通道,占空比幅值波形频率可调)
简介
本设计采用 “单片机 + DAC” 方案开发多通道低频函数信号发生器:通过TIMER定时器触发 DMA 与 DAC 转换,结合参数化数组控制波形,实现 4 路独立输出
简介:本设计采用 “单片机 + DAC” 方案开发多通道低频函数信号发生器:通过TIMER定时器触发 DMA 与 DAC 转换,结合参数化数组控制波形,实现 4 路独立输出开源协议
:GPL 3.0
描述
广州中医药大学
医学信息工程学院
项目设计报告
题目: 低频函数信号发生器(A)
完成日期: 2026 年 1 月 7 日
引 言
低频函数信号发生器是电子测试领域的基础设备,但传统方案存在明显局限:专用信号芯片(如 ICL8038、MAX038)需依赖可调电阻调节参数,多通道场景下操作繁琐;低成本 DDS 模块难以实现占空比调节与多波形输出,高性能 DDS 则成本过高。
为此,本设计采用 “单片机 + DAC” 方案开发多通道低频函数信号发生器:通过TIMER定时器触发 DMA 与 DAC 转换,结合参数化数组控制波形,实现 4 路独立输出(0.30~3.00V 幅值、0.1~50kHz 频率、0~100% 占空比),支持正弦波、双向锯齿波、方波、三角波共 5 种波形。该方案兼顾了操作便捷性、功能完整性与成本可控性,可满足多支路电路同步测试的实际需求。
第1章 设计过程
1.1 项目总体介绍
本项目以 “低成本、多通道、易操作” 为目标,开发一款基于单片机 + DAC 方案的低频函数信号发生器,用于满足电子电路调试中的多支路同步信号激励需求。
设备以STM32G431CBU6为主控,通过单片机定时器触发 DMA 传输与 DAC 转换,结合预定义波形数组实现信号生成,具备 4 路独立输出通道,支持 0.30~3.00V 幅值、0.1~50kHz 频率、0~100% 占空比的精准调节,可输出正弦波、双向锯齿波、方波、三角波共 5 种波形。
用户既可通过 OLED 屏幕与旋转编码器+按键 进行本地交互,也可通过 Type-C 接口连接上位机,实现远程参数设置与控制。
相比传统信号芯片(需多电位器调节)与高成本 DDS 方案,本设计通过软件参数化控制替代硬件调节,既简化了操作流程,又在控制成本的同时实现了多通道、多波形的功能需求,适配多支路电路同步测试等场景。
1.2 子系统与工作原理
1.2.1 硬件系统原理图设计
(1)主控模块
主控采用 STM32G431CBU6 单片机,基于 Cortex-M4 内核,主频高达 170MHz,内置 12 位双通道 DAC、多路定时器和通信接口(UART、I²C),用于波形生成、参数调节与外设控制。
核心外围电路包括:25MHz 晶振,用于提供高精度时钟;复位电,路确保可靠启动;BOOT0 拨码开关;SWD 调试接口,用于程序烧录与调试。

(2)供电与电源隔离模块
系统通过 Type-C 接口输入 5V 电源,经 LDO 芯片 TPLP2992M5X-3.3 降压至 3.3V 后,通过0Ω 电阻 + 10μH 电感隔离为数字电源(给单片机、OLED 等数字模块供电)与模拟电源(给运放、基准源等模拟模块供电),避免数字电路干扰模拟信号精度。

模拟电源再给 REF5025AIDR 芯片供电,生成 2.5V 精准基准电压,作为 DAC 数模转换的参考电压,保证输出信号的幅值精度。

(3)控制与通信模块
通信链路:上位机通过 Type-C 接口发送 USB 信号,经 CH343P 芯片转换为 UART(TTL 电平)信号,与单片机进行串行通信,实现数据交互。

本地交互模块:单片机采用 I²C 协议与 SSD1306 OLED 显示屏通信,实现通道、波形类型、频率、占空比、幅值等参数的显示与调节。
通过 2 个定时器配置为捕获模式,捕获编码器脉冲信号,结合 2 个按键实现本地参数的快捷调节;Green LED 用于指示系统运行状态,Red LED 用于指示电源通断状态。



(4)信号输出模块
单片机 DAC 引脚输出的原始信号,送入 TLV9152IDR 轨到轨双路运放:其中一路作为电压跟随器稳定信号,另一路将电压映射至固定范围,使输出电流达到至少20mA,最终通过射频接口输出0.30~3.00V 的目标信号。

(5)PCB设计
本项目 PCB 采用四层板设计,相比双层板进一步提升电源稳定性与信号完整性,更适配多通道模拟信号与数字信号混合的系统需求;同时为简化焊接工艺、降低调试难度,所有元器件均布局于 PCB 正面,实现 “单面操作、全面功能” 的设计目标。具体设计如下:
a.功能分区与操作习惯适配设计
将相同功能的元器件集中布局,避免跨区域操作,用户高频操作的控件放在 PCB易触且集中的区域。

b.电源系统:数字 / 模拟隔离设计
将 PCB 划分为数字电源区和模拟电源区,中间用 0Ω 电阻或 10μH 电感连接,实现电源隔离,避免数字电路开关噪声干扰模拟信号;模拟区、数字区保留40mil覆铜距离;模拟地、数字地在 PCB 单点汇接到电源地平面,避免地环路。

c.模拟信号链路
DAC 输出引脚到运放输入引脚的走弧线,远离数字信号走线,走线两旁打GND过孔进行隔离;运放下区域挖空,保证信号完整性。

(6)原理图


1.2.2 单片机软件设计
本项目软件系统基于STM32 HAL库开发,采用模块化设计思想,各功能模块独立封装,通过清晰的数据接口进行交互。软件架构主要分为以下几个核心模块:
(1)主程序框架与任务调度
初始化阶段:
a.HAL库初始化、系统时钟配置;
b.外设初始化:GPIO、DMA、DAC、定时器、UART、I2C等;
c.编码器定时器、串口中断接收;
d.OLED显示初始化;
e.设置初始默认波形参数。
主循环任务(按优先级顺序执行):

(2)核心波形生成机制

a.波形数据预计算:
根据波形类型、幅值、占空比,预先计算一个周期的波形数据点
数据点存储在uint16_t数组中(12位DAC分辨率,范围0-4095)
支持5种波形:
正弦波:使用ARM DSP库的arm_sin_f32()函数高效计算
方波:根据占空比设置高/低电平点数
三角波:可调占空比的线性上升/下降
锯齿波:两种方向(上升/下降)
b.频率精确控制算法:
关键公式:输出频率 = 定时器时钟 / [(PSC+1) × (ARR+1) × 数组长度]

动态数组长度调整:根据目标频率(0.1Hz-50kHz)自动优化波形
数组长度
高频→短数组(最小32点):减少DMA传输延迟
低频→长数组(最大1024点):提高波形分辨率
智能参数搜索:在16位寄存器限制内(PSC、ARR ≤ 65535)寻找最优组合
误差最小化:通过遍历算法找到频率误差最小的参数组合
c.硬件触发流程:

d.多通道独立管理
每个输出通道对应一个独立的数据结构:

为实现 4 路输出通道的完全独立控制,软件层面设计了通道参数结构体(FunStruct),将单通道运行所需的全部参数与硬件资源句柄进行封装,确保每一路通道的波形生成、参数调节、硬件驱动均互不干涉。该结构体核心设计逻辑为:基础参数独立存储、历史状态独立缓存、硬件资源独立映射。
(3)用户交互系统
软件层面围绕 OLED 显示模块、双编码器 + 双按键硬件,设计了分层化、智能化的交互逻辑,核心分为 OLED 显示控制与编码器 / 按键输入处理两大子模块。
a.OLED 显示模块
OLED 显示模块基于 I²C 通信协议与主控单片机交互,软件设计核心围绕 “双模式界面 + 动态交互 + 实时同步” 展开,确保用户操作与视觉反馈的一致性:
① 双模式界面逻辑设计
浏览模式:作为系统默认界面模式,用于全局展示 4 路通道的核心运行参数(通道编号、波形类型、频率、占空比、幅值)。
编辑模式:仅在用户触发 “参数编辑” 指令后激活,用于精准修改单个参数的数值。
② 平滑动画交互设计
为提升操作的视觉体验,软件在参数切换设计了反选动画效果,替代传统的整屏刷新方式
③ 显示与参数实时同步机制
为杜绝 “显示参数” 与 “实际输出参数” 不一致的问题,软件设计了毫秒级实时同步逻辑:同步触发条件、同步执行逻辑

b.编码器与按键处理
针对 “双编码器 + 双按键” 的硬件布局,软件采用 “功能分工 + 智能防误触” 的设计思路,通过差异化的功能定义和算法优化,兼顾操作效率与准确性:
①双编码器功能分工设计
右编码器:核心承担 “参数选择” 与 “数值调节” 功能,适配两种界面模式:在浏览模式下,旋转右编码器可循环切换选中的参数项;在编辑模式下,旋转右编码器可修改当前高亮数字位的数值。
左编码器:核心承担 “数字位切换” 与 “快捷操作” 功能,仅在编辑模式下生效:旋转左编码器可切换当前高亮的数字位
②双按键功能定义
理按键(KEY1、KEY2)作为模式切换与指令确认的核心,功能设计贴合用户操作习惯,逻辑清晰且无冗余:
左键(KEY1):核心功能为 “确认 / 退出”
右键(KEY2):核心功能为 “进入编辑 / 切换精度”
③智能消抖算法设计
为解决机械编码器 / 按键因物理抖动导致的误触发问题,软件摒弃传统的 “固定延时消抖” 方案,采用状态机消抖算法,提升输入识别的准确性。

c.串口通信协议
(1)帧格式定义
为简化解析逻辑、提升传输效率,协议采用9 字节固定长度帧结构,具体帧结构如下:
|
字节位置 |
功能定义 |
编码规则 |
|---|---|---|
|
1 |
帧头 |
固定为 0x55 |
|
2 |
通道 |
0x01~0x04 |
|
3 |
波形 |
0x01~0x05 |
|
4 |
占空比 |
0x00~0x64 |
|
5-7 |
频率 |
3 字节无符号整数 |
|
8 |
幅值 |
2 字节无符号整数 |
|
9 |
帧尾 |
固定为 0xAA |
(2)核心通信机制设计
① 环形缓冲区(ringbuffer.c):防数据丢失设计
采用 “先进先出(FIFO)” 的读写逻辑,避免因单片机中断响应延迟导致的数据丢失。
② 状态机解析:保证帧完整性
为避免单字节丢失、乱序导致的解析错误,软件采用逐字节状态机解析算法,将帧解析过程划分为多个状态,仅当状态连续跳转完成时,才判定为有效帧。

1.2.3 上位机软件设计
本上位机软件采用PyQt5框架开发,是一款专为四通道函数信号发生器设计的专业控制平台,具备完整的串口通信、参数设置与波形预览功能。软件通过自定义的9字节通信协议与下位机实时交互,支持四通道独立控制,每通道均可单独设置波形类型、频率(0.1Hz-50kHz)、占空比及输出幅度(0.30V-3.00V)。界面采用模块化布局,左侧为通道控制面板,右侧集成高分辨率波形显示区,实时渲染各通道波形变化;软件具备智能防抖机制、参数同步状态指示及设备回显解析功能,实现了上下位机间的双向数据同步,为用户提供了直观、稳定且高效的多通道信号发生器远程控制解决方案。

1.3 项目实施解决的主要问题
1.3.1解决上升过慢问题
在初始设计中,系统采用 LMV358 作为输出驱动运放。该芯片具有低功耗、轨到轨输入输出等优点,适用于一般信号放大场景。然而,在实际测试中发现,当输出信号从 0V 上升至 3.0V 时,上升时间长达约 7.4 μs,无法满足高频率波形对边沿陡峭度的要求,导致波形失真、前沿拖尾明显。

经分析,主要瓶颈在于 LMV358 的压摆率(Slew Rate)仅为 0.35 V/μs,限制了其快速响应大电压变化的能力。
为解决此问题,将输出级运放升级为 TLV9152IDR,其典型压摆率达 21 V/μs,远高于原器件。该芯片具备轨到轨输入输出、低噪声、高带宽特性,更适合高速信号驱动。
更换后重新测试,0V → 3.0V 上升时间缩短至 0.4 μs,显著改善了波形边沿质量,提升了整体信号保真度。


1.3.2 解决波形生成无响应问题
在波形参数重新配置过程中,曾出现新波形生成延迟久的问题 —— 核心原因是系统采用的 32 位定时器未执行清零操作,参数更新后定时器仍沿用原有计数值,需等待计数值溢出后才会触发 DMA 传输与 DAC 转换,导致新波形无法即时生效;通过在每次参数配置流程中新增 “暂停定时器→清空计数值寄存器(CNT=0)→加载新配置参数→重启定时器” 的强制清零步骤,成功将波形更新延迟缩短,实现了参数修改后新波形的即时生成。

第2章 结果与讨论
2.1 实现效果
作品实物:


效果:
方波,1000HZ,占空比50%,幅度值3V

三角波,1000HZ,占空比50%,幅度值3V

锯齿波,1000HZ,幅度值3V

锯齿波,1000HZ,幅度值3V

正弦波,1000HZ,幅度值3V

三角波,1000HZ,占空比78%,幅度值3V

三角波,1000HZ,占空比78%,幅度值1V

三角波,1000HZ,占空比78%,幅度值2V

三角波,2000HZ,占空比78%,幅度值2V

上位机控制:
方波,1047HZ,占空比78%,幅度值1.72V



输出电流:
31mA


2.2 实验误差分析
系统时钟偏差:实验系统采用25MHz外部晶振作为时钟基准源,受晶振自身制造工艺限制,其固有频率存在不可避免的微小偏差。该偏差直接导致基于晶振倍频/分频得到的170MHz系统时钟基准无法达到理论精准度,进而影响后续定时器的分频系数设定与计数周期精度,最终造成输出信号频率偏离设计值。
参数量化误差:频率参数计算采用“对数映射+平方根估算”算法,最终需将计算得到的定时器预分频系数(PSC)与自动重装载值(ARR)转换为16位整数以适配硬件配置。由于理论计算值多为非整数,取整过程中会产生不可消除的量化偏差,该偏差叠加后进一步加剧了频率输出的误差。
幅度值误差:由基准源稳定性、数模转换特性及信号放大链路偏差共同导致,是影响信号幅度精准度的主要因素。
基准源温漂误差:实验采用REF5025A高精度基准源提供DAC转换参考电压,虽其标称精度较高,但在实验环境温度波动(±10℃)场景下,会出现明显的输出电压漂移现象。参考基准的不稳定直接导致DAC转换的基准基准出现偏差,进而影响数字量到模拟量的转换精度。
DAC非线性误差:系统选用的STM32G431内置12位DAC存在±1LSB的积分非线性(INL)误差,该误差使得DAC输出的模拟信号无法与输入数字量形成完美的线性对应关系,导致原始转换信号已存在幅度偏差。
运放与电阻链路误差:信号幅度放大链路中,TLV9152IDR运算放大器的实际增益受自身器件特性影响,与理想设计增益存在微小偏差,同时电源纹波会进一步干扰运放输出的稳定性;此外,放大链路中的外部电阻虽选用高精度规格,但标称值与实际阻值仍存在±1%~±5%的固有偏差,且电阻阻值会随环境温度变化产生温漂效应。上述运放偏差与电阻偏差叠加后,导致放大链路的实际放大倍数偏离设计值,无法实现输入信号到目标3.00V输出的精准幅度映射,最终造成输出信号幅度值存在误差。
占空比误差:占空比误差主要源于波形生成机制的固有局限性,即波形采样点的离散性。
实验中输出波形通过固定数量的采样点拟合生成,需将波形周期划分为高电平段与低电平段并分配相应采样点。由于采样点数量为整数且存在固定间隔,其划分比例无法完全贴合理论占空比数值,尤其在采样点总数较少的场景下,这种离散性带来的偏差会更加显著,最终导致输出波形的实际占空比与设计值存在误差。
第3章 总结
本报告围绕“低成本、多通道、高精度”的核心需求,完成了基于单片机+DAC方案的低频函数信号发生器的设计与实现,系统可稳定输出多类型低频信号,适配电子电路调试、多支路同步测试等场景。
在方案选型层面,针对信号芯片——ICL8038、MAX038等多通道调节繁琐、高性能DDS模块成本过高的问题,确定以STM32G431C8U6单片机为控制核心,结合DAC数模转换实现信号生成,通过软件参数化控制替代传统硬件电位器调节,兼顾了功能完整性、操作便捷性与成本可控性,核心硬件成本控制在百元级。
在系统设计与实现方面,硬件部分构建了“供电-控制-交互-输出”完整链路——采用Type-C供电,经LDO降压及0Ω电阻+10μH电感实现数模电源隔离,通过REF5025AIDR提供2.5V精准基准电压;基于I²C协议实现SSD1306 OLED显示,通过编码器+按键完成本地交互,借助TLV9152IDR轨到轨运放实现信号放大与输出;软件部分采用“参数获取-解析-校准-波形生成”闭环逻辑,通过定时器触发DMA传输,结合波形数组实现信号生成,可灵活调节输出参数。
在系统核心性能指标达标方面,具备4路独立输出通道,支持0.1~50kHz频率、0.30~3.00V幅值、0~100%占空比调节,可输出正弦波、双向锯齿波、方波、三角波共5种波形,基本满足多支路同步测试的实际需求。但通过实验验证与误差分析发现,系统仍存在部分短板:低频段波形谐波失真约3%、多通道同步误差约50μs,幅值精度误差±2%;本地交互效率偏低;运放输出驱动能力有限(最大20mA),且存在轻微电源串扰问题。
针对上述问题,已明确后续优化方向:通过提升波形采样点数、增加电源滤波电路、同步DMA触发源等措施提升信号精度;重构OLED交互界面并开发Python可视化上位机,优化人机交互体验;更换大电流运放并增加过流保护电路,升级电源隔离方案以增强系统可靠性。
综上,本设计通过合理的软硬件架构选型与优化,实现了低成本前提下的多通道低频信号发生功能,验证了“单片机+DAC”方案在低频信号发生器设计中的可行性与实用性。后续通过针对性优化,可进一步提升系统性能,拓展其在电子实验、小型项目开发等场景的应用价值。
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论