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

正文內(nèi)容

基于單片機(jī)的直流電機(jī)pwm控制系統(tǒng)設(shè)計(jì)-閱讀頁

2024-12-07 20:59本頁面
  

【正文】 0xE0028004 IOSET GPIO 0輸出置位寄存器。寫入 1 使對應(yīng)引腳輸出高電平;寫入 0無效 讀 /置位 0xE0028008 IODIR GPIO 0方向控制寄存器,單獨(dú)控制每個(gè) I/O 口的方向 讀 /寫 0xE002800C IOCLR GPIO 0輸出清零寄存器,控制輸出引腳的狀態(tài)。對I/O 輸出控制,使用 IOSET 控制輸出 1,使用 IOCLR 控制輸出 0;通過讀取 IOPIN寄存器的值,可讀出當(dāng)前引腳狀態(tài)。 同時(shí), LPC2114 處理器又有 7 種不同的處理器模式,在每一種處理器模式下均有一組相應(yīng)的寄存器與之對應(yīng)。在所有的寄存器中,有些是在 7 種處理器模式下共用的同一個(gè)物理寄存器,而有些寄存器則是在不同的處理器模式下有不同的物理寄存器。一般來說,能移植 uC/OSII 的處理器必須滿足以下條件: ( 1) 處理器的 C 編譯器能產(chǎn)生可重入代碼; ( 2) 用 C 語言就可以打開和關(guān)閉中斷; ( 3) 處理器支持中斷,并且能產(chǎn)生定時(shí)中斷; ( 4) 處理器支持能夠容納一定數(shù)量數(shù)據(jù)的硬件堆棧; ( 5) 處理器有將堆棧指針和其他處理器寄存器讀出和存儲(chǔ)到堆?;騼?nèi)存中的指 令。 LPC2114 的啟動(dòng)代碼 針對 LPC2114 需要自己編寫啟動(dòng)代碼,啟動(dòng)代碼對系統(tǒng)運(yùn)行環(huán)境進(jìn)行初始化,為 C 程序的運(yùn)行提供初始環(huán)境。 包含系統(tǒng)初始化代碼。 異常向量表 在 ARM 系統(tǒng)運(yùn)行中,內(nèi)部源或者外部源 產(chǎn)生的引起處理器進(jìn)行處理的事件稱為異常。異常向量表使得 CPU 從異常類型對應(yīng)的地址執(zhí)行程序。當(dāng)向量表中所有數(shù)據(jù)累加和為 0, Boot 裝載程序?qū)?huì)執(zhí)行用戶程序。 LPC2114 的 TargetResetInit()進(jìn)行系統(tǒng)初始化順序?yàn)椋? ( 1) 設(shè)置系統(tǒng)各部分時(shí)鐘; ( 2) 設(shè)置存儲(chǔ)器加速模塊; ( 3) 設(shè)置串行口; ( 4) 設(shè)置實(shí)時(shí)時(shí)鐘。因此,對程序中需要用到的每一種模式都要給 SP 定義一個(gè)堆棧地址。注意:不要切換到User 模式進(jìn)行 User 模式的堆棧設(shè)置,因?yàn)檫M(jìn)入 User 模式后就不能再操作 CPSR回到別的 模式了,可能會(huì)對接下去的程序執(zhí)行造成影響。定義堆棧的大小 邵陽學(xué)院畢業(yè)設(shè)計(jì) (論文 ) 23 SVC_STACK_LEGTH EQU 0 FIQ_STACK_LEGTH EQU 0 IRQ_STACK_LEGTH EQU 256 ABT_STACK_LEGTH EQU 0 UND_STACK_LEGTH EQU 0 InitStack MOV R0,LR MSR CPSR_c,0xd3 LDR SP,StackSvc。 設(shè)置中斷模式堆棧 MSR CPSR_c,0xd1 LDR SP,StackFiq。 設(shè)置中止模式堆棧 MSR CPSR_c,0xdb LDR SP,StackUnd。 設(shè)置系統(tǒng) 模式堆棧 MOV PC,R0 StackSvc DCD SvcStackSpace+(SVC_STACK_LEGTH1)*4 StackIrq DCD IrqStackSpace+(IRQ_STACK_LEGTH1)*4 StackFiq DCD FiqStackSpace+(FIQ_STACK_LEGTH1)*4 StackAbt DCD AbtStackSpace+(ABT_STACK_LEGTH1)*4 StackUnd DCD UndtStackSpace+(UND_STACK_LEGTH1)*4 。 管理模式堆??臻g IrqStackSpace SPACE IRQ_STACK_LEGTH*4。 快速中斷模式堆???間 AbtStackSpace SPACE ABT_STACK_LEGTH*4。 未定義模式堆棧 上述程序的開始部分,定義了堆棧的大小,其中有的模式下堆棧大小為 0,這是因?yàn)檫@幾種模式并沒有使用,如果使用也必須分配給堆棧空間。 系統(tǒng)基本初始化 在進(jìn)入 main()之前,會(huì)先調(diào)用 TargetResetInit()進(jìn)行系統(tǒng)的基本初始化。映像一開始總是存儲(chǔ)在 ROM/Flash 里面的,所謂應(yīng)用程序執(zhí)行環(huán)境的初始化,就是完成必要的從 ROM 到 RAM 的數(shù)據(jù)傳輸和內(nèi)容清零。接下來設(shè)置實(shí)時(shí)時(shí)鐘,在進(jìn)入 main()之前設(shè)置時(shí)鐘可以避免混亂。它的90%的代碼都是用 C 語言寫的,因此只要有相應(yīng)的 C 語言編譯器,基本上就可以直接移植到特定處理器上,這也是 uC/OSII[6]具有良好的可移植性的原因。 將 uC/OSII 移植到 ARM處理器上,主要修改三個(gè)和 ARM體系結(jié)構(gòu)相關(guān)的文件,即 、 和 。 設(shè)置與處理器相關(guān)的 文件 ( 1) 不依賴于編譯的數(shù)據(jù)類型 不同微處理器有不同的字長,在 uC/OSII 的移植過程中就必須包括一系列類型定義以確保移植正確。 本次移植的相關(guān)數(shù)據(jù)類型的定義如下: typedef unsigned char uint8。 /*有符號 8 位整型變量 */ typedef unsigned short uint16。 /*有符號 16 位整型變量 */ typedef unsigned int uint32。 /*有符號 32 位整型變量 */ typedef float fp32。 /*雙精度浮點(diǎn)數(shù)( 64 位長度) */ ( 2) 堆棧增長方向 uC/OSII 使用結(jié) 構(gòu)常量 OS_STK_GROWTH 指定堆棧的生長方式。 ( 3) 使用軟中斷 SWI 作底層接口 移植的 uC/OSII 具有 2 個(gè)指令集,用戶任務(wù)具有 2 中處理器模式:用戶模式與系統(tǒng)模式,所以組合起來共有 4 種工作方式,每種方式對于系統(tǒng)資源具有不同的訪問控制權(quán)限。將軟中斷指令 SWI 作為底層接口,這樣使得底層接口函數(shù)與處理器狀態(tài)無關(guān),并 且調(diào)用函數(shù)時(shí)不用知道函數(shù)的位置。該函數(shù)僅僅在多任務(wù)啟動(dòng)時(shí)被執(zhí)行一次, 用來啟動(dòng)第一個(gè),也是最高優(yōu)先級的任務(wù)執(zhí)行,之后多任務(wù)的調(diào)度和切換就由 OSCtxSw()函數(shù)來實(shí)現(xiàn)。它的工作是先將當(dāng)前任務(wù)的 CPU 現(xiàn)場保存到該任務(wù)堆棧中,然后獲得最高優(yōu)先級任務(wù)的堆棧指針,從該堆棧中恢復(fù)此任務(wù)的 CPU 現(xiàn)場,使之繼續(xù)執(zhí)行。 ( 3) OSIntCtxSw():中斷級的任務(wù)切換函數(shù) 該函數(shù)由 OSIntExit()調(diào)用。這樣做的目的主要是能夠盡快地讓高優(yōu)先級的任務(wù)得到響應(yīng),保證系統(tǒng)的實(shí)時(shí)性能。 ( 4) OSTickISR():時(shí)鐘節(jié)拍中斷服務(wù)函數(shù) 時(shí)鐘節(jié)拍中斷服務(wù)函數(shù)的主要任務(wù)是負(fù)責(zé)處理時(shí)鐘中斷,調(diào)用系統(tǒng) 實(shí)現(xiàn)的OSTimeTick()函數(shù),如果有等待時(shí)鐘信號的高優(yōu)先級任務(wù),則需要在中斷級別上調(diào)度其執(zhí)行。 移植與操作系統(tǒng)相關(guān)的 文件 ( 1) OSTaskStkInit():任務(wù)堆棧初始化函數(shù) 此函數(shù)涉及到任務(wù)初始化時(shí)的一個(gè)堆棧設(shè)計(jì),也就是在堆棧增長方向上如何定義每個(gè)需要保存的寄存器位置,在 ARM 體系結(jié)構(gòu)下,任務(wù)堆??臻g由高至低依次將保存著 PC, LR, R12, R11, R10, … , R1, R0, CPSR, OsEnterSum。 ( 2) 軟件中斷 C 語言處理函數(shù) 軟件中斷 C 語言處理函數(shù)原型: void SWI_Exception (int SWI_Num,int*Regs);其中參數(shù) SWI_Num 為功能號,而 Regs 為指向堆棧中保存寄存器的值的位置。 ( 3) 定義允許和禁止中斷宏 與所有的實(shí)時(shí)內(nèi)核一樣, uC/OSII 需要先關(guān)中斷, 再處理臨界段代碼,并且在處理完畢后重新開中斷。為了避免不同編譯器廠商提供不同的實(shí)現(xiàn)方法所帶來的影響,以增邵陽學(xué)院畢業(yè)設(shè)計(jì) (論文 ) 27 加可移植性, uC/OSII定義了 2個(gè)宏,用于關(guān) /開中斷: OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()。 OSStart()最終調(diào)用函數(shù) OSStartHighRdy()運(yùn)行多任務(wù)啟動(dòng)前優(yōu)先級最高的任務(wù)。 LPC2114 的 PWM 功能基于標(biāo)準(zhǔn)的定時(shí)器模塊之上,它同樣具有 32 位定時(shí)器及預(yù)分頻控制電路及 7 個(gè)匹配寄存器,可實(shí)現(xiàn) 6 個(gè)單邊沿 PWM 或 3 個(gè)雙邊沿 PWM 輸出,也可以采用這兩種類型的混合輸出。如果不使能 PWM 模式,可作為一個(gè)標(biāo)準(zhǔn)的定時(shí)器。 32 位定時(shí)器 PWMTC 的計(jì)數(shù)頻率由 pclk 經(jīng)過 PWMPR 進(jìn)行分頻控制得到,而定時(shí)器的啟動(dòng) /停止、計(jì)數(shù)復(fù)位由 PWMTCR 控制,當(dāng)有比較事件發(fā)生時(shí), PWMIR會(huì)設(shè)置相關(guān)的中斷標(biāo)志 (因?yàn)椴皇嵌〞r(shí)器溢出而產(chǎn)生中斷,所以圖 中采用虛線連接 )。當(dāng)然,預(yù)分頻控制器 PWMPR 只是控制分頻數(shù),而其對應(yīng)的分頻計(jì)數(shù)器是 PWMPC,但無須用戶操作 PWMPC 寄存器。對于 PWM 的產(chǎn)生是通過 PWM的比較匹配寄存器實(shí)現(xiàn)。當(dāng)比較匹配發(fā)生時(shí),將會(huì)按照 PWMMCR 設(shè)置的方法產(chǎn)生中斷或復(fù)位 PWMTC 等, PWMPCR 可以控制單邊沿或雙邊沿 PWM 輸出,允許或不允許 PWM 輸出。當(dāng)要修改 PWMMR0~6 的比較值時(shí),只有控制 PWMLER 的對應(yīng)位置位,在匹配 0 事件發(fā)生后此值才會(huì)生效 [12]。 PWM 基本操作方法如下: ( 1) 連接 PWM 功能引腳輸出,即設(shè)置 PINSEL0、 PINSEL1; 邵陽學(xué)院畢業(yè)設(shè)計(jì) (論文 ) 28 ( 2) 設(shè)置 PWM 定時(shí)器的時(shí)鐘分頻值 (PWMPR),得到所要的定時(shí)器時(shí)鐘; ( 3) 設(shè)置比較匹配控制 (PWMMCR),并設(shè)置相應(yīng)的比較值 (PWMMRx); ( 4) 設(shè)置 PWM 輸出方式 ; ( 5) 設(shè)置 PWMTCR,啟動(dòng)定時(shí)器,使能 PWM; ( 6) 運(yùn)行過程中要更改比較值時(shí),更改之后要設(shè)置鎖存使能 圖 PWM的基本寄存器功能框圖 圖 PWM的比較匹配寄存器功能框圖 。 /*不分頻,計(jì)數(shù)頻率為 Fpclk*/ PWMMCR=0x02。 /*設(shè)置 PWM 周期, PWMMR0=2020*/ PWMMR4=1000。 /*設(shè)置 PWM6 占空比, PWMMR6=500*/ 定時(shí)器控制寄存器PWMTCR ( R / W )預(yù)分頻控制PWMPR ( R / W )32 位定時(shí)器 / 計(jì)數(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í)器 / 計(jì)數(shù)器PW M TC ( R / W )比較PW M 輸出方式控制PW M PC R ( R / W )邵陽學(xué)院畢業(yè)設(shè)計(jì) (論文 ) 29 PWMLER=0x51。 /*允許 PWM6, PWM4 輸出,單邊沿 PWM*/ PWMTCR=0x09。 LPC2114 應(yīng)用 程序流程 使用郵箱實(shí)現(xiàn)任務(wù)間的通信 郵箱能使一個(gè)任務(wù)或者中斷服務(wù)子程序向另一個(gè)任務(wù)發(fā)送一個(gè)指針型的變量,該指針指向一個(gè)包含了特定“消息”的數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)采用郵箱機(jī)制實(shí)現(xiàn)任務(wù)間的通信。 圖 主程序流程圖 LPC2114 上的主程序執(zhí)行時(shí),啟動(dòng) uC/OSII 系統(tǒng)環(huán)境,建立主任務(wù)TaskStart。 TaskStart 任務(wù)創(chuàng)建接收上位機(jī)數(shù)據(jù)的任務(wù)。 TaskStart 根據(jù)郵箱傳遞的信息,改變 PWM 輸出值和改變 ~ 引腳輸出。上位機(jī)部分檢驗(yàn)用戶輸入,并轉(zhuǎn)換用戶輸入為 PWM 占空比和電機(jī)轉(zhuǎn)向信息,根據(jù)通信協(xié)議要求的格式打包發(fā)送,并檢驗(yàn)收到的應(yīng)答包,提示通信是否成功。 總體程序框圖 本調(diào)速控制系統(tǒng)軟件采用模塊化設(shè)計(jì)方法 ,如圖 所示。在主程序的循環(huán)內(nèi) ,首先從上位機(jī) (或是單片機(jī)系統(tǒng)自行給定 )獲得電機(jī)轉(zhuǎn)速的命令字 ,包括控制電機(jī)的速度和轉(zhuǎn)動(dòng)方向。然后 ,調(diào)用控制算法 (如 PI)模塊。若定時(shí)沒到 ,若定時(shí)到了 ,調(diào)用PWM 驅(qū)動(dòng)模塊 ,驅(qū)動(dòng)電機(jī)。 圖 系統(tǒng)各模塊的工作流程圖 開始初始化
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1