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

正文內(nèi)容

基于微控制器k60的光電智能車控制軟件設(shè)計(jì)論文(編輯修改稿)

2025-07-24 20:41 本頁面
 

【文章內(nèi)容簡介】 如下: 首先將CAR_AA_D_INT 置為0 。逐步加大CAR_AA_P_INT數(shù)值,直到車模開始前后震蕩。此時(shí)再逐步增大CAR_AA_D_INT,消除震蕩。然后逐步增加這兩個(gè)數(shù)值,直到車模開始抖動(dòng),然后略減少這兩個(gè)數(shù)值即可。 這個(gè)過程需要反復(fù)調(diào)整,直到車??梢员容^穩(wěn)定的達(dá)到直立平衡。由于現(xiàn)在還沒有加入速度閉環(huán),所以由于加速度傳感器零偏的誤差,會(huì)導(dǎo)致有時(shí)車模在直立的時(shí)候會(huì)往一個(gè)方向加速行駛。 如下是車模直立控制子程序代碼: 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(nSpeed MOTOR_SPEED_SET_MAX) nSpeed = MOTOR_SPEED_SET_MAX。 else if(nSpeed MOTOR_SPEED_SET_MIN) nSpeed = MOTOR_SPEED_SET_MIN。 nLeft = nSpeed + g_nLeftMotorOutSpeed g_nMotorLeftRightDiff。 nRight = nSpeed + g_nRightMotorOutSpeed + g_nMotorLeftRightDiff。 g_nLeftMotorOut = nLeft 6。 g_nRightMotorOut = nRight 6。 if(g_nLeftMotorOut MOTOR_OUT_MAX) g_nLeftMotorOut = MOTOR_OUT_MAX。 if(g_nLeftMotorOut MOTOR_OUT_MIN) g_nLeftMotorOut = MOTOR_OUT_MIN。 if(g_nRightMotorOut MOTOR_OUT_MAX) g_nRightMotorOut = MOTOR_OUT_MAX。 if(g_nRightMotorOut MOTOR_OUT_MIN) g_nRightMotorOut = MOTOR_OUT_MIN。 MotorSpeedOut()。 車模速度PI 控制車模速度控制采用了典型的PI 控制算法。其中速度采用了左右電機(jī)速度的平均值進(jìn)行計(jì)算。對(duì)于PI 調(diào)節(jié)算法中的參數(shù)整定可以參照一般PI 參數(shù)整定的方法進(jìn)行。 該函數(shù)的輸入為g_nLeftMotorSpeedCount ,g_nRightMotorSpeedCount。 計(jì)算得到g_nLeftMotorSpeedOut ,g_nRightMotorSpeedOut。 由于速度控制子程序是每100 毫秒才調(diào)用一次。所以程序并沒有直接更新g_nLeftMotorSpeedOut ,g_nRightMotorSpeedOut 的數(shù)值,而是通過調(diào)用函數(shù)CalculateMotorSpeedOut() 更新上面的數(shù)值。函數(shù) CalculateMotorSpeedOut() 是每 5 毫秒被調(diào)用一次,所以程序是將速度控制的變化量平均到20次進(jìn)行更新。這樣可以降低速度控制對(duì)于車模直立控制的影響。如下是車模速度控制子程序:void MotorSpeedAdjustCal(void) { int nLeftSpeed, nRightSpeed。 int nDeltaValue, nP, nI。 int nSpeed。 nLeftSpeed = (int)g_nLeftMotorSpeedCount。 nRightSpeed = (int)g_nRightMotorSpeedCount。 nSpeed = (nLeftSpeed + nRightSpeed) / 2。 nDeltaValue = g_nMotorSpeedSet nSpeed。 nP = mult_r(nDeltaValue, MOTOR_SPEED_P_INT)。 nI = mult_r(nDeltaValue, MOTOR_SPEED_I_INT)。 g_nMotorOutSpeedOld = g_nMotorOutSpeedNew。 g_nMotorOutSpeedKeep = nI。 g_nMotorOutSpeedNew = (g_nMotorOutSpeedKeep 3) nP。 if(g_nMotorOutSpeedKeep MOTOR_OUT_MAX) g_nMotorOutSpeedKeep = MOTOR_OUT_MAX。 if(g_nMotorOutSpeedKeep MOTOR_OUT_MIN) g_nMotorOutSpeedKeep = MOTOR_OUT_MIN。 }void CalculateMotorOutSpeed(void) { int nValue。 nValue = g_nMotorOutSpeedNew g_nMotorOutSpeedOld。 nValue = nValue * (g_nCarMotionCount + 1) / (CAR_MOTION_PERIOD 1) + g_nMotorOutSpeedOld。 g_nLeftMotorOutSpeed = g_nRightMotorOutSpeed = nValue。} 車模方向P控制車模方向控制是通過比較車模兩個(gè)電感檢波電壓進(jìn)行的。這個(gè)調(diào)節(jié)函數(shù)調(diào)用周期為5毫秒。下面的算法中,采用了比例控制算法。 首先計(jì)算兩個(gè)電感電壓差除以兩個(gè)電感電壓之和所得到的比例。 。然后再乘以一個(gè)比例系數(shù)CMA_P_MAX。 CMA_P_MAX可以通過實(shí)驗(yàn)逐步確定一個(gè)合適的取值。車模方向控制子程序:void CarMagneticAdjust(void) { int nP。 long lnDelta。 int nSigma。 lnDelta = g_nCarMagneticRightAverage g_nCarMagneticLeftAverage。 nSigma = (g_nCarMagneticLeftAverage / 2) + (g_nCarMagneticRightAverage / 2)。 if(nSigma == 0) return。 nP = (int)(lnDelta * CMA_P_MAX / nSigma) / 2。 g_nMotorLeftRightDiff = nP。 }車模的三種控制(直立、速度、方向)最終是將控制量疊加在一起作為電機(jī)輸出電壓控制量。直立控制是基礎(chǔ),它的調(diào)整速度非???,速度和方向控制相對(duì)調(diào)整速度慢。速度和方向控制的輸出量是直接疊加在電機(jī)控制電壓上。它們假定直立控制會(huì)始終保持車模不跌倒,直立控制會(huì)自動(dòng)調(diào)節(jié)車模的傾角以適應(yīng)車模的加速、減速和轉(zhuǎn)彎的需要。車模加速前進(jìn)時(shí),由速度控制算法給出電機(jī)增加的正向電壓,電機(jī)開始逐步加速旋轉(zhuǎn)。在此同時(shí),車模直立控制會(huì)迅速進(jìn)行調(diào)整,使得車模往前傾斜,車模開始加速。當(dāng)車模速度達(dá)到設(shè)定值,由車模速到控制算法使得電機(jī)進(jìn)入恒速運(yùn)行。此時(shí)車模直立控制算法也會(huì)相應(yīng)調(diào)整車模出于直立狀態(tài),車模恒速運(yùn)行。車模減速過程與此類似,由速度控制算法減少了電機(jī)的電壓,電機(jī)開始減速運(yùn)行。直立控制算法會(huì)自動(dòng)調(diào)整車模往后傾斜,使得車模減速。車模轉(zhuǎn)向控制是在車速控制基礎(chǔ)之上,調(diào)節(jié)兩個(gè)電機(jī)驅(qū)動(dòng)電壓差使得電機(jī)運(yùn)行速度出現(xiàn)差動(dòng),進(jìn)而調(diào)整車模的方向。 第4章 軟件系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)軟件運(yùn)行需要配置單片機(jī)各個(gè)模塊寄存器數(shù)值,使單片機(jī)各個(gè)模塊正常工作。初始化中包括:單片機(jī)時(shí)鐘配置、I/O口配置、PWM模塊配置、A/D模塊配置、實(shí)時(shí)中斷配置、脈沖捕捉模塊配置。當(dāng)初始化完畢后,進(jìn)入跑車程序:對(duì)傳感器輸入信號(hào)進(jìn)行采樣,當(dāng)完成一次采樣后將采樣值映射成車相對(duì)于跑道的位置,根據(jù)當(dāng)前與過去位置決定舵機(jī)轉(zhuǎn)角和電機(jī)速度,通過改變PWM模塊內(nèi)部寄存器數(shù)值可以得到不同占空比的方波信號(hào),實(shí)現(xiàn)對(duì)舵機(jī)和電機(jī)的調(diào)節(jié)。軟件整體流程如下圖所示:程序上電運(yùn)行后,便進(jìn)行單片機(jī)的初始化。初始化的工作包括有兩部分,一部分是對(duì)于單片機(jī)各個(gè)應(yīng)用到的模塊進(jìn)行初始化。這部分的代碼由CodeWarrior集成環(huán)境的ProcessorExpert 工具生成。第二部分是應(yīng)用程序初始化,是對(duì)于車??刂瞥绦蛑袘?yīng)用到的變量值進(jìn)行初始化。 初始化完成后,首先進(jìn)入車模直立檢測(cè)子程序。該程序通過讀取加速度計(jì)的數(shù)值判斷車模是否處于直立狀態(tài)。如果一旦處于直立狀態(tài)則啟動(dòng)車模直立控制、方向控制以及速度控制。 程序在主循環(huán)中不停發(fā)送監(jiān)控?cái)?shù)據(jù),在通過串口發(fā)送到上位機(jī)進(jìn)行監(jiān)控。同時(shí)檢查車模是否跌倒。跌倒判斷可以通過車模傾角是否超過一定范圍進(jìn)行確定,或者通過安裝在車模前后防撞支架上的微動(dòng)開關(guān)來判斷。一定車模跌倒,則停止車模運(yùn)行。包括車模直立控制、速度控制以及方向控制。然后重新進(jìn)入車模直立判斷過程。車模的直立控制、速度控制以及方向控制都是在中斷程序中完成。通過全局標(biāo)志變量確定是否進(jìn)行這些閉環(huán)控制。中斷程序框架如圖所示。圖中,使用K60的一個(gè)定時(shí)器,產(chǎn)生一毫秒的周期中斷。中斷服務(wù)程序的任務(wù)被均勻分配在04 的中斷片段中。因此每個(gè)中斷片段中的任務(wù)執(zhí)行的頻率為200Hz 。 將任務(wù)分配到不同的中斷片段中,一方面防止這些任務(wù)累積執(zhí)行時(shí)間超過1 毫秒,擾亂一毫秒中斷的時(shí)序,同時(shí)也考慮到這些任務(wù)之間的時(shí)間先后順序。 這些任務(wù)包括: (1)電機(jī)測(cè)速脈沖計(jì)數(shù)器讀取與清除。累積電機(jī)轉(zhuǎn)動(dòng)角度。累積電機(jī)速度,為后面車模速度控制提供平均數(shù); (2)啟動(dòng)AD 轉(zhuǎn)換。由于AD 轉(zhuǎn)換啟動(dòng)到完成需要一定時(shí)間。所以讀取AD 轉(zhuǎn)換在下一個(gè)時(shí)間片段中。 (3)讀取AD 轉(zhuǎn)換值。這些值包括有陀螺儀、加速度計(jì)數(shù)值、CCD圖像檢測(cè)電壓值等。讀取完畢之后,便進(jìn)行車模直立控制過程。包括車模角度計(jì)算、直立控制計(jì)算、電機(jī)PWM 輸出等。 (4)車模速度控制:在這個(gè)時(shí)間片段中,又進(jìn)行019 計(jì)數(shù)。在其中第0 片段中,進(jìn)行速度PID 調(diào)節(jié)。因此,速度調(diào)節(jié)的周期為100 毫秒。也就是每秒鐘調(diào)節(jié)10次。 (5)車模方向控制:根據(jù)前面讀取的CCD圖像檢測(cè)數(shù)值,計(jì)算偏差數(shù)值。然后計(jì)算電機(jī)差??刂齐妷簲?shù)值。前面給出的算法程序存在很多參數(shù),雖然從理論上可以對(duì)這些參數(shù)進(jìn)行優(yōu)化計(jì)算。但是由于受到車模模型精度的影響,計(jì)算所得到的參數(shù)也只能夠作為參考值——調(diào)試的起始范圍。實(shí)際優(yōu)化參數(shù)需要通過一定的工程步驟最終確定,這個(gè)過程稱為參數(shù)整定。 為了保證調(diào)試順利,一般需要配合上位機(jī)串口監(jiān)控程序,能夠?qū)崟r(shí)顯示程序運(yùn)行采集到的各種數(shù)據(jù),通過曲線或者數(shù)字顯示出來,幫助確定一些待定參數(shù),加快程序調(diào)試,確定控制參數(shù)的優(yōu)化數(shù)值。開發(fā)制作相應(yīng)的輔助調(diào)試工作,不僅可以大大加快調(diào)試的進(jìn)度,同時(shí)也會(huì)鍛煉解決工程問題的能力。 程序調(diào)試的一般步驟。 (1)電機(jī)PWM 輸出調(diào)試:程序給出兩個(gè)電機(jī)固定的PWM 輸出。測(cè)試電機(jī)轉(zhuǎn)速以及轉(zhuǎn)向是否符合設(shè)定的要求。在此過程中,測(cè)試車模電機(jī)死區(qū)補(bǔ)償電壓數(shù)值:MOTOR_OUT_DEAD_VAL。 (2)陀螺儀和加速度計(jì)零偏調(diào)試:獲得這兩個(gè)傳感器零點(diǎn)的偏移量。保持車模直立靜止。讀取兩個(gè)傳感器AD轉(zhuǎn)換值,記錄下來,作為后面程序中的零偏常量。 (3)測(cè)試車模直立判斷程序和跌倒判斷程序:此時(shí)禁止車模直立控制環(huán)節(jié),通過讀取加速度計(jì)的數(shù)值,判斷車模是否直立或者跌倒。一般情況下,車模直立要求,車模傾角在正負(fù)10度之內(nèi),保持2 秒鐘。車模跌倒判斷車模的傾角大于45度。 (4)車模直立控制調(diào)試:只啟動(dòng)車模直立控制,調(diào)整兩個(gè)控制參數(shù):傾角比例和角速度比例,使得車模能夠穩(wěn)定的直立。此時(shí)由于沒有速度控制,車??赡軙?huì)朝一個(gè)方向加速行駛??梢酝ㄟ^微調(diào)加速度計(jì)的零偏值,減小車模在直立的時(shí)候朝一個(gè)方向的加速度。盡量控制車模靜止。(5)車模速度控制調(diào)試:啟動(dòng)車模的直立控制和速度控制,調(diào)節(jié)速度控制的PI 參數(shù),使得車模能夠靜止穩(wěn)定在一個(gè)地點(diǎn)。然后再給定一個(gè)設(shè)定速度,車??梢苑€(wěn)定的前行或者后退。 (6)車模方向控制調(diào)試:啟動(dòng)車模的直立控制、速度控制和方向控制。將車模放在跑道上,車??梢苑€(wěn)定在跑道上運(yùn)行。 通過上面幾個(gè)步驟,逐步確定各個(gè)控制環(huán)節(jié)中的參數(shù)。賽車調(diào)試上述算法參數(shù)的獲取必須通過實(shí)際的測(cè)量,賽道信息的獲取我們通過用串口傳送數(shù)據(jù)。利用串口模塊,將所需數(shù)據(jù)發(fā)回PC機(jī),通過仿真分析偏差變化,對(duì)數(shù)據(jù)進(jìn)行處理得到賽道信息,從而調(diào)整參數(shù)使之達(dá)到最佳值。 結(jié)束語畢業(yè)設(shè)計(jì)過程中,我們?cè)诶桌蠋煹闹笇?dǎo)下,完成了對(duì)CCD傳感器,陀螺儀以及加速度傳感器的理解與運(yùn)用,使得我們對(duì)飛思卡爾智能車的軟件設(shè)計(jì)有了一個(gè)比較可靠的硬件原理基礎(chǔ)。之后通過對(duì)PID閉環(huán)控制系統(tǒng)的學(xué)習(xí),使我們對(duì)智能車軟件的算法有了一個(gè)明確認(rèn)識(shí),為后來的程序設(shè)計(jì)奠定了基礎(chǔ)。通過對(duì)智能車模的行走特點(diǎn)理解,我們對(duì)其進(jìn)行了車模直立控制,車模速度控制和車模方向控制,在完善控制原理的基礎(chǔ)上對(duì)車模直立行走進(jìn)行了有針對(duì)性的程序設(shè)計(jì)工作,并且對(duì)其中的控制參數(shù)進(jìn)行了檢測(cè)與改進(jìn),經(jīng)過我們不懈的努力,最終完成了車模直立行走的任務(wù)。 致謝本課題的研究探討以及論文撰寫一
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1