本帖最后由 xuplastic 于 2014-3-17 09:34 编辑
PWM滤波器我能想到的有这几点:
直流漂移尽量小
对交流成分衰减尽量大
本地噪音尽量小
成本问题············
还是来看看4910的滤波器吧:
这是主PWM滤波器,副滤波器一样的,只不过只有三阶,只用了一个运放,三个电容。
关于这个滤波器,我曾经发帖询问过:https://bbs.38hot.net/forum.php?mod=viewthread&tid=69679&extra=
坛子里还是高人多啊!大家可以自己去看看,主楼和5楼各有一篇文献,但是,最最坑爹的事情出现了,那篇老文献印刷不好,多处角标看不清,我找的硕士论文是照他抄的,自己没算过,也是错的!!!导致我连续几天仿真出的滤波器会自激!!!只得感叹国内的硕士太水了!!!下面我上传由我自己注释的版本,纠正了式子中的错误和纰漏(当然还可能存在新的错误和纰漏 请高手指正)
无漂移全极点有源滤波器的原理和实现.pdf
(161.91 KB, 下载次数: 640)
这个滤波器的难点在于计算,因为常见的Sallen-Key拓扑结构滤波器是一节一节的,每一节代表传递函数的一个二次因式,所以不必把传递函数的分母展开进行计算(况且现在都有软件)。但是这个滤波器是一个整体,必须把分母全部展开进行计算,系数很大或很小,数量级相差很大,计算器算都很痛苦,所以我请出了Matlab········没装matlab的就对不起了·········
编了一个小程序,是这样用的:
先打开matlab,在matlab左边的文件目录中进入CalcResistors.m所在的文件夹,打开CalcResistors.m,看到c1,c2,c3····c7七个系数,分别代表电路中C1,C2······C7这七个电容的容值,把它修改成你要的数目,例如我默认的是4.7*10e-6,也就是4.7uF,建议着七个电容全部一样大小,因为我在实践中发现如果大小不一的话,方程收敛极为缓慢(我设定的最大迭代次数是100w次,i7单核要跑2分钟吧),如果收敛的好,一下就出来了,修改后别忘了保存。然后运行以下代码:
fc=10;
[num,den] = besself(7,fc*2*pi);
a=den/num(8);
a1=a(7);
a2=a(6);
a3=a(5);
a4=a(4);
a5=a(3);
a6=a(2);
a7=a(1);
x=[ 1 1 1 1 1 1 10000 10000 10000 10000 10000 10000 10000 ];
fsolve('CalcResistors',x,optimset('MaxFunEvals',1000000,'MaxIter',1000000))
命令最上面的fc是滤波器转折频率,单位是Hz,这代码只适用于一部分7阶低通滤波器,会用Matlab的可以自由设定滤波器的类型和参数,注意有的滤波器参数要求的不一样,可能不是fc。此处不再赘述了,不懂请help。
CalcResistors.m在这里:
CalcResistors.rar
(482 Bytes, 下载次数: 129)
命令运行完成后是这样的:
产生了一个beta数组,一共有13个数,其中前六个是计算过程中间数,后七个才是各个电阻的大小,别忘了数量级,如R1是9.155K欧·······
设计完后务必放到仿真软件中去,因为程序又可能出错,有时甚至会得到负数结果,仿真一下,划一下伯德图确定没有问题。
这是我仿真的:
一般PWM频率是100Hz,那么衰减可达140dB,也就是0.1ppm,足够了
先更新到这里吧·······················
|