频率-电压转换器电路设计:从原理到LM331实现与标定
2026/9/17 17:09:21 网站建设 项目流程

简介:《频率—电压转换器电路的设计》是一份面向电子信息、自动化等专业学生的模拟电子技术课程设计资料,围绕武汉理工大学课设任务,完整呈现从正弦信号到直流电压的转换电路设计过程。压缩包共 1 个 PDF 文件,约 547KB,覆盖绪论、电路设计方案、单元电路设计、总电路原理图、元器件介绍及组装调试等核心环节,便于按目录逐项查阅。

内容上,读者可获取比较器、F/V 变换器、反相器与反相加法运算电路的设计思路与参数选取方法,还能看到 LM331、LM393 等器件的内部结构、引脚功能与典型应用,以及过零比较器、RC 积分器等具体电路的原理分析。对于正在准备模电课设、需要撰写设计说明书或调试频率—电压转换电路的学生,这份文档提供了可参照的框架、公式推导与排错方向。目前已有 264 人学习。

1. 为什么工业现场还在用频率—电压转换器

涡轮流量计吐出的是脉冲串,霍尔转速传感器吐出的也是脉冲串,可 PLC 的模拟输入模块只认 0-10V 或 4-20mA。中间这道转换,就是频率—电压转换器要干的事。不少硬件电路设计项目里,工程师图省事,直接用 STM32 的定时器输入捕获测频,再走 DAC 或用 PWM 加滤波输出模拟电压。频率高的时候这套跑得挺好,一旦输入掉到几赫兹,输出就开始一格一格地跳,纹波和响应时间同时失控。频率—电压转换器这条模拟路线的价值,恰恰在低频段和确定性上:输出纹波、响应时间、线性度都能用公式提前算出来,不依赖中断响应和任务调度。它适合做传感器调理、隔离变送、以及老设备模拟接口改造的人,前提是你愿意花时间算参数、调滤波、做标定。

2. 频率—电压转换器的三条技术路线与关键参数取舍

选路线之前,先把要回答的问题列清楚:输入频率范围是多少,最低频那一点允许多大的输出纹波,整机响应时间卡在多少毫秒,以及现场有没有隔离需求。这四个数字定不下来,后面选芯片、算电容全是白算。三条主流路线各有各的甜区,混着用反而容易在低频段翻车。

2.1 单稳态加低通滤波:LM331、AD650、VFC32 的通用结构

这条路线最经典,也是标题里“频率—电压转换器电路”最常见的形态。输入脉冲的每个边沿触发一个单稳态,产生固定脉宽 t 的方波;单稳态期间,内部恒流源以 Iref 向输出节点注入电荷。单个脉冲注入的电荷量 q = Iref × t,单位是库仑。设输入频率为 f,则输出电流的平均值 Iavg = f × q,这个电流流过负载电阻 RL,得到输出电压:

Vout = f × Iref × t × RL

公式里没有出现输入脉宽,只要输入脉冲窄于单稳态时间即可,这是它线性度好的根本原因。LM331 便宜、外围少,AD650 精度更高但贵,VFC32 介于两者之间。它们的共同短板是输出端必须接一个电容 Cf 来平滑电流脉冲,而这个电容同时决定了响应速度。

纹波怎么估?稳态下每个周期注入固定电荷 q,然后电容通过 RL 放电。在最恶劣的最低频点,峰峰纹波近似 ΔVpp ≈ q / Cf = Iref × t / Cf。注意这个式子里没有 f,也就是说纹波绝对值在整个频率范围内基本恒定。而最低频点的输出 Vout(min) = f_min × q × RL 很小,所以纹波占该点读数的比例最差,占满量程的比例才是验收指标。

把上面两个式子联立,可以得到设计里最硬的一条约束:

τ = RL × Cf ≥ Vout(FS) / (f_max × ΔVpp)

其中 Vout(FS) 是满量程输出电压,f_max 是满量程对应频率,ΔVpp 是允许的峰峰纹波。这个下限跟 Iref、t、RL 的具体取值都无关,是单稳态加低通结构的物理边界。

2.2 电荷泵与开关电容路线

锁相环芯片里的鉴相器后面通常跟一个电荷泵,输出电流与相位差成正比,经环路滤波器积分成电压。它的本质也是“电流脉冲 + 电容积分”,只是脉冲宽度由相位差调制而不是固定。好处是可以和锁相环共用一套环路,频率跟踪范围宽;坏处是输出与频率的关系受环路带宽、阻尼系数影响,标定比单稳态麻烦,线性度通常只能做到 0.1% 到 1%。除非系统里本来就有 PLL,否则单独为 FVC 搭一套电荷泵不划算。开关电容方案类似,靠电容切换搬运电荷,对时钟馈通和电荷注入敏感,PCB 布局不好时噪声很难压。

