MC9S12XS模塊及其應用實例_第1頁
MC9S12XS模塊及其應用實例_第2頁
MC9S12XS模塊及其應用實例_第3頁
MC9S12XS模塊及其應用實例_第4頁
MC9S12XS模塊及其應用實例_第5頁
已閱讀5頁,還剩237頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

通用I/O口通過配置相應存放器位,可以設置輸入/輸出端口、驅動能力、內置上拉/下拉電阻使用、中斷輸入方式等多種功能。通過對DDR、I/O、RDR、PE、PS和IE等存放器的設置,用戶可以獲得通用I/O口的不同工作方式。其中,DDR〔數據方向存放器〕設定I/O口為輸入/輸出端口。數據存放器〔I/O存放器〕用于設定I/O口的上下電平。RDR〔驅動控制存放器〕用于設定I/O口的輸出驅動能力。PE〔上拉/下拉使能存放器〕用于當I/O口為輸入口時使能內置上拉電阻或下拉電阻的使用。PS〔上拉/下拉選擇存放器〕當中斷允許位置位時,用于選擇上升沿觸發(fā)或下降沿觸發(fā)中斷;當使能內置上拉/下拉電阻時,用于選擇使用上拉電阻或下拉電阻。IE〔中斷使能存放器〕用于使能I/O口的中斷功能。 1.數據存放器〔Px〕 數據存放器Px中的8位對應每個端口中的相應引腳,如果某端口的引腳被定義為輸出時,寫入數據存放器Px中的數值,那么從對應引腳輸出;如果某端口的引腳被定義為輸入時,可以讀取數據存放器Px對應引腳的電平值。需要注意PORTE端口是一個特例,它的最低兩位只能為輸入口,所以PORTE端口的數據存放器最低兩位是只讀位。 2.數據方向存放器〔DDRx〕 DDRx決定對應引腳配置為輸出口還是輸入口,如果某位為“0”,那么對應引腳設定為輸入口;如果某位為“1”,那么對應引腳設定為輸出口。MCU復位后,DDRx值為0x00,引腳默認為輸入口。 需要注意的是,PORTE端口是一個特例,它的最低兩位只能為輸入口,所以PORTE端口的數據方向存放器最低兩位是只讀位,讀取這兩位始終返回“0”。 3.上拉電阻控制存放器〔PUCR〕 PORTA、PORTB、PORTE和PORTK端口都有內置上拉電阻,PUCR有4位分別配置4個端口選擇使用內置上拉電阻,即第7、4、1和0位分別設置K、E、B和A端口。當控制位為“1”時,設定對應端口使用上拉電阻;當控制位為“0”時,禁止對應端口使用上拉電阻。MCU復位后,設定PORTK和PORTE端口使用上拉電阻,PORTB和PORTA端口禁用上拉電阻。

PUCR第6位設置BKGD引腳使用上拉電阻。當該位為“1”時,設定該端口使用上拉電阻;當控制位為“0”時,禁止該端口使用上拉電阻。MCU復位后,該位為“1”,引腳默認為使用內置上拉電阻。 4.驅動控制存放器〔RDR〕

如果PORTA、PORTB、PORTE和PORTK端口為輸出口時,每個端口都可以設置其輸出驅動能力,RDR有4位分別設定4個端口輸出驅動能力,即第7、4、1和0位分別設置K、E、B和A端口。如果某個控制位為“1”時,設定對應端口輸出驅動能力降低;如果某個控制位為“0”時,設定對應端口為正常驅動輸出方式。 1.數據存放器〔PTx〕 如果數據方向存放器DDRx的對應位為“0”,即對應引腳定義為輸入時,讀取數據存放器PTx的對應位,那么為對應引腳的輸入電平值;如果DDRx的對應位為“1”,即對應引腳定義為輸出時,寫入PTx存放器的對應位,那么為對應引腳的輸出電平值。 2.輸入存放器〔PTIx〕 輸入存放器PTIx是一個只讀存放器,如果DDRx的對應位為“0”,即對應引腳定義為輸入時,讀取PTIx總是返回引腳電平值;如果DDRx的對應位為“1”,即對應引腳定義為輸出時,利用PTIx可以監(jiān)視對應引腳是否過載或短路。 3.數據方向存放器〔DDRx〕 DDRx決定對應引腳配置為輸出口還是輸入口,如果某位為“0”,那么對應引腳設定為輸入;如果某位為“1”,那么對應引腳設定為輸出。復位后,DDRx值為0x00,即MCU復位后引腳默認為輸入口。

PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 4.驅動控制存放器〔RDRx〕 如果端口為輸出口時,RDRx可以設置端口對應引腳的輸出驅動能力。如果RDRx某位為“1”,那么對應引腳的輸出驅動能力為正常時的1/5;如果某位為“0”,那么對應引腳輸出為正常驅動能力。復位后,驅動控制存放器值為0x00,即MCU復位后引腳默認為滿功率驅動輸出。PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 5.上拉/下拉使能存放器〔PERx〕 如果端口為輸入口或者“線或”模式時,可以通過上拉/下拉使能存放器PERx使能選擇使用內置上拉/下拉電阻。如果PERx某位為“1”時,那么對應引腳允許使用內置上拉/下拉電阻;如果某位為“0”時,那么對應引腳禁用內置上拉/下拉電阻。

PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 6.上拉/下拉選擇存放器〔PPSx〕 當某引腳被定義為輸入且使能內置上拉/下拉電阻時,上拉/下拉選擇存放器PPSx用于選擇使用內置上拉或者下拉電阻。如果PPSx某位為“0”,那么對應引腳使用上拉電阻;如果某位為“1”,那么對應引腳使用下拉電阻。 PORTP、PORTH和PORTJ三個端口都具有中斷功能,當某端口允許中斷時,PPSx還具有第二個作用,用于選擇該端口中的引腳中斷為上升沿觸發(fā)或下降沿觸發(fā)。當端口某引腳使能中斷時,當PPSx對應位為“0”時,那么該引腳中斷為下降沿觸發(fā);當PPSx對應位為“1”,那么該引腳中斷為上升沿觸發(fā)。

PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 7.中斷使能存放器〔PIEx〕 PORTP、PORTH和PORTJ三個端口具有中斷功能,且都有中斷使能存放器PIEx,PIEx允許或者禁止相應端口的中斷請求。如果PIEx某位為“1”,那么對應引腳允許中斷;如果某位為“0”,那么對應引腳禁止中斷。復位后,中斷使能存放器值為0x00,MCU復位后關閉所有端口中斷請求。 5.2.2PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 8.中斷標志存放器〔PIFx〕 PORTP、PORTH和PORTJ三個端口具有中斷功能,且都有中斷標志存放器PIFx?;赑PSx存放器設置的邊沿觸發(fā)中斷方式,當端口相應引腳發(fā)生中斷,并產生有效電平時,那么PIFx中的中斷引腳對應位被置位。為了去除PIFx中的中斷標志位,需要向該位進行寫“1”操作。 5.2.2PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ

