|
電賽結束了一段時間了,趁這段時間,總結、整理一下自己的方案
------------------------------------------------------------------------------------------------------------
先來看看題目要求吧:
看完題目,經過一番思索和百度之后,有了大概的方案,于是乎開始準備材料,設計機械(我負責),同時其他隊員開始設計tb6560驅動、電源模塊等等,當然如果你本來就打算選擇控制類題目,步進、直流電機及其驅動最好在比賽之前就有充分的準備,我們是使用現成模塊的同時開始制作tb6560(比賽的時候其實評委不看我們做的電路,只看我們能否完成題目要求)
用到的材料大部分都是以前的雕刻機項目剩下的材料,倒是省了不少時間,時間寶貴,當然怎么簡單有效怎么來了,編碼器連接件等東西是這幾天加工出來的,abs材料
來張機械結構渲染圖,比賽的時候并沒有把全部結果畫出來,畫出個大概就開始做了,那些細節都是比賽后加上去的:
具體的solidworks文件、工程圖全部打包在附件中
接下來是電路部分,由于這是控制類題,所以電路比較簡單,24v開關電源供電,2596-5v供系統工作,一塊arduino nano,一塊tb6560,一個ADC鍵盤用于現場演示,兩個mini絕對型編碼器1024線
ADC鍵盤,一個ADC口檢測10個按鍵,我估計檢測16個沒問題:
tb6560:
2596穩壓:
2014.10.26更新:
系統函數圖如下:
在接下來就是程序了
總共寫了14個版本程序,最后用的就是PID_1_3、PID_1_4,所以這里就給出這兩個版本的注釋吧:
///////////PID_1_3/////////
PID_1_3.ino :主程序,開機自動檢測0°并計算出180°,之后進入循環功能演示。平衡采用PID控制,第一個PID,以擺桿角度作為作為輸入,步進電機速度作為輸出。第二個PID,以步進速度作為輸入,平衡點作為輸出(180°±8°)
當擺桿在-110°~-180°或110°~180°范圍內時,進行平衡控制,否則關閉步進輸出
編碼器讀數、PID控制放在Timer2中斷中,以保證控制周期精準,控制周期5ms
串口命令讀取、狀態發送放在主函數循環中
起擺思路1:反復震蕩擺桿使其擺角越來越大;步進電機往一個方向運動一點距離,停止,等待擺桿達到最高點,再反向運動,停止,等待擺桿達到反向最高點,如此反復,擺桿進入平衡范圍后進行平衡控制(起擺時間太長,不采用)
起擺思路2:步進電機突然給一個方向速度,再急剎車,擺桿由于慣性繼續圓周運動,當進入平衡范圍時,進行平衡控制(時間基本1s以內)
起擺思路3:步進電機突然給一個方向速度,再急剎車,等待擺桿達到最高點,步進電機再反向快速運動,以提高擺桿動能(桿子太重可用此方法)
Stepp.ino :步進電機驅動,使用了Timer1,setStepperSpeed(long myspeed)用于更新速度,StepperEvent()根據速度值驅動步進,如果有加減速效果會更好
Command.ino :接收命令,更新參數,P100代表參數P=100,etc
Encoder.ino :絕對型編碼器讀數
Filter.ino :FIR低通濾波、中值濾波
function1~6.ino :分別實現基本要求1~3,提高要求1~3
///////////PID_1_4/////////
PID_1_4.ino : loop中命令值略有更改
Command.ino : 將讀取串口數據改為讀取ADC鍵盤值,ADC鍵盤優點:僅一個AD口可實現10個按鍵,缺點:讀數略復雜,只能單點按鍵,適合atmega328管腳少的芯片
其他函數同PID_1_3
程序比較長,這里就貼出PID_1_3的主函數吧,完整代碼附在附件中:
文件夾說明
AccelStepper、AccelStepperConstSpeedTest 為AccelStepper步進電機驅動庫
Encode_SwingUp、MiniEncoderTest 編碼器測試
KeyTest ADC鍵盤測試
MotorPID、MotoTest 直流減速電機方案測試
pendulum_program_PID Jiyue He(何吉越)的倒立擺方案
PID 我的倒立擺控制程序
PWMTest pwm頻率測試
TimerOneStepper TimerOne庫測試
pid說明:
PID_0_3 ~PID_1_2為測試版本,其中有的版本使用直流減速電機,有的版本使用步進電
機
PID_1_3:最終版本,使用串口作為調試手段
PID_1_4:最終版本,將串口調試改為鍵盤調試
硬件:
AVR atmega328,arduino nano
步進電機+TB6050
絕對型編碼器x2(檢測擺桿角度、步進)
12864液晶屏(最終沒用上)
ADC鍵盤
24V電源
///////////PID_1_3/////////
PID_1_3.ino :主程序,開機自動檢測0°并計算出180°,之后進入循環功能演示。平衡采用PID控制,第一個PID,以擺桿角度作為作為輸入,步進電機速度作為輸出。第二個PID,以步進速度作為輸入,平衡點作為輸出(180°±8°)
當擺桿在-110°~-180°或110°~180°范圍內時,進行平衡控制,否則關閉步進輸出
編碼器讀數、PID控制放在Timer2中斷中,以保證控制周期精準,控制周期5ms
串口命令讀取、狀態發送放在主函數循環中
起擺思路1:步進電機往一個方向運動一點距離,停止,等待擺桿達到最高點,再反向運動,停止,等待擺桿達到反向最高點,如此反復,擺桿進入平衡范圍后進行平衡控制(起擺時間太長,不采用)
起擺思路2:步進電機突然給一個方向速度,再急剎車,擺桿由于慣性繼續圓周運動,當進入平衡范圍時,進行平衡控制(時間基本1s以內)
起擺思路3:步進電機突然給一個方向速度,再急剎車,等待擺桿達到最高點,步進電機再反向快速運動,以提高擺桿動能(桿子太重可用此方法)
Stepp.ino :步進電機驅動,使用了Timer1,setStepperSpeed(long myspeed)用于更新速度,StepperEvent()根據速度值驅動步進,如果有加減速效果會更好
Command.ino :接收命令,更新參數,P100代表參數P=100,etc
Encoder.ino :絕對型編碼器讀數
Filter.ino :FIR低通濾波、中值濾波
function1~6.ino :分別實現基本要求1~3,提高要求1~3
///////////PID_1_4/////////
PID_1_4.ino : loop中命令值略有更改
Command.ino : 將讀取串口數據改為讀取ADC鍵盤值,ADC鍵盤優點:僅一個AD口可實現10個按鍵,缺點:讀數略復雜,只能單點按鍵,適合atmega328管腳少的芯片
其他函數同PID_1_3
視頻、圖片在這里:
|
-
-
TB6560.rar
2016-4-9 19:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
4.42 MB, 下載次數: 131, 下載積分: 黑幣 -5
-
-
倒立擺.part1.rar
2016-4-9 19:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
7.81 MB, 下載次數: 245, 下載積分: 黑幣 -5
-
-
倒立擺.part2.rar
2016-4-9 19:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
7.81 MB, 下載次數: 147, 下載積分: 黑幣 -5
-
-
倒立擺.part3.rar
2016-4-9 19:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
7.81 MB, 下載次數: 158, 下載積分: 黑幣 -5
-
-
倒立擺.part4.rar
2016-4-9 19:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
7.4 MB, 下載次數: 169, 下載積分: 黑幣 -5
評分
-
查看全部評分
|