38度发烧友--38Hot Volt-Nuts

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: xuplastic

PWMDA的设计、计算和制作【5月9日最后更新】

[复制链接]
发表于 2014-2-18 08:42:04 | 显示全部楼层 |阅读模式
本帖最后由 xuplastic 于 2014-5-9 22:04 编辑

PWMDA似乎是个老话题了,因为好几年前就有人讨论过了:

捕获.PNG


可以看见这是2009年的帖子了,可以很遗憾楼主在2012年后也没再活动过了,是否有所进展也不得而知·········


特别值得一提的是唐老师(thy888)是专业维修校准源的,对PWM很有研究,发表了的多篇帖子,值得学习一下。

但PWM也是个新话题,其讨论的丰富程度远远比不上电阻升压,当然,PWM说起来容易,做起来很难,这是要有心理准备的。

PWM具有众多优点,如温漂极小,老化极小,不需要昂贵的精密电阻,分压比就是占空比,方便调节,线性较好。更重要的是他还能扩展出其他很多,如PWM升压7V转10V,多功能校准源,背靠背作对比的话也可以是个ADC(反复调节分压比直到指零计为零)

PWM也有缺点,噪音是罪魁祸首,这是娘胎里带来的,我们只能尽量减小噪音,其他的大缺点就不多了,要不然PWM也不会在FLuke的校准仪里长久不息。

下面我就分块来分析一下PWM,别插楼啊
 楼主| 发表于 2014-2-18 08:42:17 | 显示全部楼层

PWMDA的设计思路

本帖最后由 xuplastic 于 2014-2-18 13:57 编辑

总的设计思路:
总的来讲PWMDA算不上复杂,无非就是以下几个步骤:

数字PWM波---->数模隔离---->开关器件+基准电压---->滤波器---->输出缓冲、保护等

先说说数字PWM波和数模隔离:



这一块其实没有太多好说的,分立数字芯片,单片机,CPLD,FPGA,专用PWM芯片。。。。数字电路发展很快,可选性很多。
当然,鉴于使用的方便,我认为带PWM输出的单片机和CPLD,FPGA是最佳选择。

值得注意的是虽然PWM频率很低,为了照顾到分辨率,常见的也就是200Hz一下吧,但是由于对精度要求很高,所以上升沿、下降沿不能含糊,边沿必须尽量陡峭,这一点不难做到。

为了避免向模拟电路部分传递噪音,数模隔离也是必须的。当然最好选用高速数模隔离芯片,如Si8420。下面是Datron4910的数模隔离(部分):
捕获.PNG


可以看见是磁耦和光耦的结合,那个时代应该还没有现成的高速隔离芯片。值得注意的是它并不是简单地只传递了PWM波,而是把时钟信号也传递了过去,这样可以使已经发生变形的PWM波通过D触发器和时钟信号,强制做到同步,避免了边沿不够陡峭和相位失真的问题。

开关器件+基准电压:

这个就比较沉重了······因为开关速度和响应速度直接关系到PWMDA的线性,但是想做快也是很难的,管子本身的开关速度,走线寄生参数和干扰,驱动电路的性能,基准缓冲的驱动性能,都要考虑。

想到哪说哪吧,先说说开关管。D4910里用的是JFET做开关管(J175、J106),而唐老师的实验板用的是NMOS(VN0104)(这里好像窃取唐老师的劳动成果和知识产权了),一直不明白这两种管子用在小信号开关管上各有什么优缺点。说上升和下降时间,最大值都不差什么,看DS的话。说导通内阻,好像也相差无几,其他我就想不到什么了,额,还有输入电容,也差不多。当然JFET不分DS极可算一优点,,,可惜在这里没用··········


老一辈的仪器中JFET做信号切换多一些,但是几十里2000中积分器部分的开关是VN0605,我只能猜测是MOS的工艺难一点,以前不好做吧。当然在现代的功率控制中,NMOS是大量使用了。


由于下一级滤波器是要吸取一定电流的,所以基准的驱动能力也将成为问题,还是来看一下4910吧:
捕获.PNG