PORTP、PORTH和PORTJ三個端口的中斷向量地址及相關標志位、控制位如表5-2所示。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 1.AD0數據存放器0〔PT0AD0〕 當不使用AD功能時,如果AD0端口數據方向存放器0DDR0AD0的對應位為“0”,即對應引腳定義為輸入時,讀取PT0AD0的對應位,那么為對應引腳的輸入電平值;如果DDR0AD0的對應位為“1”,即對應引腳定義為輸出時,寫入PT0AD0存放器的對應位,那么為對應引腳的輸出電平值。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 2.AD0數據存放器1〔PT1AD0〕 當不使用AD功能時,如果AD0端口數據方向存放器1DDR1AD0的對應位為“0”,即對應引腳定義為輸入時,讀取PT1AD0的對應位,那么為對應引腳的輸入電平值;如果DDR1AD0的對應位為“1”,即對應引腳定義為輸出時,寫入PT1AD0存放器的對應位,那么為對應引腳的輸出電平值。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 3.AD0數據方向存放器0〔DDR0AD0〕 DDR0AD0決定AN00~AN07對應引腳為輸出口還是輸入口,如果某位為“0”,那么對應引腳設定為輸入口;如果某位為“1”,那么對應引腳設定為輸出口。如果希望設置AD0端口為通用I/O口功能,ATD0DIEN〔數字輸入使能〕存放器必須設置為“1”,關于ATD0DIEN存放器的詳細介紹,請參閱第8章。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 4.AD0數據方向存放器1〔DDR1AD0〕 DDR1AD0決定AN08~AN15對應引腳為輸出口還是輸入口,如果某位為“0”,那么對應引腳設定為輸入口;如果某位為“1”,那么對應引腳設定為輸出口。如果希望設置AD0端口為通用I/O口功能,ATD0DIEN存放器必須設置為“1”,關于ATD0DIEN存放器的詳細介紹,請參閱第8章。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 5.AD0驅動控制存放器0〔RDR0AD0〕 如果端口為輸出口時,RDR0AD0可以設置端口對應引腳的輸出驅動能力。如果RDR0AD0某位為“1”,那么對應引腳的輸出驅動能力為正常時的1/5;如果某位為“0”,那么對應引腳輸出為正常驅動能力。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 6.AD0驅動控制存放器1〔RDR1AD0〕 如果端口為輸出口時,RDR1AD0可以設置端口對應引腳的輸出驅動能力。如果RDR1AD0某位為“1”,那么對應引腳的輸出驅動能力為正常時的1/5;如果某位為“0”,那么對應引腳輸出為正常驅動能力。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 7.AD0上拉使能存放器0〔PER0AD0〕 如果端口為輸入口時,可以通過PER0AD0使能選擇使用內置上拉電阻。如果PER0AD0某位為“1”時,那么對應引腳允許使用內置上拉電阻;如果某位為“0”時,那么對應引腳禁用內置上拉電阻。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 8.AD0上拉使能存放器1〔PER1AD0〕 如果端口為輸入口時,可以通過PER1AD0使能選擇使用內置上拉電阻。如果PER1AD0某位為“1”時,那么對應引腳允許使用內置上拉電阻;如果某位為“0”時,那么對應引腳禁用內置上拉電阻。 5.3.1控制輸出設備LED實例

典型LED有陽極和陰極兩個引腳,LED在正向偏置的狀態(tài)下能夠發(fā)光,通過通用I/O口控制LED一個引腳,LED另外一個引腳接固定電平,即可實現LED的點亮控制。

本應用實例硬件連接如圖5.21所示,PORTB端口連接8只LED,通過編程實現LED流水燈操作。 5.3.1控制輸出設備LED實例

由電路圖可知,使用MC9S12XS128的PORTB端口控制8只LED,PORTB端口輸出低電平點亮相應LED。本例中流水燈的流動速度沒有實現精確控制,即延時時間沒有精確計算,本書后面章節(jié)會論述如何實現精確定時。 5.3.1控制輸出設備LED實例

流水燈應用實例程序清單如下所示。 通過讀取通用I/O口引腳的輸入電平值,可以得悉輸入設備撥碼開關的狀態(tài)。本應用實例硬件連接如圖5.22所示。

由電路圖可知,通過MC9S12XS128的PORTA端口可以讀取8位撥碼開關狀態(tài)。本例依然使用圖5.21所示的控制LED電路,使用MC9S12XS128的PORTB端口控制8只LED燈,考慮通過8只LED燈的亮滅反映8位撥碼開關狀態(tài)的設置情況。 5.3.2讀取輸入設備撥碼開關狀態(tài)實例

實例程序清單如下所示。.1MC9S12系列中斷系統(tǒng)概述

6.1.2中斷 MC9S12系列MCU的中斷分為可屏蔽中斷和不可屏蔽中斷。MCU有一個條件代碼存放器〔CCR〕,如圖6.2所示,其中的X位和I位與中斷相關,X位是不可屏蔽中斷的屏蔽位,置為“1”那么關閉不可屏蔽中斷,置為“0”那么允許不可屏蔽中斷;I位是可屏蔽中斷的屏蔽位,置為“1”那么關閉可屏蔽中斷,置為“0”那么允許可屏蔽中斷。在系統(tǒng)復位時,CCR這些中斷屏蔽位默認為“1”,所以MCU復位后,不可屏蔽中斷和可屏蔽中斷都處于關閉狀態(tài)。

6.1.2中斷 1.不可屏蔽中斷 不可屏蔽中斷包括軟件中斷、非法指令陷阱和XIRQ中斷,下面簡要介紹常用的幾個不可屏蔽中斷。 〔1〕軟件中斷 SWI實質上是一條指令,但其執(zhí)行過程與中斷相同,即通過中斷矢量確定目標地址,中斷矢量為$FFF6~$FFF7,它自動保存MCU的存放器和返回地址,最后必須通過RTI指令返回。 〔2〕非法指令陷阱 MCU正常工作時,每次獲得的都是由匯編或編譯程序生成的有效操作碼,MCU能夠正確解釋并執(zhí)行它們,但當受到干擾或系統(tǒng)出現混亂時,可能得到無法識別的操作碼,即非法指令,這時MCU自動產生一次中斷,中斷矢量地址為$FFF8~$FFF9。

6.1.2中斷 1.不可屏蔽中斷 〔3〕XIRQ XIRQ是非屏蔽中斷引腳,無論MCU處于哪種運行狀態(tài),該引腳一旦被拉成低電平,MCU執(zhí)行完當前指令后,都會響應該中斷,中斷矢量為$FFF4~$FFF5。該中斷一般用于系統(tǒng)掉電檢測、硬件故障等重要事件處理,當MCU處于等待或暫停模式時,該中斷將喚醒MCU。

6.1.2中斷 2.可屏蔽中斷 可屏蔽中斷可以在程序控制下由用戶開啟或者關閉??善帘沃袛嗟拈_關是條件代碼存放器〔CCR〕中的I位。通過去除I可以開啟可屏蔽中斷。S12系列單片機中的可屏蔽中斷數量非常多,這里僅對IRQ做簡要介紹,其他的可屏蔽中斷可參見相關功能模塊的章節(jié)。 MC9S12系列MCU有一個標記為IRQ引腳,當該引腳出現低電平或者下降沿時,那么會產生中斷請求信號,這也是MCU接受外部事件中斷的主要手段。IRQ控制存放器〔IRQCR〕和IRQ的中斷設置相關,如圖6.3所示。

6.1.2中斷 通過該存放器中的IRQE位和IRQEN位對IRQ中斷進行設置。 IRQE:中斷電平/邊沿有效選擇: 0表示IRQ引腳配置為低電平有效; 1表示IRQ引腳配置為下降沿有效。 IRQEN:外部IRQ中斷請求使能: 0表示IRQ中斷關閉; 1表示IRQ中斷允許。

6.1.2中斷 3.中斷堆棧操作順序 因為中斷響應過程中,會有隱含的堆棧操作,所以中斷響應前,堆棧必須有效,即堆棧指針SP必須指向一個有效的RAM區(qū),而且堆棧的大小必須不少于9個字節(jié)。中斷響應堆棧操作如表6-1所示。6.2MC9S12系列中斷優(yōu)先級 MC9S12系列有多個中斷源,所以在同一時刻可能會有兩個或兩個以上的中斷源同時請求中斷,這就要求必須根據任務的輕重緩急給每個中斷源分配不同的中斷優(yōu)先級。當兩個或兩個以上中斷源同時發(fā)生時,優(yōu)先級高的中斷將先被處理。一般來說,不可屏蔽中斷的優(yōu)先級高于可屏蔽中斷的優(yōu)先級。復位以及不可屏蔽中斷的優(yōu)先級從高到低依次為:6.2MC9S12系列中斷優(yōu)先級6.2MC9S12系列中斷優(yōu)先級6.2MC9S12系列中斷優(yōu)先級6.2MC9S12系列中斷優(yōu)先級 MC9S12系列默認的中斷處理機制如圖6.4所示。從圖中可以看到,MC9S12系列默認狀態(tài)下在進入中斷效勞程序時,CCR中的I位自動置1,所以禁止響應其他可屏蔽中斷,盡管在處理中斷A的效勞程序過程中又來了更高級別的中斷B的中斷請求,MCU也無法及時處理高優(yōu)先級B中斷,必須等待當前A中斷效勞程序執(zhí)行完以后才能響應高優(yōu)先級B中斷6.2MC9S12系列中斷優(yōu)先級 如果希望在MC9S12系列中實現中斷嵌套,一個比較簡單的方法是進入中斷效勞程序時,將CCR中的可屏蔽中斷屏蔽位I清零。這樣可以實現如圖6.5所示的中斷嵌套。6.2MC9S12系列中斷優(yōu)先級 從圖6.5中可以看到,這樣簡單的CCR中的I位處理也可能會帶來問題,就是會出現低優(yōu)先級的中斷請求也可以掛起高優(yōu)先級中斷效勞程序。因為在首先響應B中斷效勞程序中已經去除了可屏蔽中斷屏蔽位I,所以此時任何可屏蔽中斷請求都能夠得到響應,這樣就出現了低優(yōu)先級的中斷A打斷高優(yōu)先級B中斷效勞程序的情況。為了解決這個問題,可以只在A中斷效勞程序中去除可屏蔽中斷屏蔽位I,而在B中斷效勞程序中對CCR中的I位不做處理,這樣就可以得到如圖6.6所示的中斷處理機制,即只存在高優(yōu)先級的中斷請求打斷低優(yōu)先級中斷效勞程序的情況。6.3MC9S12系列中斷程序應用實例

