youlongam 发表于 2014-11-23 21:01:05

做电源时发现一种提高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!

NJ8888 发表于 2014-11-23 21:09:15

本来精度只受制于参考电压,现在又受制358的温度 失调特性了

youlongam 发表于 2014-11-23 21:11:46

NJ8888 发表于 2014-11-23 21:09
本来精度只受制于参考电压,现在又受制358的温度 失调特性了

为了好玩!

babysnail 发表于 2014-11-23 21:12:20

NJ8888 发表于 2014-11-23 21:09
本来精度只受制于参考电压,现在又受制358的温度 失调特性了

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

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

youlongam 发表于 2014-11-23 21:16:57

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

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

是啊,原来很难把电压搞好调到10.000V,现在就可以了!

RudeBoy 发表于 2014-11-23 21:17:55

pwm由后面的电容变成模拟?

xly 发表于 2014-11-23 21:19:11

精度不够? 反馈补偿直流增益太小,也可能导致这个现象。

孤独_求败 发表于 2014-11-23 21:20:20

通过软件用DA输出一个具有PWM特性的波形?请问楼主是怎么实现的呢?

babysnail 发表于 2014-11-23 21:23:36

本帖最后由 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:57

RudeBoy 发表于 2014-11-23 21:17
pwm由后面的电容变成模拟?

滤波啊! 其实根据需要,可以用有源低通的。

youlongam 发表于 2014-11-23 21:27:31

孤独_求败 发表于 2014-11-23 21:20
通过软件用DA输出一个具有PWM特性的波形?请问楼主是怎么实现的呢?

用DA模拟上图的波形,最好用定时器,频率最好高点,大于100HZ。

youlongam 发表于 2014-11-23 21:28:54

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:32

提高了输出精度,降低了输出稳定性,输出值会飘。不过这想法真不错

chenchaoting 发表于 2014-11-23 21:50:34

思路不错,比如要输出3000 3001 中间的数,那么就通过占空比去分这两个数,得到分辨率更高的值

fiddly 发表于 2014-11-23 21:55:48

思路不错,很强大哈!

xgzn 发表于 2014-11-23 21:58:15

好能折腾,赞!

marshallemon 发表于 2014-11-23 22:18:15

你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db,看你这电路恐怕难以胜任

johnlj 发表于 2014-11-23 22:27:51

思路不错,不过要是12bit不够的话,不知楼主需要那么高的精度干什么

youlongam 发表于 2014-11-23 22:32:00

marshallemon 发表于 2014-11-23 22:18
你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db, ...

DAC输出的参考是2.5V,我只在DA输出值的+/- 1幅度 做PWM调节,其他的问题就没考虑那么多了!

yuhang 发表于 2014-11-23 23:05:43

用两片 DA 做加法是个很不错的方式

不过接缝处会有点小麻烦

DOER 发表于 2014-11-23 23:22:03

楼主,PWM是很常用的DA,你这个图做不到高精度,有很多工程因素要考虑的

zhaoxucsu 发表于 2014-11-23 23:24:40

抖动
低位有效,譬如8位da能“抖动到”10位
高位抖动意义不大唉,受制于模拟电路的精度

JackFrost 发表于 2014-11-23 23:55:33

我是用2个通道12BIT DAC 然后用运放加法器合成一个高BIT DAC的,轻松实现16BIT以上的分辨率,不过设定输出的值的确非常伤脑筋,得多点矫正曲线拟合,而且廉价的DAC 非线性很差,并且噪声大。楼主的思路不错,不过也是担心滤波后噪音到底能降到什么程度

babysnail 发表于 2014-11-24 00:03:48

zhaoxucsu 发表于 2014-11-23 23:24
抖动
低位有效,譬如8位da能“抖动到”10位
高位抖动意义不大唉,受制于模拟电路的精度 ...

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

babysnail 发表于 2014-11-24 00:11:13

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

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

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



机器人天空 发表于 2014-11-24 00:26:16

yuhang 发表于 2014-11-23 23:05
用两片 DA 做加法是个很不错的方式

不过接缝处会有点小麻烦

用两片DA怎么做加法,求指教

zichongde 发表于 2014-11-24 00:29:33

楼主想法很创新,不过我也在担心着噪声问题。学习了,多谢分享~

BOERLBH 发表于 2014-11-24 00:38:17

没看懂楼主的方法。。如果想用PWM 输出 模拟电压, 为什么不直接用 PWM 功能 做DAC 呢? 还要用DAC 模拟PWM ?

HYLG 发表于 2014-11-24 00:45:15

办法是想出来的。

agilityChen 发表于 2014-11-24 00:49:11

