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

下載本文檔

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

文檔簡介

通用I/O口通過配置相應寄存器位,可以設置輸入/輸出端口、驅動能力、內(nèi)置上拉/下拉電阻使用、中斷輸入方式等多種功能。通過對DDR、I/O、RDR、PE、PS和IE等寄存器的設置,用戶可以獲得通用I/O口的不同工作方式。其中,DDR(數(shù)據(jù)方向寄存器)設定I/O口為輸入/輸出端口。數(shù)據(jù)寄存器(I/O寄存器)用于設定I/O口的高低電平。RDR(驅動控制寄存器)用于設定I/O口的輸出驅動能力。PE(上拉/下拉使能寄存器)用于當I/O口為輸入口時使能內(nèi)置上拉電阻或下拉電阻的使用。PS(上拉/下拉選擇寄存器)當中斷允許位置位時,用于選擇上升沿觸發(fā)或下降沿觸發(fā)中斷;當使能內(nèi)置上拉/下拉電阻時,用于選擇使用上拉電阻或下拉電阻。IE(中斷使能寄存器)用于使能I/O口的中斷功能。 1.數(shù)據(jù)寄存器(Px)

數(shù)據(jù)寄存器Px中的8位對應每個端口中的相應引腳,如果某端口的引腳被定義為輸出時,寫入數(shù)據(jù)寄存器Px中的數(shù)值,則從對應引腳輸出;如果某端口的引腳被定義為輸入時,可以讀取數(shù)據(jù)寄存器Px對應引腳的電平值。需要注意PORTE端口是一個特例,它的最低兩位只能為輸入口,所以PORTE端口的數(shù)據(jù)寄存器最低兩位是只讀位。 2.數(shù)據(jù)方向寄存器(DDRx) DDRx決定對應引腳配置為輸出口還是輸入口,如果某位為“0”,則對應引腳設定為輸入口;如果某位為“1”,則對應引腳設定為輸出口。MCU復位后,DDRx值為0x00,引腳默認為輸入口。 需要注意的是,PORTE端口是一個特例,它的最低兩位只能為輸入口,所以PORTE端口的數(shù)據(jù)方向寄存器最低兩位是只讀位,讀取這兩位始終返回“0”。 3.上拉電阻控制寄存器(PUCR) PORTA、PORTB、PORTE和PORTK端口都有內(nèi)置上拉電阻,PUCR有4位分別配置4個端口選擇使用內(nèi)置上拉電阻,即第7、4、1和0位分別設置K、E、B和A端口。當控制位為“1”時,設定對應端口使用上拉電阻;當控制位為“0”時,禁止對應端口使用上拉電阻。MCU復位后,設定PORTK和PORTE端口使用上拉電阻,PORTB和PORTA端口禁用上拉電阻。

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

如果PORTA、PORTB、PORTE和PORTK端口為輸出口時,每個端口都可以設置其輸出驅動能力,RDR有4位分別設定4個端口輸出驅動能力,即第7、4、1和0位分別設置K、E、B和A端口。如果某個控制位為“1”時,設定對應端口輸出驅動能力降低;如果某個控制位為“0”時,設定對應端口為正常驅動輸出方式。 1.數(shù)據(jù)寄存器(PTx)

如果數(shù)據(jù)方向寄存器DDRx的對應位為“0”,即對應引腳定義為輸入時,讀取數(shù)據(jù)寄存器PTx的對應位,則為對應引腳的輸入電平值;如果DDRx的對應位為“1”,即對應引腳定義為輸出時,寫入PTx寄存器的對應位,則為對應引腳的輸出電平值。 2.輸入寄存器(PTIx)

輸入寄存器PTIx是一個只讀寄存器,如果DDRx的對應位為“0”,即對應引腳定義為輸入時,讀取PTIx總是返回引腳電平值;如果DDRx的對應位為“1”,即對應引腳定義為輸出時,利用PTIx可以監(jiān)視對應引腳是否過載或短路。 3.數(shù)據(jù)方向寄存器(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使能選擇使用內(nèi)置上拉/下拉電阻。如果PERx某位為“1”時,則對應引腳允許使用內(nèi)置上拉/下拉電阻;如果某位為“0”時,則對應引腳禁用內(nèi)置上拉/下拉電阻。

PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 6.上拉/下拉選擇寄存器(PPSx)

當某引腳被定義為輸入且使能內(nèi)置上拉/下拉電阻時,上拉/下拉選擇寄存器PPSx用于選擇使用內(nèi)置上拉或者下拉電阻。如果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ā)生中斷,并產(chǎn)生有效電平時,則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數(shù)據(jù)寄存器0(PT0AD0)

