amobbs.com 阿莫电子技术论坛

标题: 做电源时发现一种提高DA分辨率的方法! [打印本页]

作者: youlongam    时间: 2014-11-23 21:01
标题: 做电源时发现一种提高DA分辨率的方法!
本帖最后由 youlongam 于 2014-11-23 21:36 编辑

        在用STM32F10X做数控电源时发现12位的DA分辨率不够用,开始想把两个DA的电压通过一个硬件
加法器合起来,发现那样很麻烦,后来想到一种方法比较简单,就是通过软件用DA输出一个具有PWM特性
的波形,1、通过改变DA的值可以快速的改变DA的输出电压,具有12位分辨率。
            2、调节PWM的占空比可以实现比12位更高的分辨率!

电路图如下:
[attach]238769[/attach]

具体使用效果怎么样呢?举个例子,我的电源直接用12位分辨率的DA很难把输出电压刚好定在10.000V,
用了这种方法后可以做到定在10.000V!
[attach]238770[/attach]
作者: NJ8888    时间: 2014-11-23 21:09
本来精度只受制于参考电压,现在又受制358的温度 失调特性了
作者: youlongam    时间: 2014-11-23 21:11
NJ8888 发表于 2014-11-23 21:09
本来精度只受制于参考电压,现在又受制358的温度 失调特性了

为了好玩!
作者: babysnail    时间: 2014-11-23 21:12
NJ8888 发表于 2014-11-23 21:09
本来精度只受制于参考电压,现在又受制358的温度 失调特性了

不能这么说。这里的358只是原理。 是个buffer。   

lz的思法很好。 原来的DA相加用个变相的方法在单片机内部实现了。

作者: youlongam    时间: 2014-11-23 21:16
babysnail 发表于 2014-11-23 21:12
不能这么说。这里的358只是原理。 是个buffer。   

lz的思法很好。 原来的DA相加用个变相的方法在单片 ...

是啊,原来很难把电压搞好调到10.000V,现在就可以了!
作者: RudeBoy    时间: 2014-11-23 21:17
pwm由后面的电容变成模拟?
作者: xly    时间: 2014-11-23 21:19
精度不够? 反馈补偿直流增益太小,也可能导致这个现象。
作者: 孤独_求败    时间: 2014-11-23 21:20
通过软件用DA输出一个具有PWM特性的波形?请问楼主是怎么实现的呢?
作者: babysnail    时间: 2014-11-23 21:23
本帖最后由 babysnail 于 2014-11-23 21:26 编辑
youlongam 发表于 2014-11-23 21:16
是啊,原来很难把电压搞好调到10.000V,现在就可以了!


2^12=4096, 如果是24V的话, 一档就是 24/4096=0.005859375 。 如果增加个4位,2^16=65536,24/65536=0.0003662109375。 自然很轻松。
作者: babysnail    时间: 2014-11-23 21:24
RudeBoy 发表于 2014-11-23 21:17
pwm由后面的电容变成模拟?

滤波啊! 其实根据需要,可以用有源低通的。
作者: youlongam    时间: 2014-11-23 21:27
孤独_求败 发表于 2014-11-23 21:20
通过软件用DA输出一个具有PWM特性的波形?请问楼主是怎么实现的呢?

用DA模拟上图的波形,最好用定时器,频率最好高点,大于100HZ。
作者: youlongam    时间: 2014-11-23 21:28
babysnail 发表于 2014-11-23 21:23
2^12=4096, 如果是24V的话, 一档就是 24/4096=0.005859375 。 如果增加个4位,2^16=65536,24/65536=0.0 ...

是啊,看来你是高手!
作者: linread    时间: 2014-11-23 21:36
提高了输出精度,降低了输出稳定性,输出值会飘。不过这想法真不错
作者: chenchaoting    时间: 2014-11-23 21:50
思路不错,比如要输出3000 3001 中间的数,那么就通过占空比去分这两个数,得到分辨率更高的值
作者: fiddly    时间: 2014-11-23 21:55
思路不错,很强大哈!
作者: xgzn    时间: 2014-11-23 21:58
好能折腾,赞!
作者: marshallemon    时间: 2014-11-23 22:18
你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db,看你这电路恐怕难以胜任
作者: johnlj    时间: 2014-11-23 22:27
思路不错,不过要是12bit不够的话,不知楼主需要那么高的精度干什么
作者: youlongam    时间: 2014-11-23 22:32
marshallemon 发表于 2014-11-23 22:18
你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db, ...

