精品国产一区在线_av无码中文字幕无码王_天海翼三点刺激高潮不停_好硬好大好爽视频_欧美高清一区三区在线专区_香蕉黄色片

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

(PSIM仿真)教你C-Block模塊巧用結構體變量

我們在用C-Block進行數字電源編程的時候,最常用到的是PI控制算法,如下一個常見的電壓外環PI代碼:

/**********************************************************************************/

//INV電壓環參數定義

double Inv_U_PID;

const double Inv_U_K1=0.205;

const double Inv_U_K2=0.2;

double Inv_U_Error_0=0;

double Inv_U_Error_1=0;

//INV電流環參數

Inv_U_Error_1 = Inv_U_Error_0;           //偏差計算(比例) 

Inv_U_Error_0 =U_bus_avg-U_bus_set;                        //偏差計算(積分)

Inv_U_PID+= Inv_U_K1 *  Inv_U_Error_0 -  Inv_U_K2 *  Inv_U_Error_1 ;                              

           //PID計算式,更改系數以獲得理想的輸出

if( Inv_U_PID<-40)         //限制電壓環輸出     

  Inv_U_PID=-40;

if( Inv_U_PID>40)    

        Inv_U_PID=40;

/**********************************************************************************/

PI算法的格式都是一樣的,中間會涉及多個中間變量,如果我們的系統比較復雜,涉及多個PI環路,那這樣我們的變量定義PI算法就會非常冗余,代碼的可移植性就比較差;

比如下面這個三相四橋臂正負序閉環控制系統:

正序QD軸外環電壓內環電流環和負序QD軸外環電壓內環電流環,總共有8個PI控制環路,如果直接定義變量,以及各個環路的PI代碼,這樣代碼量就非常大,而且相當冗余;

怎樣才能將代碼簡潔化,以及可移植性:我們可以用C語言的結構體去定義PI中間參數變量;以及把PI控制算法寫成一個函數,單要調用PI算法時,就通過結構體變量調用PI算法函數,這樣就可以避免同樣結構的代碼結構重復性編寫;

//------------------->PID.H<---------------------//
typedef struct       //定義PI變量結構體
{
double   Tag;
double   Current;
double   Error_0;
double   Error_1;
double   Kp;
double   Ki;
double   Output;
double   OutputMaxLimit;
double   OutputMinLimit;
}   stNamePID;
void pid_set_tag(stNamePID* pPid, double Tag)
{
pPid->Tag=Tag;
}
void pid_set_Kp(stNamePID* pPid, double Kp)
{
pPid->Kp=Kp;
}
void pid_set_Ki(stNamePID* pPid, double Ki)
{
pPid->Ki=Ki;
}
void pid_set_OutputLimit(stNamePID* pPid, double   OutputMaxLimit, double   OutputMinLimit)
{
pPid->OutputMaxLimit =OutputMaxLimit;
pPid->OutputMinLimit  =OutputMinLimit;
}
double pi_calc(stNamePID* pPid, double Current)
{
pPid->Current=Current;
pPid->Error_1=pPid->Error_0;
pPid->Error_0=pPid->Tag-pPid->Current;
pPid->Output+=(pPid->Kp+ pPid->Ki)*pPid->Error_0 - pPid->Kp*pPid->Error_1;
if((pPid->Output)>(pPid->OutputMaxLimit))
  pPid->Output = pPid->OutputMaxLimit;
if((pPid->Output)<(pPid->OutputMinLimit))
 pPid->Output = pPid->OutputMinLimit;
return   pPid->Output;
}

/----------------------------------------------------------------------------------/

比如我們要用到電壓外環,電流內環控制架構的時候;我們只需要定義下面結構體變量:

/---------------------------------結構體變量定義--------------------------------------------/

static  stNamePID  InvVoltPid={0}; //電壓環PI結構體

double VpidCalTemp=0;

static stNamePID  InvCurrPid={0}; //電流環PI結構體

double pidCalTemp=0;

/----------------------------------------------------------------------------------/

//**************電壓外環*************//

 Inv_V_ref=U_out_cmd*cos(angle);

 pid_set_tag(&InvVoltPid,Inv_V_ref); 

pid_set_Kp(&InvVoltPid, 0.02); 

pid_set_Ki(&InvVoltPid, 0.01); 