老套的三极管扩流,Q103刚开始没看明白(原谅我模电书几乎全新的罪恶吧),这个应该是保护用的,输出电流过大时将Q102基极电位拉低,使Q102关断。Q102就是扩流管了。我一直担心的问题是开关管的高速开关会对扩流电路产生高速冲击,op27和bc184构成的缓冲电路能否很好地应对这种高速冲击?如果反应速度太慢,线性就会不好。当然并联电容可以一定程度上改善问题,但是D4910并没有这么去做,也许这个问题没有我想象的那么糟糕。我是准备用现成的高速缓冲器,当然成本会上上············具体有待验证············


开关管的G极对外相当于一个电容,所以想要很好的驱动,必须要有足够大的瞬间电流,以往使用三极管做的驱动电路,如5440B。但是现在由于电源管理的兴起,MOS驱动芯片层出不穷,如MD1210,我选用的是ISL55110,便宜一点,应该也够用。

滤波器部分:

这个有专门的一层楼来讲计算,这里先讲一下器件的选择吧。
相同的传递函数下,电阻和电容的大小成反比,或者严密点讲:负相关

注意到4910的滤波器的几个大电阻都是100k左右,而NE5534的输入电流高达几百纳安,所有4910用了U404做了输入端提高输入阻抗,当然,最后一级没有这样做,用的是OP07,源电阻也不大,可以不用。

大电阻带来的坏处是:易受干扰,电荷泄漏,需要高输入阻抗。好处当然就是不用那么大的电容了
大电容带来的坏处是:体积大,经济代价,大容量高质电容不好找。好处当然就是不用大电阻了

电容最终选定了松下WFA和WIMA——MKP10这两种,MKP10网上有拆机件,4.7uF,价格也算合理,松下WFA也不算太贵。


为了减小分布参数,选用精密贴片电阻,当然精密纯属心理安慰,只要是合格的金属膜电阻,温飘和老化对滤波器影响可忽略。

运放选用LF356,美中不足是觉得摆率有点低,其他都还好吧·········

设计部分先更新到这里吧···························


回复

使用道具 举报

 楼主| 发表于 2014-2-18 08:42:31 | 显示全部楼层

PWM滤波器的计算

本帖最后由 xuplastic 于 2014-3-17 09:34 编辑

PWM滤波器我能想到的有这几点:
直流漂移尽量小
对交流成分衰减尽量大
本地噪音尽量小
成本问题············

还是来看看4910的滤波器吧:
捕获.JPG


这是主PWM滤波器,副滤波器一样的,只不过只有三阶,只用了一个运放,三个电容。

关于这个滤波器,我曾经发帖询问过:https://bbs.38hot.net/forum.php?mod=viewthread&tid=69679&extra=
坛子里还是高人多啊!大家可以自己去看看,主楼和5楼各有一篇文献,但是,最最坑爹的事情出现了,那篇老文献印刷不好,多处角标看不清,我找的硕士论文是照他抄的,自己没算过,也是错的!!!导致我连续几天仿真出的滤波器会自激!!!只得感叹国内的硕士太水了!!!下面我上传由我自己注释的版本,纠正了式子中的错误和纰漏(当然还可能存在新的错误和纰漏请高手指正)
无漂移全极点有源滤波器的原理和实现.pdf (161.91 KB, 下载次数: 641)


这个滤波器的难点在于计算,因为常见的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, 下载次数: 130)

命令运行完成后是这样的:
捕获.JPG


产生了一个beta数组,一共有13个数,其中前六个是计算过程中间数,后七个才是各个电阻的大小,别忘了数量级,如R1是9.155K欧·······

设计完后务必放到仿真软件中去,因为程序又可能出错,有时甚至会得到负数结果,仿真一下,划一下伯德图确定没有问题。

这是我仿真的:
捕获.JPG


一般PWM频率是100Hz,那么衰减可达140dB,也就是0.1ppm,足够了


先更新到这里吧·······················
回复

使用道具 举报

 楼主| 发表于 2014-2-18 08:42:49 | 显示全部楼层