本實例硬件連接如圖6.7所示,PORTA端口與1個8位撥碼開關連接,PORTB端口與8只LED連接,IRQ引腳與一個按鍵連接,按鍵按下為低電平。要求編程實現IRQ作為中斷源,采用中斷方式,利用8位撥碼開關控制8只LED燈的循環(huán)點亮速度,撥碼開關的不同狀態(tài)設置了燈的循環(huán)點亮速度值。6.3MC9S12系列中斷程序應用實例 本實例中關于流水燈的實現已經在第5章中介紹過,本章著重介紹中斷效勞程序的編寫。中斷效勞程序可以有兩種編寫方式:一種是利用中斷編號關聯中斷效勞程序;另一種是通過在.prm文件中的聲明關聯中斷效勞程序。首先介紹利用中斷編號編寫中斷效勞程序。從表6.2中可以看到,中斷向量表依次自上而下從0開始編號,中斷在表格中是第7個,所以編號為“6”。另外一種比較方便確定編號的方法是,可以翻開工程中“Includes”文件夾下的“MC9S12XS128.h”文件,頭文件的開始處對所有中斷向量地址和中斷標號都做了宏定義,中斷的中斷向量入口地址的宏定義語句為“#defineVirq0xFFF2U”,中斷的中斷標號的宏定義語句為“#defineVectorNumber_Virq6U”,所以也可以用“VectorNumber_Virq”代替前文中提到的編號“6”。下面是局部實例程序代碼。6.3MC9S12系列中斷程序應用實例6.3MC9S12系列中斷程序應用實例6.3MC9S12系列中斷程序應用實例6.3MC9S12系列中斷程序應用實例6.3MC9S12系列中斷程序應用實例 還有另外一種方法實現中斷效勞程序的編寫,這里以CodeWarrior為開發(fā)工具介紹。在CodeWarrior工程中,可以找到擴展名是.prm的文件,在這個文件下定義中斷向量和中斷效勞程序的名稱,這樣在編寫中斷效勞程序時,就不用寫編號了。因為其他局部的程序實現方式和上面一樣,此處只介紹中斷效勞程序的設計。7.1PWM模塊概述 脈沖寬度調制〔PWM〕是產生精確脈沖序列輸出和實現D/A轉換的有效方法,微控制器的脈寬調制模塊被廣泛應用于工業(yè)控制和新型消費機電產品中〔如智能空調、節(jié)能冰箱、電動自行車等〕。PWM信號通過軟件編程調節(jié)波形的占空比、周期和相位,能夠用于直流電動機調速、伺服電動機控制、D/A轉換器等應用。例如,電視機遙控局部普遍采用14位或16位的PWM產生調諧電壓;在無人自動駕駛汽車系統(tǒng)中,常用伺服電動機來控制方向盤,伺服電動機的旋轉角度與給定的PWM信號占空比一致,每個占空比數值都對應一個旋轉角度;在燈光亮度調節(jié)、直流電動機速度控制等方面,采用PWM信號能夠很容易實現。 MC9S12XS系列產生PWM信號的方法主要有兩種:利用輸出比較功能和MCU內置的PWM模塊實現。利用輸出比較功能可以通過軟件編程設定輸出任意脈沖信號,但會占用CPU資源,而且不易產生精確的脈沖序列;而MCU內部集成的PWM模塊專門用于輸出PWM信號,使用時極少占用CPU資源。7.2PWM模塊結構組成和特點

MC9S12XS128內置的PWM模塊框圖如圖7.1所示。7.2PWM模塊概述 由圖7.1可知,MC9S12XS128的PWM模塊具有8路8位獨立PWM通道,通過相應設置也可以變?yōu)?個16位PWM通道,每個PWM通道由獨立運行的8位通道計數器PWMCNT、兩個比較存放器為通道周期存放器PWMPER和占空比存放器PWMDTY等組成。通過對各存放器的參數設置,確定PWM波形的輸出周期和占空比,另外還可以通過通道極性存放器PWMPOL和居中對齊使能存放器PWMCAE設置PWM輸出脈沖波形的極性和對齊方式。7.2PWM模塊概述PWM模塊具有以下根本特征:具有可編程周期和占空比的8個獨立PWM通道;每個PWM通道具有獨立的計數器;每個通道可編程允許/禁止PWM功能;每個通道可軟件選擇PWM脈沖極性;具有雙緩沖的周期和占空比存放器,當到達有效周期終點〔PWM計數器到達0〕或通道禁止時,修改值生效;每個通道可編程中心對齊或左對齊輸出;8個8位通道或4個16位通道PWM分辨率;4個時鐘源〔A、B、SA和SB〕提供寬頻帶頻率;可編程的時鐘選擇邏輯;緊急關閉功能。7.3PWM模塊存放器及設置 7.3.1PWM使能存放器〔PWME〕 PWM使能存放器〔PWMEnableRegister,PWME〕中的每個控制位對應相應的PWM通道,可以通過設置相應的控制位啟動或者停止PWM信號輸出。當任意一個PWMEx位被置位〔PWMEx=1〕時,相應的PWM信號產生輸出。但是,由于PWMEx需要與時鐘源同步,直到PWM模塊時鐘的下一個周期到來,才能輸出正確的PWM波形。 當處于級聯模式時,8個8位PWM通道通過兩兩級聯構成4個16位的PWM通道,此時PWME1、PWME3、PWME5和PWME7對應控制4個16位PWM通道,而其他控制位無效,如圖7.2所示。7.3PWM模塊存放器及設置7.3.1PWM使能存放器〔PWME〕

讀:任何時刻;寫:任何時刻。PWME7:PWM通道7使能位。

0表示禁止PWM通道7輸出;

1表示允許PWM通道7輸出。PWME6:PWM通道6使能位。

0表示禁止PWM通道6輸出;

1表示允許PWM通道6輸出,如果CON67=1,該位無效,且PWM通道6輸出無效。PWME5:PWM通道5使能位。

0表示禁止PWM通道5輸出;

1表示允許PWM通道5輸出。PWME4:PWM通道4使能位。

0表示禁止PWM通道4輸出;

1表示允許PWM通道4輸出,如果CON45=1,該位無效,且PWM通道4輸出無效。7.3PWM模塊存放器及設置7.3.1PWM使能存放器〔PWME〕PWME3:PWM通道3使能位。

0表示禁止PWM通道3輸出;

1表示允許PWM通道3輸出。PWME2:PWM通道2使能位。

0表示禁止PWM通道2輸出;

1表示允許PWM通道2輸出,如果CON23=1,該位無效,且PWM通道2輸出無效。PWME1:PWM通道1使能位。

0表示禁止PWM通道1輸出;

1表示允許PWM通道1輸出。PWME0:PWM通道0使能位。

0表示禁止PWM通道0輸出;

