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

正文內(nèi)容

一階環(huán)形倒立擺畢業(yè)論文(編輯修改稿)

2025-07-25 04:19 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 式下變量會(huì)存放在xdata中,而xdata的尋址速度會(huì)比data區(qū)慢。為了保證執(zhí)行效率,所以要對(duì)應(yīng)關(guān)鍵的或要經(jīng)常訪問(wèn)調(diào)用的變量和函數(shù)進(jìn)行處理。關(guān)鍵的或要經(jīng)常訪問(wèn)的變量使用data關(guān)鍵字進(jìn)行聲明,關(guān)鍵的或要經(jīng)常調(diào)用的函數(shù)使用SMALL 存儲(chǔ)模式進(jìn)行聲明。函數(shù)使用SMALL 存儲(chǔ)模式的好處是局部變量和函數(shù)參數(shù)保存在8051 內(nèi)部RAM。程序所用到單片機(jī)的模塊資源及其配置。 1)毫秒定時(shí)中斷:Timer0 硬件模塊:T0 中短周期:Period:5ms 2)電機(jī)PWM輸出控制:PWMPWM3 硬件模塊:PCAPCA3 3)ADC采集通道:ADC 硬件模塊:AD0、AD1 數(shù)值范圍:Range:0 0xFF 轉(zhuǎn)換分辨率:Resolution:10bit 4)監(jiān)控UART 串口 硬件模塊UART0、T1 通訊速率:Baud:9600初始化完成后,首先進(jìn)入按鍵檢測(cè)子程序。該程序通過(guò)讀取按鍵狀態(tài)判斷倒立擺執(zhí)行的任務(wù)項(xiàng)。按鍵值1, 擺桿從處于自然下垂?fàn)顟B(tài)(擺角0176。)開(kāi)始,驅(qū)動(dòng)電機(jī)帶動(dòng)旋轉(zhuǎn)臂作往復(fù)旋轉(zhuǎn)使擺桿擺動(dòng),并盡快使擺角達(dá)到或超過(guò)60176。~ +60176。按鍵值2, 從擺桿處于自然下垂?fàn)顟B(tài)開(kāi)始,盡快增大擺桿的擺動(dòng)幅度,直至完成圓周運(yùn)動(dòng);按鍵值3,在擺桿處于自然下垂?fàn)顟B(tài)下,外力拉起擺桿至接近165176。位置,外力撤除同時(shí),啟動(dòng)控制旋轉(zhuǎn)臂使擺桿保持倒立狀態(tài)時(shí)間不少于5s;期間旋轉(zhuǎn)臂的轉(zhuǎn)動(dòng)角度不大于90176。;按鍵值4,從擺桿處于自然下垂?fàn)顟B(tài)開(kāi)始,控制旋轉(zhuǎn)臂作往復(fù)旋轉(zhuǎn)運(yùn)動(dòng),盡快使擺桿擺起倒立,保持倒立狀態(tài)時(shí)間不少于10s;按鍵值5,在擺桿保持倒立狀態(tài)下,施加干擾后擺桿能繼續(xù)保持倒立或2s內(nèi)恢復(fù)倒立狀態(tài);按鍵值6,在擺桿保持倒立狀態(tài)的前提下,旋轉(zhuǎn)臂作圓周運(yùn)動(dòng),并盡快使單方向轉(zhuǎn)過(guò)角度達(dá)到或超過(guò)360176。程序在主循環(huán)中不停發(fā)送監(jiān)控?cái)?shù)據(jù),在通過(guò)串口發(fā)送到上位機(jī)進(jìn)行監(jiān)控。同時(shí)檢查擺桿是否失去倒立可調(diào)狀態(tài)。失去倒立可調(diào)狀態(tài)判斷可以通過(guò)擺桿傾角是否超過(guò)一定范圍進(jìn)行確定,一旦擺桿失去倒立可調(diào)狀態(tài),則停止倒立擺運(yùn)行。然后重新進(jìn)入擺桿倒立可調(diào)狀態(tài)判斷過(guò)程。 按鍵值獲取、擺桿角度值獲取計(jì)算、擺桿倒立狀態(tài)控制都是在中斷程序中完成。圖41 中斷服務(wù)程序流程圖圖41中,使用T0定時(shí)器,產(chǎn)生50毫秒的周期中斷。為防止這些任務(wù)累積執(zhí)行時(shí)間超過(guò)50毫秒,擾亂中斷的時(shí)序,需要測(cè)試中斷服務(wù)程序執(zhí)行總時(shí)間不超出50毫秒。任務(wù)具體執(zhí)行時(shí)間可以通過(guò)單片機(jī)的引腳顯示出來(lái),在進(jìn)入中斷時(shí),測(cè)試引腳輸出高電平,退出中斷時(shí),測(cè)試引腳輸出低電平。這些任務(wù)包括: (1)按鍵值檢測(cè),判定倒立擺執(zhí)行哪項(xiàng)任務(wù); (2)啟動(dòng) AD轉(zhuǎn)換。進(jìn)行傳感器模擬量采集; (3)擺桿角度計(jì)算、倒立控制計(jì)算;(4)角度、角位移零點(diǎn)值、PWM輸出值采集顯示;(4)PID參數(shù)調(diào)試。 主函數(shù)功能倒立擺的控制實(shí)時(shí)性要求高,倒立擺的主要控制函數(shù)都在定時(shí)器中斷中執(zhí)行。主函數(shù)中循環(huán)發(fā)送監(jiān)測(cè)數(shù)據(jù),監(jiān)測(cè)數(shù)據(jù)包括:ADC采集的角位移的模擬值、計(jì)算出的擺桿角度值、PWM輸出值。便于分析數(shù)據(jù)改進(jìn)控制參數(shù)。for(。){ ===向上位機(jī)發(fā)送數(shù)據(jù) 方便觀測(cè)=== HanterChannel[0].s16Element=(int16)g_VoltageZ。 //角位移電壓值 HanterChannel[1].s16Element=(int16)g_fCarAngle。 //上擺角度 HanterChannel[2].s16Element=(int16)G_LeftVal。 //PWM輸出值 superior_send(3, HanterChannel)。} 本節(jié)將對(duì)主要控制函數(shù)進(jìn)行說(shuō)明。函數(shù)代碼均采用通用的C 語(yǔ)言,單精度浮點(diǎn)運(yùn)算。 角度函數(shù)本程序讀取DSC 的AD采用數(shù)值,然后計(jì)算擺桿的傾角。 對(duì)于讀取的角位移傳感器數(shù)值需要減去零偏值。這個(gè)數(shù)值需要通過(guò)實(shí)驗(yàn)確定。在擺桿保持直立靜止時(shí),讀出通道的數(shù)值,便是相應(yīng)的零偏值。這個(gè)數(shù)值會(huì)帶有一定的誤差,往往會(huì)使得擺桿往一個(gè)方向傾斜。后面的陀本程序讀取DSC 的AD采用數(shù)值,然后計(jì)算擺桿的傾角。 具體的方式為參見(jiàn)后面的調(diào)試過(guò)程。void AngleCalculate(void)small{ if((g_VoltageZ=325)amp。amp。(g_VoltageZ=1024)){g_fGravityAngle =(g_VoltageZZ_OFFSET)*GRAVITY_ANGLE_RATIO。 } if((g_VoltageZ=0)amp。amp。(g_VoltageZ=325)) { g_fGravityAngle =g_VoltageZ*GRAVITY_ANGLE_RATIO+。 } g_fAngle=g_fGravityAngle。 擺干角度} 倒立控制函數(shù)在角度函數(shù)中,我們得到了擺桿的傾角。角度的值的正負(fù)區(qū)分了擺桿的方向。獲取擺桿角度反饋值,通過(guò)PID算法計(jì)算出PWM輸出,控制電機(jī)轉(zhuǎn)速和轉(zhuǎn)向。從而使擺桿處于倒立狀態(tài)。void MotorSpeedOut(void)small{ int16 Val。LeftVal=g_fLeftMotorOut。 if(LeftVal0) 正轉(zhuǎn) { Val=PIDControl(0,g_fAngle)。 PWM(Val)。PWM1(0)。 } else 反轉(zhuǎn) { Val=PIDControl(0,g_fAngle)。 PWM(0)。 PWM1(Val)。 }}PID控制是程序的核心部分,為了實(shí)現(xiàn)擺桿倒立的精確控制。對(duì)擺桿角度進(jìn)行分段PID控制,不同的角度范圍設(shè)置不同的控制參數(shù)。int PIDControl(int setvalue,int backvalue){ static float fSpeedControlIntegral=。 static float fDeltaNew=0,fDeltaOld。 float fP,fD,fI。 int result。 backvalue=abs(backvalue)。 取絕對(duì)值 fDeltaNew=setvalue+backvalue。 計(jì)算差值 fSpeedControlIntegral+=fI。 result=(int)(fP+fD+fSpeedControlIntegral)。 fDeltaOld=fDeltaNew。 保存差值fSpeedControlIntegral=(fSpeedControlIntegral255)?fSpeedControlIntegral:255。 積分限幅 if((g_fCarAngle1)amp。amp。(g_fCarAngle1)) 積分清零 {fSpeedControlIntegral=0。fI=0。result=0。} if (result=OUT_MIN){result = OUT_MIN。} 輸出限幅 else if (result =OUT_MAX){result = OUT_MAX。} 輸出限幅 return (result)。 }43第五章 上位機(jī)修改參數(shù)為了使倒立擺系統(tǒng)實(shí)現(xiàn)倒立并具有良好的穩(wěn)定性,調(diào)試過(guò)程中需要修改很多參數(shù)。如果每次修改參數(shù)都要重新下載程序,效率將會(huì)大大降低。俗話說(shuō),磨刀不誤砍柴工。在調(diào)試智能車(chē)之前,實(shí)現(xiàn)上位機(jī)通過(guò)串口修改參數(shù),單片機(jī)將接收到的參數(shù)保存的EEPROM中。這樣,通過(guò)上位機(jī)將修改后的參數(shù)經(jīng)過(guò)串口發(fā)送給倒立擺系統(tǒng),將很容易的完成倒立擺系統(tǒng)的調(diào)試。 串口獵人使用方法串口獵人是一款功能非常強(qiáng)大的串口軟件,不僅可以實(shí)現(xiàn)基本的收碼發(fā)碼,還可以根據(jù)實(shí)際需要設(shè)定幀格式,實(shí)現(xiàn)高級(jí)收碼發(fā)碼,不僅如此,串口獵人還可以將接收到的數(shù)據(jù)以波形、碼表、柱狀圖等形式顯示出來(lái),這大大方便了自平衡車(chē)的調(diào)試。 基本收碼發(fā)碼基本功能使用非常簡(jiǎn)單,點(diǎn)擊“重新搜索串口”,選擇正確的端口號(hào),再單擊“啟動(dòng)串行端口”,當(dāng)串口開(kāi)啟狀態(tài)為綠色即表示對(duì)應(yīng)的端口成功開(kāi)啟。再根據(jù)通信協(xié)議設(shè)置波特率、數(shù)據(jù)位、有無(wú)校驗(yàn)等信息,就可以實(shí)現(xiàn)基本的收碼發(fā)碼。串口獵人可以收發(fā)HEX碼或者字符串,在使用時(shí)一定要正確選擇。 高級(jí)發(fā)碼在實(shí)際使用中,串口發(fā)送或接收的信息要以幀形式發(fā)送,而不同情況下可能需要不同的幀格式。串口獵人的高級(jí)發(fā)碼功能很容易根據(jù)實(shí)際需要設(shè)定幀格式。在高級(jí)發(fā)碼中,有幀格式設(shè)置一欄,可以設(shè)置幀格式。比如需要幀格式為“!+幀數(shù)據(jù)+字符串結(jié)束符”,可以在格式代碼中填入1D5,同時(shí)在1( 幀頭)中填!,5(特殊字節(jié)1)中填入字符串結(jié)束符的HEX碼00。在自動(dòng)發(fā)碼表或者自動(dòng)發(fā)文件中填入需要發(fā)送到幀數(shù)據(jù)后,單擊“啟動(dòng)自動(dòng)發(fā)碼”即可以“!+幀數(shù)據(jù)+字符串結(jié)束符”的幀格式發(fā)送。為了避免每次啟動(dòng)后都要設(shè)置幀格式等,可以將配置保存,下次啟動(dòng)時(shí)載入即可。圖51 高級(jí)發(fā)碼設(shè)置 高級(jí)收碼下位機(jī)傳回的幀中可能包含幀頭、幀長(zhǎng)、速度、角度等多種信息,通過(guò)高級(jí)收碼可以將這些信息分布提取出來(lái),方便觀察。幀結(jié)束判定根據(jù)下位機(jī)的協(xié)議設(shè)定,8個(gè)通道可以同時(shí)提取同一幀中的8個(gè)信息。比如接收到下位機(jī)發(fā)送格式為“幀頭+角度值+角速度值”的幀,為了獲得角度值和角速度值,根據(jù)協(xié)議設(shè)定幀頭,然后在通道0中別名填入“角度值”,來(lái)源選擇“提取每一幀”,數(shù)據(jù)格式中的首地址為角度值在每一幀中的位置;單雙字節(jié)則根據(jù)角度值占用的字節(jié)數(shù)選擇;如果雙字節(jié)數(shù)據(jù)高8位在前,則勾選高位在前;如存在負(fù)數(shù),勾選帶符號(hào)位。同樣方法將通道1設(shè)置成提取角速度值的通道。單擊啟動(dòng)高級(jí)收碼后,將在歷史數(shù)據(jù)區(qū)看到接收到的角度值和角速度值,該值是轉(zhuǎn)換成人們常用的10進(jìn)制的結(jié)果。 波形顯示除了高級(jí)收碼、高級(jí)發(fā)碼外,串口獵人還提供了更便于分析數(shù)據(jù)的波形顯示。波形顯示是將高級(jí)收碼的8個(gè)通道數(shù)據(jù)以波形的形式顯示出來(lái),更直接的反應(yīng)出來(lái)某個(gè)量的變化情況。當(dāng)設(shè)置好高級(jí)收碼后,只要單擊“啟動(dòng)波形顯示”,接收到的信息就可以在波形顯示窗口顯示出來(lái)。碼表顯示、柱狀顯示和波形顯示類(lèi)似,只要點(diǎn)擊對(duì)應(yīng)的“啟動(dòng)碼表顯示”或者“啟動(dòng)柱狀圖顯示”即可。 下位機(jī)程序設(shè)計(jì)下位機(jī)的程序要根據(jù)與上位機(jī)的通信協(xié)議編寫(xiě)。上位機(jī)使用的是串口獵人這款軟件。在設(shè)計(jì)中,系統(tǒng)數(shù)據(jù)多為浮點(diǎn)數(shù)據(jù)。軟件發(fā)送的為字符串,所以下位機(jī)程序需要將字符串轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù)。 下位機(jī)的高級(jí)發(fā)碼程序設(shè)計(jì)下位機(jī)執(zhí)行高級(jí)發(fā)碼程序時(shí),上位機(jī)對(duì)應(yīng)著采用高級(jí)收碼模式。如果協(xié)議定義幀頭+幀數(shù)據(jù),則高級(jí)發(fā)碼程序中先發(fā)送一個(gè)幀頭,再發(fā)送幀數(shù)據(jù)即可。為了方便程序發(fā)送uint16型數(shù)據(jù),同時(shí)為了使用同一函數(shù)發(fā)送int16,uint8,int8類(lèi)型的數(shù)據(jù),定義共同體_uinonx。定義共同體_uinonx的好處在于,將uint16型數(shù)據(jù)幅值給u16Element元素后,在struct _u8struct中的High和LowE元素即為uint16型數(shù)據(jù)的高位字節(jié)和低位字節(jié),方便串口發(fā)送。typedef union _uinonx{ uint16 u16Element。 uint8 u8Element。 int16 s16Element。 int8 s8Element。 struct _u8struct { uint8 HighE。 uint8 LowE。 }u8struct。}unionx, *ptrunionx。圖52 高級(jí)發(fā)碼流程圖圖53 高級(jí)收碼流程圖這樣就可以向上位機(jī)發(fā)送數(shù)據(jù)了。比如,想要觀測(cè)當(dāng)前擺桿的角度值,可以將數(shù)據(jù)測(cè)得的擺桿角度值存在unionx類(lèi)型的數(shù)據(jù)HanterChannel[x].s16Element中,再調(diào)用void superior_send(uint8 DataCount, ptrunionx Ptr)。函數(shù)即可。HanterChannel[0].s16Element=(int16) (g_fCarAngle*)。 HanterChannel[1].s16Element=(int16)( g_fGyroscopeAngleSpeed*)。superior_send(2, HanterChannel)。串口獵人設(shè)定好波特率,并在高級(jí)收碼的通道0中數(shù)據(jù)格
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1