ngsxngtd 发表于 2017-7-8 00:15:52

电拖

一直打算在电机启动上总结点东西,但一直没空。最近手头忙完了,就写点东西。
http://www.cmiw.cn/forum.php?mod=viewthread&tid=259060&highlight=400kw
旧社区的帖子,不知道“狐飞”在不在这里,反正是没见来过。
话说那个拖动微分方程,Te-TL=J*d_omega/dt ,电机输出转矩,在没拿到电机厂家的型式试验报告单之前,就先用实用方程,然后就是分离变量,积分。
计算那个400KW的例子,参考湘潭的数据,http://www.xemc.com.cn/product/Product.aspx?channel=4&productID=144。
功率P=400KW;
频率50HZ;
极数2极;
额定转速nN=2985RPM;
最大转矩系数KT=1.8;
我知道他没考虑风机荷载,那个曲线后面再说。然后就是写代码,辛普森法。结果算出来的结果相当惊人,2985RPM的过程给切成400份,2087.34 s。
不禁倒吸一口凉气,中大奖了,一台电机起动要接近一个小时,不可能的事情。
考虑一番,这1000的转动惯量,无论怎么看都有点大。后来按飞轮矩处理,数据就正常了,400KW切成10^4份,52.921 s,然后1000KW也切成10^4份,21.169 s。
飞轮矩是干嘛用的,计算又不方便,好像很多家伙喜欢这个东西,嘴里喊着惯量,单位、符号经常写不对,有时还跟截面惯性矩搅合在一起。
然后想着,积分是一码事,微分方程又是另一码事。假如有人问你在启动过程中某个时间点的转速,应该也要能肯定说出来。于是又忙碌半天按龙格库塔四阶,写了代码,调试正常。源码见附件,龙格库塔过程注释了。
几个疑问说一下,
1.按照DL/T5153附录的处理方法,我总结了风机的阻力表达式,用抛物线连接两段曲线:
当0.7≤s≤1时,Mz=1.222*(s-0.7)^2+0.1;
当0.546≤s<0.7时,Mz=0.55*(s-0.7)^2+0.1;
当sN≤s<0.546时,Mz=0.55*(1-s)^2.
但这是标么值,它的基准取什么?起始点的0.21很吓人,好像不能取稳定时的电机额定转矩。
2.假如现在一恒转矩负载,转动惯量很大,起动超限,要“二拖一”,那就是另试选一台,然后联合拖动,把启动时间降到许用范围以内?
3.一个很困惑的问题,电机寿命变短可以理解,但电机启动时间过长或者过载,假如参数整定合适,热过载不动作么?怎么能把它给烧了?
4.要计算温升,必须得先弄明白到底发热量有多少。我考虑是输出转矩与转过角度积分计算输出功,然后输入电压与电流积分算输出功,然后差值就是发热量了。具体是每一个t对应一个转速n,每一个转速n对应一个输出转矩,然后对启动过程的时长积分,然后电压、电流,相关的质量要看试验报告单,跟厂家联系再做考虑。是这样的考虑?
各位大侠,给指点指点,多谢。

皮卡丘不会打乒乓球 发表于 2017-7-8 07:53:00

麻烦贴个图,看不到你的计算文件。
s要看上下文,看像是转差率。
大惯量设备有二拖一,但是要调整电机曲线,让牵出转矩尽量覆盖启动过程。
热过载保护不动作是因为温度时间常数大,未必会到那个程度。寿命降低是因为绝缘老化,绝缘材料因为温度应力影响。
不知道电机是不是异步电机,输入功率是视在功率,包括有功功率,无功功率。无功功率,不会导致发热。看不到计算过程不好说算的对不对。
计算发热最好办法是采用校验电流大小。而非校验功率。电拖是上给出了电流法,转距等效,功率等效的具体适应条件

ngsxngtd 发表于 2017-7-8 09:47:53

本帖最后由 ngsxngtd 于 2017-7-8 09:51 编辑