pid_set_OutputLimit(&InvVoltPid,Iout_max,-Iout_max); 

VpidCalTemp=pi_calc(&InvVoltPid, U_out); 

//**************電流內環**************//

 Inv_I_ref=VpidCalTemp ;     

 pid_set_tag(&InvCurrPid, Inv_I_ref); 

pid_set_Kp(&InvCurrPid, 0.05); 

pid_set_Ki(&InvCurrPid, 0.005); 

pid_set_OutputLimit(&InvCurrPid,100,-100); 

pidCalTemp=pi_calc(&InvCurrPid, I_out_avg);

總結:在編程中學會一些小技巧,我們的代碼編程就更加簡潔,增強軟件可移植性和可讀性;

全部回復(6)
正序查看
倒序查看
yujunice
LV.5
2
2021-09-16 22:49

很不錯的PI控制算法資料,收藏學習了!

0
回復
iszjt
LV.5
3
2021-09-27 11:08

C block編程就是通過ACR的輸出信號來控制四個開關管導通關斷。 要實現四象限運行.

0
回復
ruohan
LV.9
4
2021-11-08 11:16
@iszjt
Cblock編程就是通過ACR的輸出信號來控制四個開關管導通關斷。要實現四象限運行.

pPid->Output+=(pPid->Kp+ pPid->Ki)*pPid->Error_0 - pPid->Kp*pPid->Error_1;

這個PI調節是(Kp+Ki)*Error0  -  Kp*Error1嗎

0
回復
ruohan
LV.9
5
2021-11-08 11:40

電流環里面Inv_I_ref=VpidCalTemp ;     ,怎么把PID的量付給電流設定值啊,

后邊pidCalTemp=pi_calc(&InvCurrPid, I_out_avg);

這樣可以嗎,

0
回復
Richie_Li
LV.3
6
2021-11-09 08:29
@ruohan
電流環里面Inv_I_ref=VpidCalTemp;   ,怎么把PID的量付給電流設定值啊,后邊pidCalTemp=pi_calc(&InvCurrPid,I_out_avg);這樣可以嗎,

里面有個 pid_set_tag()函數,用來給定設定值的

0
回復
Richie_Li
LV.3
7
2021-11-09 08:29
@ruohan
pPid->Output+=(pPid->Kp+pPid->Ki)*pPid->Error_0-pPid->Kp*pPid->Error_1;這個PI調節是(Kp+Ki)*Error0 - Kp*Error1嗎

正確來說是這樣的:

pPid->Output=pPid->Output+(pPid->Kp+ pPid->Ki)*pPid->Error_0 - pPid->Kp*pPid->Error_1;

0
回復
主站蜘蛛池模板: 忘忧草社区www日本高清图片 | 少妇高潮毛片免费观看 | 国产胸大一区二区三区粉嫩思欲 | 在线免费看黄av | 一级大黄视频 | 91在线成人 | 伊人网伊人影院 | 精品中文字幕在线观看 | 国产91会所女技师在线观 | 国产综合在线观看视频 | 久久久国产一级片 | 红杏一区二区三区 | 亚洲一区二区三区在线观看免费 | 欧美自拍偷拍一区 | 久久精品国产亚洲77777 | 国产又黄又大又粗视频 | 精品美女国产 | 操大奶少妇 | 在线视频中文字幕第一页 | 天天做天天爱夜夜爽毛片L 精品成品国色天香卡一卡二卡三 | 91嫩草精品 | 鬼灭之刃九柱训练篇免费观看 | 斗破苍穹在线观看免费完整观看 | 无码精品一区二区三区四区爱奇艺 | 欧美无砖专区一中文字 | 国产妇女乱码一区二区三区 | 一区二区三区免费看 | 国产重口老太与小伙子 | 久草免费视 | 天天操天天操天天操天天操天天操 | 国产视频1| 99久久精品国产系列 | 欧美性受XXXX黑人XYX性爽 | 脑海中的橡皮擦在线观看免费完整版 | 人与野鲁交xxxⅹ网站 | 91污视频在线观看 | 国产九九九九 | 日日摸日日碰夜夜爽歪歪 | 蜜芽亚洲AV无码精品国产午夜 | 激情97综合亚洲色婷婷五 | 单身妈妈韩剧免费观看 |