PWM波转DC直流之二阶RC低通滤波器设计

article/2025/10/21 10:44:40

1.原理及用途

(1)原理直接引用*原子STM32讲解PWM转DAC的篇章*

 

(2)当MCU中DAC功能不够用时,而还要输出可控的DC电平,这时可以使用这种模式来达到目的;另外一些由PWM控制的负载器件,比如比例阀、电机,要测试这些负载流过的等效电流,也可以使用这种方法

2.需求分析

我们这里使用二阶RC低通滤波来达到检流电阻的PWM波等效DC直流电平的功能;

 

电路示意图如下,这里的PWM不是MCU直接输出的,而是经过推挽放大电路处理过的信号

 

 

R11/R12 、C3/C4组成二阶RC滤波;这里R11=R12、C3=C4

3.数学计算

假如我们要求经过滤波后结果达到检测电流±1mA,则1个位的精度达到1.5/2048=0.0007324V,采样电阻电平范围0-1.5V

假设被滤波的信号电压范围0-1.5V,那么一次谐波的最大值1.5*2/π=0.95496,那么电路要至少提供-20log(0.95496/0.0007324V)=-63dB衰减

这里使用的PWM是F=20KHz

如果是一阶RC滤波,那截止频率Fs的计算由-10*log[1+(F/Fs)^2]=-63dB,得Fs=14Hz

如果是二阶RC滤波,那截止频率Fs的计算由-20*log[1+(F/Fs)^2]=-63dB,得Fs=532Hz

参数RC选择:

这里使用二阶低通滤波器,Fs=1/2πRC,得R=1KΩ,C=300nF(这里是由设计者选取),(R11=R12=R,C3=C4=C),这个RC乘积是个定值,至于R  C选择组合,可根据实际应用来确定,但是有一个思路:R或C不能太小,比如R取很大时,C必然取小,这时由于电路的寄生效应,导致最后的等效电容增大比例很多,会影响滤波效果,这样就不行了;反过来选取R一样

一阶二阶对比,除了电路上不同;计算的截止频率差别也是很大

二阶衰减比一阶严重一点、但是二阶延迟较小,而且一阶纹波大

4.电路仿真及波形数据-二阶滤波器

因为实际负载工作电流范围:0-1A,故而电流电阻上的电压范围0-1.5V

参数说明:这里使用Cadence OrCAD电路仿真功能

V1是输出最小电平

V2是输出最大电平,实际在V1-V2之间选择来试验

TD是PWM波延迟时间

TR是边沿上升时间

TF是边沿下降时间

PW占空比

PER周期

由图可知绿色波形在t=3-4ms时达到稳定,最大有3-4ms的延迟(按照100%计算)

实际的RC参数确定,要根据输出的延迟时间、纹波大小来综合考量;当然这个只是仿真,到实际硬件电路中,你会发现还要有更改

仿真波形中,你会发现滤波后的波形会有衰减,这个要进行补偿

5.硬件实验波形及数据

最后选定参数R=1kΩ、C=220nF 实际硬件测得的波形如下:

仿真结果如下:

对比波形,仿真和实际硬件测试基本上一致


http://chatgpt.dhexx.cn/article/7uJ4sj4r.shtml

相关文章

二阶低通滤波器(通用滤波器)

一阶低通滤波器的详细算法介绍请参看下面文章: 一阶RC算法公式和梯形图代码 PLC信号处理系列之一阶低通(RC)滤波器算法_反馈信号低通滤波器_RXXW_Dor的博客-CSDN博客1、先看看RC滤波的优缺点 优点:采用数字滤波算法来实现动态的RC滤波,则能很好的克服模拟滤波器的缺点; 1…

一阶RC和二阶RC低通滤波器

一阶RC和二阶RC低通滤波器 RC电路原理推导一阶RC低通滤波电路二阶RC低通滤波电路 RC电路原理推导 因为最近有做一些RC滤波电路的东西,这部分内容都是在大学本科的时候学习的,很多东西也记得不是很清晰了,手头也没有资料翻阅,在网…

转:二阶有源低通滤波器设计

<link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-e2445db1a8.css"><div class"htmledit_views">滤波器是一种使用信号通过而同时抑制无用频率信号的电子装置, 在信息处理、数据传送…

二阶低通滤波器

为了改进一阶低通滤波器滤波器 凡是有能力进行信号处理的装置都可以称为滤波器。在近代电信装备和各类控制系统中&#xff0c;滤波器应用极为广泛&#xff1b;在所有的电子部件中&#xff0c;使用最多&#xff0c;技术最复杂要算滤波器了。滤波器的优劣直接决定产品的优劣&…

[有源滤波器]Sallen-key开关电容电路(二阶低通滤波器)

目录 目标电路模型二阶低通sallenkey电路开关电容电路 所需器件CD40106BCD4016BLM741 接线图 目标 实现一个sallenkey二阶低通滤波器&#xff0c;其中的电阻用开关电容电路替换。 电路模型 二阶低通sallenkey电路 开关电容电路 其可以等效为一个电阻R&#xff0c;因此我们可…

Sallen-Key二阶低通滤波器——设计问题浅析

目录 前言1 Sallen-Key二阶低通滤波器结构2 截止频率3 结语 前言 这两天接了个简单的活&#xff0c;关于设计一个Sallen-Key二阶低通滤波器&#xff0c;有一些体会。 1 Sallen-Key二阶低通滤波器结构 这个结构很简单&#xff0c;优势就是在于简易实现二阶低通。这种类电压跟随…

对一阶二阶低通滤波器推导,并用IMU数据验证算法效果