这个方法就叫抖动。楼主用的是2值的抖动,如果用多值抖动,输出纹波可以更小。

ab3504 发表于 2014-11-24 05:53:42

楼主想法很创新,学习了,多谢分享

bbbbbv 发表于 2014-11-24 09:29:12

楼主的思路是不是以DA 输出为基准,再叠加PWM ?   谢谢!

brieve 发表于 2014-11-24 09:54:05

明白楼主的方法了,起始用GPIO也可以通过PWM的方法当作DA使用,楼主相当于在单片机DA上面增加了一个DA,位数自然上去了。

brieve 发表于 2014-11-24 09:55:49

收藏到影响笔记了,很不错的想法。

redroof 发表于 2014-11-24 10:15:21

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



youlongam 发表于 2014-11-24 10:17:30

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

是的啊,不过需要软件来完成!

redroof 发表于 2014-11-24 10:40:03

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:}

zljcat3721 发表于 2014-11-24 10:55:34

学习了,很不错的方法

就在今天 发表于 2014-11-24 12:01:34

这样做,对时间要求严格的不适合,可以用在低速的场合吧

wz18th 发表于 2014-11-24 12:16:21

很不错的办法,抖动+-1LSB达到目的,100Hz的抖动上来说,达到稳定目标值的时间就会增加了吧?用作软件闭环控制的输出就有点受限了,倒不如干脆用STM32F3系列开几个DAC做加法了{:titter:}

dianyuan 发表于 2014-11-24 12:28:51

多一种思路多一种启发

linghu2 发表于 2014-11-24 12:31:33

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

也可以通过硬件做
1个DA,1个PWM开关控制DA{:titter:}

xuxms 发表于 2014-11-24 12:44:57

楼主的思路非常好

haistart 发表于 2014-11-24 12:47:26

本帖最后由 haistart 于 2014-11-24 12:49 编辑

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

farfar 发表于 2014-11-24 12:58:50

噪音肯定會很大。
如果你有高位數表測量的話,會發現輸出會有較大的抖動,普通萬用表的速度不夠。

redroof 发表于 2014-11-24 13:42:37

wz18th 发表于 2014-11-24 12:16
很不错的办法,抖动+-1LSB达到目的,100Hz的抖动上来说,达到稳定目标值的时间就会增加了吧?用作软件闭环 ...

请首先自己算DNL和INL

redroof 发表于 2014-11-24 13:45:04

farfar 发表于 2014-11-24 12:58
噪音肯定會很大。
如果你有高位數表測量的話,會發現輸出會有較大的抖動,普通萬用表的速度不夠。 ...

狠点滤波,可降低噪声,但也降低速度

huangqi412 发表于 2014-11-24 14:14:32

marshallemon 发表于 2014-11-23 22:18
你这个纹波肯定不会太小,你拿啥给DAC比?初略算了下如果真想拿PWM来做12bit的DA,光纹波抑制就需要80db, ...

这个是DA基础上结合PWM,,,不是纯PWM

huangqi412 发表于 2014-11-24 14:20:01

就是高低电平可以软件设置的PWM,普通的PWM是定死的,比如低电平0V,高电平5V   这个高低电平可以任意设置。

farfar 发表于 2014-11-24 14:37:08

redroof 发表于 2014-11-24 13:45
狠点滤波,可降低噪声,但也降低速度

降低一個級別的噪音的代價已經購買一顆更高指標的DA了。
用這種方法,DAC的INL和DNL指標可定會惡化,這個你的擔心是對的。

RAMILE 发表于 2014-11-24 14:47:13

PWM很容易做出高精度的,而且不要DA只要PWM

q8360428 发表于 2014-11-24 14:51:22

这就是很多控制器没有带DAC的原因 (PWM--DC)    可以使用IO口产生PWM波经 N级RC    成DC   但是动态性的损失和后级电路的 线性化值得考虑      

楼主不错    这个有基于   三端集成稳压器的 思想在里面    异曲同工啊。{:smile:}

步凡王子 发表于 2014-11-24 15:16:45

是个好办法,一看就是遇到问题之后经过深思熟虑找到的好方法,多谢分享~~也许以后就会用到了!

jingyite 发表于 2014-11-24 15:20:01

这个和PWM方式有什么区别呢?

lcw_swust 发表于 2014-11-24 20:50:49

学习了,不错的方法。
貌似PWM还可以用DMA的循环模式实现。

wangyu_2011 发表于 2014-11-24 21:50:15

真是一个好方法。记下了。

PCBBOY1991 发表于 2014-11-25 23:49:35