1表示允許PWM通道0輸出;如果CON01=1,該位無效,且PWM通道0輸出無效。7.3PWM模塊存放器及設置 7.3.2PWM極性存放器〔PWMPOL〕每個PWM通道波形開始時的信號極性由PWM極性存放器〔PWMPolarityRegister,PWMPOL〕中的極性選擇位〔PPOLx〕決定,如果PPOLx位為1,周期脈沖開始時PWM通道輸出高電平信號,當通道計數器PWMCNTx數值等于占空比存放器PWMDTYx數值時翻轉為低電平信號;相反,如果PPOLx位為0,周期脈沖開始時PWM通道輸出低電平信號,當PWMCNTx數值等于PWMDTYx數值時翻轉為高電平信號,PWMPOL存放器如圖7.3所示。7.3PWM模塊存放器及設置 7.3.2PWM極性存放器〔PWMPOL〕讀:任何時刻;寫:任何時刻。 注意:PWMPOL存放器中的PPOLx位可以在任何時刻進行寫入操作。如果正在產生PWM信號時要求改變信號極性,那么PWM輸出脈沖在信號極性轉換過程中可能被截短或延長。 PPOLx:PWM通道x輸出波形極性位。 0表示PWM通道x在周期脈沖開始時輸出低電平,當到達占空比計數值時翻轉為高電平; 1表示PWM通道x在周期脈沖開始時輸出高電平,當到達占空比計數值時翻轉為低電平。7.3PWM模塊存放器及設置 7.3.3PWM時鐘選擇存放器〔PWMCLK〕 每一個PWM通道可以選擇兩個時鐘之一作為該通道的時鐘源。PWM時鐘選擇存放器〔PWMClockSelectRegister,PWMCLK〕如圖7.4所示。 讀:任何時刻;寫:任何時刻。 注意:PWMCLK存放器中的PCLKx位可以在任何時刻寫入。如果正在產生PWM信號時要求改變信號極性,那么PWM輸出脈沖在信號極性轉換過程中可能被截短或延長。 PCLK7、PCLK6、PCLK3、PCLK2:PWM通道7、6、3、2時鐘選擇位。 0表示ClockB作為相應通道時鐘源; 1表示ClockSB作為相應通道時鐘源。 PCLK5、PCLK4、PCLK1、PCLK0:PWM通道5、4、1、0時鐘選擇位。 0表示ClockA作為相應通道時鐘源; 1表示ClockSA作為相應通道時鐘源。7.3PWM模塊存放器及設置 7.3.3PWM時鐘選擇存放器〔PWMCLK〕 PWM時鐘選擇框圖如圖7.5所示,從圖中可知,PWM模塊一共有4個時鐘源,分別為ClockA、ClockB、ClockSA和ClockSB,其中ClockA和ClockB由總線時鐘直接分頻得到,分頻因子由PWM預分頻時鐘選擇存放器〔PWMPRCLK〕中的Bit2~Bit0或Bit6~Bit4確定〔如圖7.6所示〕,PWMPRCLK存放器的介紹詳見節(jié)。ClockSA由ClockA通過PWM比例因子A存放器〔PWMSCLA〕再次分頻得到,ClockSB由ClockB通過PWM比例因子B存放器〔PWMSCLB〕再次分頻得到,PWMSCLA存放器和PWMSCLB存放器的介紹詳見節(jié)和節(jié)。7.3PWM模塊存放器及設置 7.3.4PWM預分頻時鐘選擇存放器〔PWMPRCLK〕 讀:任何時刻;寫:任何時刻。 注意:PWMPRCLK存放器中的位可以在任何時刻寫入。如果正在產生PWM信號時要求改變極信號性,那么PWM輸出脈沖在信號極性轉換過程中可能被截短或延長。 PCKB2~PCKB0:ClockB預分頻因子選擇位。 這3位決定了ClockB的分頻因子,ClockB可以作為通道2、3、6或7的兩個時鐘源之一,如表7-2所示。7.3PWM模塊存放器及設置 7.3.4PWM預分頻時鐘選擇存放器〔PWMPRCLK〕7.3PWM模塊存放器及設置 7.3.4PWM預分頻時鐘選擇存放器〔PWMPRCLK〕 PCKA2~PCKA0:ClockA預分頻因子選擇位。

這3位決定了ClockA的分頻因子,ClockA是可以作為通道0、1、4或5的兩個時鐘源之一,如表7-3所示。7.3PWM模塊存放器及設置 7.3.5PWM居中對齊使能存放器〔PWMCAE〕 PWM居中對齊使能存放器〔PWMCenterAlignEnableRegister,PWMCAE〕包含8個控制位,如圖7.7所示。用于控制相應PWM通道輸出波形為中心對齊輸出或左對齊輸出。如果CAEx=1,相應的PWM通道輸出波形為中心對齊;如果CAEX=0,相應的PWM通道輸出波形為左對齊。7.3PWM模塊存放器及設置 7.3.5PWM居中對齊使能存放器〔PWMCAE〕 注意:僅當相應的通道被禁止輸出時,才可以設置該存放器。 CAEx:通道x居中對齊輸出方式位。 0表示通道x輸出波形為左對齊方式。 1表示通道x輸出波形為居中對齊方式。7.3PWM模塊存放器及設置 7.3.5PWM居中對齊使能存放器〔PWMCAE〕 PWM左對齊輸出波形如圖7.8所示。當使用左對齊方式輸出時,8位通道計數器PWMCNTx只做加法計數;當PWMCNTx計數器加法計數到通道占空比存放器PWMDTYx中設置的數值時,PWM通道輸出波形發(fā)生變化;當PWMCNTx計數器加法計數到通道周期存放器PWMPERx中設置的數值時,PWMCNTx清零,輸出波形電平發(fā)生變化,然后讀取PWMDTYx存放器和PWMPERx存放器中的數值作為下一次PWMCNTx加法計數參考使用。PWM通道計數器PWMCNTx介紹詳見節(jié),PWM通道周期存放器PWMPERx介紹詳見節(jié),PWM通道占空比存放器PWMDTYx介紹詳見節(jié)。7.3PWM模塊存放器及設置 7.3.5PWM居中對齊使能存放器〔PWMCAE〕 PWM居中對齊輸出波形如圖7.9所示。當使用居中對齊格式輸出時,8位計數器PWMCNTx既做加法計數器也能做減法計數器;當PWMCNTx計數器加法計數到PWMDTYx存放器中設置的數值時,PWM通道輸出波形發(fā)生變化;當PWMCNTx計數器加法計數到PWMPERx存放器中設置的數值時,PWMCNTx計數器會從加法計數器變?yōu)闇p法計數器;當PWMCNTx計數器開始減法計數到PWMDTYx存放器中的數值時,PWM通道輸出波形再次發(fā)生變化;當PWMCNTx計數器中數值減到0時,PWMCNTx重新變?yōu)榧臃ㄓ嫈灯?,然后讀取PWMDTYx存放器和PWMPERx存放器中的數值作為下一次PWMCNTx計數參考使用。7.3PWM模塊存放器及設置 7.3.6PWM控制存放器〔PWMCTL〕 PWM控制存放器〔PWMControlRegister,PWMCTL〕如圖7.10所示。該存放器用于PWM模塊的各種控制,其中包括4個級聯控制位,用于將一對8位PWM通道級聯成一個16位通道。當通道6和通道7級聯時,通道6的存放器成為16位存放器中的高8位字節(jié),通道7的存放器為16位存放器中的低8位字節(jié);當通道4和通道5級聯時,通道4的存放器成為16位存放器中的高8位字節(jié);當通道2和通道3級聯時,通道2的存放器成為16位存放器中的高8位字節(jié);當通道0和通道1級聯時,通道0的存放器成為16位存放器中的高8位字節(jié)。 讀:任何時刻;寫:任何時刻。7.3PWM模塊存放器及設置 7.3.6PWM控制存放器〔PWMCTL〕 注意:僅當需要級聯的兩個通道都被禁止輸出時,才可以設置PWMCTL存放器中相應的控制位。 ①CON67:通道6、通道7級聯位。 0表示通道6、7作為兩個獨立的8位PWM通道。 1表示8位PWM通道6、7級聯形成一個16位PWM通道。通道6的存放器作為16位通道的高8位字節(jié),通道7作為低8位字節(jié),這時通道7的引腳用做16位PWM的信號輸出〔端口PWM7〕,通道7的時鐘選擇控制位、極性控制位、輸出使能控制位、居中對齊使能位有效;通道6的相應存放器控制位均無效。 ②CON45:通道4、通道5級聯位。 0表示通道4、5作為兩個獨立的8位PWM通道。 1表示8位PWM通道4、5級聯形成一個16位PWM通道。通道4的存放器作為16位通道的高8位字節(jié),通道5作為低8位字節(jié),這時通道5的引腳用做16位PWM的信號輸出〔端口PWM5〕,通道5的時鐘選擇控制位、極性控制位、輸出使能控制位、居中對齊使能位有效;通道4的相應存放器控制位均無效。7.3PWM模塊存放器及設置 7.3.6PWM控制存放器〔PWMCTL〕 ③CON23:通道2、通道3級聯位。 0表示通道2、3作為兩個獨立的8位PWM通道。 1表示8位PWM通道2、3級聯形成一個16位PWM通道。通道2的存放器作為16位通道的高8位字節(jié),通道3作為低8位字節(jié),這時通道3的引腳用做16位PWM的信號輸出〔端口PWM3〕,通道3的時鐘選擇控制位、極性控制位、輸出使能控制位、居中對齊使能位有效;通道2的相應存放器控制位均無效。 ④CON01:通道0、通道1級聯位。 0表示通道0、1作為兩個獨立的8位PWM通道。 1表示8位PWM通道0、1級聯形成一個16位PWM通道。通道0的存放器作為16位通道的高8位字節(jié),通道1作為低8位字節(jié),這時通道1的引腳用做16位PWM的信號輸出〔端口PWM1〕,通道1的時鐘選擇控制位、極性控制位、輸出使能控制位、居中對齊使能位有效;通道0的相應存放器控制位均無效。7.3PWM模塊存放器及設置 7.3.6PWM控制存放器〔PWMCTL〕