當不使用AD功能時,如果AD0端口數(shù)據(jù)方向寄存器0DDR0AD0的對應位為“0”,即對應引腳定義為輸入時,讀取PT0AD0的對應位,則為對應引腳的輸入電平值;如果DDR0AD0的對應位為“1”,即對應引腳定義為輸出時,寫入PT0AD0寄存器的對應位,則為對應引腳的輸出電平值。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 2.AD0數(shù)據(jù)寄存器1(PT1AD0)

當不使用AD功能時,如果AD0端口數(shù)據(jù)方向寄存器1DDR1AD0的對應位為“0”,即對應引腳定義為輸入時,讀取PT1AD0的對應位,則為對應引腳的輸入電平值;如果DDR1AD0的對應位為“1”,即對應引腳定義為輸出時,寫入PT1AD0寄存器的對應位,則為對應引腳的輸出電平值。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 3.AD0數(shù)據(jù)方向寄存器0(DDR0AD0)

DDR0AD0決定AN00~AN07對應引腳為輸出口還是輸入口,如果某位為“0”,則對應引腳設定為輸入口;如果某位為“1”,則對應引腳設定為輸出口。如果希望設置AD0端口為通用I/O口功能,ATD0DIEN(數(shù)字輸入使能)寄存器必須設置為“1”,關于ATD0DIEN寄存器的詳細介紹,請參閱第8章。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 4.AD0數(shù)據(jù)方向寄存器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使能選擇使用內(nèi)置上拉電阻。如果PER0AD0某位為“1”時,則對應引腳允許使用內(nèi)置上拉電阻;如果某位為“0”時,則對應引腳禁用內(nèi)置上拉電阻。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 8.AD0上拉使能寄存器1(PER1AD0)

如果端口為輸入口時,可以通過PER1AD0使能選擇使用內(nèi)置上拉電阻。如果PER1AD0某位為“1”時,則對應引腳允許使用內(nèi)置上拉電阻;如果某位為“0”時,則對應引腳禁用內(nèi)置上拉電阻。 5.3.1控制輸出設備LED實例

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

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

由電路圖可知,使用MC9S12XS128的PORTB端口控制8只LED,PORTB端口輸出低電平點亮相應LED。本例中流水燈的流動速度沒有實現(xiàn)精確控制,即延時時間沒有精確計算,本書后面章節(jié)會論述如何實現(xiàn)精確定時。 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)出現(xiàn)混亂時,可能得到無法識別的操作碼,即非法指令,這時MCU自動產(chǎn)生一次中斷,中斷矢量地址為$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系列單片機中的可屏蔽中斷數(shù)量非常多,這里僅對IRQ做簡要介紹,其他的可屏蔽中斷可參見相關功能模塊的章節(jié)。

