ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

单片机ADC采集交流信号:差分运放偏置电路设计与Multisim仿真

单片机ADC采集交流信号:差分运放偏置电路设计与Multisim仿真 搞单片机的朋友应该都见过这幕手里ADC只能老实采0~3.3V或者0~5V可你要采的信号偏偏是正负交替的交流量直接怼进ADC引脚负半周直接被砍掉采回来的数据跟半波整流似的根本没法用。以前我习惯用电阻分压把电平硬抬上去但分压电阻一接信号源负载变了波形也跟着变形遇到信号源内阻大一点的偏置点还会跟着电源一起飘。后来被折腾了几次干脆用差分运放做前端一个运放同时搞定偏置和增益再用Multisim先把电路仿真透了再焊接效率高了一截踩坑也少了很多。这篇文章就把这套完整的思路和实操拆开讲为什么要加2.5V偏置、差分运放电路怎么算参数、Multisim里怎么一步步搭出来验证以及从仿真转实物时大概率会碰到的坑。适合正在做单片机交流采样、传感器信号调理、或者想搞懂运放偏置电路的朋友。不需要太深的模电基础照着算、照着搭基本都能跑通。1. 为什么交流信号非得抬到2.5V先看清ADC的脾气1.1 ADC只能“吃”正电压负半周直接没了绝大多数单片机的ADC输入范围就是0到参考电压常见3.3V或5V内部比较器、采样电容和基准网络全都按单极性设计。你把一个-1V到1V的正弦波直接接到ADC引脚负半周低于0V的那部分ADC根本没法编码读取结果基本就是0。这不是软件能救的是硬件输入端天生只能处理正电压。有人会想“那我用DSP、用FPGA是不是就能采负电压”其实不行哪怕是高速ADC模拟输入引脚同样只接受正电压只不过允许的共模范围和量程不同罢了。所以交流信号进ADC之前必须做两件事一是给信号叠加一个直流偏置让负半周整体抬到0V以上二是根据信号幅度调整增益让抬升后的信号尽量铺满ADC的输入量程充分利用分辨率。偏置电压选多少按ADC量程的一半来。5V系统就选2.5V3.3V系统就选1.65V。这样信号以量程中点为基准上下摆动正负幅度都能采到。1.2 电阻分压方案的坑以及差分运放为什么更香最偷懒的做法是拿两个电阻从电源分压出一个2.5V然后串个电阻、加个隔直电容把交流信号“叠”上去。这个办法不是不能用但有两个非常现实的毛病。第一个问题信号源和分压网络之间会互相影响。分压电阻等效到信号源端就是一个对地电阻信号源内阻越大信号被衰减得越厉害。你做采样电路时通常希望输入端是高阻的结果一个分压网络把输入阻抗拉低了几十千欧信号自然就变形了。第二个问题电源噪声直接串进来了。电阻分压出来的2.5V本质上就是“电源电压乘以分压比”电源上的纹波、毛刺一键传导到采样信号里。你辛辛苦苦把前级传感器信号处理干净结果在偏置这一环引入了一堆干扰这就很亏。差分运放电路的好处恰恰在于信号输入进了运放的高阻输入端几乎不向前级索取电流对信号源的影响可以忽略同时偏置电压是从一个独立的参考点通过差分方式注入的只要参考电压做得稳偏置就稳不会受到后级负载的明显拖累。还有一个额外优势——增益可以用反馈电阻灵活调想放大几倍就放大几倍不用像分压网络那样改了这里动那里。2. 差分放大电路设计参数和推导一次说清2.1 电路结构和输出公式推导先说明一下这里说的“差分运放”不是仪表放大器那种专用芯片而是用普通运放搭成的差分放大电路。仪表放大器内部也是差分结构但一般增益高、带缓冲价格也高用在固定增益的ADC前端有点浪费。用LM358这类通用运放搭差分电路四颗电阻就能解决性价比高设计也灵活。标准电路长这样输入信号Vin通过R1接到运放反相输入端参考电压Vref通过R2接到同相输入端反馈电阻Rf从输出端接回反相输入端同时同相输入端通过Rg接地。理论上四个电阻的关系决定输出Vout (Rg / (R2 Rg)) × (1 Rf / R1) × Vref - (Rf / R1) × Vin这个公式看着复杂但工程上我们直接让R1R2、RfRg电路变成对称结构公式就瞬间清爽了Vout (Rf / R1) × (Vref - Vin)也就是说输出是“参考电压和输入信号的差”乘以一个增益系数。输入信号被反相了但幅度和偏置的关系非常干净。以LM358为例运放U1A的2脚是反相输入端3脚是同相输入端1脚是输出端。接法如下元件推荐参数连接位置R110kΩVin → 运放2脚R210kΩVref(2.5V) → 运放3脚Rf10kΩ输出1脚 → 运放2脚Rg10kΩ运放3脚 → GND当四个电阻全部相等时增益为1。如果想让增益变成2倍就把Rf和Rg一起翻倍比如R110kΩ、R210kΩ、Rf20kΩ、Rg20kΩ输出就是2×(Vref−Vin)。注意电阻匹配要成对一致这是这个电路的灵魂。2.2 偏置电压和增益的计算方法直接用例子算一遍就非常清楚。假设5V供电、ADC量程0~5V输入信号是±1V的正弦波想让输出落在0.5V~4.5V之间留一点余量防止过冲。选单位增益R1R2RfRg10kΩVref2.5V那么Vin 1V 时Vout 2.5 - 1 1.5V Vin 0V 时Vout 2.5V Vin -1V 时Vout 2.5 - (-1) 3.5V输出范围1.5V到3.5V整体在ADC量程内偏置后信号的动态范围是2V对12位ADC来说理论分辨率大概是5V/4096≈1.22mV实际信号能分辨的分辨率约为2V/4096≈0.49mV。这个性能对于大部分工控和传感器采集绰绰有余。如果输入信号只有±0.5V用单位增益就太浪费ADC量程了。这时候可以把增益提高到2倍让输出范围变成1.5V到3.5V动态范围2VADC的分辨率利用率翻倍。同样保持R1R210kΩRfRg20kΩVref还是2.5V输出公式不变只是斜率变了。如果增益更大比如5倍输入±0.2V、输出范围0.5V到4.5V看起来正好但要注意运放输出摆幅。普通LM358在5V单电源下输出上限大概只有3.5V左右这时候波形会被削顶。这种情况就得换轨到轨输出的运放比如MCP6002、OPA340、SGM8532之类。2.3 想要同相输出怎么办方案B有些场合介意信号被反相比如做锁相环、过零检测或者相位敏感测量时相位反了就影响功能。处理起来有两个思路。第一个思路最简单软件翻转。单片机里采到12位数据后用4095减去采样值再换算物理量。比如12位ADC采到的原始值是3000翻转后就是1095信号相位就正回来了。对大多数数据采集应用这样处理完全没毛病还省了一级硬件。第二个思路是硬件上做同相加法电路改成输入信号经过耦合电容进同相端同相端通过一个电阻接Vref反相端用反馈电阻和接地电阻设置增益。这个电路的输出公式是Vout (1 Rf / Rg) × Vin (1 Rf / Rg) × Vref如果你用电压跟随器接法Rf0Rg不接输出就是VinVref相位正、偏置也对。但一旦增益大于1注意静态偏置也会跟着放大比如增益2倍、Vref2.5V静态输出就会变成5V直接顶到电源轨。所以这个方案在增益非1时Vref要做相应折算比如要得到2.5V静态输出和2倍增益Vref就设成1.25V。多了一级分压就多一分噪声实际做起来没有方案A省心。所以我在实际项目里只要不是强相关测量场景一律用方案A的差分电路输出反相就反相软件里翻转一下又稳又准。3. Multisim仿真全过程从搭电路到看波形3.1 元件选择和放置含数据库报错、旋转元件的坑Multisim仿真是验证电路最快的方式先把该准备的元件放齐。打开软件后依次放以下器件。运放点击菜单Place → Component弹出的界面里Group选AnalogFamily选OPAMP搜索LM358AD或者直接找LM358选中后点OK放到画布。如果这里弹出数据库访问错误先别急往下看第5节大概率是缓存或权限问题。电阻Place → ComponentGroup选BasicFamily选RESISTOR搜索10kΩ放四个。搜索时注意值别选错10kΩ就是10千欧很多版本里显示为10kΩ_1%。直流电源Group选SourcesFamily选POWER_SOURCES找到DC_POWER放两个。默认值是12V双击把其中一个改成5V另一个改成2.5V。很多人漏掉这一步直接拿12V给运放供电仿真出来的波形直接顶天立地还以为是电路问题。交流信号源Group选SourcesFamily选SIGNAL_VOLTAGE_SOURCES找AC_VOLTAGE双击把幅值Voltage改成1V频率Frequency改成1kHz。接地POWER_SOURCES里找GROUND放一个。这个必须放Multisim仿真里没有接地整个电路的地是悬空的仿真根本跑不起正确结果。放置电阻时如果方向不对选中元件按CtrlR就能旋转90度按X是水平翻转按Y是垂直翻转。这对画电路图时的布局非常重要不然连线绕来绕去容易看错。3.2 接线和参数设置一步步照做元件放好之后按照第2.1节的表格接线。我先说最关键的一点LM358的电源引脚千万接对。DIP8封装的LM3588脚接5V4脚接GND或者直接接到你放的那两个直流电源把5V电源的正极接8脚、负极接GND2.5V电源只做信号参考正极接到R2负极接GND。注意2.5V电源和5V电源的负极要共地这是整个电路能正常工作的前提。具体连线可以这样走交流信号源AC_VOLTAGE正极 → R1 → LM358的2脚 R1与2脚的节点同时 → Rf → LM358的1脚输出 2.5V直流电源正极 → R2 → LM358的3脚 LM358的3脚 → Rg → GND LM358的8脚 → 5V直流电源正极 LM358的4脚 → GND 所有电源负极 → GND 示波器A通道 → 交流信号源正极观察原始输入 示波器B通道 → LM358的1脚观察输出接好后先检查一遍有没有悬空引脚。运放的5脚、6脚、7脚是另一个运放不用的运放建议把输入接地、输出悬空或者简单粗暴不接也行Multisim里一般不报错但实物板子上不用的运放最好按规定处理防止自激。3.3 仿真结果分析波形、静态点、增益怎么看点击Simulate → Run或者按F5启动仿真。双击示波器打开波形窗口设置Time base为1ms/Div左右1kHz信号一个周期正好1ms一个屏幕能看几个周期A通道设为2V/DivB通道也是2V/Div。正常结果应该是A通道看到-1V到1V的正弦波B通道看到1.5V到3.5V的正弦波中心在2.5V两个波形相位正好差180度因为反相幅度大小一致单位增益。如果B通道的波形中心不在2.5V优先检查2.5V电源的实际电压值。Multisim里双击DC_POWER元件看Voltage(电压)一栏是不是2.5V别改完没保存就仿真。如果中心偏移不多比如几百毫伏内可能是四个电阻的默认容差导致的Multisim里电阻默认带1%或5%的容差仿真时会有微小偏差这在实际电路里也会存在不用太纠结。如果想验证增益把Rf和Rg改成20kΩ重新仿真B通道波形幅度应该变成2V对应输入1V放大2倍中心还是2.5V。这时候如果波形顶部或底部削平说明输出已经碰触到电源轨了需要确认LM358的输出摆幅是否够用。这就是仿真存在的意义——在焊接之前把饱和问题提前暴露出来。4. 从仿真到实物调试经验和ADC采样注意点4.1 常见问题速查表波形不对先看这几点仿真没问题不代表焊出来一定跑得通。实物电路中供电、地线、寄生电容的影响全都冒出来了。我把自己踩过的坑整理成一个速查表遇到问题逐条排查现象可能原因排查方向输出一直接近5V或0V反馈电阻没焊好正负输入端搞反万用表量Rf两端是否为10kΩ核对运放1、2、3脚输出始终2.5V不变输入信号没进运放查R1是否虚焊示波器量R1左端有无信号输出波形削顶或削底输出超出运放摆幅或电源电压降低增益/输入幅度换轨到轨运放波形叠加明显毛刺电源去耦不足运放电源脚就近加0.1μF陶瓷电容静态点偏移且随温度漂移偏置参考不稳定用TL431或REF3025等基准芯片替代分压ADC采样值来回跳接地不合理或参考地噪声大模拟地单点连接电源地和模拟地分开第一行“正负输入端搞反”特别常见尤其是用DIP封装运放配合面包板时管脚顺序一不留神就看错。LM358的2脚是反相、3脚是同相如果接反负反馈就变成了正反馈输出直接锁在电源轨上波形完全不是正常放大样子。4.2 运放选型和偏置基准的实操心得偏置电路最容易翻车的不是运放而是那颗2.5V参考电压。如果用电电压是5V有人图省事直接用两只10kΩ电阻分压得到2.5V接上运放后偏置似乎也能工作但电源一波动、负载一变2.5V就跟着晃采样数据自然不稳定。我的习惯是实验室验证用手册里的简单电路正儿八经做产品时偏置参考一定用独立基准。TL431加两只电阻可以做2.5V输出成本不到几毛钱对精度要求更高就用REF3025、REF5025这类低漂移基准芯片。偏置稳了整个采样链路的底噪就降下来一半回头排查问题也能少背很多锅。运放选型方面LM358做教学、验证和低频采样没问题便宜耐用但它的输出摆幅和压摆率都比较保守。5V供电时输出上限大约只有3.5V下限能接近0V但也不是真正的0。高频信号或者需要输出接近电源轨的场景优先选轨到轨输出运放MCP6002、OPA340、SGM8532这些都很常见单电源3.3V或5V下能输出接近0V和VCC的摆幅ADC量程利用得更充分。输入信号如果频率上到几十千赫兹甚至更高还要关注压摆率LM358这种压摆率0.6V/μs的运放在高速应用里完全不够看。4.3 ADC采样配置别让前端电路白搭前端电路做好了ADC的采样配置也要配套。很多单片机的ADC输入引脚本身没有缓冲内部是采样电容采样时电容要从前端吸收瞬时电流如果前端输出阻抗太高采样值就会偏小。我的经验是运放输出到ADC引脚之间加一个小阻值的RC滤波比如100Ω串联、100nF对地并联这个组合的截止频率大约16kHz对低频信号足够了同时还能滤掉一部分高频噪声。RC能提供一定的电荷池缓解ADC采样电容吸流带来的电压跌落。STM32这类单片机记得把ADC采样周期调长一点。不少朋友图快把采样周期设成1.5个ADC时钟结果每次采集值都不稳定。你换算一下采样时间延长到最大比如239.5个ADC时钟周期ADC内部采样电容就有充足时间通过外部RC充电稳定性明显提高。配置ADC时尽量用可配置的最大采样周期这不需要额外硬件成本却经常能把数据质量拉回正常水平。5. Multisim高频问题合集仿真实操向5.1 数据库访问错误和仪器不全怎么办用Multisim的人应该都被“数据库发生错误”和“主数据库无法访问”这两个提示折腾过。这个报错的根源通常是软件安装或卸载后数据库索引文件没有正常加载或者当前用户没有足够权限读取数据库路径。碰到这类报错按顺序做第一步关闭Multisim右键软件图标选择“以管理员身份运行”看看能不能解决能解决就是权限问题第二步找到安装目录下的database文件夹一般在ProgramData\National Instruments\Circuit Design Suite\14.x\database把里面的缓存文件备份后删除再重新打开软件让系统重建索引第三步如果还是不行大概率是之前卸载旧版本没清理干净把整个National Instruments目录卸干净重装。这个问题跟电路本身没关系但卡住一次就可能浪费一下午建议收藏备用。“仪器不全”或者说“找不到示波器”也经常有人问。Multisim的仪器有两种打开方式右侧工具栏点击或者菜单栏Simulate → Instruments里选择。如果右侧工具栏没有示波器图标在菜单栏里强制添加就行添加之后波形窗口不开检查View菜单下的Instrument Toolbar是否被勾选。还有一种情况是想用电流探针、逻辑分析仪这种高级仪器但版本是简化版不具备该功能这种情况只能换版本或者用万用表、示波器顶替观察。5.2 仿真速度慢、元件旋转、卸载安装等杂项仿真速度慢是很多大型电路项目的痛点。Multisim默认是实时交互仿真如果电路里元件模型复杂、仿真步长太小CPU就一直在那里算。解决办法有两个方向要么降低计算量要么改设置。Simulate → Interactive Simulation Settings里把Maximum time step最大时间步长调大一些比如从默认的1e-5改成1e-4或1e-3仿真速度能明显加快代价是波形精度略降观察趋势完全够用。另外在仿真时把示波器窗口缩小或关闭显示刷新也能减少软件卡顿。如果是纯验证逻辑可以把运放换成理想模型Virtual OpAmp仿真速度提升巨大教学和原理验证足够但别指望理想运放能模拟真实器件的饱和特性和压摆率限制。元件旋转前面提过再补充一句CtrlR是顺时针90度CtrlShiftR是逆时针这两个快捷键记牢画电路图能省一半脾气。元件镜像翻转用X键或者Y键配合移动、复制布图效率能高不少。关于汉化、中英文对照和卸载清理我的建议是如果只是学习用中文汉化版上手快但项目工作敢还是用英文原版搜技术资料时对着英文菜单找功能更方便。如果要把Multisim卸载干净别直接删安装目录控制面板卸载后检查Program Files和ProgramData下面的National Instruments残留再清理注册表里的National Instruments项不然下次安装大概率碰到数据库错误。Multisim说到底是一个验证工具别让工具问题消耗太多热情。电路原理对了、参数算清了用哪个版本的仿真软件都能跑通关键是搭建电路和调试的思路要清晰。我在实际做采样项目中最大的体会是这类偏置电路最容易让人栽跟头的永远是参考电压的稳定性。电阻分压一时爽低温漂、电源纹波、负载变化一上来就露馅。只要把偏置基准放稳后面所有环节都顺了。另外从仿真转到实物时先焊电路、上电、量静态点信号输入为0V时的输出再做动态测试——静态点对了一切都好办这也是我每次调试必做的第一步。希望这篇内容能帮你少走点弯路把采样难题一次解决。
返回列表