msp430的定時器主要是指基本定時器,看門狗定時器和TA\TB定時器,兩種定時器從功能和用法的角度基本相似,TB功能更為強大,有7個CCR0寄存器,即可輸出六路PWM,在做三相逆變的時候,需要六路每路相差60°的spwm波,就是用TB來發生的。
定時器的PWM發生利用的是比較模式,即在CCR0中儲存周期,CCR1中儲存一個小于CCR0的數字,CCR1/CCR0的比值即為占空比,其原理如下圖所示:
在一個16位計數器TAR增加的過程中,當達到CCR1前輸出高電平,達到CCR0值前輸出低電平,達到CCR0後,重新置位。
與TA相關的寄存器分為四類:
1、TACCRx(CCRx) //捕獲/比較寄存器
2、TACCTLx(CCTLx) //捕獲/比較控制寄存器
3、TACTL //控制寄存器
4、TAIV //中斷向量寄存器
該寄存器使用最簡單,可讀可寫,在PWM輸出中CCR0常用作周期,CCR1中用作占空比。,具體作用方法見7-2圖
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CAPTMOD1-0 CCIS1-0 SCS SCCIx CAP OUTMODx CCIEx CCIx OUT COV CCIFx
CAPTMOD1-0 :
選擇捕獲模式
00 禁止捕獲模式
01 上升沿捕獲
10 下降沿捕獲
11 上升沿與下降沿都捕獲
CCISI1-0 :
在捕獲模式中用來定提供捕獲事件的輸入端
00 選擇CCIxA
01 選擇CCIxB
10 選擇GND
11 選擇VCC
SCS:
選擇捕獲信号與定時器時鐘同步、異步關系
0 異步捕獲
1 同步捕獲
異步捕獲模式允許在請求時立即将CCIFG置位和捕獲定時器值,适用于捕獲信号的周期遠大于定時器時鐘周期的情況。但是,如果定時器時鐘和捕獲信号發生時間競争,則捕獲寄存器的值可能出錯。
在實際中經常使用同步捕獲模式,而且捕獲總是有效的。
SSCIx 比較相等信号EQUx将選擇中的捕獲、比較輸入信号CCIx(CCIxA,CCIxB,Vcc和GND)進行鎖存,然後可由SCCIx讀出。
CAP:
選擇捕獲模式還是比較模式。
0 比較模式
1 捕獲模式
注意:同時捕獲和捕獲模式選擇
如果通過捕獲比較寄存器CCTLx中的CAP使工作模式從比較模式變為捕獲模式,那麼不應同時進行捕獲;否則,在捕獲比較寄存器中的值是不可預料的,推薦的指令順序為:[1]修改控制寄存器,由比較模式換到捕獲模式。
[2]捕獲
OUTMODx :
選擇輸出模式
000 輸出
001 置位
010 PWM翻轉/複位
011 PWM置位/複位
100 翻轉/置位
101 複位
110 PWM翻轉/置位
111 PWM複位/置位
關于2和3的關系:
置位就是對寄存器的某一位寫"1"
複位就是使寄存器恢複到初始狀态值。
翻轉就是該位的電平由"1"變為"0"或者由"0"變為"1"
在實際應用中,一般使用3和6或者2和7輸出一對可以互補的pwm,其他幾種感覺實際應用不是很強,此外翻轉與置位感覺在此差别不大
同時關于輸出模式,有下圖
CCIx :
捕獲比較模的輸入信号
捕獲模式:由CCIS0和CCIS1選擇的輸入信号通過該位讀出。
比較模式:CCIx複位。
OUT :
輸出信号
0 輸出低電平
1 輸出高電平
如果OUTMODx選擇輸出模式0(輸出),則該位對應于輸入狀态。
COV :
捕獲溢出标志
0 輸出低電平
1 輸出高電平
[1]當CAP=0時,選擇比較模式。捕獲信号發生複位,沒有使COV置位的捕獲事件。
[2]當CAP=1時,選擇捕獲模式,如果捕獲寄存器的值被讀出再次發生捕獲事件,則COV置位。程式可檢測COV來斷定原值讀出前是否又發生捕獲事件。讀捕獲寄存器時不會使溢出标志複位,須用軟體複位。
CCIFGx:
捕獲比較中斷标志
捕獲模式:寄存器CCRx捕獲了定時器TAR值時置位。
比較模式:定時器TAR值等于寄存器CCRx值時置位。
1、在比較模式輸出pwm的情況下,一般對TACCTL設定的方法是CCTL0 = OUTMOD_2;而若另外一個IO口設定為CCTL0 = OUTMOD_6;則兩路為互補的,這在做逆變兩個導通情況需要正好相反的情況下是非常友善的,用這種方法,也隻要控制每兩路之間相差120°,每一個再輸出一個差180°的就可以輸出六路,進而實作三相逆變。
2、在捕獲模式下,一般設定的方法是
CCTL0 = CM_1 + SCS + CCIS_0 + CAP + CCIE; // Rising edge + CCI0A (P1.1) + Capture Mode + Interrupt
15--10 9 8 7 6 5 4 3 2 1 0
未用 SSEL1 SSEL0 ID1 ID0 MC1 MC0 未用 CLR TAIE TAIFG
SSEL1、SSEL0:
選擇定時器輸入分頻器的時鐘源
Timer_A時鐘源
SSEL1 SSEL0 輸入時鐘源 說明
0 0 TACLK 用特定的外部引腳信号
0 1 ACLK 輔助時鐘
1 0 SMCLK 子系統時鐘
1 1 INCLK 見器件說明
ID1,ID0:
輸入分頻選擇
00 不分頻
01 2分頻
10 4分頻
11 8分頻
MC1,MC0 :
計數模式控制位
00 停止模式
01 增計數模式
10 連續計數模式
11 增/減計數模式
CLR:
定時器清除位
POR或CLR置位時定時器和輸入分頻器複位。CLR由硬體自動複位,其讀出始終為0。定時器在下一個有效輸入沿開始工作。如果不是被清除模式控制暫停,則定時器以增計數模式開始工作。
TAIE :
定時器中斷允許位
0 禁止定時器溢出中斷
1 允許定時器溢出中斷
TAIFG:
定時器溢出标志位
增計數模式: 當定時器由CCR0計數到到0時,TAIFG置位。
連續計數模式:當定時器由0FFFFH計數到0時,TAIFG置位。
增/減計數模式:當定時器由CCR0減計數到0時,TAIFG置位。
TACTL設定起來比較簡單,而且變化不多,不論是捕獲還是比較模式相差都不很大,基本上都是隻要選擇一個時鐘源(TASSEL)和一個計數模式(MC),時鐘源一般會選擇TASSEL_2(SMCLK,在沒開XT2的情況下,預設800khz,在開XT2的情況下可達8MHZ),TASSEL_1(ACLK,一般不需分頻,則為32768HZ)。計數方式一般都會選擇增計數模式MC_1;少數情況下MC_3據說可用來生成對稱波,沒有試過,但是MC_3會把普通pwm的頻率減半.......(使我naive的以為語句要占運作時間,是以即使使用8M晶振也隻能達到4M頻率而已)
TA總結如是,TB隻是比他多了幾個CCR和CCLT而已,可以用來輸出6路pwm,總的評價一下定時器,主要用比較模式來生成PWM波(含SPWM波),捕獲模式用來測頻,測頻精度非常高,感覺基本能滿足鄙人要求....,以後在構架系統的時候,應該會利用TB來輸出PWM,用TA測頻及測相,在需要測頻較多的情況下使用TB測頻測相。P2.4-P2.7用來鍵盤,P5.2-P5.6用來液晶顯示,基本人機互動和系統需求應該都可以滿足