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

正文內(nèi)容

基于單片機(jī)的直流電機(jī)pwm控制系統(tǒng)設(shè)計-資料下載頁

2025-11-08 20:59本頁面

【導(dǎo)讀】直流電機(jī)傳動系統(tǒng)是現(xiàn)代傳動系統(tǒng)中最主要的機(jī)電能量變化形式之一。會中廣泛的應(yīng)用,許多系統(tǒng)有調(diào)速的要求:如車輛、電梯、機(jī)床、造紙機(jī)械等等。方面的考慮,也需要對直流電機(jī)進(jìn)行控制。直流電機(jī)控制系統(tǒng)由控制部分、功率部分。和電機(jī)三大要素組成。各部分之間的不同組合,可構(gòu)成不同的控制系統(tǒng)。直流電機(jī)的控制方法[1]可分為兩方向,即勵磁控制與電樞電壓控制。換向器結(jié)構(gòu)強(qiáng)度的限制,而且由于勵磁線圈電感較大,動態(tài)響應(yīng)較差。信號輸入直流電機(jī),通過改變脈沖信號開關(guān)的比例,達(dá)到速度控制的效果。ON的時間內(nèi)施加電壓,OFF的時間內(nèi)切斷電壓,電機(jī)的轉(zhuǎn)動將是斷續(xù)的。本課題研究了一種直流電機(jī)轉(zhuǎn)速的控制系統(tǒng)。該控制系統(tǒng)由上位機(jī)子系統(tǒng)和下位。上位機(jī)子系統(tǒng)為主控單元,下位機(jī)子系統(tǒng)以ARM為核心,上位機(jī)。下位機(jī)采用LPC2114處理器,它執(zhí)行上。位機(jī)指令,通過直流電機(jī)驅(qū)動電路控制直流電機(jī)的運(yùn)轉(zhuǎn)。大的成功,目前已經(jīng)占有75%以上32位RISC嵌入式產(chǎn)品市場。實時操作系統(tǒng)三個發(fā)展階段。

  

