|
里面有許多模塊電路 軟件的資料 很不錯(cuò)
文件夾說(shuō)明
AccelStepper、AccelStepperConstSpeedTest 為AccelStepper步進(jìn)電機(jī)驅(qū)動(dòng)庫(kù)
Encode_SwingUp、MiniEncoderTest 編碼器測(cè)試
KeyTest ADC鍵盤測(cè)試
MotorPID、MotoTest 直流減速電機(jī)方案測(cè)試
pendulum_program_PID Jiyue He(何吉越)的倒立擺方案
PID 我的倒立擺控制程序
PWMTest pwm頻率測(cè)試
TimerOneStepper TimerOne庫(kù)測(cè)試
PID_0_3 ~PID_1_2為測(cè)試版本,其中有的版本使用直流減速電機(jī),有的版本使用步進(jìn)電
機(jī)
PID_1_3:最終版本,使用串口作為調(diào)試手段
PID_1_4:最終版本,將串口調(diào)試改為鍵盤調(diào)試
硬件:
AVR atmega328,arduino nano
步進(jìn)電機(jī)+TB6050
絕對(duì)型編碼器x2(檢測(cè)擺桿角度、步進(jìn))
12864液晶屏(最終沒用上)
ADC鍵盤
24V電源
///////////PID_1_3/////////
PID_1_3.ino :主程序,開機(jī)自動(dòng)檢測(cè)0°并計(jì)算出180°,之后進(jìn)入循環(huán)功能演示。平衡采用PID控制,第一個(gè)PID,以擺桿角度作為作為輸入,步進(jìn)電機(jī)速度作為輸出。第二個(gè)PID,以步進(jìn)速度作為輸入,平衡點(diǎn)作為輸出(180°±8°)
當(dāng)擺桿在-110°~-180°或110°~180°范圍內(nèi)時(shí),進(jìn)行平衡控制,否則關(guān)閉步進(jìn)輸出
編碼器讀數(shù)、PID控制放在Timer2中斷中,以保證控制周期精準(zhǔn),控制周期5ms
串口命令讀取、狀態(tài)發(fā)送放在主函數(shù)循環(huán)中
起擺思路1:步進(jìn)電機(jī)往一個(gè)方向運(yùn)動(dòng)一點(diǎn)距離,停止,等待擺桿達(dá)到最高點(diǎn),再反向運(yùn)動(dòng),停止,等待擺桿達(dá)到反向最高點(diǎn),如此反復(fù),擺桿進(jìn)入平衡范圍后進(jìn)行平衡控制(起擺時(shí)間太長(zhǎng),不采用)
起擺思路2:步進(jìn)電機(jī)突然給一個(gè)方向速度,再急剎車,擺桿由于慣性繼續(xù)圓周運(yùn)動(dòng),當(dāng)進(jìn)入平衡范圍時(shí),進(jìn)行平衡控制(時(shí)間基本1s以內(nèi))
起擺思路3:步進(jìn)電機(jī)突然給一個(gè)方向速度,再急剎車,等待擺桿達(dá)到最高點(diǎn),步進(jìn)電機(jī)再反向快速運(yùn)動(dòng),以提高擺桿動(dòng)能(桿子太重可用此方法)
Stepp.ino :步進(jìn)電機(jī)驅(qū)動(dòng),使用了Timer1,setStepperSpeed(long myspeed)用于更新速度,StepperEvent()根據(jù)速度值驅(qū)動(dòng)步進(jìn),如果有加減速效果會(huì)更好
Command.ino :接收命令,更新參數(shù),P100代表參數(shù)P=100,etc
Encoder.ino :絕對(duì)型編碼器讀數(shù)
Filter.ino :FIR低通濾波、中值濾波
function1~6.ino :分別實(shí)現(xiàn)基本要求1~3,提高要求1~3
///////////PID_1_4/////////
PID_1_4.ino : loop中命令值略有更改
Command.ino : 將讀取串口數(shù)據(jù)改為讀取ADC鍵盤值,ADC鍵盤優(yōu)點(diǎn):僅一個(gè)AD口可實(shí)現(xiàn)10個(gè)按鍵,缺點(diǎn):讀數(shù)略復(fù)雜,只能單點(diǎn)按鍵,適合atmega328管腳少的芯片
其他函數(shù)同PID_1_3
全部資料51hei下載地址:
|
|