如果需要PWM輸出精度更高,可以將2個8位PWM通道級聯構成1個16位PWM通道,如圖7.11所示。7.3PWM模塊存放器及設置 7.3.6PWM控制存放器〔PWMCTL〕 PSWAI:MCU等待工作模式下PWM停止位。使能該位,可以禁止預分頻器的時鐘輸入,降低MCU等待模式下的功耗。 0表示等待模式時,允許預分頻器時鐘輸入; 1表示等待模式時,禁止預分頻器時鐘輸入。 PFRZ:MCU凍結工作模式下PWM停止位,在凍結模式下,PWM通道計數器PWMCNTx停止計數。 0表示凍結模式時,允許凍結PWM工作; 1表示凍結模式時,禁止預分頻器時鐘輸入。7.3PWM模塊存放器及設置 7.3.7PWM比例因子A存放器〔PWMSCLA〕 PWM比例因子A存放器〔PWMScaleARegister,PWMSCLA〕是可編程分頻存放器,如圖7.12所示,用于將ClockA進行分頻,產生ClockSA。通過將ClockA除以PWMSCLA存放器中的值,再除以2,產生ClockSA信號,公式為 讀:任何時刻;寫:任何時刻〔將導致分頻計數器裝載新的PWMSCLA比例因子值〕。

注意:PWMSCLA默認值為256,當PWMSCLA=$00時,此時ClockSA等于ClockA的頻率除以512。7.3PWM模塊存放器及設置 7.3.8PWM比例因子B存放器〔PWMSCLB〕 PWM比例因子B存放器〔PWMScaleBRegister,PWMSCLB〕是可編程分頻存放器,如圖7.13所示,用于將ClockB進行分頻,產生ClockSB。通過將ClockB除以PWMSCLB存放器中的值,再除以2,產生ClockSB信號,其公式為 讀:任何時刻;寫:任何時刻〔將導致分頻計數器裝載新的PWMSCLB比例因子值〕。

