freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于飛思卡爾16位單片機電磁型智能小車的設(shè)計畢業(yè)設(shè)計論文(編輯修改稿)

2025-07-21 00:02 本頁面
 

【文章內(nèi)容簡介】 器使用了固定在電機輸出軸上的光碼盤以及相互配合的光電對管器件。圖 由于光電管器件直接輸出數(shù)字脈沖信號,因此可以直接將這些脈沖信號連接到單片機的計數(shù)器端口。每個光電管輸出兩個脈沖信號,它們波形相同,只是相位相差90176。如果電機正轉(zhuǎn),第二個脈沖落后90176。;如果電機反轉(zhuǎn),第二個脈沖超前90176。可以通過這個關(guān)系判斷電機是否正反轉(zhuǎn)。在實際電路中,只檢測了一路脈沖信號。通過他的頻率測量得到電機的轉(zhuǎn)速。電機的轉(zhuǎn)向是通過施加在電機上的電壓正負進行判斷的。通過實驗驗證這個方法可以有效判斷電機的轉(zhuǎn)動方向并進行速度控制。 電磁線檢測電路道路中心線的電磁線檢測是保證車模能夠運行在賽道上。 電磁檢測電路按該電路制作電路如圖 電機檢測電路板 車模是否能夠正常高速穩(wěn)定運行,需要通過軟件編寫和調(diào)試來完成。軟件編寫與調(diào)試主要任務(wù)包括:(1)建立軟件工程,配置單片機資源;(2)編寫單片機軟件程序框架,編寫上位機監(jiān)控軟件,建立軟件編譯、下載、調(diào)試的環(huán)境;(3)實現(xiàn)并測試各個子模塊的功能正確性;(3)逐步完成車模閉環(huán)控制,整定各個待定參數(shù);(4)進行車模整體運行性能測試與提高。 軟件功能與框架軟件的主要功能包括有:(1)車模運行狀態(tài)檢測;(2)電機PWM 輸出;(3)車模運行控制:直立控制、速度控制、方向控制;(4)車模運行流程控制:程序初始化、車模啟動與結(jié)束;(5)系統(tǒng)界面:狀態(tài)顯示、上位機監(jiān)控、參數(shù)設(shè)定等。上述功能可以分成兩大類:第一類包括 13 功能,它們屬于需要精確時間周期執(zhí)行,因此可以在一個周期定時中斷里完成。第二類包括45 功能。它的執(zhí)行不需要精確的時間周期??梢苑旁诔绦虻闹鞒绦蛑型瓿伞_@兩類任務(wù)之間可以通過全局變量實現(xiàn)相互的通訊。主程序框架如圖 所示圖 中,程序上電運行后,便進行單片機的初始化。初始化的工作包括有兩部分,一部分是對于單片機各個應(yīng)用到的模塊進行初始化。這部分的代碼由CodeWarrior 集成環(huán)境的ProcessorExpert 工具生成。第二部分是應(yīng)用程序初始化,是對于車??刂瞥绦蛑袘?yīng)用到的變量值進行初始化。初始化完成后,首先進入車模直立檢測子程序。該程序通過讀取加速度計的數(shù)值判斷車模是否處于直立狀態(tài)。如果一旦處于直立狀態(tài)則啟動車模直立控制、方向控制以及速度控制。程序在主循環(huán)中不停發(fā)送監(jiān)控數(shù)據(jù),在通過串口發(fā)送到上位機進行監(jiān)控。同時檢查車模是否跌倒。跌倒判斷可以通過車模傾角是否超過一定范圍進行確定,或者通過安裝在車模前后防撞支架上的微動開關(guān)來判斷。一定車模跌倒,則停止車模運行。包括車模直立控制、速度控制以及方向控制。然后重新進入車模直立判斷過程。車模的直立控制、速度控制以及方向控制都是在中斷程序中完成。通過全局標志變量確定是否進行這些閉環(huán)控制。 中斷程序框架如圖 所示。圖 中斷服務(wù)程序框架圖 中,使用一個定時器,產(chǎn)生一毫秒的周期中斷。中斷服務(wù)程序的任務(wù)被均勻分配在04 的中斷片段中。因此每個中斷片段中的任務(wù)執(zhí)行的頻率為200Hz。將任務(wù)分配到不同的中斷片段中,一方面防止這些任務(wù)累積執(zhí)行時間超過 1 毫秒,擾亂一毫秒中斷的時序,同時也考慮到這些任務(wù)之間的時間先后順序。這些任務(wù)包括:(1)電機測速脈沖計數(shù)器讀取與清除。累積電機轉(zhuǎn)動角度。累積電機速度,為后面車模速度控制提供平均數(shù);(2)啟動AD 轉(zhuǎn)換。由于AD 轉(zhuǎn)換啟動到完成需要一定時間。所以讀取AD 轉(zhuǎn)換在下一個時間片段中。(3)讀取AD 轉(zhuǎn)換值。這些值包括有陀螺儀、加速度計數(shù)值、電磁場檢測電壓值等。讀取完畢之后,便進行車模直立控制過程。包括車模角度計算、直立控制計算、電機PWM 輸出等。(4)車模速度控制:在這個時間片段中,又進行019 計數(shù)。在其中第0 片段中,進行速度PID 調(diào)節(jié)。因此,速度調(diào)節(jié)的周期為100 毫秒。也就是每秒鐘調(diào)節(jié)10 次。(5)車模方向控制:根據(jù)前面讀取的電磁場檢波數(shù)值,計算偏差數(shù)值。然后計算電機差??刂齐妷簲?shù)值。 單片機資源配置1)毫秒定時中斷:TI1硬件模塊:TMR2_Compare中短周期:Period:1ms觸發(fā)事件:Event:Interrupt2)電機PWM輸出控制:PWMC1硬件模塊:PWM_Timer輸出頻率:Frequence:10Khz輸出模式:PWM0,1,2,3 Independent死區(qū)時間:Dead Time:0 3)ADC 采集通道:ADC硬件模塊:ANA0,1,ANB0,1數(shù)值范圍:Range:0 0x7ff0轉(zhuǎn)換時間:Conversion Time:采集模式:Mode: Sequency轉(zhuǎn)換分辨率:Resolution:12bit4)電機測速脈沖計數(shù)器:Counter1硬件模塊:TMR0計數(shù)范圍:16bit信號觸發(fā)沿:Rising Edge5)電機測速脈沖計數(shù)器:Counter2硬件模塊:TMR1計數(shù)范圍:16bit信號觸發(fā)沿:Rising Edge6) 監(jiān)控 UART 串口硬件模塊 SCI通訊速率:Baud:117647(實際值)7)讀取MMA8452Q 的I2C 總線(備用)硬件模塊:I2C中斷模式:Interrupt Service:DisableI2C 地址:Address:4c 通訊速率:SCL Frequency:200kHz 主要算法及其實現(xiàn)主程序框架、中斷程序框架中的各個主要子程序功能及其程序電機 PWM 輸出子程序包括兩個子程序:第一個程序:SetMotorVoltage設(shè)置四個PWM 輸出數(shù)值。函數(shù)輸入?yún)?shù):nLeftVol,nRightVol:分別表示左右兩個電機輸出電壓數(shù)值。取值范圍:0x8000 至 0x7fff:代表定點小數(shù) 。正負號表示電機的正反轉(zhuǎn)。 所示。void SetMotorVoltage(int nLeftVol, int nRightVol) {short nPeriod。nPeriod = (short)getReg(PWM_PWMCM)。if(nLeftVol 0) {setReg(PWM_PWMVAL0, 0)。nLeftVol = mult(nLeftVol, nPeriod)。setReg(PWM_PWMVAL1, nLeftVol)。} else {nLeftVol = nLeftVol。setReg(PWM_PWMVAL1, 0)。nLeftVol = mult(nLeftVol, nPeriod)。setReg(PWM_PWMVAL0, nLeftVol)。}if(nRightVol 0) {setReg(PWM_PWMVAL3, 0)。nRightVol = mult(nRightVol, nPeriod)。setReg(PWM_PWMVAL2, nRightVol)。} else {setReg(PWM_PWMVAL2, 0)。nRightVol = nRightVol。nRightVol = mult(nRightVol, nPeriod)。setReg(PWM_PWMVAL3, nRightVol)。} }程序 電機PWM 輸出子程序這個子程序 由下面的第二個程序調(diào)用。第二個子程序:MotorSpeedOut()它的輸入?yún)?shù)為兩個全局變量:g_nLeftMotorOut, g_nRightMotorOut。分別表示左右兩個電機輸出電壓。取值范圍: 0x7ff 至 0x7ff。輸出參數(shù):調(diào)用 MOTOR_SET()實際上就是上面的子程序。該程序主要功能為包括:(1) 在輸出數(shù)值上添加克服死區(qū)的數(shù)值,利用宏定義MOTOR_OUT_DEAD_VAL(缺省為1000)表示。這個數(shù)值需要通過實驗確定。對于電機施加比較小的電壓時,由于存在靜摩擦力,車模實際上是不運動的。因此,在輸出的時候,需要根據(jù)輸出的數(shù)值,增加一個固定量,克服靜摩擦力,使得車模運行比較平穩(wěn)。 所示。 電機死區(qū)補償(2) 進行輸出數(shù)值的飽和判斷,確保在調(diào)用MOTOR_SET 的時候,輸入?yún)⒘吭?x8000 至0x7fff 之間。 程序 代碼。void MotorSpeedOut(void) {int nLeftVal, nRightVal。nLeftVal = g_nLeftMotorOut。nRightVal = g_nRightMotorOut。if(nLeftVal 0) nLeftVal += MOTOR_OUT_DEAD_VAL。else if(nLeftVal 0) nLeftVal = MOTOR_OUT_DEAD_VAL。if(nRightVal 0) nRightVal += MOTOR_OUT_DEAD_VAL。else if(nRightVal 0) nRightVal = MOTOR_OUT_DEAD_VAL。if(nLeftVal MOTOR_OUT_MAX) nLeftVal = MOTOR_OUT_MAX。if(nLeftVal MOTOR_OUT_MIN) nLeftVal = MOTOR_OUT_MIN。if(nRightVal MOTOR_OUT_MAX) nRightVal = MOTOR_OUT_MAX。if(nRightVal MOTOR_OUT_MIN) nRightVal = MOTOR_OUT_MIN。nLeftVal = nLeftVal 4。nRightVal = nRightVal 4。MOTOR_SET(nLeftVal, nRightVal)。}程序 電機速度輸出子程序這個子程序由車模直立控制子程序調(diào)用,每 5ms 調(diào)用一次。模擬電壓采集及車模傾角計算子程序本程序讀取AD 采用數(shù)值,然后計算車模的傾角。對于讀取的陀螺儀和加速度計的數(shù)值需要減去零偏值。這個數(shù)值需要通過實驗確定。在車模保持直立靜止時,讀出兩個通道的數(shù)值,便是相應(yīng)的零偏值。這個數(shù)值會帶有一定的誤差,往往會使得車模往一個方向加速行駛。這個誤差可以通過后面的速度控制加以消除。對于加速度計所得到的數(shù)值,通過比例系數(shù)(CV_ACCE_ANGLE_RATIO)將它歸一化到1000 至1000 之間。同樣,后面的陀螺儀的讀出的數(shù)據(jù)也需要通過一個比例系數(shù)進行歸一化。這個數(shù)值也是通過實驗確定的。具體的方式為:對于陀螺儀的輸出進行積分,將車模由垂直狀態(tài)放置為水平狀態(tài),得到積分的數(shù)值。與1000 相比較,便可以得到歸一化的比例系數(shù)。由于本函數(shù)調(diào)用的時間周期為 5ms。為了不損失積分的精度,使用一個長整型數(shù)字(g_lnCarAngleSigma)進行積分。對于數(shù)值通過右移10 位(相當于除以1024)得到最終的角度值。因此前面的CAR_GYRO_RATIO_INT 也是需要考慮到這個比例的。AD 配置的時候,將所有AD 通道的輸入數(shù)據(jù)都歸一化到0至0x7ff0 之間。所以在下面程序中,所有的常量定義都是根據(jù)這個范圍確定的.程序 代碼:void CarVoltageGet(void) {long lnDeltaValue。ADC_GetValue16(g_nCarVoltage)。lnDeltaValue = (int)CV_ACCE_VAL。lnDeltaValue = lnDeltaValue (int)CV_ACCE_OFFSET。g_nCarAcceVal = (int)lnDeltaValue。g_nCarAcceVal = mult_r(g_nCarAcceVal, CV_ACCE_ANGLE_RATIO)。g_nCarGyroVal = (int)CV_GYRO_VAL。g_nCarGyroVal = (int)(g_nCarGyroVal CV_GYRO_ZERO)。g_nCarGyroVal = mult_r(g_nCarGyroVal, CAR_GYRO_RATIO_INT)。g_nCarAngle = (int)(g_lnCarAngleSigma 10)。 //.....lnDeltaValue = g_nCarAcceVal g_nCarAngle。lnDeltaValue = lnDeltaValue * CAR_ACCE_RATIO。g_lnCarAngleSigma += (g_nCarGyroVal + lnDeltaValue)。}程序 車模傾角計算子程序車模直立控制子程序車模直立控制是關(guān)鍵子程序。其中涉及到兩個關(guān)鍵控制系數(shù):k1:CAR_AA_P_INT: 傾角比例, (*0x7fff)k2:CAR_AA_D_INT:角速度比例,(*0x7fff)這兩個系數(shù)是通過實驗調(diào)試逐步確定的。具體確定的方式如下:首先將 CAR_AA_D_INT 置為0。逐步加大CAR_AA_P_INT 數(shù)值,直到車模開始前后震蕩。此時再逐步增大CAR_AA_D_INT,消除震蕩。然后逐步增加這兩個數(shù)值,直到車模開始抖動,然后略減少這兩個數(shù)值即可。這個過程需要反復調(diào)整,直到車??梢员容^穩(wěn)定的達到直立平衡。由于現(xiàn)在還沒有加入速度閉環(huán),所以由于加速度傳感器零偏的誤差,會導致車模在直立的時候會往一個方向加速行駛。:void CarAngleAdjust(void) {int nLeft, nRight。int nSpeed。int nP, nD。nP = g_nCarAngle。nP = (int)mult_r(nP, CAR_AA_P_INT)。nD = g_nCarGyroVal 5。nD = (int)mult_r(nD, CAR_AA_D_INT)。nSpeed = nD + nP。if(nSpee
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1