文章背景 一直想学习一下数字信号处理算法&#xff0c;而不是每次遇到数据处理就求平均&#xff0c;求最值&#xff0c;看容差&#xff0c;做滑动窗。。。 数字信号处理算法已经很成熟了&#xff0c;但网上大部分还是用matlab跑仿真&#xff0c;设计几个不同频率的sin信号相加…

二阶低通滤波器IIR的五个参数推导过程

最近在研究飞控代码看到了二阶低通滤波器IIR的软件代码&#xff0c;由于之前没有了解过二阶滤波器的原理&#xff0c;对代码十分懵逼&#xff0c;经过学习&#xff0c;特将学习成果发布&#xff0c;有兴趣的小伙伴看看&#xff0c;如果哪里不对&#xff0c;请提出来&#xff0c…

利用MATLAB生成软件二阶低通滤波器(绝对靠谱)

利用MATLAB生成软件二阶低通滤波器 嵌入式的软件滤波中&#xff0c;除了均值和限幅&#xff0c;我们常用的也就是一阶或者二阶&#xff0c;这些都是可以通过c语言代码来实现的。其过程包括分母A和分子B参数的求取&#xff0c;再者通过公式得出想要的输出结果。 文章目录 利用MA…

第八篇,滤波:二阶低通滤波、卡尔曼滤波

目录 1.引言 2.理解与demo 2.1 二阶低通滤波 2.1.1 LP_2Order的个人理解 2.1.2 refer 2.1.3 demo 2.2 卡尔曼滤波 2.2.1 理解 2.2.2 refer 2.2.3 卡尔曼滤波的几个tips 2.2.4 demo 3.其它 1.引言 相比于上一篇&#xff0c;这篇会写的简单很多&#xff0c;可能因为…

【模电】0007 有源滤波器2(二阶有源滤低通波器)

滤波器的阶数越高&#xff0c;则可以得到越陡峭的频率响应&#xff0c;使得在通带内尽量不衰减信号&#xff0c;而在阻带内尽可能多地衰减信号。 上一节我们讲的一阶有源滤波器&#xff0c;在对数坐标系上&#xff0c;其阻带内的衰减是20dB/十倍频程&#xff1b;如果想要更好的…

什么是二阶滤波器?有什么优点?

原文来自公众号&#xff1a;工程师看海 滤波器是常见的信号调理电路&#xff0c;其中低通滤波器最为普遍&#xff0c;我们常听说一阶滤波器、二阶滤波器&#xff0c;二者有什么差别呢&#xff1f; 低通滤波器有3个重要参数&#xff1a;通带、阻带和过度带&#xff0c;理想的滤…

【滤波器】5. 三种类型二阶低通滤波器

滤波器的品质因数 Q&#xff0c;也称为滤波器的截止特性系数。其值决定于 f f 0 ff_0 ff0​ 附近的频率特性。按照 f f 0 ff_0 ff0​ 附近频率特性的特点&#xff0c;可将滤波器分为 巴特沃斯 ( Butterworth)、切比雪夫(Chebyshev) 和 贝塞尔(Bessel) 三种类型。下图是这三种…

二阶低通有源滤波器设计与仿真测试

前言 传感器输出的测量信号中&#xff0c;除了有用的信息外&#xff0c;往往还包含许多噪声以及其他与被测量无关的信号&#xff0c;从而影响测量精度。这冲噪声般随机性很强&#xff0c;难于从时域中直分离出来&#xff0c;但限于其产生的物理机理、噪声功率是有限的&#xf…

带农历万年历C语言程序,c语言万年历程序代码

本篇文章介绍了使用c语言实现万年历程序的代码&#xff0c;希望对学习c语言的朋友有帮助&#xff01; c语言万年历程序代码 C语言实现万年历程序的代码如下&#xff1a;#include int year(int y) { if ((y%40) && (y%100!0) || y%4000) return 366; else return 365; …

Java万年历程序

【程序说明】该程序实现了输出任意一年的日历&#xff0c;并输出该年中任意一天是该年的第几周。 【规定】①闰年366天&#xff0c;2月29天&#xff1b;平年365天&#xff0c;2月28天。 ②周日为某月的第一天&#xff0c;周六为该月的最后一天。 ③某年的1月1号为该年的第一天…

Java 实现万年历

通过Java的基本语法来实现我们的万年历 请看代码 public class CalDate{public static void main(String[] args&#xff09;{Scanner sc new Scanner(System.in);System.out.println("请输入年&#xff1a;");int year sc.nextInt();System.out.println("请…

C++万年历程序

C万年历 文章目录 C万年历一、运行结果二、源代码 一、运行结果 二、源代码 #include<iostream> #include<stdio.h> #include<string.h> #include<iomanip> using namespace std;class Calendar{ public :Calendar(){TotalDays 0;MonthDays 0;};voi…

编写万年历程序时的一些意外收获

前些天在CSDN每日一练上做到了万年历程序的一道题&#xff0c;觉得很有意思&#xff0c;于是便尝试自己写写看&#xff0c;结果遇到了“公元1年1月1日是星期几”这个问题。拿着手机翻华为日历翻了半天&#xff0c;找到了这一天是星期六&#xff1a; 然而我发现&#xff0c;根据…

C语言编写小程序——万年历

一、杂谈 大一学了C之后一直困惑&#xff0c;C到底怎么用&#xff1f;它不像HTML那么直观&#xff0c;也没有SQL那么常用&#xff0c;更没有Java那么功能强大&#xff0c;那他为何还存在&#xff0c;并依然火热呢&#xff1f; 答案很简单&#xff1a;编程语言是一家&#xff0c…