注意:PWMSCLB默認值為256,當PWMSCLB=$00時,此時ClockSB等于ClockB的頻率除以512。7.3PWM模塊存放器及設置 7.3.9PWM通道計數器〔PWMCNT〕 每個通道有一個專用的8位加/減計數器PWMCNT〔PWMChannelCounterRegisters,PWMCNT〕,計數器PWMCNTx的頻率和時鐘源頻率相關??梢栽谌魏螘r刻讀取PWMCNTx中數值,而不影響PWMCNTx和PWM通道的工作。當處于左對齊輸出模式時,PWMCNTx從0開始做加法計數,直到增加到PWM周期存放器PWMPERx1的值;當處于居中對齊輸出模式時,PWMCNTx從0開始進行加法計數,直到增加到PWMPERx的值,然后再進行減法,直至回到0。PWMCNTx存放器如圖7.14所示。7.3PWM模塊存放器及設置 7.3.9PWM通道計數器〔PWMCNT〕 向計數器PWMCNTx寫入任何值將導致其復位到$00,PWMCNTx計數器方向設置為向上計數,從周期存放器PWMPERx和占空比存放器PWMDTYx的緩沖器中得到周期和占空比的數值,然后根據極性選擇位PPOLx改變輸出電平。當相應的PWM通道被禁止〔PWMEx=0〕時,PWMCNTx計數器不工作;當相應的PWM通道使能時〔PWMEx=1〕,計數器以PWMCNTx中的值作為初始值開始計數。 在16位級聯模式下,無論對16位計數器訪問,還是對高8位和低8位計數器分開訪問,都會使計數器PWMCNTx復位清零。讀取16位計數器必須用16位方式訪問,以保持數據的一致性,高8位和低8位計數器分別讀取會得到不正確的數值。 讀:任何時刻;寫:任何時刻。 注意:當通道使能時寫PWMCNTx可能會產生一個無效的PWM周期脈沖。7.3PWM模塊存放器及設置 7.3.10PWM通道周期存放器〔PWMPER〕 每個PWM通道有一個獨立的周期存放器PWMPER〔PWMChannelPeriodRegister〕,該存放器中的值決定相應PWM通道的周期,如圖7.15所示。 周期存放器PWMPERx中的數值是雙緩沖的,因此,當PWMPERx存放器中的數值改變后,并不立即生效,直到以下事件中的一個發(fā)生: 當前有效周期結束; 寫計數器PWMCNTx〔計數器復位到$00〕; 通道被禁止。 因此,PWM將總是輸出以前的波形或新波形,而不是兩者之間的某種無效波形。如果PWM通道被禁止,寫入周期存放器的數值將直接進入鎖存器和緩沖器。7.3PWM模塊存放器及設置 7.3.10PWM通道周期存放器〔PWMPER〕 讀:任何時刻;寫:任何時刻。 注意:讀PWMPERx存放器返回最新寫入的數值,而不是返回當前有效的周期值。 PWM輸出波形的周期計算方法是,用選擇的時鐘周期〔ClockA、ClockB、ClockSA或ClockSB〕乘以周期存放器PWMPERx中的數值。 左對齊方式輸出〔CAEx=0〕: PWMx周期=通道時鐘周期×PWMPERx 居中對齊方式輸出〔CAEx=1〕: PWMx周期=通道時鐘周期×2×PWMPERx7.3PWM模塊存放器及設置 7.3.11PWM通道占空比存放器〔PWMDTY〕 每個PWM通道有一個獨立的占空比存放器PWMDTY〔PWMChannelDutyRegister〕,該存放器中的值決定相應PWM通道的占空比,如圖7.16所示。 占空比存放器PWMDTYx中的數值是雙緩沖的,因此,當PWMDTYx存放器中的數值改變后,并不立即生效,直到以下事件中的一個發(fā)生: 當前有效周期結束; 寫計數器PWMCNTx〔計數器復位到$00〕; 通道被禁止。 因此,PWM將總是輸出以前的波形或新波形,而不是兩者之間的某種無效波形。如果PWM通道被禁止,寫入占空比存放器的數值將直接進入鎖存器和緩沖器。7.3PWM模塊存放器及設置 7.3.11PWM通道占空比存放器〔PWMDTY〕 讀:任何時刻;寫:任何時刻。 注意:讀PWMDTYx存放器返回最新寫入的數值,而不是返回當前有效的占空比值。 PWMDTYx存放器中數值的含義,根據極性控制位PPOLx的不同而不同。如果PPOLx位是1,PWM輸出波形開始為高電平,當PWMCNTx計數器數值等于PWMDTYx存放器數值時變?yōu)榈碗娖剑藭rPWMDTYx存放器中的數值代表了高電平的持續(xù)時間;如果PPOLx位是0,PWM輸出波形開始為低電平,當PWMCNTx計數器數值等于PWMDTYx存放器數值時變?yōu)楦唠娖?,此時PWMDTYx存放器中的數值代表了低電平的持續(xù)時間。 PWM波形占空比計算公式如下:7.3PWM模塊存放器及設置 7.3.11PWM通道占空比存放器〔PWMDTY〕 表7-5總結了在忽略PWM輸出格式〔左對齊或居中對齊方式〕和分辨率〔8位或16位〕情況下,PWM輸出波形的臨界情況。7.3PWM模塊存放器及設置 7.3.12PWM關閉存放器〔PWMSDN〕 PWM關閉存放器〔PWMShutdownRegister,PWMSDN〕具有緊急情況下立即關閉PWM通道輸出的功能,PWM緊急關閉情況下,PWM通道7被配置為輸入端口。PWMSDN存放器如圖7.19所示。 讀:任何時刻;寫:任何時刻。 PWMIF:PWM中斷標志位。當PWM7ENA=1時,PWM通道7引腳上的電平變化將產生中斷并置位PWMIF。向PWMIF位寫1操作實現清零,PWMIF位寫0操作無效。 0表示PWM通道7輸入信號無變化; 1表示PWM通道7輸入信號有變化。 PWMIE:PWM中斷使能位。 0表示禁止PWM中斷; 1表示允許PWM中斷。7.3PWM模塊存放器及設置 7.3.12PWM關閉存放器〔PWMSDN〕 PWMRSTRT:PWM重新啟動控制位。只有當PWM通道7處于無效狀態(tài)〔非緊急關閉〕時,才可以重新啟動PWM模塊。向PWMRSTRT位寫1〔觸發(fā)事件〕之后,當計數器返回0時,PWM通道才開始運行。如果PWM7ENA位被復位到0,只有當計數器返回到0后,PWM模塊才能開始工作。讀取該位始終返回0。 PWMLVL:PWM緊急關閉后輸出電平選擇位。PWM緊急關閉情況下,PWM通道7為輸入端口,其他PWM通道的輸出電平由PWMLVL位確定。 0表示其他PWM通道輸出低電平; 1表示其他PWM通道輸出高電平。 PWM7IN:PWM通道7輸入狀態(tài)位,該位反響了PWM通道7引腳的電平狀態(tài)。 PWM7INL:PWM緊急關閉后通道7輸入電平選擇位。PWM緊急關閉〔PWM7ENA=1〕情況下,該位確定PWM通道7輸入電平有效值。 0表示有效電平為低電平; 1表示有效電平為高電平。 PWM7ENA:PWM緊急關閉使能位。如果該位為1,通道PWM7被強制配置為輸入端口,并啟用緊急關閉功能。PWMSDN存放器中其他位僅在PWM7ENA=1時才有意義。 0表示禁止緊急關閉; 1表示允許緊急關閉。7.4PWM模塊應用實例 本節(jié)通過一個簡單實例,讓讀者掌握PWM模塊的使用和編程方法。 本實例使用某一路PWM輸出實現D/A轉換功能,通過調節(jié)PWM輸出波形占空比,控制LED燈的亮度,硬件連接如圖7.20所示,PWM輸出波形用做D/A輸出時,最簡單的方法就是使用一階低通濾波器〔如圖7.20中R1、C1構成一階低通濾波器〕對PWM信號濾波,為了保持輸出電壓穩(wěn)定,要確保輸出阻抗盡可能大。為此,在低通濾波器后增加了電壓跟隨器〔圖7.20中由LM324和R2構成〕。軟件編程實現PWM輸出占空比不斷增大,可以觀察到LED燈的亮度不斷增加;之后PWM輸出占空比不斷減小,可以觀察到LED燈的亮度不斷降低。7.4PWM模塊應用實例程序清單:7.4PWM模塊應用實例程序清單:7.4PWM模塊應用實例程序清單:7.5智能車系統(tǒng)中PWM模塊的應用 在智能車競賽系統(tǒng)設計中,直流電動機和伺服電動機的控制涉及智能車的速度與方向控制,是智能車控制好壞兩大關鍵因素。鑒于篇幅有限,在此僅表達運用MC9S12XS128的PWM模塊實現對直流電動機和伺服電動機的簡單控制應用,更詳細的速度控制算法和方向〔角度〕控制算法,請讀者參見相關參考文獻。7.5智能車系統(tǒng)中PWM模塊的應用

7.5.1應用PWM模塊控制直流電動機 直流電動機驅動是智能車前行的動力所在。要驅動、控制一個直流電動機需要設計直流電動機驅動電路,既可以使用分立的功率元件〔如MOSFET〕搭建驅動電路,也可以使用集成的直流電動機功率驅動芯片。在此,以Freescale公司的H橋功率驅動芯片MC33887為例,介紹應用PWM模塊控制直流電動機,其芯片內部結構及引腳圖分別如圖7.21和圖7.22所示〔芯片詳細資料請讀者參考MC33887數據手冊〕。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.1應用PWM模塊控制直流電動機 MC33887引腳功能如表7-6所示。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.1應用PWM模塊控制直流電動機

在智能車系統(tǒng)中,運用MC33887驅動直流電動機的原理圖如圖7.23所示。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.1應用PWM模塊控制直流電動機 在此用MC9S12XS128的PWM7和PWM3分別作為MC33887的IN1和IN2引腳的輸入控制端,并通過MC9S12XS128的ADC模塊采樣MC33887的反響電流信號〔FB引腳〕,以實時監(jiān)控H橋的高邊工作電流值,實現對電動機的轉速和轉矩的閉環(huán)控制。將D1〔引腳18〕和D2〔引腳13〕分別通過下拉電阻和上拉電阻連接到GND和5V,以使能OUT1〔引腳6、7〕和OUT2〔引腳14、15〕的輸出控制。運用PWM模塊控制直流電動機的源代碼如下。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.1應用PWM模塊控制直流電動機7.5智能車系統(tǒng)中PWM模塊的應用 7.5.1應用PWM模塊控制直流電動機7.5智能車系統(tǒng)中PWM模塊的應用 7.5.1應用PWM模塊控制直流電動機7.5智能車系統(tǒng)中PWM模塊的應用 7.5.2應用PWM模塊控制伺服電動機 伺服電動機〔俗稱為舵機〕是競賽車模標準配件,它是一種位置〔角度〕伺服驅動器,用于需要角度調整變化并可以保持某個角度的控制應用要求。目前在高檔遙控玩具、各種航模,包括飛機模型,潛艇模型,遙控機器人等裝置中已得到普遍應用。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.2應用PWM模塊控制伺服電動機 圖7.24是車模伺服電動機的機械結構圖。車模伺服電動機的工作原理:控制信號〔這里為PWM信號〕輸出作用到控制電路板上的信號調制芯片,獲得一個直流偏置電壓。在伺服電動機的控制電路板上有一個內部基準電路,該電路可以產生一個周期為20ms,寬度為1.5ms的基準信號,獲得的直流偏置電壓與電位器的當前電壓進行比較,產生一個輸出電壓差;輸出電壓差的正值或負值輸入到控制電路板上確定小型直流電動機的正轉或反轉。當小型直流電動機轉速一定時,通過級聯的變速齒輪組帶動可調電位器旋轉,最終使得輸出電壓差為0,此時小型直流電動機轉動到某一位置,并保持該位置,停止轉動。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.2應用PWM模塊控制伺服電動機

伺服電動機的輸出轉角與輸入PWM波控制信號的占空比存在如圖7.25所示的關系。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.2應用PWM模塊控制伺服電動機