PWM电路的制作

本帖最后由 xuplastic 于 2014-5-9 22:07 编辑

正所谓眼高手低,设计不容易的东西做起来更难


开关电路:待确定
基准缓冲:
待确定

滤波器:
待确定


试验阶段:

IMG_20140508_225502.jpg


PWM波又CPLD产生,暂时没有隔离芯片,就直接模数共地把信号传过去

开关管由EL7156代替,方便,现成的,速度快

下面是线性度展示,零点大约是19uV,也就是读数都要减去19尾数


IMG_20140508_225639.jpg
100ns工作脉宽


IMG_20140508_225729.jpg
200ns工作脉宽


IMG_20140508_225820.jpg
300ns工作脉宽

IMG_20140508_225908.jpg
1000ns工作脉宽


IMG_20140508_225947.jpg
2000ns工作脉宽


IMG_20140508_230030.jpg
3000ns工作脉宽


IMG_20140508_230118.jpg
7000ns工作脉宽


IMG_20140508_230208.jpg
10000ns工作脉宽

IMG_20140508_230412.jpg
20000ns工作脉宽

IMG_20140508_230503.jpg
30000ns工作脉宽

买的晶振是10M的,脉宽最小100ns,所以最小是100uV步进,有些大,但是再做小了也很难,估计极限也就是10uV步进,但是线性肯定就不可能像100uV步进那么好了
噪音控制的并不好,峰峰值大约有9uV!还在改进中,电路板的屏蔽和保护环的设计很重要,还有运放的选型比我想象中的复杂!

先说这么多吧,本人还是学生,正在准备托福考试,很忙·········虽然每天还都在刷论坛














回复

使用道具 举报

 楼主| 发表于 2014-2-18 08:43:07 | 显示全部楼层


占楼占楼占楼
回复

使用道具 举报

 楼主| 发表于 2014-2-18 08:43:20 | 显示全部楼层
应该粘钩楼了吧················
回复

使用道具 举报

发表于 2014-2-18 09:07:35 | 显示全部楼层
期待楼主更新贴子讲解
回复

使用道具 举报

发表于 2014-2-18 09:46:17 | 显示全部楼层
坐等楼主讲解
回复

使用道具 举报

发表于 2014-2-18 09:50:49 | 显示全部楼层
楼主真是好人啊。。。
一定不辜负你的,好好学习
回复

使用道具 举报

发表于 2014-2-18 10:13:09 | 显示全部楼层
定是一篇好文章,等ing
回复

使用道具 举报

发表于 2014-2-18 10:43:50 | 显示全部楼层
关注一下,最好把有源滤波部分能详细的讲解一下
回复

使用道具 举报

发表于 2014-2-18 10:43:52 | 显示全部楼层
等楼主讲解
回复

使用道具 举报

发表于 2014-2-18 10:53:49 | 显示全部楼层
支持。
回复

使用道具 举报

发表于 2014-2-18 11:47:44 | 显示全部楼层
给你一个新思路,在我们的产品中采用过。同样是PWM做DA,但不是通过滤波,而是通过积分,这样只要一个PWM周期就可以得到所需电压。16位的定时器再结合软件扩展,基本可以达到17位的分辨率。输出由于积分电容的漏电问题,有一定的非线性,我们通过软件进行补偿,校正时需要测试高、中、低三个校正点。
回复

使用道具 举报

发表于 2014-2-18 11:49:05 | 显示全部楼层
这个要记号一下
回复

使用道具 举报

发表于 2014-2-18 11:57:04 | 显示全部楼层
板凳       回头慢慢   学习
回复

使用道具 举报

发表于 2014-2-18 12:21:26 | 显示全部楼层
有实际的制作就好了.
回复

使用道具 举报

 楼主| 发表于 2014-2-18 14:07:02 | 显示全部楼层
FlyMouse 发表于 2014-2-18 11:47
给你一个新思路,在我们的产品中采用过。同样是PWM做DA,但不是通过滤波,而是通过积分,这样只要一个PWM周 ...

这个我也想过,类似于积分ADC的逆过程