2.3 数字测频加 DAC/PWM 路线

STM32 的定时器输入捕获配合外部 DAC,是现在很多板子上的默认做法。它的优势是灵活:可以多路复用,可以在软件里做分段标定,可以顺便走通信上报。但低频段的短板必须认清:测频率法在 1Hz 附近,gate 时间 1 秒才有一个读数,更新率直接掉到 1Hz;测周期法虽然低频分辨率好,但每个读数要等一个完整周期,同样慢。PWM 加 RC 滤波输出模拟电压,纹波要想压到 0.1%,滤波时间常数会比单稳态路线还大。它适合输入频率不低于 100Hz、对响应时间要求不苛刻、又需要数字通信的场合。

路线典型器件线性度响应时间低频表现外围复杂度
单稳态+低通LM331 / AD6500.01%~0.1%10ms~500ms好,可到 1Hz
电荷泵PLL 内置鉴相器0.1%~1%由环路决定一般
数字测频+DACSTM32+外部 DAC取决于标定10ms~1s差,需测周期中高

2.4 用一段 Python 估算纹波与响应时间的折衷

下面这段脚本只做一件事:给定满量程输出、满量程频率和允许纹波,算出滤波时间常数的下限和对应的建立时间。它可以帮你快速判断一个需求是否物理上可行。

# 单稳态 FVC 输出滤波时间常数下限估算 def tau_min(v_fs, f_max, ripple_pp): """ v_fs : 满量程输出电压 (V) f_max : 满量程对应输入频率 (Hz) ripple_pp: 允许的峰峰纹波 (V) 返回 : 滤波时间常数下限 (s) """ return v_fs / (f_max * ripple_pp) for vpp_mv in (1, 5, 10, 50): tau = tau_min(10.0, 10000, vpp_mv / 1000.0) t_settle = 4.6 * tau # 到 1% 的阶跃响应时间,约 4.6 倍时间常数 print(f"纹波<{vpp_mv:3d} mV -> R*C >= {tau*1000:7.1f} ms, 建立时间约 {t_settle*1000:6.0f} ms")

运行结果会很直白:要求 10V 满量程、10kHz 满频、纹波压到 10mV,时间常数下限是 0.1s,建立时间约 460ms。把纹波要求从 10mV 放松到 50mV,时间常数立刻缩到 20ms,建立时间降到 92ms。这就是为什么很多现场变送器标称响应时间 200ms 以上——不是芯片慢,是纹波指标逼出来的。如果你的应用要求响应时间 20ms 同时纹波 10mV,单稳态路线基本做不到,得回头改需求或者换数字方案。

3. 用 LM331 搭一版可复现的频率—电压转换电路

理论算完,落到一块具体板子上。目标定成:输入 0~10kHz 方波,输出 0~10V 直流,满量程纹波压到 10mV 以内,供电用系统里已有的 5V 模拟轨。LM331 在这个指标下够用,外围器件也常见。

3.1 拓扑与供电

LM331 在 F-V 模式下,输入脉冲经微分网络送到比较器输入端,每个下降沿触发单稳态。定时网络 Rt、Ct 决定脉宽 t ≈ 1.1 × Rt × Ct。参考电流由 pin2 外接电阻 Rs 设定,Iref ≈ Vref / Rs,Vref 的典型值按数据手册取 1.9V。输出端 pin1 是电流源输出,接负载电阻 RL 到地,同时并在 RL 上的 Cf 完成滤波。

供电这一块容易翻车。如果板上有 buck 降压电路,模拟 5V 不要直接从 buck 输出取,中间至少加一级 LDO。buck 的开关频率及其谐波会通过电源轨耦合到参考电流上,表现为输出上叠加固定频率的噪声,看上去像纹波但跟输入频率没有关系。LDO 输出再并 10µF 钽电容加 0.1µF 陶瓷电容,靠近芯片引脚放。

3.2 关键参数计算:Rs、Rt、Ct、RL、Cf

先定脉宽 t。输入最高 10kHz,周期 100µs,单稳态脉宽取周期的四分之一左右,即 25µs,保证输入还没来得及翻第二个边沿,单稳态已经结束。Ct 选 10nF 的 C0G 或薄膜电容,不要用 X7R 或普通电解,它们的容值随温度和电压变化,会直接把脉宽带偏。