DAC输出的参考是2.5V,我只在DA输出值的+/- 1幅度 做PWM调节,其他的问题就没考虑那么多了!
作者: yuhang    时间: 2014-11-23 23:05
用两片 DA 做加法是个很不错的方式

不过接缝处会有点小麻烦
作者: DOER    时间: 2014-11-23 23:22
楼主,PWM是很常用的DA,你这个图做不到高精度,有很多工程因素要考虑的
作者: zhaoxucsu    时间: 2014-11-23 23:24
抖动
低位有效,譬如8位da能“抖动到”10位
高位抖动意义不大唉,受制于模拟电路的精度
作者: JackFrost    时间: 2014-11-23 23:55
我是用2个通道12BIT DAC 然后用运放加法器合成一个高BIT DAC的,轻松实现16BIT以上的分辨率,不过设定输出的值的确非常伤脑筋,得多点矫正曲线拟合,而且廉价的DAC 非线性很差,并且噪声大。楼主的思路不错,不过也是担心滤波后噪音到底能降到什么程度
作者: babysnail    时间: 2014-11-24 00:03
zhaoxucsu 发表于 2014-11-23 23:24
抖动
低位有效,譬如8位da能“抖动到”10位
高位抖动意义不大唉,受制于模拟电路的精度 ...

你说持抖动指的是“插值”吧?  提转换频率,采样频率每提高一倍,则系统的信噪比提高 3dB,相当于量化比特数增加了 0.5bit.


作者: babysnail    时间: 2014-11-24 00:11
JackFrost 发表于 2014-11-23 23:55
我是用2个通道12BIT DAC 然后用运放加法器合成一个高BIT DAC的,轻松实现16BIT以上的分辨率,不过设定输出 ...

这样加法器的比例电阻精度是个问题。 连选择都是个问题,假设为高8位和低8位。 差256倍,那么必需这么选电阻。R1=R2=1k,  R3=256k, 256K 这怎么选啊!

随手上个标准电阻的阻值表:

[attach]238818[/attach]


作者: 机器人天空    时间: 2014-11-24 00:26
yuhang 发表于 2014-11-23 23:05
用两片 DA 做加法是个很不错的方式

不过接缝处会有点小麻烦

用两片DA怎么做加法,求指教
作者: zichongde    时间: 2014-11-24 00:29
楼主想法很创新,不过我也在担心着噪声问题。学习了,多谢分享~
作者: BOERLBH    时间: 2014-11-24 00:38
没看懂楼主的方法。。如果想用PWM 输出 模拟电压, 为什么不直接用 PWM 功能 做DAC 呢? 还要用DAC 模拟PWM ?
作者: HYLG    时间: 2014-11-24 00:45
办法是想出来的。
作者: agilityChen    时间: 2014-11-24 00:49
这个方法就叫抖动。楼主用的是2值的抖动,如果用多值抖动,输出纹波可以更小。
作者: ab3504    时间: 2014-11-24 05:53
楼主想法很创新,学习了,多谢分享
作者: bbbbbv    时间: 2014-11-24 09:29
楼主的思路是不是以DA 输出为基准,再叠加PWM ?   谢谢!
作者: brieve    时间: 2014-11-24 09:54
  明白楼主的方法了,起始用GPIO也可以通过PWM的方法当作DA使用,楼主相当于在单片机DA上面增加了一个DA,位数自然上去了。
作者: brieve    时间: 2014-11-24 09:55
收藏到影响笔记了,很不错的想法。
作者: redroof    时间: 2014-11-24 10:15
yuhang 发表于 2014-11-23 23:05
用两片 DA 做加法是个很不错的方式

不过接缝处会有点小麻烦

用一个高级AD做反馈吧!
不然线性度一定不够
例如,低分辨率DA的DNL是自身的2LSB,换算到整个合成DA的范围(假如合成结果多了4bit),就是2*16=32个LSB
高分辨率的DA虽然可以轻松的分辨到合成结果的1个LSB,但你怎么叠加也躲不过前级这个32LSB的DNL
最终你等效出的这个DA,虽然分辨率很高,但是DNL仍然是低分辨率DA的DNL值。INL其实也同样。
要这种分辨率有何用??
用它的唯一方法是增加一个高位AD来反馈,用高位AD的测量结果来修正两个DA的输出。这样只要DA分辨率够,其它什么参数都不用考虑。
可惜这样一来,系统输出速度就降为了这个AD的转换速度。高位AD远远慢于两个中低位的DA




