做电源时发现一种提高DA分辨率的方法!
本帖最后由 youlongam 于 2014-11-23 21:36 编辑在用STM32F10X做数控电源时发现12位的DA分辨率不够用,开始想把两个DA的电压通过一个硬件
加法器合起来,发现那样很麻烦,后来想到一种方法比较简单,就是通过软件用DA输出一个具有PWM特性
的波形,1、通过改变DA的值可以快速的改变DA的输出电压,具有12位分辨率。
2、调节PWM的占空比可以实现比12位更高的分辨率!
电路图如下:
具体使用效果怎么样呢?举个例子,我的电源直接用12位分辨率的DA很难把输出电压刚好定在10.000V,
用了这种方法后可以做到定在10.000V!
本来精度只受制于参考电压,现在又受制358的温度 失调特性了 NJ8888 发表于 2014-11-23 21:09
本来精度只受制于参考电压,现在又受制358的温度 失调特性了
为了好玩! NJ8888 发表于 2014-11-23 21:09
本来精度只受制于参考电压,现在又受制358的温度 失调特性了
不能这么说。这里的358只是原理。 是个buffer。
lz的思法很好。 原来的DA相加用个变相的方法在单片机内部实现了。
babysnail 发表于 2014-11-23 21:12
不能这么说。这里的358只是原理。 是个buffer。
lz的思法很好。 原来的DA相加用个变相的方法在单片 ...
是啊,原来很难把电压搞好调到10.000V,现在就可以了! pwm由后面的电容变成模拟? 精度不够? 反馈补偿直流增益太小,也可能导致这个现象。 通过软件用DA输出一个具有PWM特性的波形?请问楼主是怎么实现的呢? 本帖最后由 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。 自然很轻松。 RudeBoy 发表于 2014-11-23 21:17
pwm由后面的电容变成模拟?
滤波啊! 其实根据需要,可以用有源低通的。 孤独_求败 发表于 2014-11-23 21:20
通过软件用DA输出一个具有PWM特性的波形?请问楼主是怎么实现的呢?
用DA模拟上图的波形,最好用定时器,频率最好高点,大于100HZ。 babysnail 发表于 2014-11-23 21:23
2^12=4096, 如果是24V的话, 一档就是 24/4096=0.005859375 。 如果增加个4位,2^16=65536,24/65536=0.0 ...
是啊,看来你是高手! 提高了输出精度,降低了输出稳定性,输出值会飘。不过这想法真不错 思路不错,比如要输出3000 3001 中间的数,那么就通过占空比去分这两个数,得到分辨率更高的值 思路不错,很强大哈! 好能折腾,赞! 你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db,看你这电路恐怕难以胜任 思路不错,不过要是12bit不够的话,不知楼主需要那么高的精度干什么 marshallemon 发表于 2014-11-23 22:18
你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db, ...
DAC输出的参考是2.5V,我只在DA输出值的+/- 1幅度 做PWM调节,其他的问题就没考虑那么多了! 用两片 DA 做加法是个很不错的方式
不过接缝处会有点小麻烦 楼主,PWM是很常用的DA,你这个图做不到高精度,有很多工程因素要考虑的 抖动
低位有效,譬如8位da能“抖动到”10位
高位抖动意义不大唉,受制于模拟电路的精度 我是用2个通道12BIT DAC 然后用运放加法器合成一个高BIT DAC的,轻松实现16BIT以上的分辨率,不过设定输出的值的确非常伤脑筋,得多点矫正曲线拟合,而且廉价的DAC 非线性很差,并且噪声大。楼主的思路不错,不过也是担心滤波后噪音到底能降到什么程度 zhaoxucsu 发表于 2014-11-23 23:24
抖动
低位有效,譬如8位da能“抖动到”10位
高位抖动意义不大唉,受制于模拟电路的精度 ...
你说持抖动指的是“插值”吧?提转换频率,采样频率每提高一倍,则系统的信噪比提高 3dB,相当于量化比特数增加了 0.5bit.
JackFrost 发表于 2014-11-23 23:55
我是用2个通道12BIT DAC 然后用运放加法器合成一个高BIT DAC的,轻松实现16BIT以上的分辨率,不过设定输出 ...
这样加法器的比例电阻精度是个问题。 连选择都是个问题,假设为高8位和低8位。 差256倍,那么必需这么选电阻。R1=R2=1k,R3=256k, 256K 这怎么选啊!
随手上个标准电阻的阻值表:
yuhang 发表于 2014-11-23 23:05
用两片 DA 做加法是个很不错的方式
不过接缝处会有点小麻烦
用两片DA怎么做加法,求指教 楼主想法很创新,不过我也在担心着噪声问题。学习了,多谢分享~ 没看懂楼主的方法。。如果想用PWM 输出 模拟电压, 为什么不直接用 PWM 功能 做DAC 呢? 还要用DAC 模拟PWM ? 办法是想出来的。 这个方法就叫抖动。楼主用的是2值的抖动,如果用多值抖动,输出纹波可以更小。 楼主想法很创新,学习了,多谢分享 楼主的思路是不是以DA 输出为基准,再叠加PWM ? 谢谢! 明白楼主的方法了,起始用GPIO也可以通过PWM的方法当作DA使用,楼主相当于在单片机DA上面增加了一个DA,位数自然上去了。 收藏到影响笔记了,很不错的想法。 yuhang 发表于 2014-11-23 23:05
用两片 DA 做加法是个很不错的方式
不过接缝处会有点小麻烦
用一个高级AD做反馈吧!
不然线性度一定不够{:lol:}
例如,低分辨率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
bbbbbv 发表于 2014-11-24 09:29
楼主的思路是不是以DA 输出为基准,再叠加PWM ? 谢谢!
是的啊,不过需要软件来完成! youlongam 发表于 2014-11-24 10:17
是的啊,不过需要软件来完成!
这样从精度上来说比两个DA叠加要好一些,至少DNL确实降低了同等的倍数。
当然INL没办法,仍然是你DA原始的INL,完全没有变化。
就是说,如果你用一个DNL=2,INL=4的DA来做16细分,那么得到的结果的DNL还是2,INL变成了4*16=64 LSB{:lol:}
学习了,很不错的方法 这样做,对时间要求严格的不适合,可以用在低速的场合吧 很不错的办法,抖动+-1LSB达到目的,100Hz的抖动上来说,达到稳定目标值的时间就会增加了吧?用作软件闭环控制的输出就有点受限了,倒不如干脆用STM32F3系列开几个DAC做加法了{:titter:} 多一种思路多一种启发 youlongam 发表于 2014-11-24 10:17
是的啊,不过需要软件来完成!
也可以通过硬件做
1个DA,1个PWM开关控制DA{:titter:} 楼主的思路非常好 本帖最后由 haistart 于 2014-11-24 12:49 编辑
不能这样简单地拼起来的。继电器做开关分段检测比这个靠谱。
噪音肯定會很大。
如果你有高位數表測量的話,會發現輸出會有較大的抖動,普通萬用表的速度不夠。 wz18th 发表于 2014-11-24 12:16
很不错的办法,抖动+-1LSB达到目的,100Hz的抖动上来说,达到稳定目标值的时间就会增加了吧?用作软件闭环 ...
请首先自己算DNL和INL farfar 发表于 2014-11-24 12:58
噪音肯定會很大。
如果你有高位數表測量的話,會發現輸出會有較大的抖動,普通萬用表的速度不夠。 ...
狠点滤波,可降低噪声,但也降低速度 marshallemon 发表于 2014-11-23 22:18
你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db, ...
这个是DA基础上结合PWM,,,不是纯PWM 就是高低电平可以软件设置的PWM,普通的PWM是定死的,比如低电平0V,高电平5V 这个高低电平可以任意设置。 redroof 发表于 2014-11-24 13:45
狠点滤波,可降低噪声,但也降低速度
降低一個級別的噪音的代價已經購買一顆更高指標的DA了。
用這種方法,DAC的INL和DNL指標可定會惡化,這個你的擔心是對的。 PWM很容易做出高精度的,而且不要DA只要PWM 这就是很多控制器没有带DAC的原因 (PWM--DC) 可以使用IO口产生PWM波经 N级RC 成DC 但是动态性的损失和后级电路的 线性化值得考虑
楼主不错 这个有基于 三端集成稳压器的 思想在里面 异曲同工啊。{:smile:} 是个好办法,一看就是遇到问题之后经过深思熟虑找到的好方法,多谢分享~~也许以后就会用到了! 这个和PWM方式有什么区别呢? 学习了,不错的方法。
貌似PWM还可以用DMA的循环模式实现。 真是一个好方法。记下了。 楼主的意思是高于零伏特的那段波形,不仅占空比是变化的,而且幅值也是变化的?如果是这样的话,想法和创意真的很好! 楼主创新不错 1.我觉得你的驱动能力是一个问题;2.你这样得出来的应该是一个有效值吧 BOERLBH 发表于 2014-11-24 00:38
没看懂楼主的方法。。如果想用PWM 输出 模拟电压, 为什么不直接用 PWM 功能 做DAC 呢? 还要用DAC 模拟PW ...
直接使用PWM可能抖动有问题吧,没有DA输出的电压准确,我只是觉得这样得到的不是真实的电压,二仅仅是一个电压的有效值,也不能保证它的驱动能力,DA本身就分电压型和电流型 这个方法不错,使用定时器+模拟开关会不会更好,减轻CPU的负担 很好的方法,不常规做法,不走寻常路。 其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时比较坑,因为你rc少了虽然切换快,但是有扰动,多了呢延迟又比较大。还有一个就是它总是有点跳,不适合太高精度使用。 我想法是双da加乘法器,但是苦于不会用运放搭一个单象限乘法器,有哪位大师知道能给个图看看。
有哥们说用adc来跟进调整?您算算需要多长时间?你知道那些做移动电源的早就想这么干了。无奈adc跟进太慢,过冲难以解决 雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...
低速情况下可以用ad反馈,精度完全可以保证,但严重降低速度。
单个da自己做pwm并没有提高INL,意义很小。
两个da缩放后相加,INL和DNL都没提高,纯属装样子。两da乘起来也一样。
高速没有好办法。
哪有又让马儿跑又让马儿不吃草的 雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...
如果速度不重要,过冲很好对付:你每次只改变计算值的90%,然后等ad采样,采回来再算出修正值,再改变修正值的90%,反复几次就行了
你的da再差,总不会差过10%吧,那么输出就肯定是单调的 雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...
为什么要用运放做乘法器,用乘法DAC不就得了 我说的是在运用stm32 的da 这个我做过,输出用2阶有源滤波基本把噪声控制到uv以下。但是stm32本身da指标差,这样只能提高分辨率,精度没什么改善 有一个项目我用12位dac控制ocxo,将低两位固定为0,目的是改善非线性误差。数字信号为18位,简单地截为10位的话,信噪比会恶化48db,为此采用噪声整形算法,将量化噪声驱赶到通带之外,0~5k通带内的量化噪声抑制达到50db,模拟域用简单的一阶rc滤波器即可。用频谱仪测量ocxo相噪并无恶化,分辨率也确实能够达到18位 用两个DA输出,然后用一个IO口输出交变脉冲,控制三极管和电容(具体电路可以搜一下电容倍压电路)把两个电压加起来。,但这个方法估计DA的变化速度会受影响,从而影响电源的纹波 多谢分享 这个方法在官方文档中看到过 确实值得一试。找个机会试一下。谢谢楼主分享! 是积分的原理么?会不会有迟滞现象呢? +-1LSB抖动 显示器上早就实现了 如果我用数字电位器或者模拟开关,分几档来调节PWM DAC的Vref,感觉也能达到这个目标,至于速度,PWM DAC 本来就慢,也无所谓吧。
页:
[1]