# 0~10 kHz -> 0~10 V 的单稳态 FVC 参数草算 f_max = 10_000 # 满量程输入频率 Hz v_fs = 10.0 # 满量程输出电压 V t_pulse = 25e-6 # 单稳态脉宽 s i_ref = 400e-6 # 单稳态期间参考电流 A v_ref = 1.9 # 手册参考电压,实际以数据手册为准 vpp_target = 0.01 # 允许峰峰纹波 V # 电荷量 q = Iref * t,输出 Vout = f * q * RL q = i_ref * t_pulse rl = v_fs / (f_max * q) # 负载电阻 rs = v_ref / i_ref # 参考电流设定电阻 ct = 10e-9 # 定时电容 rt = t_pulse / (1.1 * ct) # 定时电阻 # 纹波决定 Cf:ΔVpp = q / Cf cf = q / vpp_target tau = rl * cf t_settle = 4.6 * tau print(f"q = {q*1e9:.1f} nC") print(f"RL = {rl/1000:.2f} kΩ, Rs = {rs/1000:.2f} kΩ") print(f"Rt = {rt/1000:.2f} kΩ, Ct = {ct*1e9:.1f} nF, t = {t_pulse*1e6:.1f} µs") print(f"Cf = {cf*1e6:.2f} µF, R*C = {tau*1000:.1f} ms, 建立时间约 {t_settle*1000:.0f} ms")

这段代码的逻辑是:先用满量程输出反推 RL,再用允许纹波反推 Cf。运行后 RL 约 100kΩ,Rs 约 4.75kΩ,Rt 约 2.27kΩ,Cf 约 1µF。Rt 和 Rs 用 1% 金属膜电阻,温漂 25ppm 级别;Cf 用低漏电流的钽电容或薄膜电容,漏电流会在低频时把输出抬起来。

输出后面加一级电压跟随器做缓冲。这里属于典型运放电路设计场景:选低失调、低偏置电流的精密运放,输入偏置电流在几十 pA 量级,不会从 100kΩ 负载上偷走可观的电压。如果省掉跟随器直接接 ADC 采样电路,ADC 输入阻抗和采样电容会把输出拉低,读数偏低且随采样率变化。

3.3 外围器件选型清单

器件作用推荐类型注意事项
Rt设定单稳态脉宽1% 金属膜,25ppm阻值误差直接变成增益误差
Ct设定单稳态脉宽C0G 或薄膜,10nF禁用 X7R、电解,容值随温度漂
Rs设定参考电流1% 金属膜,25ppm走线短,远离数字信号
RL输出负载1% 金属膜,100kΩ阻值决定灵敏度,需与 Cf 匹配
Cf输出滤波钽电容或薄膜,1µF漏电流要小,否则低频输出抬高
缓冲运放隔离负载低失调、低 Ib 精密运放反馈走线短,加 100nF 去耦

3.4 上电调试顺序与第一组波形

板子焊完不要直接上传感器,按下面顺序走:

  1. 不接输入,只上模拟 5V,量输出节点电压,应在几毫伏以内。如果偏高,先查 Cf 漏电流和运放失调。
  2. 输入端给 1kHz、3.3V 方波,示波器交流耦合看输出,应该有约 1V 直流电平。同时探头点在 pin1 或定时电容附近,确认单稳态脉宽是 25µs。
  3. 扫 1k、2k、5k、10kHz 四个点,记录输出电压。若 1kHz 点偏低,多半是微分网络时间常数太大,脉冲被削掉了。
  4. 在 10kHz 点用示波器 DC 耦合、20MHz 带宽限制看输出纹波,应该在 10mV 峰峰附近。若明显偏大,先查 Cf 实际容值,再查输入端是否有抖动导致重复触发。

4. 标定、线性度与温漂:把误差压到 0.5% 以内

参数理论值算得再准,电阻电容都有公差,装配后必须标定。标定不是简单调一个电位器就完事,得分清零点误差和增益误差,否则调了零点,满量程又偏了。

4.1 两点标定与多点最小二乘

最简单的做法是两点标定:给两个已知频率,记录两个输出,算出斜率和截距,写进 EEPROM。如果线性度本身够好,两点标定能把零点误差和增益误差一起压下去。但如果中间点明显偏离直线,两点标定就会把误差挤到中间频段,这时候要用多点最小二乘拟合。

