前言
變換器的控制通常可以分為數字和模擬兩類,其中數字控制是用數字控制器,通過編程的方法實現變換器的控制;模擬控制是通過模擬電源管理芯片實現變換器的控制,兩種方法各有自身優點。在建模的過程中,可以通過運放搭PI調節器環路,也可以通過編程的方法實現。若控制環路簡單時用運放實現較為方便,若控制復雜時用編程的思想更容易實現。而PSIM中編程則使用“Simplified C block”實現,下面以Buck變換器為例講述“Simplified C block”的使用方法。
目錄
1、“Simplified C block”簡易C語言代碼塊
2、“Simplified C block”在數字Buck變換器中的應用
1 “Simplified C block”簡易C語言代碼塊
在PSIM中“Simplified C block”簡易C代碼塊怎么找到?
方法:Elements→Other→Function Blocks→Simplified C block。
Name:“Simplified C Block”簡化C代碼塊,可以直接輸入C代碼,無需編譯。
簡化C代碼塊允許用戶直接輸入C代碼,而無需編譯代碼。C解釋器引擎將在運行時解釋和執行C代碼。C代碼塊支持自定義和修改代碼塊的功能。
簡化C代碼塊使用方便,也可用于自動代碼生成。
功能注釋如下:
Number of Input/Output Ports:定義輸入端口或輸出端口的數量;
Color:定義C代碼塊圖像的顏色;
Edit Image:自定義C代碼塊的輪廓顏色;
Enable Fixed Point:選中此框,C代碼塊的輸入輸出均為定點,點擊“Fixed Point Settings”按鈕可定義定點數據類型。
Variables:該函數允許參數從主電路傳遞到C代碼塊。例如,要將常量k1、k2…、k5傳遞到C代碼中,在對話框窗口中定義以下內容:
Variable Description:k1
Variable name:k1
Variable Default Value:5
Insert GetPsimValue:檢索同一原理圖中C代碼塊之外的元素的參數值。此按鈕將打開一個對話框,其中列出了一側的所有元素,如果在另一側選擇了每個元素的參數。自動代碼生成不支持此函數。
Insert SetRunTimeValue:在仿真運行時計算元素的參數值。此按鈕將打開一個對話框,其中列出了一側的所有元素,如果在另一側選擇了每個元素的參數。自動代碼生成不支持此函數。
Check Code:檢查C代碼的語法。
除了用戶定義的變量外,以下變量也可以在代碼中使用:
t:時間t,從PSIM獲取;
delt:步長,從PSIM獲取;
x1,x2…xn:輸入x1,x2…xn,從PSIM獲取;
y1,y2…yn:輸出y1,y2…yn,從PSIM獲取;
所有輸入和輸出都是雙數據類型,除非選中了“啟用定點”框并且明確定義了輸入/輸出數據類型。
Note:輸入輸出順序從上到下為1,2,…,n,左側為輸入,右側為輸出,帶點的輸入引腳為第一個輸入,未使用的輸入節點必須接地。
變量函數:
該部分定義的變量名可以在代碼中使用。變量值可以是數字或公式。這些公式可以包含在參數文件中定義的變量或從命令行傳遞給原理圖的變量。公式在仿真開始前進行評估,不能包含t(時間)或輸入/輸出值。例如:
a=15.2
a=Freq/sqrt(2) Freq在“File”中定義。
這些變量與SimCoder兼容。請注意SimCoder生成的代碼將顯示計算值,而不是公式。
z域電路中的C代碼塊:
在z域電路中使用C塊時,PSIM將檢查在C代碼塊的輸入端是否立即連接任何ZOH塊。如果有,它將采用從第一個輸入開始遇到的第一個ZOH塊的采樣率,并對整個塊使用此采樣率。例如,如果有2個輸入,輸入1連接到一個10kHz的ZOH,輸入2連接到一個20kHz的ZOH,它將取10kHz而忽略20kHz。
目前,C代碼塊不支持多個采樣率的輸入。也就是說,C塊中的代碼將只以一個速率運行。
如果在C代碼塊的輸入端沒有立即連接ZOH,則在每個步長調用C代碼塊。
插入GetPsimValue函數:
使用該函數,C代碼塊可以訪問參數文件和其他電路參數。要檢索同一原理圖中參數文件中的變量值,請使用以下代碼片段:
#include "psim.h"; // Include the head file for the GetPsimValue function
int nStatus = -1;
double value = GetPsimValue(reserved_ThreadIndex, reserved_AppPtr, "", "alpha", &nStatus);
if(nStatus != 0)
{//optional error handling code
pintf("Error: alpha = %f, nStatus = %i \n", value, nStatus);
}
如果成功返回變量“alpha”的值,則將“nStatus”設置為零。錯誤處理是可選的。
此功能目前與SimCoder不兼容。
Remarks:每個C代碼塊作為一個獨立的單元。一個C代碼塊中的全局變量對其他C代碼塊是不可見的。將值從一個C代碼塊傳遞到另一個C代碼塊或電路的任何其他部分的唯一方法是通過C代碼塊的輸入/輸出端口。當一個C代碼塊的輸出直接連接到另一個C代碼塊的輸入時,PSIM仿真引擎首先運行第一個C代碼塊,然后是第二個C代碼塊。
注意,不像DLL塊,它是不可能調試和逐步通過C代碼塊代碼。調試C代碼塊的常用方法是在代碼中放置臨時的“printf”語句,以便在不同的執行點讀取變量值。下面的語句放置在SimulationStep中時,將在每個步長顯示變量omega的值。
printf("Time=%f,omega=%f \n",t,omega);
2 “Simplified C block”在數字Buck變換器中的應用
以PSIM中“Examples”的數字Buck變換器為例,談談“Simplified C Block”代碼塊的使用方法,變換器模型如圖1所示。
(a)功率模型
(b)C代碼塊
圖1 數字Buck變換器模型
仿真參數:輸入電壓48V,輸出電壓18V,工作頻率fs=100kHz
步長:1e-8s,時間:0.01s
ADC塊代碼
//Variables declaration
float data_in, Gadc;
static int sampled_data, counter;
static bool Flag =1, Fsamp_instant, ap_start_compensator;
int Bits;
//Input assignation
Fsamp_instant = x1;
Bits = x2;
data_in = x3;
//////////////////////////////ADC Gain///////////////////////////////
/* ADC gain is given by:
Gadc = ((2^Bits)-1)/(Vmax-Vmin)
Where
Vmax = maximun input voltage of the ADC.
Vmin = minimum input voltage of the ADC.
Bits = number of bits of the ADC*/
Gadc = (pow(2,Bits) -1)/3.3;
/////////Sample and hold, saturation and truncation///////
/*As sample_data is an integer therefore
a truncation of the decimal part occurs.*/
if (Fsamp_instant == 1 && Flag ==1){
if (data_in > 3.3){
sampled_data = (3.3*Gadc); //Saturation to Vmax
}
if (data_in < 0){
sampled_data = (0*Gadc); //Saturation to Vmin
}
if (data_in <= 3.3 && data_in>=0){ //Store the data until the next sampling
sampled_data = (data_in*Gadc);
}
Flag = 0;
}
if (Fsamp_instant == 0){
Flag = 1;
ap_start_compensator = 0;
counter = 0;
}
/*A small delay of 2 time steps is considered in order to
guarantee that the data that the compensator will use to
calculate the error is the sample [k]*/
if (Flag == 0){
counter = counter +1;
}
if (counter > 2){
ap_start_compensator = 1;
}
//Output assignation
y1 = sampled_data;
y2 = ap_start_compensator;
仿真結果
關鍵節點仿真波形如圖?2所示。
圖2 仿真結果
從仿真結果看,“Examples”例程中基于電流閉環的數學Buck變換器實現了閉環控制,通過ADC塊,PI控制塊和DPWM塊實現了控制,具體的控制思路和實現方法可以在例程中學習,這里主要講述“Simplified C Block”塊的功能和使用。
PSIM教程
[1]“File”參數文件在LLC變換器中的應用(PSIM教程)
[2]“Lookup Table”一維查表在LLC變換器中的應用(PSIM教程)
[3] “Voltage/Current”信號檢測在LLC變換器中的應用(PSIM教程)
聲明:上述內容為個人學習總結。由于水平有限,若有錯誤在所難免,請包涵。本帖內容僅限于學習交流,未經允許不得轉載。