倒立摆系统说明
控制對象:旋轉倒立擺 控制器:XS128
關于控制對象的基本說明
控制目標
- 擺桿從初始時刻能夠自己起振到最高位置,并在最高位置保持不動或者在很小范圍內運動
- 擺桿受到外部干擾(硬幣或手等的敲打使其偏離豎直向上的位置)時可以自動恢復到目標位置
控制對象基本參數以及控制方式的選取
- 電機PWM控制頻率
- 10KHz
- 理由
- 頻率特別小時,電機雖然死區比較小,但是電機特性比較硬,很小的占空比即可以產生較大的速度,而且速度調節精度很難控制(給調節參數帶來困難)。
- 頻率小時,電機有可能工作在電流斷續狀態,對點擊有害,而且電機產生的噪聲比較大
- 控制周期
- 0.5ms
- 將控制系統分為2事件,事件1進行速度控制(外環),事件2進行角度控制(內環),外環控制周期為100ms,內環控制周期為1ms;事件2中進行電機PWM的輸出。故相當于每1ms輸出1次PWM波
- 理由
- 控制周期太小,系統震蕩;控制周期太大,系統反應不及時
- 此處的控制周期是參考學長的控制周期
- 0.5ms
- 2級PID的選取
- 角度環
- 位置式PID
- 速度環
- 增量式PID
- 速度環的輸出作為角度環的輸入,而在此時角度環的初始設定值為250,因此如果用位置式的PID算法,得到的角度還需要進行處理(在靜止不動時輸出為250)才能賦值給角度環的輸入
- 角度環
起振
- 在擺桿豎直向下時,當擺角小于某一角度值時,輸出固定占空比的PWM波,當擺角大于某一值時,電機
擺動過程中判斷擺桿的方向,使得無論擺桿無論在哪個方向上擺動,電機的轉動方向都會使它繼續沿著那個方向加速擺動
- 實現方法:同時判斷擺桿角度和運動方向,再進行控制
代碼
if( (PID4Pend.GetVal < LimA) || ( PID4Pend.GetVal >= ( 500 - LimA ) ) ) {OutDuty = 1200;if(PendDir==1) dir=2;else dir=1; } if( (PID4Pend.GetVal < (500 - LimA)) && (PID4Pend.GetVal > 260 )) {OutDuty = 0; } if( (PID4Pend.GetVal > LimA) && (PID4Pend.GetVal < 240 )) {OutDuty = 0; } SetMotorVoltage( OutDuty , dir );
編碼器讀取的方式
- 外部中斷
- 注意事項
- 在初始化時刻將外部中斷優先級設置為最高
- 在進入串口中斷或者定時中斷時,均需要再次調用EnableInterrupts使能中斷
- 因為擺桿在擺動的時候會產生零偏,即編碼器的值會逐漸偏離原點(振動產生,對應此處的250);解決辦法:用Z進行復位,記錄Z相脈沖低電平時對應的脈沖個數,每次Z相外部中斷觸發時,直接改變脈沖計數的值。
- 編碼器需要A、B、Z相需要加上拉電阻,可以通過軟件配置上拉電阻即可。
速度環的輸出方式
斜坡輸出
- 目前采用的是這種方式,將得到的輸出量按照斜坡的方式繼續擰輸出
階躍輸出
- 還沒有嘗試
調試過程中遇到的問題
電機死區的處理
- 計算輸出占空比小于死區占空比時,電機不轉動
- 目前采用的是這種方法
- 電機輸出占空比小于死區占空比時,電機按照最小速度運動
- 將計算得到的占空比得到輸出占空比按照一次函數關系進行輸出,如OutDuty = 0.94 * OutDuty + 0.06,其中0.06是電機死區對應的占空比
- 計算輸出占空比小于死區占空比時,電機不轉動
關于系統動態與穩態的協調問題
- 問題說明:采用PI控制時,擺桿由自由下垂能夠自動擺到豎直向上的位置,并保持運動在90度的范圍內(一般在45度范圍內),說明系統的穩態性能達到要求,此時如果用外力使擺桿發生抖動,抖動較小時,擺桿可以回到穩態,但是如果比較大的時候,就不能回到穩態,比如施加干擾使其超過PID的控制角度范圍;采用PD控制時,擺桿可以自起振,同時受到外界干擾可以比較好地恢復,但是它不能保持在90度的范圍內,而是沿著某個方向緩慢旋轉,即動他性能達到要求,而穩態性能不符合要求。
- 解決辦法:在擺桿處于PID的控制模式時,采用PI控制,滿足系統的穩態指標,處于啟動模式時(即偏離豎直向上的角度大于某個值),采用PD控制,滿足系統的動態要求。
一些管腳定義
串口
- PS0 -> RXD0
- PS1 -> TXD0
L298N驅動
- IN1 -> PB1
- IN2 -> PB0
- ENA-> PP1
編碼器
- 擺桿編碼器
- A相(黑線) :PA0(GPIO讀取方向)
- B相(白線) :PH0(外部中斷讀取脈沖)
- Z相(橙線) :PH1(外部中斷清零操作)
- 藍線:GND
- 棕線:VCC(5V~12V)
- 旋轉電機編碼器
- 1、2 :可以不接
- pin3 :VCC通過100歐姆的電阻(限流)和該管腳連接
- pin4 :PA1(GPIO讀取方向)
- pin5 :PH2(外部中斷讀取脈沖)
- pin6 :GND
關于編程方法的一些說明
- 在.c文件里定義,在對應的.h文件中用extern聲明
- 如果要引用該變量,可以在.h文件中#include一下,或者用extern int value
總結
- 上一篇: 安徽大学大学生创新项目报销流程
- 下一篇: 新闻 华为 鸿蒙,华为鸿蒙系统或6月正式