MC9S12系列MCU有一個標記為IRQ引腳,當該引腳出現(xiàn)低電平或者下降沿時,則會產(chǎn)生中斷請求信號,這也是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系列有多個中斷源,所以在同一時刻可能會有兩個或兩個以上的中斷源同時請求中斷,這就要求必須根據(jù)任務的輕重緩急給每個中斷源分配不同的中斷優(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系列中實現(xiàn)中斷嵌套,一個比較簡單的方法是進入中斷服務程序時,將CCR中的可屏蔽中斷屏蔽位I清零。這樣可以實現(xiàn)如圖6.5所示的中斷嵌套。6.2MC9S12系列中斷優(yōu)先級

從圖6.5中可以看到,這樣簡單的CCR中的I位處理也可能會帶來問題,就是會出現(xiàn)低優(yōu)先級的中斷請求也可以掛起高優(yōu)先級中斷服務程序。因為在首先響應B中斷服務程序中已經(jīng)清除了可屏蔽中斷屏蔽位I,所以此時任何可屏蔽中斷請求都能夠得到響應,這樣就出現(xiàn)了低優(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引腳與一個按鍵連接,按鍵按下為低電平。要求編程實現(xiàn)IRQ作為中斷源,采用中斷方式,利用8位撥碼開關控制8只LED燈的循環(huán)點亮速度,撥碼開關的不同狀態(tài)設置了燈的循環(huán)點亮速度值。6.3MC9S12系列中斷程序應用實例

本實例中關于流水燈的實現(xiàn)已經(jīng)在第5章中介紹過,本章著重介紹中斷服務程序的編寫。中斷服務程序可以有兩種編寫方式:一種是利用中斷編號關聯(lián)中斷服務程序;另一種是通過在.prm文件中的聲明關聯(lián)中斷服務程序。首先介紹利用中斷編號編寫中斷服務程序。從表6.2中可以看到,中斷向量表依次自上而下從0開始編號,中斷在表格中是第7個,所以編號為“6”。另外一種比較方便確定編號的方法是,可以打開工程中“Includes”文件夾下的“MC9S12XS128.h”文件,頭文件的開始處對所有中斷向量地址和中斷標號都做了宏定義,中斷的中斷向量入口地址的宏定義語句為“#defineVirq0xFFF2U”,中斷的中斷標號的宏定義語句為“#defineVectorNumber_Virq6U”,所以也可以用“VectorNumber_Virq”代替前文中提到的編號“6”。下面是部分實例程序代碼。6.3MC9S12系列中斷程序應用實例6.3MC9S12系列中斷程序應用實例6.3MC9S12系列中斷程序應用實例6.3MC9S12系列中斷程序應用實例6.3MC9S12系列中斷程序應用實例

還有另外一種方法實現(xiàn)中斷服務程序的編寫,這里以CodeWarrior為開發(fā)工具介紹。在CodeWarrior工程中,可以找到擴展名是.prm的文件,在這個文件下定義中斷向量和中斷服務程序的名稱,這樣在編寫中斷服務程序時,就不用寫編號了。因為其他部分的程序實現(xiàn)方式和上面一樣,此處只介紹中斷服務程序的設計。7.1PWM模塊概述

脈沖寬度調制(PWM)是產(chǎn)生精確脈沖序列輸出和實現(xiàn)D/A轉換的有效方法,微控制器的脈寬調制模塊被廣泛應用于工業(yè)控制和新型消費機電產(chǎn)品中(如智能空調、節(jié)能冰箱、電動自行車等)。PWM信號通過軟件編程調節(jié)波形的占空比、周期和相位,能夠用于直流電動機調速、伺服電動機控制、D/A轉換器等應用。例如,電視機遙控部分普遍采用14位或16位的PWM產(chǎn)生調諧電壓;在無人自動駕駛汽車系統(tǒng)中,常用伺服電動機來控制方向盤,伺服電動機的旋轉角度與給定的PWM信號占空比一致,每個占空比數(shù)值都對應一個旋轉角度;在燈光亮度調節(jié)、直流電動機速度控制等方面,采用PWM信號能夠很容易實現(xiàn)。 MC9S12XS系列產(chǎn)生PWM信號的方法主要有兩種:利用輸出比較功能和MCU內(nèi)置的PWM模塊實現(xiàn)。利用輸出比較功能可以通過軟件編程設定輸出任意脈沖信號,但會占用CPU資源,而且不易產(chǎn)生精確的脈沖序列;而MCU內(nèi)部集成的PWM模塊專門用于輸出PWM信號,使用時極少占用CPU資源。7.2PWM模塊結構組成和特點

MC9S12XS128內(nèi)置的PWM模塊框圖如圖7.1所示。7.2PWM模塊概述

由圖7.1可知,MC9S12XS128的PWM模塊具有8路8位獨立PWM通道,通過相應設置也可以變?yōu)?個16位PWM通道,每個PWM通道由獨立運行的8位通道計數(shù)器PWMCNT、兩個比較寄存器為通道周期寄存器PWMPER和占空比寄存器PWMDTY等組成。通過對各寄存器的參數(shù)設置,確定PWM波形的輸出周期和占空比,另外還可以通過通道極性寄存器PWMPOL和居中對齊使能寄存器PWMCAE設置PWM輸出脈沖波形的極性和對齊方式。7.2PWM模塊概述PWM模塊具有以下基本特征:具有可編程周期和占空比的8個獨立PWM通道;每個PWM通道具有獨立的計數(shù)器;每個通道可編程允許/禁止PWM功能;每個通道可軟件選擇PWM脈沖極性;具有雙緩沖的周期和占空比寄存器,當?shù)竭_有效周期終點(PWM計數(shù)器到達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信號產(chǎn)生輸出。但是,由于PWMEx需要與時鐘源同步,直到PWM模塊時鐘的下一個周期到來,才能輸出正確的PWM波形。

當處于級聯(lián)模式時,8個8位PWM通道通過兩兩級聯(lián)構成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通道輸出高電平信號,當通道計數(shù)器PWMCNTx數(shù)值等于占空比寄存器PWMDTYx數(shù)值時翻轉為低電平信號;相反,如果PPOLx位為0,周期脈沖開始時PWM通道輸出低電平信號,當PWMCNTx數(shù)值等于PWMDTYx數(shù)值時翻轉為高電平信號,PWMPOL寄存器如圖7.3所示。7.3PWM模塊寄存器及設置

7.3.2PWM極性寄存器(PWMPOL)

讀:任何時刻;寫:任何時刻。

注意:PWMPOL寄存器中的PPOLx位可以在任何時刻進行寫入操作。如果正在產(chǎn)生PWM信號時要求改變信號極性,則PWM輸出脈沖在信號極性轉換過程中可能被截短或延長。 PPOLx:PWM通道x輸出波形極性位。 0表示PWM通道x在周期脈沖開始時輸出低電平,當?shù)竭_占空比計數(shù)值時翻轉為高電平; 1表示PWM通道x在周期脈沖開始時輸出高電平,當?shù)竭_占空比計數(shù)值時翻轉為低電平。7.3PWM模塊寄存器及設置 7.3.3PWM時鐘選擇寄存器(PWMCLK)

