一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: 无锡风
收起左侧

M8 数控电源 测试版

  [复制链接]
发表于 2009-5-22 11:36 | 显示全部楼层
啊,仔细看是我的理解错了,对照电路图,ADC0接的是电流取样,ADC1接是的电压取样,数组的[0]单元保存电流,[1]单元保存电压值。我是被程序里这段注释给误导了:
/* set the target adc value for the control loop
* values for item: 0 = u, 1 = i, units must be of the same as the values
* from the dac.
*/

汗,对照下面的短路保护代码,应该是0对应电流,1对应电压。

至于折半是将增量折半还是直接将总量折半,我觉得从保护的角度看,似乎应该采用总量折半好,但如果从快速达到控制值的目标看,似乎应该是增量折半更快,因为一旦总量折半值小于设定值,就需要每次加1来逐步加到设定值上(对于某些情况步数可能很大,比如设定值300,总电流是360这样的情况,折半后的值只有180,还需要120次加1才能加到设定值上),而增量折半最多10次(二进制10bit)总能加到目标值上。到底该用哪种?
发表于 2009-5-22 13:32 | 显示全部楼层
再修改一下,最后改成这样,感觉已经比较满意了,设成10V/0.03A,接上小灯泡,再没有闪亮,而是一起直保持暗红。显示电压也基本就停在一个值,不再波动。

// the control loop changes the dac:
static void control_loop(unsigned char channel){
        int tmp,ttmp;
        tmp=target_val[0] - analog_result[0];
        if (tmp < 1){
                voltagecontrol=0; // I control
                ttmp=tmp&0x8000;
                tmp=tmp>>1;
                tmp=tmp|ttmp;
        }else{
                voltagecontrol=1; // U control
                tmp=target_val[1] - analog_result[1];
        }
        if (conversioncount>2){
                // go only once in a while close
                // to prevent permanent lsb toggle
                if (tmp > -2 && tmp < 2){
                        tmp=0;
                }
        }
        // slowly up:
        if (tmp >1){
                tmp=1;
        }
        dac_val=dac_val + tmp;
        if (dac_val<0){
                dac_val=0;
        }
        dac(dac_val);
}
发表于 2009-5-22 14:17 | 显示全部楼层
恭喜,老兄完成后麻烦发个烧写文件上来,我还是不会编译。
究竟是增量折半还是直接折半看个人的需求,原则上都可以,如果要求再高可以判断一下,如果我做,肯定用电压折半,我宁可让它慢点恢复也要先把电压降下来再说。对于电源我个人是优先保护负载。
不过您现在是从电流取样修改电压,比我原来的计划巧妙
发表于 2009-5-23 02:00 | 显示全部楼层
这是我现在编译的固件,基于原版的0.5.2,修改部分包括修改延时,使用8M内部振荡,限流采用电流增量折半处理。

digitaldcpower-0.5.2.rar (25.63 KB, 下载次数: 294)
 楼主| 发表于 2009-5-23 10:24 | 显示全部楼层

关于R-2R数控电源的一些“想法”——仅供讨论参考

综合回答上面的一些帖子的讨论:

    其一、fat说过“限流起控比较慢......小灯会先闪亮一下,再转为暗红”的现象,这个,是完全可能发生的。我手头没有“小灯”,暂时没有办法进行对比实验。

    其二、关于这个“问题”,我和 阿照亦有所讨论,我们的想法,大致可以归结如下:
        1、有软件处理的控制系统,肯定不如纯硬件的控制系统“反应快速”;
        2、有MCU控制的系统,上电先要处于Reset状态,这样就会导致一些IO端的状态瞬间的“定位”——就R-2R电路而言,Reset状态、将使相关的IO处高电平,而导致DAC瞬间有“最大输出值”——所以,在其他的应用场合,在“必要”时,我会使用在相关的IO端口增加反相器、来改变这种“可能导致危险的状态”!
        3、鉴于R-2R电路在Reset状态“瞬间输出高电平”的“瞬间时间”,取决于MCU进入初始化程序“改变”IO状态“指令语句执行”的快慢,可以通过使用诸如:提高时钟频率、熔丝位设定快速启动.....等措施,来加以“改善”,但是因为本来就是“简单至上”的电路,不可能单纯使用软件来“完全解决”;
        4、在整体电路的安排上面,则可以在驱动环节或者在输出加大电容,以“电容电压不能突变”的原理,来“淹没”这个MCU的“瞬间输出”——当然,这样子做了,系统“平时”的瞬间响应速度亦会受到限制......需要平衡考虑;
        5、所以,对于比较简单的数控电源,对于比较“娇气”的负载设备——比较安全的连接方式,是将电源“预先调整好输出参数之后”、再接入设备。
