
很多人第一次想自己做个信号源搜索时大概率会看到“正弦波发生电路”“方波发生电路”“三角波发波电路”这些关键词各成一派而且资料水平参差不齐要么只有原理图没有计算过程要么只给公式不讲怎么调参数。这个三合一小信号发生器其实就是把三种最常用的波形做到一块板子上共用核心振荡部分再分别引出输出。对刚入门电子的人来说它的价值不只是“能出波形”而是通过一次搭电路把比较器、积分器、阈值翻转、频率计算这些模拟电路的老底子全部串起来。对已经有基础但没做过信号源的人它也是一个很好的低成本实验平台后续接ADC采集、接STM32、做DDS扩展都得先有一台自己知根知底的信号发生器打底。1. 为什么要把三种波形塞进同一台机器1.1 三种波形在实际电路里各干什么活正弦波是交流电和信号处理的基础音频测试、电源纹波评估、滤波器频率响应测试、锁相环输入参考全都离不开它。方波是数字电路和开关控制的主力用来测数字门限、驱动电机换相、验证逻辑电平转换、充当某个定时器的时钟源都很常见。三角波则经常藏在比较器和PWM电路的内部比如开关电源的电流斜坡补偿、音频压控振荡器的线性调谐、采样保持电路的扫描基准甚至在测距应用里线性调频信号的核心斜率也由三角波决定。这三者不是互相孤立的关系方波经过积分就变三角波三角波再经过整形网络就能逼近正弦波数学上是一条清晰的转化链。一个能同时输出三种波形的发生器本质上就是在同一套振荡核心上把这条转化链完整落地。你等于是同时拿到了“激励源”和“测试信号”两套工具调试功放、测滤波器、看比较器翻转点基本不用换设备了。1.2 方波、三角波、正弦波之间的转化逻辑方波和正弦波的关系常常被误解很多人以为低通滤波器滤一下方波就能得到正弦波。确实能但出来的东西谐波残存大失真很难压下去尤其是高频段滤得不干净波形毛刺明显。真正低失真的做法是先得到三角波再用非线性整形网络把三角波的线性上升沿和下降沿慢慢“掰弯”让它逼近正弦的弧线。这种分段逼近的方法比单纯滤波要可控得多。三角波转正弦波的基本原理在于三角波的频谱里基波和谐波幅度有明确的比值关系三次谐波幅度约为基波的九分之一五次谐波是二十五分之一。分段线性整形网络其实就是用几个二极管和电阻构成非线性衰减器让三角波的尖角被削掉一点连续削几次之后波形就越来越像正弦了。这个过程的细节我放到后面的原理图拆解里详细说先记住大方向比较器产生方波积分器把方波变成三角波整形网络把三角波变成正弦波。2. 设计路线怎么选运放、分立元件、还是MCU/DDS2.1 三条主流路径的优缺点对比我在整理这个题目的时候专门看了一下各平台的热搜词发现入门者最常搜的就是“lm324正弦波发生电路”和“方波发生电路”这说明运放方案是绝大多数人的第一站。但还有一个明显的趋势就是“stm32产生正弦波”和“stm32信号发生两路正弦波dds”这类词也特别热说明越来越多的人想直接上数字方案。方案类型核心器件频率稳定性波形质量上手难度成本分立三极管三极管RC较差一般高极低通用运放LM324/358/NE5532中等可调性好低低专用函数ICICL8038/MAX038高较好低中等偏贵MCUDACSTM32外部DAC极高精度受DAC限制中等偏高中等DDS芯片AD9833/AD9850极高好中等不等表格里能看到初学者最容易卡住的是分立三极管方案因为偏置点受温度影响大设计不好波形直接畸变查故障的时间和重新搭电路的时间差不多。专用函数信号发生器IC现在越来越贵而且部分型号停产不太适合入门练手。而STM32/DDS方案的优势在频率精度和相位控制但缺点是需要写代码硬件上还得考虑DAC输出后的滤波对于第一次接触波形生成的人来说分不清问题是出在电路还是出在程序排查起来很痛苦。2.2 我的建议先用运放把原理跑通个人观点很明确第一次做信号发生器优先选通用运放方案。原因有几点一是运放可以同时承担比较器、积分器、整形网络三种角色一个LM324四运放芯片就把整台机器包圆了。二是运放的计算公式相对直观阈值电压、积分斜率、振荡频率都有明确的数学关系调试的时候用万用表量几个关键点电压就能定位问题。三是运放的供电范围宽正负5伏到正负15伏都可以工作给后续调试留了很大的余量。等你真正用运放把方波、三角波、正弦波都调出来之后再去玩STM32和DDS心态完全不一样。你知道了理想方波的翻转沿应该有多快也知道了三角波的线性度受积分器输入偏置的影响有多大再去看DDS输出经过低通滤波之后的信号就能理解数字信号的台阶感和模拟信号的连续性之间的本质区别。先模拟后数字踩坑成本最低。3. 经典两级运放电路从方波到三角波再到正弦波的完整推导3.1 第一级滞回比较器生成方波整个信号源的核心是第一级滞回比较器也就是常说的施密特触发器。它由运放和一个正反馈电阻网络组成运放工作在非线性区输出只有正饱和或负饱和两种状态。正反馈的作用是让翻转门限变得清晰输入信号越过一个阈值后快速跳变到另一端不会像单限比较器那样在临界点附近来回抖。我用LM324内部的两个运放单元来举例U1A负责方波输出U1B负责三角波积分。具体连接方式是U1A的同相输入端接由R1和R2组成的电阻分压网络分压点连到U1A的输出端形成正反馈反相输入端接第二级积分器的输出。初始上电时输出可能是正饱和也可能是负饱和这个随机性没关系不影响稳态工作。如果把U1A的输出记为(V_o)正反馈分压比记为(\beta R_2/(R_1R_2))那么同相输入端的参考电压就是(\beta V_o)。当积分器输出上升到这个参考电压时比较器翻转到负饱和当积分器输出下降到负参考电压时比较器又翻回正饱和。于是方波输出就在正负电源电压之间反复跳变而跳变点正好是三角波的峰值点这个机制把方波和三角波天然地锁在了一起。3.2 第二级积分器把方波变成三角波U1B接成积分器结构反相输入端通过电阻R_INT接到U1A的方波输出反馈电容C_INT跨接在输出端和反相输入端之间。积分器的工作特性就是电容的恒流充放电当输入为固定正值时输出以固定斜率线性下降当输入为固定负值时输出以固定斜率线性上升。因为方波正负半周幅值对称、时间相等所以积分器输出就是一个对称的三角波峰值刚好卡在比较器的翻转阈值上。积分器的斜率公式为 [ \frac{dV_{tri}}{dt} -\frac{V_{sq}}{R_{INT} \cdot C_{INT}} ]从最低阈值翻转到最高阈值需要的时间正好是方波半个周期。把比较器阈值代入就能推导出整个振荡器的频率公式。当R1R2时阈值分压比为0.5三角波峰值约为饱和电压的一半振荡频率可以化简为 [ f \approx \frac{1}{2 R_{INT} C_{INT}} ]这个公式非常实用随手估频率时不用再翻笔记拿两个元件的数值一算就出来了。比如R_INT取10kΩC_INT取0.1μF算出来就是500Hz附近。如果需要精确到个位数再用示波器实测微调电位器即可。3.3 第三级三角波整形得到正弦波三角波到正弦波的转换是全电路里原理最有趣、调试也最讲究的一级。实现方法有几种最符合“小白三合一”定位的是二极管整形网络。它的本质是分段的电阻分压——二极管没有完全导通时分压比较大信号衰减少信号幅度升高到一定值后二极管逐步导通下拉电阻的等效阻抗变小分压比变小信号被衰减多一些。形象点说三角波的尖角部分经过整形网络时被“额外削掉一点”边沿被弯成了内凹的弧线。多组二极管在不同电压点上参与整形每个电压段里增益都不同整体效果就是把三角波近似拟合成正弦波的轮廓。整形级数越多输出越接近理想正弦但电路也越复杂。入门级做三级到五级整形就够失真度通常能控制在百分之二到五以内这个水平应对大多数教学实验和音频测试完全够用了。实际搭电路时常见的坑是把二极管的导通压降当成固定值来算其实不同电流下二极管的压降有偏差导致整形阈值点偏移。解决办法有两个方向一个是用的BAT54S这类肖特基对管一致性比普通1N4148好另一个是在整形电阻网络之后加一个轻微的低通滤波把分段拐点附近产生的高次毛刺滤掉波形会光滑很多。3.4 LM324版本完整信号流把三个部分连起来整个系统的信号流就是U1A产生方波→经过U1B积分产生三角波→三角波被分成两路一路直接送到三角波输出端另一路进入二极管整形网络→整形输出送到正弦波输出端。方波输出则直接取自U1A不经过中间环节保证沿口陡峭。这里要特别注意LM324的带宽限制。LM324的增益带宽积只有1.2MHz左右做低频信号发生器没问题但想让它输出100kHz以上的方波边沿就会明显变缓方波看起来更像梯形波。如果你需要高频方波建议把方波级换成TL072或NE5532这类增益带宽积更高的运放或者直接用74HC14这样的门电路施密特触发器来做整形。4. 频率、幅度、占空比从能出波形到可控可调4.1 频率调节粗调与细调配合的电位器策略只出固定频率的波形没有太大工程意义真正实用的是可调信号源。在刚才推导的频率公式里振荡频率同时由电阻和电容决定所以调频有两种思路改变R_INT频率与电阻成反比适合做成连续可调的细调旋钮改变C_INT频率与电容成反比适合用波段开关切换不同数量级实现粗调。我建议面板上有两个控制点就够了。第一个是波段开关接三个电容比如0.1μF对应几十到几百赫兹0.01μF对应几百到几千赫兹1nF对应几千到几万赫兹。第二个是电位器串联在积分电阻位置阻值范围选10kΩ到100kΩ比较合理。实际操作时粗调先定数量级再用电位器微调调到一个具体的频率点就比较顺手。4.2 占空比的独立调节很多人做到能出波形就收手了但实际应用里占空比往往也很关键。方波的占空比可以通过在比较器输出端加一个二极管网络来改变充电和放电的时间常数用两个二极管方向相反地并联然后分别串联一个电位器的两半让正半周和负半周对电容的充电路径不对称。这样就能烧制出占空比从十比九十到九十比十可调的方波同时三角波也会变成非对称的斜坡波非常适合用来做PWM驱动信号或锯齿波测试。需要注意的是加占空比调节之后振荡频率也会跟着偏移因为充放电时间常数不再对称频率公式需要按实际导通时间重新计算。通常我会先把占空比调到基线频率调准最后再调占空比顺序不要反过来。4.3 幅度控制与输出阻抗匹配输出幅度是另一个不能忽略的指标尤其是后面要接ADC采集或功放输入时幅度过大很容易烧芯片。最简办法是在每一路输出加一个电位器做分压接成“音量旋钮”结构。但要注意电位器本身有阻值接在输出端正对后面电路的输入阻抗有影响驱动高阻抗负载问题不大驱动低阻抗负载时信号会被衰减得更严重。更规范的做法是每一路输出后面都跟一级电压跟随器。把整形后的信号送入运放的同相输入端输出端直接连回反相输入端增益等于1但输入阻抗极高、输出阻抗极低后面接什么负载都不怕。LM324还剩两个运放单元正好做三角波和正弦波的跟随缓冲方波如果也想隔离可以再换一片双运放来补上。控制项调整部位备注频率粗调切换积分电容C_INT每档十倍频程频率细调调整积分电阻R_INT电位器连续可调占空比比较器输出二极管网络会轻微影响频率幅度输出分压跟随器负载能力更强正弦波失真整形网络电阻微调用示波器边看边调5. LM324实战搭建元件清单、面包板布局与信号测量5.1 最小系统元件清单我实验多次之后给出一份经过验证的元件清单预算很低几块钱就能配齐。LM324一片1N4148二极管根据整形级数准备四到八只电阻以10kΩ和100kΩ为主各准备十只电位器用两个100kΩ的直插多圈微调电位器一个做频率细调一个做幅度调节。电容准备三个数量级的积分电容0.1μF聚酯薄膜电容、0.01μF、1nF各一个另外准备两个104电容做电源去耦。如果需要双电源还需要一个中间抽头变压器加稳压或者更省事的是用两节9V电池串起来从中间引地。5.2 面包板布局的关键点在面包板上搭这套电路布局顺序比焊接芯片容易踩坑。先把LM324按照四排插孔中间的凹槽跨在两侧芯片正上方标有缺口的一端朝向自己。第4脚接正电源第11脚接负电源这两脚旁边要就近接去耦电容。如果顺序搞反先接了信号线再接电源很容易把芯片弄坏。三条主信号线的走向要清晰U1A输出到U1B积分输入的距离尽量短积分器的反馈电容要尽量靠近芯片引脚因为容性走线很长时会对波形边沿产生影响。整形网络的二极管阵列放在U1B输出和正弦波输出插座之间所有偏置电阻的接地点尽量汇到同一个点避免地回路噪声串扰。5.3 用示波器观察波形时的“所见非所得”很多人在这一步会困惑明明电路是按原理图搭的示波器里看到的波形和书上画的不一样。常见原因不是原理错了而是探头出了问题。普通示波器探头打到1倍衰减时会引入大约100pF的输入电容这个电容在较高频率下会改变电路谐振状态导致三角波变圆、方波边沿变缓。测量时把探头打到10倍衰减能显著减轻负载效应。还有一个几乎每个人都会遇到的困惑三角波的峰顶为什么带小圆角这不是整形网络的问题而是积分器的工作原理决定的。运放在翻转的瞬间需要从线性区进入饱和区再从饱和区退出需要一定响应时间这个时间内输出跟不上理想斜率所以尖顶变圆。想让峰顶更尖锐可以换转换速率更高的运放比如TL072。5.4 动态验证用ADC采集验证波形是否达标现在很多做嵌入式的人手边都有STM32开发板刚好可以把热点词里“stm32adc采集正弦波”这个需求引出来。把信号源的输出接到单片机的ADC引脚用定时器触发ADC进行连续采样然后把数据通过串口发到上位机画波形。这个操作看似简单却能验证三件事信号源的输出阻抗是否足够低ADC的采样率设置是否正确以及通道之间是否存在串扰。我实际测试时发现了一个非常典型的坑三角波和正弦波两个通道各接一根杜邦线到开发板离得稍近正弦波的输出里就会出现微弱的三角波耦合。这不是整形网络的问题而是杜邦线之间的寄生电容在搞鬼。解决办法是让两根信号线尽量远离或者改用屏蔽线。做完这个测试再回看发生器本身的设计就更能理解为什么输出缓冲和地平面处理在模拟电路里这么重要了。6. 进阶升级从模拟信号源到STM32/DDS数字源6.1 为什么要有数字方案模拟信号发生器毕竟有局限。它的频率稳定度受电阻电容精度和温漂影响开机半小时后频率可能会漂移百分之几。占空比调节会影响频率两者无法完全独立控制。波形失真度在普通整形网络下也很难压到百分之一以下。当你要测试音频ADC的THD性能或者给电机驱动提供高精度方波时模拟方案就力不从心了。数字方案的核心思路是完全换一条路径。用微控制器或DDS芯片直接查表生成波形的数字编码再通过DAC转换或PWM滤波输出模拟信号。频率由晶振和时间隔决定稳定度可以达到几个ppm级别远高于模拟RC振荡器。波形幅度、频率、相位都是软件控制三者互不干扰这是模拟电路最不好解决的问题。6.2 STM32做信号源的最小实现思路话题绕回热词“stm32产生正弦波”目前STM32系列里有不少型号带DAC单元比如F103系列就内置一个或者两个12位DAC通道。实现正弦波输出最直接的方法就是查表法在代码里存一个正弦表的数组每个周期取出来一个数写到DAC数据寄存器DAC输出电压经运算放大器放大后就得到一个阶梯状逼近的正弦波后面再加一级低通滤波器把阶梯毛刺平滑掉。查表法的效率高在计算量小占用MCU资源少适合同时处理其他任务。输出频率的计算方法也直观 [ f \frac{f_{DAC}}{N} ] 其中(N)是查表点总数(f_{DAC})是DAC的更新速率。假设DAC更新速率用定时器设为1MHz正弦表取256个点那么输出就是大约3.9kHz的正弦波。要改变频率只需要修改定时器的自动重装值或者改成每隔几个点取一次值频率就能成倍跳变。6.3 DDS到底比模拟强在哪里“stm32信号发生两路正弦波dds”这个热词点出了很多人的真实需求。DDS的核心思想是把相位当成变量每个时钟周期在相位累加器里增加一个步长步长越大相位跑得越快输出频率越高。两路正弦波用两个相位累加器加上同一个正弦查表就可以实现唯一区别是第二路的相位初值加了一个偏移量。用MCU内部DAC实现DDS实际输出的波形质量受两个因素限制。第一个是DAC的量化位数12位DAC可以输出4096个不同的电压等级在小信号时阶梯感明显配合低通滤波器能改善。第二个是DAC更新率的极限超过这个极限阶梯之间的毛刺就会变得明显波形质量急剧下降。如果对波形纯度要求高就要外接AD9833或AD9850这类专用DDS芯片它们的内部正弦查找表深度更大输出也经过精心优化。6.4 方波与无感控制的跨领域串联热词里还有“无感方波”和“电动工具方波算法”这些词看着跟信号发生器没关系实际上它的核心控制逻辑正是方波生成原理在电机领域的延伸。所谓无感方波控制是让控制器输出按特定顺序切换的方波序列来驱动无刷电机再通过采样电机的反电动势过零点判断转子位置。这个过程中方波的占空比、相位切换、频率变化和信号发生器里的可调占空比方波在技术上高度相通。从这个角度去看“方波发生电路”它就不仅仅是一个课堂实验而是很多实际产品里的基础单元。你今天在面包板上调出来的那个方波理解了它的阈值翻转逻辑再去看无刷电机的六部换向表会发现底层思维一脉相承。6.5 三角波线性调频与测距应用三角波在信号处理里的一个重要应用是线性调频测距。热词“三角波线性调频信号测距matlab”就反映了这个场景。原理是用三角波控制压控振荡器让发射信号频率随时间线性上升再线性下降接收信号与发射信号混频后得到一个差频差频大小正比于目标距离。这个差频带宽和三角波的斜率直接相关所以在做仿真时三角波发生器的参数设置往往决定了整个系统模型准不准。做这类MATLAB仿真时很多人直接用自带的sawtooth或者自定义信号生成模块但如果你手边有一个实际的三角波信号源把它的实际波形采集下来再导入MATLAB做频谱分析你会立刻发现理想三角波和实际三角波的频谱差异。实测三角波由于峰顶圆角的存在高次谐波幅度与理论值有偏差这个偏差会影响到差频的幅度计算。这也是我一直建议大家动手搭建实物信号源的原因——仿真结果再漂亮最终还是需要实物校准。7. 调试经验与常见问题排查7.1 波形不振荡先查电源再查反馈极性信号源搭完上电之后最常遇到的情况就是“什么波形都没有”。先不要急着怀疑芯片坏了第一步用万用表量运放供电脚正电源应该接近于设定值负电源也应该有对应的电压。如果数字万用表量到负电压端为零先检查是不是负电源的电容漏电或者接线松了。电源没问题之后再看正反馈电阻是否真的接在了输出和同相输入端之间。很多小白会在这里把电阻接到反相输入端那就不存在正反馈整个电路没有振荡能力输出只会死在一个直流电平上。7.2 方波正常但三角波不对称方波输出看起来正常三角波的上升沿和下降沿却不对称这种情况通常是积分器的正负积分电流不对称导致的。LM324的输出饱和电压在正负方向略有差异方波正半周和负半周驱动积分器的有效电压不同三角波的上升和下降斜率自然就不等。解决办法是在积分电阻支路上串联一个微调电位器把正负斜率微调到对称。更彻底一点比较器级采用稳压管限幅让方波正负幅度严格相等三角波对称性就会大幅改善。7.3 正弦波出现明显削波失真整形网络输出正弦波如果看起来顶部和底部是平的说明信号幅度超过了整形网络的线性工作区。三角波的峰值幅度由比较器阈值决定整形网络的动态范围是固定的二者不匹配就会出现削波。解决办法不是盲目减小积分电容而是先测量三角波的峰值电压再用电阻分压或电位器把进入整形网络的信号衰减到合适范围。反过来如果正弦波幅度太小说明整形网络设置了过多的分压可以适当减小分压电阻的分流比例。7.4 高频端的恼人毛刺做出来在低频端波形光鲜频率往上调就出现各种毛刺和振铃这在高频段非常常见。主要原因有三类电源去耦不充分特别是给LM324供电的线太长分布电感明显面包板本身的寄生电容和接触电阻在高频时不容小觑积分电容用了普通陶瓷电容这类电容的介质损耗会随频率变化。解决方案分别是紧靠芯片引脚加0.1μF陶瓷电容、把关键电路移到洞洞板甚至PCB上、积分电容换成CBB聚丙烯电容。现象可能原因检查顺序完全无输出电源接线错误量运放供电脚电压只有直流电平正反馈没有形成检查R1/R2是否接在同相端三角波不对称LM324正负饱和电压差异微调积分电阻或加稳压限幅正弦波削顶输入幅度超过整形动态范围先量三角波峰值再调节分压高频毛刺去耦不足/电容类型不对加104去耦换CBB电容方波沿口太缓运放带宽不足/探头负载换高带宽运放探头打10x7.5 用万用表也能排查的基本状态手边没示波器不等于完全没法调试。方波输出点用万用表直流档测量应该能读到接近0V的平均值幅度档读不到稳定值说明振荡频率可能非常低。三角波输出点如果频率很低万用表指针会来回摆动摆动的幅度区间就是三角波的峰值范围。整形网络里的二极管两端如果压降都在0.5V左右说明整个网络没有处于深度饱和动态范围内工作应该是正常的。这些粗糙方法不能替代示波器但在初步排查时能快速收窄故障范围。7.6 关于独立可调的两种理解热搜词“独立可调的方波三角波发生器”里独立可调可以从两个层面理解。第一个层面是频率和幅度独立这是上一节讲到的电位器和波段开关的组合功能。第二个层面更有意思你有没有可能只调方波频率、不动三角波频率答案是在这个经典拓扑里做不到因为它们共用同一个振荡核心频率天然耦合。想真正独立控制就得把方波发生级和三角波整形级拆成两级压控振荡器用运放搭两个各自的积分器后面再用模拟开关或乘法器把两者关联起来。这个独立性的需求往往也恰好是推动一个人从模拟方案转向数字方案的转折点。8. 最后分享一点我的实践体会信号发生器这件事看起来简单做好了其实有很多细节。我前前后后做了几个版本第一版用LM324在面包板上搭出来能出三种波形但频率一超过20kHz波形就明显劣化。第二版换成了TL072加上了一级输出缓冲才终于能满足后续ADC测试的信号质量要求。如果你也想走这条路建议先把模拟版本老老实实搭出来不要跳过计算直接抄图。你亲手算过一次频率、量过一次阈值、调过一次整形网络之后再去碰STM32和DDS方案很多原理层面的问题会自动变得清晰。还有一个很实用的小技巧想特别提一下把三路输出在面板上做成三个BNC或排针接口之外最好再预留一个“同步触发”输出点直接把方波的正沿引出来。后续你用STM32的ADC去采集正弦波或者用输入捕获测频率时这个同步点可以作为触发基准采样得到的数据相位会很稳定波形显示也不会乱跳。这个小改动几乎不增加成本却能省掉很多采集端对齐的麻烦。三合一信号发生器的价值从来不只是把三种波形放在一块板子上那么简单。它背后是一整套模拟电路的分析方法和调试逻辑同时也是一块通往数字信号处理世界的跳板。希望这篇拆解能让你既搭得出电路也看得懂原理下次再看到相关热词时心里能很自然地浮现出对应的工作原理来。