每一個PWM通道可以選擇兩個時鐘之一作為該通道的時鐘源。PWM時鐘選擇寄存器(PWMClockSelectRegister,PWMCLK)如圖7.4所示。 讀:任何時刻;寫:任何時刻。 注意:PWMCLK寄存器中的PCLKx位可以在任何時刻寫入。如果正在產(chǎn)生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寄存器的介紹詳見7.3.4節(jié)。ClockSA由ClockA通過PWM比例因子A寄存器(PWMSCLA)再次分頻得到,ClockSB由ClockB通過PWM比例因子B寄存器(PWMSCLB)再次分頻得到,PWMSCLA寄存器和PWMSCLB寄存器的介紹詳見7.3.7節(jié)和7.3.8節(jié)。7.3PWM模塊寄存器及設置 7.3.4PWM預分頻時鐘選擇寄存器(PWMPRCLK) 讀:任何時刻;寫:任何時刻。

注意:PWMPRCLK寄存器中的位可以在任何時刻寫入。如果正在產(chǎn)生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位通道計數(shù)器PWMCNTx只做加法計數(shù);當PWMCNTx計數(shù)器加法計數(shù)到通道占空比寄存器PWMDTYx中設置的數(shù)值時,PWM通道輸出波形發(fā)生變化;當PWMCNTx計數(shù)器加法計數(shù)到通道周期寄存器PWMPERx中設置的數(shù)值時,PWMCNTx清零,輸出波形電平發(fā)生變化,然后讀取PWMDTYx寄存器和PWMPERx寄存器中的數(shù)值作為下一次PWMCNTx加法計數(shù)參考使用。PWM通道計數(shù)器PWMCNTx介紹詳見7.3.9節(jié),PWM通道周期寄存器PWMPERx介紹詳見7.3.10節(jié),PWM通道占空比寄存器PWMDTYx介紹詳見7.3.11節(jié)。7.3PWM模塊寄存器及設置 7.3.5PWM居中對齊使能寄存器(PWMCAE) PWM居中對齊輸出波形如圖7.9所示。當使用居中對齊格式輸出時,8位計數(shù)器PWMCNTx既做加法計數(shù)器也能做減法計數(shù)器;當PWMCNTx計數(shù)器加法計數(shù)到PWMDTYx寄存器中設置的數(shù)值時,PWM通道輸出波形發(fā)生變化;當PWMCNTx計數(shù)器加法計數(shù)到PWMPERx寄存器中設置的數(shù)值時,PWMCNTx計數(shù)器會從加法計數(shù)器變?yōu)闇p法計數(shù)器;當PWMCNTx計數(shù)器開始減法計數(shù)到PWMDTYx寄存器中的數(shù)值時,PWM通道輸出波形再次發(fā)生變化;當PWMCNTx計數(shù)器中數(shù)值減到0時,PWMCNTx重新變?yōu)榧臃ㄓ嫈?shù)器,然后讀取PWMDTYx寄存器和PWMPERx寄存器中的數(shù)值作為下一次PWMCNTx計數(shù)參考使用。7.3PWM模塊寄存器及設置 7.3.6PWM控制寄存器(PWMCTL) PWM控制寄存器(PWMControlRegister,PWMCTL)如圖7.10所示。該寄存器用于PWM模塊的各種控制,其中包括4個級聯(lián)控制位,用于將一對8位PWM通道級聯(lián)成一個16位通道。當通道6和通道7級聯(lián)時,通道6的寄存器成為16位寄存器中的高8位字節(jié),通道7的寄存器為16位寄存器中的低8位字節(jié);當通道4和通道5級聯(lián)時,通道4的寄存器成為16位寄存器中的高8位字節(jié);當通道2和通道3級聯(lián)時,通道2的寄存器成為16位寄存器中的高8位字節(jié);當通道0和通道1級聯(lián)時,通道0的寄存器成為16位寄存器中的高8位字節(jié)。