但是这个过程是怎么连续进行的呢?一个PWM周期积分出一个电压,然后呢?

而且精度不好做高,运放的输入偏流和失调都会影响
回复

使用道具 举报

发表于 2014-2-18 14:46:37 | 显示全部楼层
高人,理论与实践都有,期待后续
回复

使用道具 举报

发表于 2014-2-18 21:11:53 | 显示全部楼层
xuplastic 发表于 2014-2-18 14:07
这个我也想过,类似于积分ADC的逆过程

但是这个过程是怎么连续进行的呢?一个PWM周期积分出一个电压, ...

横河的2552电压电流源就是用的积分方法
回复

使用道具 举报

 楼主| 发表于 2014-2-18 21:16:44 | 显示全部楼层
simon51 发表于 2014-2-18 21:11
横河的2552电压电流源就是用的积分方法

有公开的资料么?

PWM的Datron4910和fluke5440B,还有TR6120都是有资料的
回复

使用道具 举报

发表于 2014-2-18 21:27:46 | 显示全部楼层
xuplastic 发表于 2014-2-18 21:16
有公开的资料么?

PWM的Datron4910和fluke5440B,还有TR6120都是有资料的

没有啊,论坛有2553的
回复

使用道具 举报

 楼主| 发表于 2014-2-18 21:47:37 | 显示全部楼层
本帖最后由 xuplastic 于 2014-2-18 21:55 编辑
simon51 发表于 2014-2-18 21:27
没有啊,论坛有2553的

2553精度不高啊,才三位半,两片DA做到这一点毫无压力啊,不用这么麻烦了

不过还是有一定的学习意义
回复

使用道具 举报

发表于 2014-2-18 21:51:43 | 显示全部楼层
xuplastic 发表于 2014-2-18 14:07
这个我也想过,类似于积分ADC的逆过程

但是这个过程是怎么连续进行的呢?一个PWM周期积分出一个电压, ...

采样保持呀。我们做的精度等同于成品16位DA,下面还准备进一步挖掘这个电路的潜力。
回复

使用道具 举报

 楼主| 发表于 2014-2-18 22:01:16 | 显示全部楼层
FlyMouse 发表于 2014-2-18 21:51
采样保持呀。我们做的精度等同于成品16位DA,下面还准备进一步挖掘这个电路的潜力。

明白了,也看了2553的原理图,不过随着精度的提高,所有问题都会越来越麻烦
虽然一个周期就能出结果,速度很快,但是噪音也会变大吧,PWM信号的抖动被实时的反映在了输出上(不过也可以加个滤波器?这就有点不伦不类了),个人的一点猜测,大家共同进步哈




回复

使用道具 举报

发表于 2014-2-18 22:57:13 | 显示全部楼层
时钟漂移影响大不大呢?
回复

使用道具 举报

 楼主| 发表于 2014-2-18 23:12:15 | 显示全部楼层
fffofo 发表于 2014-2-18 22:57
时钟漂移影响大不大呢?

只要短稳好就行
回复

使用道具 举报

发表于 2014-2-19 11:35:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2014-2-19 11:50:58 | 显示全部楼层

亲身实践过,单片机自带的RC振荡器是不行的,只能保证4位左右,后面老在跳,晶振就OK。
回复

使用道具 举报

 楼主| 发表于 2014-2-19 12:27:58 | 显示全部楼层
qinchang 发表于 2014-2-19 11:50
亲身实践过,单片机自带的RC振荡器是不行的,只能保证4位左右,后面老在跳,晶振就OK。

RC应该是太差了,我是买了两块有源晶振,多掏点钱上温补晶振应该更好一点,不过个人觉得还没必要

看你也做过PWM,驱动和缓冲电路应该是难点吧

4910的驱动电路很复杂,其实我也没看很明白,不过一个重要原因应该是他没有外部电源,因为是电池供电,所以要采取自举来获得比10V更高和比地更低的驱动电压来控制JFET,我这个不必拘泥于这一点

你的噪音最后控制到了多少?有什么宝贵经验也可以分享一下啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表