這個測試程序顯然不是pmsm3_1的主體,但是有很多地方都不好理解,以下是蟲蟲個人的見解,可能有不對的地方,希望大家看完后能多提點意見,歡迎交流。
一, 這個程序是個開環控制,輸入量主要有3個,定子電流的d,q軸以及速度給定量speedref,這3個量實質是通過一個電流ipark變換模塊聯系起來的,為什么這樣說呢?
因為派克變換不但需要d,q軸的分量,同時也需要旋轉坐標軸的實時角度theta,而Theta角在閉環的時候可以通過觀測器或者傳感器得到,但是在開環的條件下,這個角度又有他另外的作用和意義了,那就是要配合你的速度給定量,把你的速度給定量轉化成的實時角度。
其實道理也不復雜,角速度和角度之間的轉換無非是一個比例和累加的關系,那就是拿你的當前角度加上采樣周期內角度的增量,而對于恒給定的系統來說也是個常量,這個常量就是采樣周期乘上速度。
二, 下面說說子程序rmp_cntl.c的主要作用,該程序實際上是一個用階梯波模擬正弦波的函數發生器,為什么要產生這個信號呢,這個信號的作用是什么呢?
我個人認為:這個階梯波的發生器產生的是系統的輸入信號,確切的說是速度給定信號,為什么要用這么一個波做為速度給定信號呢?不是已經給定了一個speedref了么?
我的理解是這樣的:如果你僅僅把speedref作為給定而不做任何處理,那么這個程序就是一個開環調速的應用程序了,而本程序的作者的目的不是做一個一般的應用程序,而是一個測試程序,什么是測試程序呢,測試程序就要制造出各種輸入信號而看看咱們設計的系統會有怎么樣的表現,因此這個測試程序就要加上測試信號,測試信號的種類有很多,在電機控制系統中比較常見的就是正弦信號,通過給系統加上一個正弦信號,看看輸出信號的幅度和相位會不會失真。(對于線形系統,這個輸出信號也是三角函數波)
而我們給定的speedref在這時就變成了TargetValue,也就是階梯波的最值。
三, 最后,著重說下子程序rampgen.c。這個程序就是個斜坡函數生成器,角度的作為輸出實際上是一個斜坡信號,當你的角度增大到360度的時候又要從0開始循環,而不是從361度再繼續,因為計算機的三角函數系統只有這360以內的數,就算查表也是這樣的情況,不然要占用多大空間才足夠呢!
下面的問題是,我每個中斷周期斜坡信號要增大多少呢?這主要由3個因素決定:1,給定的速度,本測試程序的速度是由rmp_cntl.c給的階梯波信號;
2,中斷周期的時間;
3,電機的基準頻率:這個頻率一般就是調速的上限了,再增大就要弱磁了。
后兩個因素不是很直接,也沒有很嚴格的數量關系,但是這個程序的作者為了讓該程序能適應不同的電機和硬件,把這兩個因素考慮了進來,如果別人想用其他型號的電機,只需要在某些頭文件或者主程序里修改這些參數就不必在修改其他程序里相關的量了。
在該程序內,后兩個量的乘積實際上就是系數StepAngleMax。他影響了斜坡信號在一個中斷周期內增大的幅度。
最后一個問題,那就是為什么要把Angle限制在正負1之間內,這個問題有的同學說是因為他是三角函數,我個人認為這樣說不大正確,建議關注這個的朋友看看IQ_math的說明文擋,看看里面對于_IQsinPU函數定義域的說明。
這樣你就明白為什么了
好了就說到這里,有什么問題可以聯系我的QQ。歡迎!
將運動控制進行到底!
|