讀:任何時刻;寫:任何時刻。7.3PWM模塊寄存器及設置 7.3.6PWM控制寄存器(PWMCTL) 注意:僅當需要級聯(lián)的兩個通道都被禁止輸出時,才可以設置PWMCTL寄存器中相應的控制位。

①CON67:通道6、通道7級聯(lián)位。 0表示通道6、7作為兩個獨立的8位PWM通道。 1表示8位PWM通道6、7級聯(lián)形成一個16位PWM通道。通道6的寄存器作為16位通道的高8位字節(jié),通道7作為低8位字節(jié),這時通道7的引腳用做16位PWM的信號輸出(端口PWM7),通道7的時鐘選擇控制位、極性控制位、輸出使能控制位、居中對齊使能位有效;通道6的相應寄存器控制位均無效。

②CON45:通道4、通道5級聯(lián)位。 0表示通道4、5作為兩個獨立的8位PWM通道。 1表示8位PWM通道4、5級聯(lián)形成一個16位PWM通道。通道4的寄存器作為16位通道的高8位字節(jié),通道5作為低8位字節(jié),這時通道5的引腳用做16位PWM的信號輸出(端口PWM5),通道5的時鐘選擇控制位、極性控制位、輸出使能控制位、居中對齊使能位有效;通道4的相應寄存器控制位均無效。7.3PWM模塊寄存器及設置 7.3.6PWM控制寄存器(PWMCTL)

③CON23:通道2、通道3級聯(lián)位。 0表示通道2、3作為兩個獨立的8位PWM通道。 1表示8位PWM通道2、3級聯(lián)形成一個16位PWM通道。通道2的寄存器作為16位通道的高8位字節(jié),通道3作為低8位字節(jié),這時通道3的引腳用做16位PWM的信號輸出(端口PWM3),通道3的時鐘選擇控制位、極性控制位、輸出使能控制位、居中對齊使能位有效;通道2的相應寄存器控制位均無效。

④CON01:通道0、通道1級聯(lián)位。 0表示通道0、1作為兩個獨立的8位PWM通道。 1表示8位PWM通道0、1級聯(lián)形成一個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通道級聯(lián)構成1個16位PWM通道,如圖7.11所示。7.3PWM模塊寄存器及設置 7.3.6PWM控制寄存器(PWMCTL) PSWAI:MCU等待工作模式下PWM停止位。使能該位,可以禁止預分頻器的時鐘輸入,降低MCU等待模式下的功耗。 0表示等待模式時,允許預分頻器時鐘輸入; 1表示等待模式時,禁止預分頻器時鐘輸入。 PFRZ:MCU凍結工作模式下PWM停止位,在凍結模式下,PWM通道計數(shù)器PWMCNTx停止計數(shù)。 0表示凍結模式時,允許凍結PWM工作; 1表示凍結模式時,禁止預分頻器時鐘輸入。7.3PWM模塊寄存器及設置 7.3.7PWM比例因子A寄存器(PWMSCLA) PWM比例因子A寄存器(PWMScaleARegister,PWMSCLA)是可編程分頻寄存器,如圖7.12所示,用于將ClockA進行分頻,產(chǎn)生ClockSA。通過將ClockA除以PWMSCLA寄存器中的值,再除以2,產(chǎn)生ClockSA信號,公式為 讀:任何時刻;寫:任何時刻(將導致分頻計數(shù)器裝載新的PWMSCLA比例因子值)。 注意:PWMSCLA默認值為256,當PWMSCLA=$00時,此時ClockSA等于ClockA的頻率除以512。7.3PWM模塊寄存器及設置 7.3.8PWM比例因子B寄存器(PWMSCLB) PWM比例因子B寄存器(PWMScaleBRegister,PWMSCLB)是可編程分頻寄存器,如圖7.13所示,用于將ClockB進行分頻,產(chǎn)生ClockSB。通過將ClockB除以PWMSCLB寄存器中的值,再除以2,產(chǎn)生ClockSB信號,其公式為 讀:任何時刻;寫:任何時刻(將導致分頻計數(shù)器裝載新的PWMSCLB比例因子值)。 注意:PWMSCLB默認值為256,當PWMSCLB=$00時,此時ClockSB等于ClockB的頻率除以512。7.3PWM模塊寄存器及設置 7.3.9PWM通道計數(shù)器(PWMCNT)