由伺服電動機的工作原理和圖7.25可知,只需改變輸入PWM脈沖信號的占空比便能獲得不同的轉角,實現智能車系統(tǒng)的轉向控制功能。在此應用MC9S12XS128的PWM5模塊控制伺服電動機,伺服電動機的工作電源電壓是4.8~6.0V,為了提高智能車系統(tǒng)的轉向性能,在此使用最高工作電壓6.0V,原理圖如圖7.26所示。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.2應用PWM模塊控制伺服電動機

有關PWM5的初始化代碼已經在前面節(jié)中給出,以下僅給出伺服電動機控制的相關代碼,即設置PWM的占空比值,能夠實現伺服電動機的相應轉向要求。8.2ATD模塊結構組成和特點 MC9S12XS128內置的ATD模塊如圖8.1所示。8.2ATD模塊結構組成和特點ATD模塊具有以下根本特征:8位/10位/12位可選轉換精度;停止模式下轉換使用內部時鐘;轉換完成后為低功耗狀態(tài);自動和可編程數值比較,可設定大于或者小于等于設定值時中斷申請;可編程采樣時間;左對齊/右對齊轉換數值;外部觸發(fā)功能;轉換完成中斷申請;16路模擬輸入通道多路開關;可實現VRH、VRL和(VRH+VRL)/2特殊轉換;轉換序列長度為1~16;連續(xù)轉換模式;多通道掃描功能;外部觸發(fā)功能可配置為AD通道或4個外部附加觸發(fā)輸入端,外部觸發(fā)源可選擇片外或片內信號。8.3ATD模塊存放器及設置 MC9S12XS128的ATD模塊相關存放器詳見表8-1。8.3ATD模塊存放器及設置8.3ATD模塊存放器及設置 8.3.1ATD控制存放器0〔ATDCTL0〕 ATD控制存放器0〔ATDControlRegister0,ATDCTL0〕,如圖8.2所示。該存放器寫操作將中止當前轉換序列。8.3ATD模塊存放器及設置 8.3.1ATD控制存放器0〔ATDCTL0〕 讀:任何時刻;寫:任何時刻,特殊模式下總是對保存位〔Bit7〕寫0操作。 WRAP3~WRAP0:返轉通道選擇位。當執(zhí)行多通道轉換時,這4位確定返轉通道,多通道返轉編碼如表8-2所示。8.3ATD模塊存放器及設置 8.3.2ATD控制存放器1〔ATDCTL1〕 ATD控制存放器1〔ATDControlRegister1,ATDCTL1〕,如圖8.3所示。該存放器寫操作將中止當前轉換序列。8.3ATD模塊存放器及設置 8.3.2ATD控制存放器1〔ATDCTL1〕

讀:任何時刻;寫:任何時刻。 ETRIGSEL:外部觸發(fā)源選擇位。該位選擇外部觸發(fā)源是AD通道,還是ETRIG3~0輸入引腳。對于ERTIG3~0輸入端的使用請參考MC9S12XS128數據手冊。如果ETRIG3~0的某輸入端不可用,置位ETRIGSEL操作無效,這意味著只能選擇AD通道作為外部觸發(fā)源。ETRIGCH3~ETRIGCH0:外部觸發(fā)通道選擇位,這4位選擇AD某通道或ERTIG3~0某輸入端作為外部觸發(fā)源。外部觸發(fā)通道選擇編碼詳見表8-3。8.3ATD模塊存放器及設置 8.3.2ATD控制存放器1〔ATDCTL1〕8.3ATD模塊存放器及設置 8.3.2ATD控制存放器1〔ATDCTL1〕 SRES1~SRES0:A/D分辨率選擇位。設置A/D轉換結果分辨率,詳見表8-4。 SMP_DIS:采樣前放電位選擇。0表示采樣前不放電; 1表示某通道采樣前,內部采樣電容會放電。這會增加2個ATD時鐘周期的采樣時間,有助于采樣前進行開路檢測。8.3ATD模塊存放器及設置 8.3.3ATD控制存放器2〔ATDCTL2〕 ATD控制存放器2〔ATDControlRegister2,ATDCTL2〕,如圖8.4所示。該存放器寫操作將中止當前轉換序列。8.3ATD模塊存放器及設置 8.3.3ATD控制存放器2〔ATDCTL2〕 讀:任何時刻;寫:任何時刻。 AFFC:ATD模塊標志快速去除位。 0表示ATD轉換完成標志位由各自CCFn標志位寫1操作去除; 1表示通過快速去除序列修改所有ATD轉換完成標志位。當比較使能位CMPEn=0時,讀取結果存放器將自動去除相應CCF標志位;當比較使能位CMPEn=1時,結果存放器寫操作將自動去除相應CCF標志位。 ICLKSTP:停止模式下內部時鐘位。該位使能停止模式下的AD轉換。當進入停止模式且ICLKSTP=1時,ATD轉換時鐘自動切換到內部時鐘ICLK。當前轉換序列將不受影響地繼續(xù)轉換,轉換速率將從預分頻總線頻率變?yōu)镮CLK頻率。ICLK頻率下,ATDCTL4存放器中的PRS4~PRS0預分頻因子無效。停止模式下的AD轉換,外部觸發(fā)將不工作;自動比較中斷或序列完成中斷用于軟件中斷處理AD采樣值。從運行模式轉換到停止模式期間,或者從停止模式轉換到運行模式期間,轉換結果不會寫入結果存放器,不置位CCF標志位且不進行比較處理。停止模式下且ICLKSTP=1時,脫離停止模式需要有ATDCLK切換回總線時鐘的ATD停止恢復時間tATDSTPRCV,此時間內,不能訪問ATD存放器。 0表示進入停止模式時如果AD轉換序列正在進行,那么中止當前轉換序列。退出停止模式時AD轉換自動重啟; 1表示停止模式下AD轉換使用內部時鐘〔ICLK〕進行轉換。8.3ATD模塊存放器及設置 8.3.3ATD控制存放器2〔ATDCTL2〕 ETRIGLE:外部觸發(fā)電平/邊沿控制位。該位確定外部觸發(fā)信號是邊沿觸發(fā)還是電平觸發(fā)。該位和ETRIGP位配合使用,這2位外部觸發(fā)設置詳見表8-5。 ETRIGP:外部觸發(fā)極性控制位。該位確定外部觸發(fā)信號的極性。該位和ETRIGLE位配合使用,這2位外部觸發(fā)設置詳見表8-5。8.3ATD模塊存放器及設置 8.3.3ATD控制存放器2〔ATDCTL2〕ETRIGE:外部觸發(fā)模式使能位。該位允許表8-3中描述的AD通道或者ETRIG3~0輸入端作為外部觸發(fā)源。如果外部觸發(fā)源是AD某通道,那么使能該通道的數字輸入緩沖功能。外部觸發(fā)允許與外部事件實現同步轉換。停止模式下的AD轉換,外部觸發(fā)不工作。 0表示禁止外部觸發(fā); 1表示允許外部觸發(fā)。ASCIE:ATD轉換序列完成中斷使能位。該位使能,當SCF置位時,那么ATD轉換序列完成后將產生中斷請求。 0表示禁止ATD轉換序列完成產生中斷請求;1表示允許ATD轉換序列完成產生中斷請求。ACMPIE:ATD比較中斷使能位。該位使能,當自動比較功能使能,即ATDCMPE存放器中的比較使能位CMPEn=1時,那么相應比較位可申請中斷。如果CCFn標志置位,將觸發(fā)比較中斷。 0表示禁止ATD比較中斷請求; 1表示允許ATD比較中斷請求。8.3ATD模塊存放器及設置 8.3.4ATD控制存放器3〔ATDCTL3〕 ATD控制存放器3〔ATDControlRegister3,ATDCTL3〕,如圖8.5所示。該存放器寫操作將中止當前轉換序列。8.3ATD模塊存放器及設置 8.3.4ATD控制存放器3〔ATDCTL3〕 讀:任何時刻;寫:任何時刻。DJM:結果存放器數據對齊方式選擇位。該位確定結果存放器中轉換數據的對齊格式,轉換結果數據總是無符號。 0表示結果存放器中的數據格式左對齊; 1表示結果存放器中的數據格式右對齊。 表8-6中給出輸入信號為0~5.12V情況下的ATD轉換結果例如。8.3ATD模塊存放器及設置 8.3.4ATD控制存放器3〔ATDCTL3〕

