| | | | | 这个直流分量还是很难控制的
我觉得最大的难点是对他的检测
特别是电流的直流分量
电压的感觉还好一些 |
|
|
| | | | | 从过零,就是每周期都计数一次,
加入PI反复调整,
还有过零后直接数时间。。。 电感电流 |
|
|
|
| | | | | | | 现在是面临的问题是第一是采样,第二是处理。采样精度高了,才有最基本的保障处理。采样大家用什么好的方法啊!还是就是采样到了直流分量,这个软件接下如何去处理抑制这个直流分量,大家可以指导下!甚谢! |
|
|
| | | | | | | | | 关于检测,你既然在用软件处理,那还不简单?叫你一直积分下去,积分值就是直流分量,用软件算这个是最简单的了。
至于处理,那是另外回事:
最简单的处理,积分都不需要,也就是说不需要检测,诀窍是正半周和负半周分别控制,但是控制指标要一样,比如正半周峰值按400V控制,占空为Du+,而负半周要达到同样的峰值,需要的占空是Du-。Du+一直跟着正半周走,不管负半周;Du-一直跟着负半周走,不管正半周。这个方法最简单,动态平衡,逐周期平衡,收敛时间最短,不会产生直流分量。OK?
程序参考:
变量定义:
#define cu c.eu // 七位状态字,其中:
#define c0 c.w.a // 负半周足压字
#define c1 c.w.b // 正半周足压字
#define c2 c.w.c // 半周字(正半周为1)
#define c3 c.w.d // 过流字
相关程序:
if( // 周期PWM调节 -------------------
!(c2&&c1 // 除非:正半周时上个正半周足压
||!c2&&c0 // 或者:负半周时上个负半周足压
)){ // 否则开始增加PWM调节
if(PR2>53)PR2-=4; // 有调频情节,减周长
else if(CCPR1L<51){ // 否则如果:占空可调
if(CCP1CON<60)CCP1CON+=16; // 有微调空间 微升一格占空
else{CCP1CON=12;CCPR1L++; // 无微调空间,整升一格占空
}}} // 周期PWM调节完------------------
|
|
|
|
| | | | | | | | | | | | | 李工的这个方法是很不错。我也见过样机没有检测电路,这么思路处理有一定优势。这个电压环是相对容易处理点,如果电流环的逐点处理是不运算量就很大了呢。还有一个问题,测试了几台独立逆变器,尽然发现正负电压都不是对称的(正最大和负最大相差几伏)。这个有如何处理呢 |
|
|
| | | | | | | | | | | | | | | 还有我就是做了检测电路,现在是一直积分下去,最后是一个直流量。送给了单片机。软件下来如何处理,请指导下! |
|
|
| | | | | | | | | | | | | | | 电流和电压处理没有什么不同,几乎不增加运算量。
参考我给的例子:足压字是怎么产生的呢?
假设在正半周,发生了下列情形之一,正半周足压字c1赋值1,否则赋值0:
1、电压峰值超过额定值,并进行了限压调节
2、电流峰值超过额定值,并进行了限流调节
这样一来,电压电流都趋向于完全对称。即使短路运行亦如此。
我是只处理峰值,没必要逐点处理,因为,电压或者电流超标可能是突发的,在周期内任何一个时间段都可能发生,只要你不超过峰值,我不做足压处理,最多只是修正波形。只要你超过峰值,我立即减占空,做足压字。超标调节可能一个半周只发生一次,也可能很多次。都是一样的应付。代码只有那一句。
程序参考:
相关变量定义:
#define vb ee[1] // 输出电压
#define v0 ee[5] // 基准正弦电压AD值
#define vch ee[7] // 输出电流峰值
#define v3 ee[8] // 输出电压峰值AD基准
#define vc ee[9] // 电流AD绝对值
#define vhh 425 // 280V超压保护值
#define vcp 95 // 输出电流过流保护值
相关程序:
if(vb>v0){ // 过压调节
if(vb>v3){ // 超峰值
if(c2)c1=1;else c0=1; // 足压字
if(CCP1CON>16)CCP1CON-=16; // 调节占空
else{CCPR1L--;CCP1CON=60;}}
else { // 不超峰调节(修正波形)
....
....
if(vc>vcp){ // 过流调节
if(CCP1CON>16)CCP1CON-=16; // 微减占空
else{ // 微减失调
if(CCPR1L>2) // 占空范围内
{CCPR1L--;CCP1CON=60;} // 整减占空
else // 占空失调
if(PR2<251)PR2+=4;} // 保持最小占空,降低PWM频率
c3=1; // 过流字
if(c2)c1=1;else c0=1;} // 足压字
第二个问题,如果不对称是有规律的,比如正半周始终比负半周电压高,处理起来也很简单,只需要对正负半周分别设置2个额定值,正半周的额定值低于负半周的额定值就行了,低多少?根据直流分量检测的积分值确定。
如果不对称是随机的,如果没有控制,多半是电路有问题,如果有控制,就是环路稳定性问题了。
关于环路,做数控的没有必要完全拘泥于模电的环路理论,那个是基于运放的,没有智能。
最后一个问题的处理同上
|
|
|
| | | | | | | | | | | | | | | | | 李工多谢您百忙中指导!我查询了相关文献:
对于采用SPWM调制技术的逆变器,单极性调制和双极性调制都无法消除逆变器输出电流的直流分量。
功率开关管导通和关断时间不对称;PWM调制过程中脉宽不平衡;驱动信号不匹配;死区时间的不对称;
这样子去处理,上面的方法我看到了解决正负半周不对称用您说的足压字方法很妙。请您百忙中帮忙分析如何去解决直流分量的,直流分量是输出正弦里面包含的直流偏置。甚谢!
对了,李工您现在说的直流分量我看出了,半周期由于直流分量而偏移(就是用示波器的交流档去测试波形),我现在想解决是整个正弦偏移了一个直流值(就是直接用示波器的直流档去测试输出)。请李工分析下。
|
|
|
| | | | | | | | | | | | | | | | | | | 我上面说的就是解决直流分量的方法,直流分量就是说的是正负半周不对称,还有别的情况吗? |
|
|
| | | | | | | | | | | | | | | | | | | | | 李工,我看文献发现正负半周不对称是一种,还有一种貌似正负半周是对称的,整体偏移一个直流值,李工可能我理解有误。 |
|
|
| | | | | | | | | | | | | | | | | | | | | | | 整体偏移一个直流值,虽然很正弦,但是正负半周就不对称了 |
|
|
| | | | | | | | | | | | | | | | | | | | | | | | | 李工整体偏移一个直流值,我这么理解您看对不啊。零轴(X轴)正负对称(这是理想的,也是对的)。偏移了一个直流值,那样我觉得还是对称(这时候只是对称轴不是零轴了),但是还有一个新的对称轴。李工您认为偏移一个直流值可以定义为不对称了?甚谢! |
|
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | 如果有一个新的对称轴,意味着X轴不再是对称轴了,如果X轴不是对称轴,波形就不再是对称的了。 |
|
|
|
| | | | | | | | | | | | | | | | | | | 针对下列情况发生的直流偏移的解决办法:
这个只是在模拟芯片产生的基准正弦波形上发生,数值控制没有这个问题
在数值控制里,这个主要是指MCU对系统中心AD读数可能出现的偏移,要的动态校正,办法是不断读零线电压AD值,平均、调整系统中心。控制对象是电压。
2.1、并网电流检测误差;并网电流传感器的零点漂移
就要选好用的运放了,力求温飘小。但是这个问题要分两方面看
a、对于限流(短路保护)控制,(不对称)精度允许较电压控制低。
b、对于并网电流,精度取决于相位(也就是过零点的时刻)、以及由积分及均方根获得的全周期电流有效值,不仅仅是受限于运放采样,况且也是可以校正的。
3:开关器件不一致以及驱动脉冲分配; 功率开关管导通和关断时间不对称;PWM调制过程中脉宽不平衡;驱动信号不匹配;死区时间的不对称;
|
|
|
|
|
|
| | | | | analogpie
关于您在“逆变器的输出直流分量高精度检测”的帖子
版主,看到您在“逆变器的输出直流分量高精度检测”里回帖,对逆变器直流分量的处理,想请教一下:
我目前调试的逆变器,对每台的固定调偏都不同,后来用求一周期内平均值的办法,想求出直流分量,再调整偏置。采用一个周期采样点减去偏置后累加求平均,再PI增量控制调整偏置,实际结果是逆变器输出中点在一定范围内漂移,想请教一下,这种做法可行否,还有能否根据您的经验给些指点。
nc965
多年不搞数控逆变了,都忘得差不多了,一时半会捡不回来了,你参考原贴吧
|
|
|
| | | | | | | 直流分量,记得当年的代码,过零检测后第一个ADC检测进入累加器,每个半周只累加一个数据,固定周期(比如64个周期)平均一次,就是新的零电平,动态修正。
相关变量:
//ADC采样口: ADCON0=
#define IC 149 // AN5/RC1-----输出电流
#define z e[4] // IC采样计数
#define vc0 ee[2] // IC输出中性电流
相关代码:
vc0=ad(IC); // 读IC
do{ // 系统主循环开始
do{ // 过零等待
if(c2){if(!C1OUT){c2=0;break;}} // 等负半周到(C1比较器翻转)
else {if(C1OUT){c2=1;break;}} // 等正半周到(C1比较器翻转)
//......
GODONE=1; // 输出过零电流IC采样
//.....
while(GODONE); // IC零电流读数
s1=ADRESH;s0=ADRESL; // IC采样值
z++;v64+=s2; // 中心电流积分
if(z>63){v64>>=6; // 满64次取平均值
vc0=v64;v64=0;z=0;} // 刷新vc0
//.....
|
|
|
| | | | | | | | | 多谢指教!
您的意思是采集过零时刻的输出电压,再多次平均后算出偏移量,再根据这个偏移去校正。
这就需要过零检测电路了,同时如果对于输出直流偏置在几百毫伏的情况下,因为交流电压取样比例比较小,这个过零电压AD也读不准(10位AD),难道还需要检测电路的配合吗?
|
|
|
| | | | | | | | | | | 没电路,直接读零线AD,10位AD一般在512附近,正负偏差一般在16格(大约16V)以内。
无须再去校正什么,刷新vc0就行,vc0就是较正后的过零电平。
|
|
|
| | | | | | | | | | | | | 还是不太明白,版主所说的零线AD是指?
我这逆变器用的是瞬时值PI反馈,逆变思路大概如下:Vout=采样电压-512(理论上中点),这个Vout再和参考正弦表做差,再进行PI运算等。
实际调整的时候,理论上的中点(512),需要在进行偏移量调整,Vout=采样电压-512-调整量;这个是我理解的校正。
|
|
|
| | | | | | | | | | | | | | | 之前说复杂了,主要不同点在于有没有(片上)比较器检测过零,我觉得一定要有的。
能不能不用过零算法实现直流电平自动补偿,没研究过,估计是困难的。补偿一定是个闭合的环路,真实的零线(由比较器确定)与AD采样电平(这个是会飘的)之间的补偿。
512只是个理论值,你最多可以作为一个初始值使用,在第一轮64次平均之后,就不再是512,继续平均就会逼近一个真实的过零,也就完全消除了直流电平。
|
|
|
| | | | | | | | | | | | | | | | | 感谢版主指教。
我的电路是运放差分取样,然后与中点电平叠加(2.5V)送到AD口,系统供电(AD参考)5V,中点电平对应的就是512(10位AD),如你所言,这种情况下的过零检测就是输入信号与中点(2.5V)的比较了,对吗?
|
|
|
| | | | | | | | | | | | | | | | | | | 不对吧,我的检测系统(芯片地)是放在交流侧的,交流的一端N就是比较器一个输入端子,才能测准过零。你这样似乎天然就是飘起的,不能归零。
总之要有个真实的过零定义:L电压大于N电压,为正半周,L电压小于N电压,为负半周。这样即使你所说的2.5V飘到2V,照样可以将直流成分补偿归零。
将就你的差分信号再输入到一个比较器里应该可以来实现这个功能。
大致动作:
负半周进入正半周,比较器翻转,读到一个(差分运放输出上的)AD值,读数比如490
正半周进入负半周,比较器再次翻转,读到下一个AD值,比如430(因为翻转有延迟、有失调、有温飘,因此正负半周的读数一定有相当差距的,但这没关系)
那过零电平一定是两个数的平均值460(而不是512),至于512怎么变到460了,啥情况都有可能,你可以不去关心。
同时你也分清了正半周和负半周,然后:
正半周期间的电压 Vout=采样电压-460
负半周期间的电压 Vout=460-采样电压
如果你觉得两个数平均操作频繁,可能不稳,你就64个数平均一次。
|
|
|
|