楼主的意思是高于零伏特的那段波形,不仅占空比是变化的,而且幅值也是变化的?如果是这样的话,想法和创意真的很好!

whhc51 发表于 2014-11-26 00:23:41

楼主创新不错

cao198810 发表于 2014-11-26 00:27:21

1.我觉得你的驱动能力是一个问题;2.你这样得出来的应该是一个有效值吧

cao198810 发表于 2014-11-26 00:30:11

BOERLBH 发表于 2014-11-24 00:38
没看懂楼主的方法。。如果想用PWM 输出 模拟电压, 为什么不直接用 PWM 功能 做DAC 呢? 还要用DAC 模拟PW ...

直接使用PWM可能抖动有问题吧,没有DA输出的电压准确,我只是觉得这样得到的不是真实的电压,二仅仅是一个电压的有效值,也不能保证它的驱动能力,DA本身就分电压型和电流型

20061002838 发表于 2014-11-26 13:04:03

这个方法不错,使用定时器+模拟开关会不会更好,减轻CPU的负担

lintel 发表于 2014-11-26 15:22:38

很好的方法,不常规做法,不走寻常路。

雨雪随行 发表于 2014-11-26 23:05:49

其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时比较坑,因为你rc少了虽然切换快,但是有扰动,多了呢延迟又比较大。还有一个就是它总是有点跳,不适合太高精度使用。 我想法是双da加乘法器,但是苦于不会用运放搭一个单象限乘法器,有哪位大师知道能给个图看看。
有哥们说用adc来跟进调整?您算算需要多长时间?你知道那些做移动电源的早就想这么干了。无奈adc跟进太慢,过冲难以解决

redroof 发表于 2014-11-27 08:23:51

雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...

低速情况下可以用ad反馈,精度完全可以保证,但严重降低速度。
单个da自己做pwm并没有提高INL,意义很小。
两个da缩放后相加,INL和DNL都没提高,纯属装样子。两da乘起来也一样。
高速没有好办法。
哪有又让马儿跑又让马儿不吃草的

redroof 发表于 2014-11-27 08:31:43

雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...

如果速度不重要,过冲很好对付:你每次只改变计算值的90%,然后等ad采样,采回来再算出修正值,再改变修正值的90%,反复几次就行了
你的da再差,总不会差过10%吧,那么输出就肯定是单调的

20061002838 发表于 2014-12-1 14:10:26

雨雪随行 发表于 2014-11-26 23:05
其实就是把da信号和pwm占空比想与后rc滤波输出。我早就想到过。有两个缺陷,一是输出频率很低,快速切换时 ...

为什么要用运放做乘法器,用乘法DAC不就得了

雨雪随行 发表于 2014-12-2 00:05:56

我说的是在运用stm32 的da

xinxinyu2013 发表于 2014-12-2 11:32:56

bart 发表于 2014-12-2 12:49:37

这个我做过,输出用2阶有源滤波基本把噪声控制到uv以下。但是stm32本身da指标差,这样只能提高分辨率,精度没什么改善

at90s 发表于 2014-12-2 16:07:35

有一个项目我用12位dac控制ocxo,将低两位固定为0,目的是改善非线性误差。数字信号为18位,简单地截为10位的话,信噪比会恶化48db,为此采用噪声整形算法,将量化噪声驱赶到通带之外,0~5k通带内的量化噪声抑制达到50db,模拟域用简单的一阶rc滤波器即可。用频谱仪测量ocxo相噪并无恶化,分辨率也确实能够达到18位

xueju 发表于 2014-12-2 16:25:03

用两个DA输出,然后用一个IO口输出交变脉冲,控制三极管和电容(具体电路可以搜一下电容倍压电路)把两个电压加起来。,但这个方法估计DA的变化速度会受影响,从而影响电源的纹波

h244539987 发表于 2014-12-2 16:46:24

多谢分享

mvip 发表于 2014-12-2 23:46:36

这个方法在官方文档中看到过

au8988 发表于 2014-12-3 00:17:41

确实值得一试。找个机会试一下。谢谢楼主分享!

很菜很菜 发表于 2014-12-15 14:47:20

是积分的原理么?会不会有迟滞现象呢?

chinaboy25 发表于 2014-12-15 16:01:47

+-1LSB抖动            显示器上早就实现了                  

fengxin32 发表于 2023-6-5 09:31:50

如果我用数字电位器或者模拟开关,分几档来调节PWM DAC的Vref,感觉也能达到这个目标,至于速度,PWM DAC 本来就慢,也无所谓吧。
页: [1]
查看完整版本: 做电源时发现一种提高DA分辨率的方法!