作者: youlongam    时间: 2014-11-24 10:17
bbbbbv 发表于 2014-11-24 09:29
楼主的思路是不是以DA 输出为基准,再叠加PWM ?   谢谢!

是的啊,不过需要软件来完成!
作者: redroof    时间: 2014-11-24 10:40
youlongam 发表于 2014-11-24 10:17
是的啊,不过需要软件来完成!

这样从精度上来说比两个DA叠加要好一些,至少DNL确实降低了同等的倍数。
当然INL没办法,仍然是你DA原始的INL,完全没有变化。
就是说,如果你用一个DNL=2,INL=4的DA来做16细分,那么得到的结果的DNL还是2,INL变成了4*16=64 LSB

作者: zljcat3721    时间: 2014-11-24 10:55
学习了,很不错的方法
作者: 就在今天    时间: 2014-11-24 12:01
这样做,对时间要求严格的不适合,可以用在低速的场合吧
作者: wz18th    时间: 2014-11-24 12:16
很不错的办法,抖动+-1LSB达到目的,100Hz的抖动上来说,达到稳定目标值的时间就会增加了吧?用作软件闭环控制的输出就有点受限了,倒不如干脆用STM32F3系列开几个DAC做加法了
作者: dianyuan    时间: 2014-11-24 12:28
多一种思路多一种启发
作者: linghu2    时间: 2014-11-24 12:31
youlongam 发表于 2014-11-24 10:17
是的啊,不过需要软件来完成!

也可以通过硬件做
1个DA,1个PWM开关控制DA
作者: xuxms    时间: 2014-11-24 12:44
楼主的思路非常好
作者: haistart    时间: 2014-11-24 12:47
本帖最后由 haistart 于 2014-11-24 12:49 编辑

不能这样简单地拼起来的。继电器做开关分段检测比这个靠谱。

作者: farfar    时间: 2014-11-24 12:58
噪音肯定會很大。
如果你有高位數表測量的話,會發現輸出會有較大的抖動,普通萬用表的速度不夠。
作者: redroof    时间: 2014-11-24 13:42
wz18th 发表于 2014-11-24 12:16
很不错的办法,抖动+-1LSB达到目的,100Hz的抖动上来说,达到稳定目标值的时间就会增加了吧?用作软件闭环 ...

请首先自己算DNL和INL
作者: redroof    时间: 2014-11-24 13:45
farfar 发表于 2014-11-24 12:58
噪音肯定會很大。
如果你有高位數表測量的話,會發現輸出會有較大的抖動,普通萬用表的速度不夠。 ...

狠点滤波,可降低噪声,但也降低速度
作者: huangqi412    时间: 2014-11-24 14:14
marshallemon 发表于 2014-11-23 22:18
你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db, ...

这个是DA基础上结合PWM,,,不是纯PWM
作者: huangqi412    时间: 2014-11-24 14:20
就是高低电平可以软件设置的PWM  ,普通的PWM是定死的,比如低电平0V,高电平5V     这个高低电平可以任意设置。
作者: farfar    时间: 2014-11-24 14:37
redroof 发表于 2014-11-24 13:45
狠点滤波,可降低噪声,但也降低速度

降低一個級別的噪音的代價已經購買一顆更高指標的DA了。
用這種方法,DAC的INL和DNL指標可定會惡化,這個你的擔心是對的。
作者: RAMILE    时间: 2014-11-24 14:47
PWM很容易做出高精度的,而且不要DA只要PWM
作者: q8360428    时间: 2014-11-24 14:51
这就是很多控制器没有带DAC的原因 (PWM--DC)    可以使用IO口产生PWM波经 N级RC    成DC   但是动态性的损失  和后级电路的 线性化值得考虑      