图没啥好看的,看核心部分代码好了。
//===================Motor Output Torque Function=====================
double Motor::MotTorFun(double VRotSpe)
{
double SliRat;
double OutTor;
SliRat=(SynRotSpe-VRotSpe)/SynRotSpe;
OutTor=2*MaxTor/(SliRat/CriSliRat+CriSliRat/SliRat);
return OutTor;
};
Motor自定义类的一个成员函数Motor Torque Function ,
variable rotary speed,
output Torque,
slip ratio,
synchronous rotary speed,
maximum torque,
critical slip ratio;
命名基本上做到见名知意,很普通的实用方程。电机的临界转差率,最大转矩啥的,不说了,是个人都能写。
=================================================================
//========================Load Torque Function=====================================
double Load:: LoaTorFun(double VRotSpe)
{
//return 1.25672*pow(10,-4.0)*pow(VRotSpe,2);      
return 0;
};
负载转矩方程,本来想用平衡方程,按平方率计算,T=9550*350/2985=1119.77 N*m,K=1119.77/2985^2=1.25672*10^-4,结果拖不起来,注释掉了,哈哈。
==============================================================
//========================Accerlation Torque Function=====================================
double AccTorFun(Motor VMotor,Load VLoad,double VRotSpe)
{
      return VMotor.MotTorFun(VRotSpe)-VLoad.LoaTorFun(VRotSpe);
};
加速转矩方程,是个人都能写,不说了。
===============================================================
//======================Simpson solving Function===================================
double SimpsonSolTim(Motor VMotor,Load VLoad)
{
   VMotor.ParInp();
   VMotor.ParCal();
   VMotor.ParOut();
   
   VLoad.ParInp();
   VLoad.ParOut();
   
   int EveNum;
      cout<<"Please input the even number of Simpson way.The larger the better!"<<endl;
      cin>>EveNum;
      
      double StaTim;
      double Vi;
      double Vh;
   Vh=VMotor.NomRotSpe/EveNum;
      for(StaTim=0,Vi=0;Vi<=EveNum;Vi++)
   {
            StaTim+=Vh/6*(1/AccTorFun(VMotor,VLoad,Vi*Vh)+4/AccTorFun(VMotor,VLoad,(Vi+1/2)*Vh)+1/AccTorFun(VMotor,VLoad,(Vi+1)*Vh));
         };
      return VLoad.LoaRotIne*atan(1)*4/30*StaTim;
};
这部分应该是最核心的东西了。调用类的函数,先建立辛普森积分式;even number ,要求必须是偶数;vh s是步长;积分式是转矩方程的倒数,这个别弄错了;然后循环迭加,初始转速为0,所以各个转速就是Vi*Vh。load rotary inertia ,负载转动惯量;电机的转动惯量,谁也不知道,计算时设为0了。
=================================================================
int main()
{
      Motor Motor1;
      Load Load1;
      double time1;
      //double VRotSpe;
      time1=SimpsonSolTim(Motor1,Load1);
      cout<<"The motor total start time with unit s is "<<endl;
      cout<<time1<<endl;
   
   
   //cout<<"please input the time with unit s:"<<endl;
   //cin>>time1;
   //VRotSpe=RonKutSolRotSpe(Motor1,Load1,time1);
   //cout<<"The rotatory speed with unit r/min @ "<<time1<<"s is:"<<endl;
   //cout<<VRotSpe<<endl;
   return 0;      
};
主函数位于金字塔上方作为总控制,只发布命令,不参与具体数据处理;四阶龙格库塔无用武之地,注释掉了。
==============================================================
//======================Ronge-Kutta solving Function===================================
double RonKutSolRotSpe(Motor VMotor,Load VLoad,double Vtim)
{
      VMotor.ParInp();
   VMotor.ParCal();
   VMotor.ParOut();
   
   VLoad.ParInp();
   VLoad.ParOut();
   
   int Num;
      cout<<"Please input the number of Ronge-Kutta way.The larger the better!"<<endl;
      cin>>Num;
      
      double RotSpe;
      int Vi;
      double Vh;
      Vh=Vtim/Num;
      double VF1,VF2,VF3,VF4;
    for(Vi=0;Vi<=Num;Vi++)
   {
         VF1=Vh*AccTorFun(VMotor,VLoad,RotSpe);
         VF2=Vh*AccTorFun(VMotor,VLoad,(RotSpe+0.5*VF1));
         VF3=Vh*AccTorFun(VMotor,VLoad,(RotSpe+0.5*VF2));
         VF4=Vh*AccTorFun(VMotor,VLoad,(RotSpe+VF3));
         RotSpe+=(VF1+2*VF2+2*VF3+VF4)/6.0;
      };
return RotSpe/VLoad.LoaRotIne/atan(1)/4*30;
};
四阶龙格库塔,为计算输出功做的一个准备工作。
=================================================================
main 函数无限循环,可以让控制台永久停留,除非手动关了它。上传个EXE给大家乐一乐。编译器用的gcc,完全开源,这个在任何公司都不会有法律问题,好像也有手机版的,不过没跑过。

tolerare 发表于 2017-7-8 11:30:55

电机启动时间计算时,肯定是不能拿电机稳定转矩去套,毕竟特性都是动态变化的。国外有一套图形综合法,我贴上来分享下。以前搞压缩机的时候,国外压缩机技术中心给我分享的也是这个方法,比较简洁,精度上也还可以,不需要用simulink去模拟

皮卡丘不会打乒乓球 发表于 2017-7-8 12:20:53

本帖最后由 皮卡丘不会打乒乓球 于 2017-7-8 12:23 编辑

牵出转矩的情,牵入转矩不一样。和转差率的关系也是可以调整的。俺以前贴过手工写的启动计算方程式,在鸟窝,可惜了估计已经沉底了吧

川中小卒 发表于 2017-7-8 12:24:01

期待后续,mark下
页: [1]
查看完整版本: 电拖