发表于 2009-5-23 10:34 | 显示全部楼层

AD的线性不好 与 硬件校准

早上起床想明白了一个问题:老冯和很多朋友发现“M8的AD线性不好”,我认为造成这种现象的原因就是--使用硬件校准。呵呵,听起来好象有点怪,但实际上造成M8的AD线性不好问题的原因恰在于此。源程序里有个“hardware_settings.h”,这个文件是定义了电源的一些硬件特征的,请看这一段:

/ /the divider R7/R8 [(R8+R7)/R8], you can calibrate here the voltmeter:
#define U_DIVIDER 11.83

这里是定义了电压取样分压电阻的分压比,对于各人所用的电阻(即使是1%档的电阻,这个也是有差别的),需要各人根据自己用的电阻的实际测量值,计算出比值填在这里代替这个11.83,这个是实际的分压比,程序必须知道这个准确值,才能计算出AD的实际电压的准确值。
实际电压值=AD值 X 分压比β
从下面的图看就更明白了,分压比相当于一条线的斜率,不同的斜率对应的是不同的直线,直线方程就是y=ad*β。假如校准点取10V,大家使用的是原版固件或是别人编译的固件,里面使用的分压比是β1,方程是10=ad*β1,而自己的电阻实际分压比为β2,使用硬件校准,就相当于在这里使β1线与β2线重合,那么实际就是加上系数使β2线在10V处与β1线重合,方程就是10=ad*β2+c,c是偏移值,而程序里仍是使用10=ad*β1来计算,结果当然在10V以外的其它点都不准了,因此,表面看起来就是M8的AD线性不好。

线性.PNG

因此我认为,硬件校准而没有在程序里修正这个分压比,是导致M8测量电压不准、线性不好的原因。解决的办法:
1、测量自己用的电阻的准确值,并填到程序中,重新编译,这是原作者用的办法(作者在hardware_settings.h里定义了这个值,用意也在此)。我实际试验,也许是我的表精度问题,第一次我将电阻测量值算出比值填入,结果M8的测量值与万用表的测量值仍存在差别,我的办法是再将两个测量值求个比值,拿电阻计算的比值再乘上这个电压比值填入,这回两个测量结果就完全一致了,从0V到24V每0.5V一个点测量,所有都符合,证明M8的AD线性没有问题。
2、象GandF兄的软件的做法,添加一段校准程序,在硬件装好以后测出实际值输入给M8,让它自动计算出这个真实分压比,然后写到e2prom中保存,以供以后调用。
发表于 2009-5-23 10:59 | 显示全部楼层

回复 315楼 无锡风 的帖子

to 冯老师:
我测试的小灯先闪后暗的现象,就是按:先将电源“预先调整好输出参数之后”、再接入设备的做法来测试的,原来的算法因为对DA值每次加1/减1,所以修正起来比较慢,时间长,比如DA值与实际值相差360的话,需要360次调用才能修正到设定值上。改过以后的程序对过流情况采用折半增量来修正,最多不超过10次调用就能修正到设定值,而且改过以后我让M8在8MHz下运行,修正时间又减小了几乎一倍,现在的固件按原来的试验,已经不再有刚开始闪亮的过程,灯泡是从不亮到暗红。不过我拿LED试验的结果却仍不理想,设定3V/0.01A,LED接上OK,再设定20V/0.01A,LED接上,结果连亮都不亮直接挂掉(内部烧开路了)。看来对于晶体管设备,这样的保护仍不足够,呆会我按傅老师的算法重新改程序,先将电压直接减半试验,晚些再报告结果。
发表于 2009-5-23 12:37 | 显示全部楼层
能否该成30V3A的程序,谢谢
发表于 2009-5-23 14:10 | 显示全部楼层
改成30V3A程序很简单,只要您用的功率管、电流取样电阻的功率余量足够,其它元件耐压>30V就行,程序我可代为编译,请提供您的板上的几个值,以修正值预定义数据。对应顶楼的图纸,R7、R8和电流取样电阻(并联)的总阻值。
发表于 2009-5-23 14:14 | 显示全部楼层
我的电路是用的CT上的M8上的电路 R8是用的可调电阻(10K)取样电阻是1欧5W的

[ 本帖最后由 g54188 于 2009-5-23 14:26 编辑 ]
SpxImage.JPG

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-17 09:38 , Processed in 0.049417 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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