楼主不错    这个有基于   三端集成稳压器的 思想在里面    异曲同工啊。
作者: 步凡王子    时间: 2014-11-24 15:16
是个好办法,一看就是遇到问题之后经过深思熟虑找到的好方法,多谢分享~~也许以后就会用到了!
作者: jingyite    时间: 2014-11-24 15:20
这个和PWM方式有什么区别呢?
作者: lcw_swust    时间: 2014-11-24 20:50
学习了,不错的方法。
貌似PWM还可以用DMA的循环模式实现。
作者: wangyu_2011    时间: 2014-11-24 21:50
真是一个好方法。记下了。
作者: PCBBOY1991    时间: 2014-11-25 23:49
楼主的意思是高于零伏特的那段波形,不仅占空比是变化的,而且幅值也是变化的?如果是这样的话,想法和创意真的很好!
作者: whhc51    时间: 2014-11-26 00:23
楼主创新不错
作者: cao198810    时间: 2014-11-26 00:27
1.我觉得你的驱动能力是一个问题;2.你这样得出来的应该是一个有效值吧
作者: cao198810    时间: 2014-11-26 00:30
BOERLBH 发表于 2014-11-24 00:38
没看懂楼主的方法。。如果想用PWM 输出 模拟电压, 为什么不直接用 PWM 功能 做DAC 呢? 还要用DAC 模拟PW ...

直接使用PWM可能抖动有问题吧,没有DA输出的电压准确,我只是觉得这样得到的不是真实的电压,二仅仅是一个电压的有效值,也不能保证它的驱动能力,DA本身就分电压型和电流型
作者: 20061002838    时间: 2014-11-26 13:04
这个方法不错,使用定时器+模拟开关会不会更好,减轻CPU的负担
作者: lintel    时间: 2014-11-26 15:22
很好的方法,不常规做法,不走寻常路。
作者: 雨雪随行    时间: 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时比较坑,因为你rc少了虽然切换快,但是有扰动,多了呢延迟又比较大。还有一个就是它总是有点跳,不适合太高精度使用。 我想法是双da加乘法器,但是苦于不会用运放搭一个单象限乘法器,有哪位大师知道能给个图看看。
有哥们说用adc来跟进调整?您算算需要多长时间?你知道那些做移动电源的早就想这么干了。无奈adc跟进太慢,过冲难以解决
作者: redroof    时间: 2014-11-27 08:23
雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...

低速情况下可以用ad反馈,精度完全可以保证,但严重降低速度。
单个da自己做pwm并没有提高INL,意义很小。
两个da缩放后相加,INL和DNL都没提高,纯属装样子。两da乘起来也一样。
高速没有好办法。
哪有又让马儿跑又让马儿不吃草的
作者: redroof    时间: 2014-11-27 08:31
雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...

如果速度不重要,过冲很好对付:你每次只改变计算值的90%,然后等ad采样,采回来再算出修正值,再改变修正值的90%,反复几次就行了
你的da再差,总不会差过10%吧,那么输出就肯定是单调的
作者: 20061002838    时间: 2014-12-1 14:10
雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...

为什么要用运放做乘法器,用乘法DAC不就得了
作者: 雨雪随行    时间: 2014-12-2 00:05
我说的是在运用stm32 的da
作者: xinxinyu2013    时间: 2014-12-2 11:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: bart    时间: 2014-12-2 12:49
这个我做过,输出用2阶有源滤波基本把噪声控制到uv以下。但是stm32本身da指标差,这样只能提高分辨率,精度没什么改善
作者: at90s    时间: 2014-12-2 16:07
有一个项目我用12位dac控制ocxo,将低两位固定为0,目的是改善非线性误差。数字信号为18位,简单地截为10位的话,信噪比会恶化48db,为此采用噪声整形算法,将量化噪声驱赶到通带之外,0~5k通带内的量化噪声抑制达到50db,模拟域用简单的一阶rc滤波器即可。用频谱仪测量ocxo相噪并无恶化,分辨率也确实能够达到18位
作者: xueju    时间: 2014-12-2 16:25
用两个DA输出,然后用一个IO口输出交变脉冲,控制三极管和电容(具体电路可以搜一下电容倍压电路)把两个电压加起来。,但这个方法估计DA的变化速度会受影响,从而影响电源的纹波
作者: h244539987    时间: 2014-12-2 16:46
多谢分享
作者: mvip    时间: 2014-12-2 23:46
这个方法在官方文档中看到过
作者: au8988    时间: 2014-12-3 00:17
确实值得一试。找个机会试一下。谢谢楼主分享!
作者: 很菜很菜    时间: 2014-12-15 14:47
是积分的原理么?会不会有迟滞现象呢?
作者: chinaboy25    时间: 2014-12-15 16:01
+-1LSB抖动              显示器上早就实现了                  
作者: fengxin32    时间: 2023-6-5 09:31
如果我用数字电位器或者模拟开关,分几档来调节PWM DAC的Vref,感觉也能达到这个目标,至于速度,PWM DAC 本来就慢,也无所谓吧。




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4