每個通道有一個專用的8位加/減計數(shù)器PWMCNT(PWMChannelCounterRegisters,PWMCNT),計數(shù)器PWMCNTx的頻率和時鐘源頻率相關??梢栽谌魏螘r刻讀取PWMCNTx中數(shù)值,而不影響PWMCNTx和PWM通道的工作。當處于左對齊輸出模式時,PWMCNTx從0開始做加法計數(shù),直到增加到PWM周期寄存器PWMPERx1的值;當處于居中對齊輸出模式時,PWMCNTx從0開始進行加法計數(shù),直到增加到PWMPERx的值,然后再進行減法,直至回到0。PWMCNTx寄存器如圖7.14所示。7.3PWM模塊寄存器及設置 7.3.9PWM通道計數(shù)器(PWMCNT) 向計數(shù)器PWMCNTx寫入任何值將導致其復位到$00,PWMCNTx計數(shù)器方向設置為向上計數(shù),從周期寄存器PWMPERx和占空比寄存器PWMDTYx的緩沖器中得到周期和占空比的數(shù)值,然后根據(jù)極性選擇位PPOLx改變輸出電平。當相應的PWM通道被禁止(PWMEx=0)時,PWMCNTx計數(shù)器不工作;當相應的PWM通道使能時(PWMEx=1),計數(shù)器以PWMCNTx中的值作為初始值開始計數(shù)。 在16位級聯(lián)模式下,無論對16位計數(shù)器訪問,還是對高8位和低8位計數(shù)器分開訪問,都會使計數(shù)器PWMCNTx復位清零。讀取16位計數(shù)器必須用16位方式訪問,以保持數(shù)據(jù)的一致性,高8位和低8位計數(shù)器分別讀取會得到不正確的數(shù)值。

讀:任何時刻;寫:任何時刻。

注意:當通道使能時寫PWMCNTx可能會產(chǎn)生一個無效的PWM周期脈沖。7.3PWM模塊寄存器及設置 7.3.10PWM通道周期寄存器(PWMPER) 每個PWM通道有一個獨立的周期寄存器PWMPER(PWMChannelPeriodRegister),該寄存器中的值決定相應PWM通道的周期,如圖7.15所示。 周期寄存器PWMPERx中的數(shù)值是雙緩沖的,因此,當PWMPERx寄存器中的數(shù)值改變后,并不立即生效,直到下列事件中的一個發(fā)生:

當前有效周期結束;

寫計數(shù)器PWMCNTx(計數(shù)器復位到$00);

通道被禁止。

因此,PWM將總是輸出以前的波形或新波形,而不是兩者之間的某種無效波形。如果PWM通道被禁止,寫入周期寄存器的數(shù)值將直接進入鎖存器和緩沖器。7.3PWM模塊寄存器及設置 7.3.10PWM通道周期寄存器(PWMPER)

讀:任何時刻;寫:任何時刻。

注意:讀PWMPERx寄存器返回最新寫入的數(shù)值,而不是返回當前有效的周期值。 PWM輸出波形的周期計算方法是,用選擇的時鐘周期(ClockA、ClockB、ClockSA或ClockSB)乘以周期寄存器PWMPERx中的數(shù)值。

左對齊方式輸出(CAEx=0): PWMx周期=通道時鐘周期×PWMPERx

居中對齊方式輸出(CAEx=1): PWMx周期=通道時鐘周期×2×PWMPERx7.3PWM模塊寄存器及設置 7.3.11PWM通道占空比寄存器(PWMDTY) 每個PWM通道有一個獨立的占空比寄存器PWMDTY(PWMChannelDutyRegister),該寄存器中的值決定相應PWM通道的占空比,如圖7.16所示。 占空比寄存器PWMDTYx中的數(shù)值是雙緩沖的,因此,當PWMDTYx寄存器中的數(shù)值改變后,并不立即生效,直到下列事件中的一個發(fā)生:

當前有效周期結束;

寫計數(shù)器PWMCNTx(計數(shù)器復位到$00);

通道被禁止。