S8C、S4C、S2C、S1C:轉換序列長度定義位。這4位控制每個序列轉換的長度。A/D轉換序列長度定義詳見表8-7。復位后,S4C默認為1,所以默認的A/D轉換序列的長度為4。8.3ATD模塊存放器及設置 8.3.4ATD控制存放器3〔ATDCTL3〕 FIFO:結果存放器先進先出〔FIFO〕模式選擇位。如果該位為0〔非FIFO模式〕,那么AD轉換結果基于轉換序列映射到結果存放器,第1個轉換結果放入第1個結果存放器ATDDR0,第2個轉換結果放入第2個結果存放器ATDDR1,以此類推。 如果該位為1〔FIFO模式〕,那么AD轉換開始和結束時,轉換計數器不復位,轉換結果被依次存放在結果存放器。連續(xù)轉換序列模式〔SCAN=1〕,到達最后結果存放器時,結果存放器計數器將返轉。轉換計數器值〔ATDSTAT0存放器中的CC3~CC0〕確定當前轉換結果存放的相應結果存放器,結果存放器保存的有效數據可查詢轉換完成標志位得悉。 FIFO模式下,中止當前轉換或開始新轉換將去除轉換計數器。ATDCTL5存放器寫操作,新轉換序列的第1個轉換結果,總是放入第1個結果存放器ATDDR0。 如果FIFO位為1,禁用結果存放器自動比較功能,ATD模塊工作方式如同ACMPIE=0,CMPEn=0一樣。 0表示轉換結果根據選擇的轉換序列長度放入相應結果存放器; 1表示轉換結果依次放入結果存放器〔到達最后結果存放器時再返轉〕。8.3ATD模塊存放器及設置 8.3.4ATD控制存放器3〔ATDCTL3〕 FRZ1、FRZ0:凍結模式下背景調試使能控制位。當背景調試程序時,如果遇到斷點,有時希望此時ATD模塊停止工作。這2位共同確定凍結模式下遇到斷點時ATD模塊的工作狀態(tài),如表8-8所示。8.3ATD模塊存放器及設置 8.3.5ATD控制存放器4〔ATDCTL4〕 ATD控制存放器4〔ATDControlRegister4,ATDCTL4〕,如圖8.6所示,該存放器寫操作將中止當前轉換序列。8.3ATD模塊存放器及設置 8.3.5ATD控制存放器4〔ATDCTL4〕 SMP2~SMP0:采樣時間選擇位。這3位確定以ATD轉換時鐘周期為單位的采樣時間長度,注意ATD轉換時鐘周期和ATD時鐘預分頻因子相關。表8-9列出了采樣時間長度的選擇。 PRS4~PRS0:ATD時鐘預分頻因子選擇位。這5位確定ATD時鐘預分頻因子的二進制PRS值,ATD轉換時鐘頻率計算公式為fATDCLK=fBUS/(2×(PRS+1))

式中,fATDCLK允許的頻率范圍請參考MC9S12XS128數據手冊。8.3ATD模塊存放器及設置 8.3.6ATD控制存放器5〔ATDCTL5〕 ATD控制存放器5〔ATDControlRegister5,ATDCTL5〕,如圖8.7所示,該存放器寫操作將中止當前轉換序列,啟動新的轉換序列。假設外部觸發(fā)模式使能位ETRIGE=1,那么初始化ATDCTL5存放器,將啟動新的轉換序列,每次觸發(fā)事件都會發(fā)生新的轉換。8.3ATD模塊存放器及設置 8.3.6ATD控制存放器5〔ATDCTL5〕 讀:任何時刻;寫:任何時刻。SC:特殊通道轉換位。如果該位置位,可使用本存放器中的CD、CC、CB和CA選擇特殊通道轉換,詳見表8-10。 1表示禁止特殊通道轉換; 0表示允許特殊通道轉換。 SCAN:連續(xù)轉換序列模式選擇位。該位確定AD轉換序列執(zhí)行是連續(xù)轉換還是只轉換一次。如果外部觸發(fā)模式使能位ETRIGE=1,那么設置該位無效,這說明外部觸發(fā)事件總是啟動單次轉換序列。 0表示單次轉換序列模式; 1表示連續(xù)轉換序列模式〔稱為掃描模式〕。8.3ATD模塊存放器及設置 8.3.6ATD控制存放器5〔ATDCTL5〕 MULT:多通道采樣模式選擇位。當MULT位為0時,ATD序列控制器只從指定的模擬輸入通道采樣完成轉換序列。模擬輸入通道選擇編碼由本存放器中的CD、CC、CB和CA位共同確定。當MULT位為1時,ATD序列控制器從多個輸入通道采樣數據,輸入通道數目由轉換序列長度值〔ATDCTL3存放器中的S8C、S4C、S2C和S1C位〕確定,其中采樣的第一個輸入通道由通道選擇編碼〔ATDCTL5存放器中的CD、CC、CB和CA位〕確定,之后轉換序列中的輸入通道由遞增的通道選擇編碼確定或者返轉回到AN0〔輸入通道0〕。 0表示單通道采樣; 1表示多通道采樣。 CD、CC、CB、CA:模擬量輸入通道選擇編碼位。這4位用于選擇相應的模擬輸入通道,表8-10列出了模擬輸入通道選擇編碼。 單通道轉換〔MULT=0〕時,通道選擇編碼確定了采樣和轉換的模擬輸入通道。 多通道轉換〔MULT=1〕時,通道選擇編碼確定了轉換序列中第一個輸入通道。之后轉換序列中的采樣通道由遞增的通道選擇編碼確定或者返轉回到AN0〔返轉通道由ATDCTL0存放器中的返轉通道選擇位WRAP3~WRAP0確定〕。當起始轉換通道號超過WRAP3~WRAP0定義的編碼時,將從AN15返轉到AN0。8.3ATD模塊存放器及設置 8.3.6ATD控制存放器5〔ATDCTL5〕8.3ATD模塊存放器及設置 8.3.7ATD狀態(tài)存放器0〔ATDSTAT0〕 ATD狀態(tài)存放器0〔ATDStatusRegister0,ATDSTAT0〕,如圖8.8所示。8.3ATD模塊存放器及設置 8.3.7ATD狀態(tài)存放器0〔ATDSTAT0〕 讀:任何時刻;寫:任何時刻〔CC3、CC2、CC1和CC0位寫操作無效〕。 ATDSTAT0存放器中有轉換序列完成標志位SCF、外部觸發(fā)復寫標志位ETORF、結果存放器復寫標志位FIFOR和A/D轉換計數器CC3~CC0。 SCF:轉換序列完成標志位。當一次轉換序列完成后,該標志位置位;如果為連續(xù)轉換序列模式〔SCAN=1〕,每次轉換完成后都會置位該標志位。 當發(fā)生以下情況時,該標志位被清零。 ①SCF位寫1操作。 ②ATDCTL5存放器寫操作〔啟動新的轉換序列〕。 ③當AFFC=1時,讀取結果存放器。 0表示轉換序列未完成; 1表示轉換序列已完成。8.3ATD模塊存放器及設置 8.3.7ATD狀態(tài)存放器0〔ATDSTAT0〕 ETORF:外部觸發(fā)復寫標志位。當處于邊沿觸發(fā)模式〔ETRIGLE=0〕時,如果轉換序列正在進行,同時又檢測到一個有效邊沿觸發(fā)信號時,該標志位置位。 當發(fā)生以下情況時,該標志位被清零。 ①ETORF位寫1操作。 ②TDCTL0、ATDCTL1、ATDCTL2、ATDCTL3、ATDCTL4、ATDCMPE或ATDCMPHT任意存放器寫操作〔中止當前轉換序列〕。 ③TDCTL5存放器寫操作〔啟動新的轉換序列〕。 0表示未發(fā)生外部觸

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論