【正文】 變量 */ typedef unsigned int uint32。 /*無符號 32 位整型變量 */ typedef signed int int32。 /*有符號 32 位整型變量 */ typedef float fp32。 /*單精度浮點數(shù)( 32 位長度) */ typedef double fp64。 /*雙精度浮點數(shù)( 64 位長度) */ ( 2) 堆棧增長方向 uC/OSII 使用結(jié) 構(gòu)常量 OS_STK_GROWTH 指定堆棧的生長方式。 ADS的 C 語言編譯器僅支持從上到下長的堆棧生長方式,而且必須是滿遞減堆棧,所以O(shè)S_STK_GROWTH 的值為 1。 ( 3) 使用軟中斷 SWI 作底層接口 移植的 uC/OSII 具有 2 個指令集,用戶任務(wù)具有 2 中處理器模式:用戶模式與系統(tǒng)模式,所以組合起來共有 4 種工作方式,每種方式對于系統(tǒng)資源具有不同的訪問控制權(quán)限。移植時將 uC/OSII 的內(nèi)核固化在 Flash 中,從別的地方將任務(wù)調(diào)入。將軟中斷指令 SWI 作為底層接口,這樣使得底層接口函數(shù)與處理器狀態(tài)無關(guān),并 且調(diào)用函數(shù)時不用知道函數(shù)的位置。 移植匯編語言編寫的與處理器相關(guān)的函數(shù) 文件中要移植 4 個匯編語言編寫的與處理器相關(guān)的函數(shù), 4 個函 數(shù)如下: ( 1) OSStartHighRdy():運(yùn)行優(yōu)先級最高的就緒任務(wù) 此函數(shù)是在 OSStart()多任務(wù)啟動之后,負(fù)責(zé)從最高優(yōu)先級任務(wù)的 TCB 任務(wù)控制塊中獲得該任務(wù)的堆棧指針 SP,通過 SP 依次將 CPU 現(xiàn)場恢復(fù),這時系統(tǒng)就將控制權(quán)交給用戶創(chuàng)建的該任務(wù)進(jìn)程,直到該任務(wù)被阻塞或者被其它高優(yōu)先級的任務(wù)搶占CPU。該函數(shù)僅僅在多任務(wù)啟動時被執(zhí)行一次, 用來啟動第一個,也是最高優(yōu)先級的任務(wù)執(zhí)行,之后多任務(wù)的調(diào)度和切換就由 OSCtxSw()函數(shù)來實現(xiàn)。 邵陽學(xué)院畢業(yè)設(shè)計 (論文 ) 26 ( 2) OSCtxSw():任務(wù)級的任務(wù)切換函數(shù) 該函數(shù)由 OS_TASK_SW()宏調(diào)用, OS_TASK_SW()負(fù)責(zé)任務(wù)之間的調(diào)度。它的工作是先將當(dāng)前任務(wù)的 CPU 現(xiàn)場保存到該任務(wù)堆棧中,然后獲得最高優(yōu)先級任務(wù)的堆棧指針,從該堆棧中恢復(fù)此任務(wù)的 CPU 現(xiàn)場,使之繼續(xù)執(zhí)行。這樣就完成了一次任務(wù)切換。 ( 3) OSIntCtxSw():中斷級的任務(wù)切換函數(shù) 該函數(shù)由 OSIntExit()調(diào)用。中斷級的任務(wù)切 換是在時鐘中斷 ISR(中斷服務(wù)例程 )中發(fā)現(xiàn)有高優(yōu)先級任務(wù)等待的時鐘信號到來時,則需要在中斷退出后并不返回被中斷任務(wù),而是直接調(diào)度就緒的高優(yōu)先級任務(wù)執(zhí)行。這樣做的目的主要是能夠盡快地讓高優(yōu)先級的任務(wù)得到響應(yīng),保證系統(tǒng)的實時性能。它的原理基本上與任務(wù)級的切換相同,但是由于進(jìn)入中斷時己經(jīng)保存過了被中斷任務(wù)的 CPU 現(xiàn)場,因此這里就不用再進(jìn)行類似的操作,只需要對堆棧指針做相應(yīng)的調(diào)整,原因是函數(shù)的嵌套。 ( 4) OSTickISR():時鐘節(jié)拍中斷服務(wù)函數(shù) 時鐘節(jié)拍中斷服務(wù)函數(shù)的主要任務(wù)是負(fù)責(zé)處理時鐘中斷,調(diào)用系統(tǒng) 實現(xiàn)的OSTimeTick()函數(shù),如果有等待時鐘信號的高優(yōu)先級任務(wù),則需要在中斷級別上調(diào)度其執(zhí)行。其他相關(guān)的兩個函數(shù)是 OSIntEnter()和 OSIntExit(),都需要在 ISR 中執(zhí)行。 移植與操作系統(tǒng)相關(guān)的 文件 ( 1) OSTaskStkInit():任務(wù)堆棧初始化函數(shù) 此函數(shù)涉及到任務(wù)初始化時的一個堆棧設(shè)計,也就是在堆棧增長方向上如何定義每個需要保存的寄存器位置,在 ARM 體系結(jié)構(gòu)下,任務(wù)堆??臻g由高至低依次將保存著 PC, LR, R12, R11, R10, … , R1, R0, CPSR, OsEnterSum。 OsEnterSum不是 CPU 寄存器,它是一個全局變量,用來保存關(guān)中斷的次數(shù) 【 10】 。 ( 2) 軟件中斷 C 語言處理函數(shù) 軟件中斷 C 語言處理函數(shù)原型: void SWI_Exception (int SWI_Num,int*Regs);其中參數(shù) SWI_Num 為功能號,而 Regs 為指向堆棧中保存寄存器的值的位置。程序比較簡單,使用一個 switch 語句把各個功能分隔開,各個功能相對獨立。 ( 3) 定義允許和禁止中斷宏 與所有的實時內(nèi)核一樣, uC/OSII 需要先關(guān)中斷, 再處理臨界段代碼,并且在處理完畢后重新開中斷。這就使得 uC/OSII 能夠保護(hù)臨界段代碼免受多任務(wù)切換或中斷程序的破壞。為了避免不同編譯器廠商提供不同的實現(xiàn)方法所帶來的影響,以增邵陽學(xué)院畢業(yè)設(shè)計 (論文 ) 27 加可移植性, uC/OSII定義了 2個宏,用于關(guān) /開中斷: OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()。 ( 4) OSStartHighRdy():運(yùn)行最高優(yōu)先級任務(wù)函數(shù) uC/OSII 的啟動多任務(wù)環(huán)境的函數(shù)為 OSStart(),用戶在調(diào)用 OSStart()之前,必須建立了一個或更多任務(wù)。 OSStart()最終調(diào)用函數(shù) OSStartHighRdy()運(yùn)行多任務(wù)啟動前優(yōu)先級最高的任務(wù)。 直流電機(jī)控制模 塊 電機(jī)速度控制 PWM 驅(qū)動模塊的實現(xiàn) 電機(jī)速度由 PWM 占空比決定。 LPC2114 的 PWM 功能基于標(biāo)準(zhǔn)的定時器模塊之上,它同樣具有 32 位定時器及預(yù)分頻控制電路及 7 個匹配寄存器,可實現(xiàn) 6 個單邊沿 PWM 或 3 個雙邊沿 PWM 輸出,也可以采用這兩種類型的混合輸出。具有匹配中斷、匹配 PWMTC 復(fù)位、匹配 PWMTC 停止功能。如果不使能 PWM 模式,可作為一個標(biāo)準(zhǔn)的定時器。 PWM 的基本寄存器功能框圖如圖 所示。 32 位定時器 PWMTC 的計數(shù)頻率由 pclk 經(jīng)過 PWMPR 進(jìn)行分頻控制得到,而定時器的啟動 /停止、計數(shù)復(fù)位由 PWMTCR 控制,當(dāng)有比較事件發(fā)生時, PWMIR會設(shè)置相關(guān)的中斷標(biāo)志 (因為不是定時器溢出而產(chǎn)生中斷,所以圖 中采用虛線連接 )。若已打開中斷允許 (VIC),則會產(chǎn)生中斷。當(dāng)然,預(yù)分頻控制器 PWMPR 只是控制分頻數(shù),而其對應(yīng)的分頻計數(shù)器是 PWMPC,但無須用戶操作 PWMPC 寄存器。圖 為 PWM 的比較匹配寄存器功能圖。對于 PWM 的產(chǎn)生是通過 PWM的比較匹配寄存器實現(xiàn)。定時器比較匹配由 PWMMCR 進(jìn)行匹配操作設(shè)置,而PWMMR0~6 則為 7 路比較匹配通道的比較值寄存器。當(dāng)比較匹配發(fā)生時,將會按照 PWMMCR 設(shè)置的方法產(chǎn)生中斷或復(fù)位 PWMTC 等, PWMPCR 可以控制單邊沿或雙邊沿 PWM 輸出,允許或不允許 PWM 輸出。另外,為了確保在 PWMMR0~6的比較值進(jìn)行修改過程中不影響 PWM 輸出,使用了一個 PWMLER 鎖存使能寄存器。當(dāng)要修改 PWMMR0~6 的比較值時,只有控制 PWMLER 的對應(yīng)位置位,在匹配 0 事件發(fā)生后此值才會生效 [12]。 使用單邊 PWM 輸出時,在 PWM 周期開始時為高電平,匹配后為低電平 ;使用 PWMMR0 作為 PWM 周期控制, PWMMRx 作為占空比控制。 PWM 基本操作方法如下: ( 1) 連接 PWM 功能引腳輸出,即設(shè)置 PINSEL0、 PINSEL1; 邵陽學(xué)院畢業(yè)設(shè)計 (論文 ) 28 ( 2) 設(shè)置 PWM 定時器的時鐘分頻值 (PWMPR),得到所要的定時器時鐘; ( 3) 設(shè)置比較匹配控制 (PWMMCR),并設(shè)置相應(yīng)的比較值 (PWMMRx); ( 4) 設(shè)置 PWM 輸出方式 ; ( 5) 設(shè)置 PWMTCR,啟動定時器,使能 PWM; ( 6) 運(yùn)行過程中要更改比較值時,更改之后要設(shè)置鎖存使能 圖 PWM的基本寄存器功能框圖 圖 PWM的比較匹配寄存器功能框圖 。 系統(tǒng)采用 PWM PWM6 輸出,可采用相同的周期,初始化程序如下所示: PWMPR=0x00。 /*不分頻,計數(shù)頻率為 Fpclk*/ PWMMCR=0x02。 /*設(shè)置 PWMMR0 匹配時復(fù)位 PWMTC*/ PWMMR0=2020。 /*設(shè)置 PWM 周期, PWMMR0=2020*/ PWMMR4=1000。 /*設(shè) 置 PWM4 占空比, PWMMR6=1000*/ PWMMR6=500。 /*設(shè)置 PWM6 占空比, PWMMR6=500*/ 定時器控制寄存器PWMTCR ( R / W )預(yù)分頻控制PWMPR ( R / W )32 位定時器 / 計數(shù)器PWMTCR ( R / W )中斷寄存器PWMTIR ( R / W )匹配比較PCLK重裝映像控制PW M LER ( R / W )比較匹配控制PW M M CR ( R / W )比較匹配值PW M M RO ~ 6 ( R / W )32 位定時器 / 計數(shù)器PW M TC ( R / W )比較PW M 輸出方式控制PW M PC R ( R / W )邵陽學(xué)院畢業(yè)設(shè)計 (論文 ) 29 PWMLER=0x51。 /*PWMMR0、 PWMMR PWMMR4 鎖存 */ PWMPCR=0x5000。 /*允許 PWM6, PWM4 輸出,單邊沿 PWM*/ PWMTCR=0x09。 /*啟動定時器, PWM 使能 */ 注:前面已設(shè)置 PINSEL0 和 PINSEL1 寄存器。 LPC2114 應(yīng)用 程序流程 使用郵箱實現(xiàn)任務(wù)間的通信 郵箱能使一個任務(wù)或者中斷服務(wù)子程序向另一個任務(wù)發(fā)送一個指針型的變量,該指針指向一個包含了特定“消息”的數(shù)據(jù)結(jié)構(gòu)。一個郵箱只能包含一個這樣的指針 (郵箱為滿時 ),或者一個指向 NULL 的指針 (郵箱為空時 )。系統(tǒng)采用郵箱機(jī)制實現(xiàn)任務(wù)間的通信。 應(yīng)用程序流程圖 系統(tǒng)流程圖如圖 、圖 所示 [11]。 圖 主程序流程圖 LPC2114 上的主程序執(zhí)行時,啟動 uC/OSII 系統(tǒng)環(huán)境,建立主任務(wù)TaskStart。 TaskStart 首先會初始化目標(biāo)板,啟動設(shè)置相關(guān)引腳、設(shè)置 PWM 功能及建立郵箱等。 TaskStart 任務(wù)創(chuàng)建接收上位機(jī)數(shù)據(jù)的任務(wù)。接收數(shù)據(jù)任務(wù)檢查上位機(jī)發(fā)來的數(shù)據(jù)包 (檢查包頭和效驗和等 ),如果無誤,將包中有效信息 (電機(jī)轉(zhuǎn)速 PWM系統(tǒng)軟件初始化( 建立 Ta sk st a rt 任務(wù)等 )啟動任務(wù) O S S ta rt ()多任務(wù) O S S ta rt ()權(quán)交操作系統(tǒng)任務(wù)開始操作系統(tǒng)初始化 O S In it ()邵陽學(xué)院畢業(yè)設(shè)計 (論文 ) 30 占空比和方向控制信息 )使用郵箱傳遞,并向上位機(jī)發(fā)送應(yīng)答包。 TaskStart 根據(jù)郵箱傳遞的信息,改變 PWM 輸出值和改變 ~ 引腳輸出。 圖 TaskStart任務(wù)流程 初始化目標(biāo)板創(chuàng)建郵箱初始化引腳 、 P WM 輸出建立接收串口數(shù)據(jù)的任務(wù)接收郵箱數(shù)據(jù) 開 始改變 P WM 輸出和改變P 0 . 16 ~ P 0 . 19 引腳輸出邵陽學(xué)院畢業(yè)設(shè)計 (論文 ) 31 4 主控程序和通信程序的實現(xiàn) 本章主要介紹上位機(jī)與 LPC2114 之間的串口通信,包括上位機(jī)的串口操作、LPC2114 的 UART0 串口驅(qū)動實現(xiàn)和自定義通信協(xié)議的實現(xiàn)。上位機(jī)部分檢驗用戶輸入,并轉(zhuǎn)換用戶輸入為 PWM 占空比和電機(jī)轉(zhuǎn)向信息,根據(jù)通信協(xié)議要求的格式打包發(fā)送,并檢驗收到的應(yīng)答包,提示通信是否成功。 LPC2114 檢測到有數(shù)據(jù)傳送到 UART0 時,當(dāng)數(shù)據(jù)格式符合協(xié)議時就會產(chǎn)生中斷接收數(shù)據(jù)包,檢查數(shù)據(jù)包以決定是否發(fā)送應(yīng)答包, 同時根據(jù)接收到的數(shù)據(jù)改變輸出 PWM 占空比和改變控制電機(jī)運(yùn)轉(zhuǎn)方向的引腳輸出值。 總體程序框圖 本調(diào)速控制系統(tǒng)軟件采用模塊化設(shè)計方法 ,如圖 所示。主程序首先與上位機(jī)進(jìn)行握手通訊 ,再啟動定時中斷。在主程序的循環(huán)內(nèi) ,首先從上位機(jī) (或是單片機(jī)系統(tǒng)自行給定 )獲得電機(jī)轉(zhuǎn)速的命令字 ,包括控制電機(jī)的速度和轉(zhuǎn)動方向。接著調(diào)用讀編碼器模塊 ,獲得電機(jī)的實際轉(zhuǎn)速 ,把給定速度與實際速度作差 ,得出控制量偏差。然后 ,調(diào)用控制算法 (如 PI)模塊。檢查、等待定時的到來。若定時沒到 ,若定時到了 ,調(diào)用PWM 驅(qū)動模塊 ,驅(qū)動電機(jī)。 這就形成了 本控制系統(tǒng)的速度閉環(huán) 。 圖 系統(tǒng)各模塊的工作流程圖 開始初始化
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1