因此,PWM將總是輸出以前的波形或新波形,而不是兩者之間的某種無效波形。如果PWM通道被禁止,寫入占空比寄存器的數(shù)值將直接進入鎖存器和緩沖器。7.3PWM模塊寄存器及設置 7.3.11PWM通道占空比寄存器(PWMDTY)

讀:任何時刻;寫:任何時刻。

注意:讀PWMDTYx寄存器返回最新寫入的數(shù)值,而不是返回當前有效的占空比值。 PWMDTYx寄存器中數(shù)值的含義,根據(jù)極性控制位PPOLx的不同而不同。如果PPOLx位是1,PWM輸出波形開始為高電平,當PWMCNTx計數(shù)器數(shù)值等于PWMDTYx寄存器數(shù)值時變?yōu)榈碗娖?,此時PWMDTYx寄存器中的數(shù)值代表了高電平的持續(xù)時間;如果PPOLx位是0,PWM輸出波形開始為低電平,當PWMCNTx計數(shù)器數(shù)值等于PWMDTYx寄存器數(shù)值時變?yōu)楦唠娖剑藭rPWMDTYx寄存器中的數(shù)值代表了低電平的持續(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引腳上的電平變化將產(chǎn)生中斷并置位PWMIF。向PWMIF位寫1操作實現(xiàn)清零,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ā)事件)之后,當計數(shù)器返回0時,PWM通道才開始運行。如果PWM7ENA位被復位到0,只有當計數(shù)器返回到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輸出實現(xiàn)D/A轉換功能,通過調節(jié)PWM輸出波形占空比,控制LED燈的亮度,硬件連接如圖7.20所示,PWM輸出波形用做D/A輸出時,最簡單的方法就是使用一階低通濾波器(如圖7.20中R1、C1構成一階低通濾波器)對PWM信號濾波,為了保持輸出電壓穩(wěn)定,要確保輸出阻抗盡可能大。為此,在低通濾波器后增加了電壓跟隨器(圖7.20中由LM324和R2構成)。軟件編程實現(xiàn)PWM輸出占空比不斷增大,可以觀察到LED燈的亮度不斷增加;之后PWM輸出占空比不斷減小,可以觀察到LED燈的亮度不斷降低。7.4PWM模塊應用實例程序清單:7.4PWM模塊應用實例程序清單:7.4PWM模塊應用實例程序清單:7.5智能車系統(tǒng)中PWM模塊的應用

在智能車競賽系統(tǒng)設計中,直流電動機和伺服電動機的控制涉及智能車的速度與方向控制,是智能車控制好壞兩大關鍵因素。鑒于篇幅有限,在此僅敘述運用MC9S12XS128的PWM模塊實現(xiàn)對直流電動機和伺服電動機的簡單控制應用,更詳細的速度控制算法和方向(角度)控制算法,請讀者參見相關參考文獻。7.5智能車系統(tǒng)中PWM模塊的應用

7.5.1應用PWM模塊控制直流電動機

直流電動機驅動是智能車前行的動力所在。要驅動、控制一個直流電動機需要設計直流電動機驅動電路,既可以使用分立的功率元件(如MOSFET)搭建驅動電路,也可以使用集成的直流電動機功率驅動芯片。在此,以Freescale公司的H橋功率驅動芯片MC33887為例,介紹應用PWM模塊控制直流電動機,其芯片內(nèi)部結構及引腳圖分別如圖7.21和圖7.22所示(芯片詳細資料請讀者參考MC33887數(shù)據(jù)手冊)。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橋的高邊工作電流值,實現(xiàn)對電動機的轉速和轉矩的閉環(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信號)輸出作用到控制電路板上的信號調制芯片,獲得一個直流偏置電壓。在伺服電動機的控制電路板上有一個內(nèi)部基準電路,該電路可以產(chǎn)生一個周期為20ms,寬度為1.5ms的基準信號,獲得的直流偏置電壓與電位器的當前電壓進行比較,產(chǎn)生一個輸出電壓差;輸出電壓差的正值或負值輸入到控制電路板上確定小型直流電動機的正轉或反轉。當小型直流電動機轉速一定時,通過級聯(lián)的變速齒輪組帶動可調電位器旋轉,最終使得輸出電壓差為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脈沖信號的占空比便能獲得不同的轉角,實現(xiàn)智能車系統(tǒng)的轉向控制功能。在此應用MC9S12XS128的PWM5模塊控制伺服電動機,伺服電動機的工作電源電壓是4.8~6.0V,為了提高智能車系統(tǒng)的轉向性能,在此使用最高工作電壓6.0V,原理圖如圖7.26所示。7.5智能車系統(tǒng)中PWM模塊的應用 7.5.2應用PWM模塊控制伺服電動機