import numpy as np # 示例实测数据:输入频率 Hz,输出电压 V f = np.array([100, 500, 1000, 2000, 5000, 8000, 10000], dtype=float) v = np.array([0.099, 0.501, 1.002, 2.006, 5.015, 8.028, 10.030]) # 一次拟合 V = k*f + b k, b = np.polyfit(f, v, 1) v_fit = k * f + b err_mv = (v - v_fit) * 1000 print(f"灵敏度 k = {k:.6e} V/Hz") print(f"零点 b = {b*1000:.3f} mV") print("各点拟合误差 (mV):", np.round(err_mv, 2)) print(f"最大拟合误差 {np.max(np.abs(err_mv)):.2f} mV")

代码里 polyfit 返回斜率 k 和截距 b。k 对应整个通道的增益,b 对应零频时的输出偏置。看 err_mv 的分布:如果误差符号在两端和中间来回变,呈弓形,说明存在二次非线性,一次拟合压不下去,得用二次拟合或者分段查表。二次拟合只需要多存一个系数,在 STM32 里算一次乘加,对主循环负担很小。

4.2 线性度与零点的分离测量

标定前先跑一组数据,把零点和线性度分开看。零点误差是低端几个点的固定偏移,线性度是非线性误差占满量程的百分比。

输入频率理论输出实测输出绝对误差误差/满量程
100 Hz0.100 V0.099 V-1.0 mV-0.010%
1 kHz1.000 V1.002 V+2.0 mV+0.020%
5 kHz5.000 V5.015 V+15.0 mV+0.150%
10 kHz10.000 V10.030 V+30.0 mV+0.300%

这组示意数据里,误差随频率单调增大,最可能的原因是 Rt 或 Ct 的实际值偏小,导致单稳态脉宽比设计值大,增益偏高。解决办法是把 Rs 换成可调电阻微调,或者在上位机标定环节把增益系数折进去。如果误差在低端大、高端小,方向相反,那多半是零点偏移,比如运放失调或 Cf 漏电流。

4.3 温漂和长期漂移的排查

温漂来源按贡献大小排:Ct 的容值温度系数、Rt 和 Rs 的电阻温漂、运放失调电压漂移、参考电压漂移。Ct 用 C0G 后,前两项可以压到 50ppm/℃ 以内。运放失调漂移在几 µV/℃ 量级,折算到 100kΩ 负载上影响很小。真正容易被忽略的是印制板漏电流:如果输出节点附近的助焊剂没清干净,潮湿环境下漏电流能到几十 nA,在 100kΩ 上就是几毫伏的漂移。

验证方法不复杂:把板子放进恒温箱,测 -20℃、25℃、70℃ 三个点的满量程输出,算每摄氏度的相对变化。如果温漂主要出现在低端读数上,查漏电流和运放;如果高端读数整体偏移,查 Rt、Ct、Rs 和参考。

5. 从原理图到 PCB:让 FVC 精度不掉链子的布局与验证技巧

原理图对了,板子画错,前面算的参数全白搭。频率—电压转换器是模拟小信号电路,输出满量程才 10V,纹波指标在毫伏级,布局上任何一点数字噪声耦合进来都看得见。

5.1 三个具体的布局要点

第一,Rt、Ct 和 Rs 这三个定标元件必须紧贴芯片对应引脚,走线尽量短,并且远离任何开关节点。Ct 的接地端单独回到芯片的模拟地引脚,不要和数字地混在一起走。

第二,模拟地和数字地单点连接,连接点选在芯片地引脚附近,不要在两块地之间形成大面积平行走线,那等于做了一对耦合电容。如果板上有 ADC 或 DAC,数字部分的时钟线不要跨过模拟区域,必要的话在模拟区边缘加一排接地过孔做隔离。

第三,供电去耦要分级。buck 降压后的 5V 先过 LDO,LDO 输出端放 10µF 钽电容加 0.1µF 陶瓷电容,芯片电源引脚再放一个 0.1µF,距离不超过 2mm。基准引脚或参考电流设定引脚如果外接电容,用地线包一圈。

5.2 用示波器和 FFT 做终检

板子装好后,除了看纹波峰峰值,更有效的一步是看输出噪声的频谱。做法:示波器 DC 耦合,探头用弹簧地针而不是长地线夹,采一段输出波形,打开 FFT。如果谱线峰值出现在 100Hz 或其整数倍,那是电源纹波耦合,查 LDO 前的 buck 开关频率和地回路。如果峰值出现在某个固定高频,和输入频率无关,基本可以判定是开关电源或数字时钟耦合进来的。

下一步做频率扫描:输入从最低频到最高频分十个点,每个点稳定后记录输出,画成曲线。曲线上如果出现台阶或者局部斜率变化,说明单稳态在某些频点被重复触发或者漏触发,这时候要回头看输入微分网络的时间常数和脉冲幅度。先把触发稳定性解决掉,再谈标定和精度。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询