有關PWM5的初始化代碼已經(jīng)在前面7.5.1節(jié)中給出,以下僅給出伺服電動機控制的相關代碼,即設置PWM的占空比值,能夠實現(xiàn)伺服電動機的相應轉向要求。8.2ATD模塊結構組成和特點 MC9S12XS128內(nèi)置的ATD模塊如圖8.1所示。8.2ATD模塊結構組成和特點ATD模塊具有以下基本特征:

8位/10位/12位可選轉換精度;停止模式下轉換使用內(nèi)部時鐘;轉換完成后為低功耗狀態(tài);自動和可編程數(shù)值比較,可設定大于或者小于等于設定值時中斷申請;可編程采樣時間;左對齊/右對齊轉換數(shù)值;外部觸發(fā)功能;轉換完成中斷申請;16路模擬輸入通道多路開關;可實現(xiàn)VRH、VRL和(VRH+VRL)/2特殊轉換;轉換序列長度為1~16;連續(xù)轉換模式;多通道掃描功能;外部觸發(fā)功能可配置為AD通道或4個外部附加觸發(fā)輸入端,外部觸發(fā)源可選擇片外或片內(nèi)信號。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數(shù)據(jù)手冊。如果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表示某通道采樣前,內(nèi)部采樣電容會放電。這會增加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:停止模式下內(nèi)部時鐘位。該位使能停止模式下的AD轉換。當進入停止模式且ICLKSTP=1時,ATD轉換時鐘自動切換到內(nèi)部時鐘ICLK。當前轉換序列將不受影響地繼續(xù)轉換,轉換速率將從預分頻總線頻率變?yōu)镮CLK頻率。ICLK頻率下,ATDCTL4寄存器中的PRS4~PRS0預分頻因子無效。停止模式下的AD轉換,外部觸發(fā)將不工作;自動比較中斷或序列完成中斷用于軟件中斷處理AD采樣值。從運行模式轉換到停止模式期間,或者從停止模式轉換到運行模式期間,轉換結果不會寫入結果寄存器,不置位CCF標志位且不進行比較處理。停止模式下且ICLKSTP=1時,脫離停止模式需要有ATDCLK切換回總線時鐘的ATD停止恢復時間tATDSTPRCV,此時間內(nèi),不能訪問ATD寄存器。 0表示進入停止模式時如果AD轉換序列正在進行,則中止當前轉換序列。退出停止模式時AD轉換自動重啟; 1表示停止模式下AD轉換使用內(nèi)部時鐘(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某通道,則使能該通道的數(shù)字輸入緩沖功能。外部觸發(fā)允許與外部事件實現(xiàn)同步轉換。停止模式下的AD轉換,外部觸發(fā)不工作。 0表示禁止外部觸發(fā); 1表示允許外部觸發(fā)。ASCIE:ATD轉換序列完成中斷使能位。該位使能,當SCF置位時,則ATD轉換序列完成后將產(chǎn)生中斷請求。 0表示禁止ATD轉換序列完成產(chǎn)生中斷請求;1表示允許ATD轉換序列完成產(chǎn)生中斷請求。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:結果寄存器數(shù)據(jù)對齊方式選擇位。該位確定結果寄存器中轉換數(shù)據(jù)的對齊格式,轉換結果數(shù)據(jù)總是無符號。 0表示結果寄存器中的數(shù)據(jù)格式左對齊; 1表示結果寄存器中的數(shù)據(jù)格式右對齊。

表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轉換開始和結束時,轉換計數(shù)器不復位,轉換結果被依次存放在結果寄存器。連續(xù)轉換序列模式(SCAN=1),到達最后結果寄存器時,結果寄存器計數(shù)器將返轉。轉換計數(shù)器值(ATDSTAT0寄存器中的CC3~CC0)確定當前轉換結果存放的相應結果寄存器,結果寄存器保存的有效數(shù)據(jù)可查詢轉換完成標志位獲悉。 FIFO模式下,中止當前轉換或開始新轉換將清除轉換計數(shù)器。ATDCTL5寄存器寫操作,新轉換序列的第1個轉換結果,總是放入第1個結果寄存器ATDDR0。

如果FIFO位為1,禁用結果寄存器自動比較功能,ATD模塊工作方式如同ACMPIE=0,CMPEn=0一樣。 0表示轉換結果根據(jù)選擇的轉換序列長度放入相應結果寄存器; 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)

溫馨提示

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

評論

0/150

提交評論