<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MSP430定時(shí)器的PWM輸出

MSP430定時(shí)器的PWM輸出

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
定時(shí)器單片機常用的其本設備,用來(lái)產(chǎn)生精確計時(shí)或是其他功能;msp430的定時(shí)器不僅可以完成精確定時(shí),還能產(chǎn)生PWM波形輸出,和捕獲時(shí)刻值(上升沿或是下降沿到來(lái)的時(shí)候)。這里完成一個(gè)比較通用的PWM波形產(chǎn)生程序。

硬件介紹:MSP430系列單片機的TimerA結構復雜,功能強大,適合應用于工業(yè)控制,如數字化電機控制,電表和手持式儀表的理想配置。它給開(kāi)發(fā)人員提供了較多靈活的選擇余地。當PWM 不需要修改占空比和時(shí)間時(shí),TimerA 能自動(dòng)輸出PWM,而不需利用中斷維持PWM輸出。

本文引用地址:http://dyxdggzs.com/article/201611/316961.htm

MSP430F16x和MSP430F14x單片機內部均含有兩個(gè)定時(shí)器,TA和TB;TA有三個(gè)模塊,CCR0-CCR2;TB含有CCR0-CCR67個(gè)模塊;其中CCR0模塊不能完整的輸出PWM波形(只有三種輸出模式可用);TA可以輸出完整的2路PWM波形;TB可以輸出6路完整的PWM波形。

定時(shí)器的PWM輸出有有8種模式:

輸出模式0 輸出模式:輸出信號OUTx由每個(gè)捕獲/比較模塊的控制寄存器CCTLx中的OUTx位定義,并在寫(xiě)入該寄存器后立即更新。最終位OUTx直通。

輸出模式1 置位模式:輸出信號在TAR等于CCRx時(shí)置位,并保持置位到定時(shí)器復位或選擇另一種輸出模式為止。

輸出模式2 PWM翻轉/復位模式:輸出在TAR的值等于CCRx時(shí)翻轉,當TAR的值等于CCR0時(shí)復位。

輸出模式3 PWM置位/復位模式:輸出在TAR的值等于CCRx時(shí)置位,當TAR的值等于CCR0時(shí)復位。

輸出模式4 翻轉模式:輸出電平在TAR的值等于CCRx時(shí)翻轉,輸出周期是定時(shí)器周期的2倍。

輸出模式5復位模式:輸出在TAR的值等于CCRx時(shí)復位,并保持低電平直到選擇另一種輸出模式。

輸出模式6PWM翻轉/置位模式:輸出電平在TAR的值等于CCRx時(shí)翻轉,當TAR值等于CCR0時(shí)置位。

輸出模式7PWM復位/置位模式:輸出電平在TAR的值等于CCRx時(shí)復位,當TAR的值等于CCR0時(shí)置位。

下圖是增計數模式下的輸出波形(本程序使用的是增模式3和7):

計數模式:

增計數模式

捕獲/比較寄存器CCR0用作Timer_A增計數模式的周期寄存器,因為CCR0為16位寄存器,所以該模式適用于定時(shí)周期小于65 536的連續計數情況。計數器TAR可以增計數到CCR0的值,當計數值與CCR0的值相等(或定時(shí)器值大于CCR0的值)時(shí),定時(shí)器復位并從0開(kāi)始重新計數。

連續計數模式

在需要65 536個(gè)時(shí)鐘周期的定時(shí)應用場(chǎng)合常用連續計數模式。定時(shí)器從當前值計數到0FFFFH后,又從0開(kāi)始重新計數。

增/減計數模式

需要對稱(chēng)波形的情況經(jīng)??梢允褂迷?減計數模式,該模式下,定時(shí)器先增計數到CCR0的值,然后反向減計數到0。計數周期仍由CCR0定義,它是CCR0計數器數值的2倍。

TA定時(shí)器有比較、捕獲兩種工作方式;比較可以產(chǎn)生PWM波形等,捕獲可以精確的測量時(shí)間;這里用的是比較輸出。

硬件介紹就這么多了,其他的可以參考msp430x1xx_family_users_guide(用戶(hù)指南)。

程序實(shí)現:

本程序是直接從msp430f42x移植的,只改動(dòng)了端口就能正常使用了。由此,430的模塊在不同的系列中是通用的,有關(guān)寄存器是一樣的;只是也許外部端口不太一樣。

程序初始化部分:完成TA相關(guān)寄存器的初始化。

char TAPwmInit(char Clk,char Div,char Mode1,char Mode2){TACTL = 0;                  //清除以前設置TACTL |= MC_1;              //定時(shí)器TA設為增計數模式  switch(Clk)                 //選擇時(shí)鐘源{ case A: case a:  TACTL|=TASSEL_1; break;    //ACLKcase S: case s:  TACTL|=TASSEL_2; break;    //SMCLKcase E:            TACTL|=TASSEL_0; break;    //外部輸入(TACLK)case e:            TACTL|=TASSEL_3; break;    //外部輸入(TACLK取反)default :  return(0);                           //參數有誤} switch(Div)                 //選擇分頻系數{ case 1:   TACTL|=ID_0; break;   //1case 2:   TACTL|=ID_1; break;   //2case 4:   TACTL|=ID_2; break;   //4case 8:   TACTL|=ID_3; break;   //8default :  return(0);           //參數有誤} switch(Mode1)               //設置PWM通道1的輸出模式。{ case P:case p:          //如果設置為高電平模式TACCTL1 = OUTMOD_7;     //高電平PWM輸出P1SEL |= BIT2;          //從P1.2輸出 (不同型號單片機可能不一樣)P1DIR |= BIT2;          //從P1.2輸出 (不同型號單片機可能不一樣)              break;case N:case n:          //如果設置為低電平模式          TACCTL1 = OUTMOD_3;     //低電平PWM輸出P1SEL |= BIT2;          //從P1.2輸出 (不同型號單片機可能不一樣) P1DIR |= BIT2;          //從P1.2輸出 (不同型號單片機可能不一樣)                break; case 0:case 0:            //如果設置為禁用          P1SEL &= ~BIT2;         //P1.2恢復為普通IO口              break;                 default :  return(0);       //參數有誤} switch(Mode2)                   //設置PWM通道1的輸出模式。{ case P:case p:          //如果設置為高電平模式TACCTL2 =OUTMOD_7;      //高電平PWM輸出P1SEL |= BIT3;          //從P1.3輸出 (不同型號單片機可能不一樣)P1DIR |= BIT3;          //從P1.3輸出 (不同型號單片機可能不一樣)break;case N:case n:          //如果設置為低電平模式          TACCTL2 =OUTMOD_3;      //低電平PWM輸出P1SEL |= BIT3;          //從P1.3輸出 (不同型號單片機可能不一樣)  P1DIR |= BIT3;          //從P1.3輸出 (不同型號單片機可能不一樣)              break; case 0:case 0:            //如果設置為禁用          P1SEL &= ~BIT3;         //P1.3恢復為普通IO口              break;                 default :  return(0);       //參數有誤}    return(1);  }
主要是設置TACTL寄存器,讓TA工作于增模式,設置時(shí)鐘源和分頻;CCTLx設置對應的輸出模式;并且打開(kāi)相應端口的第二功能。

設置周期函數:設置PWM波形的周期,單位是多少個(gè)TACLK周期。

void TAPwmSetPeriod(unsigned int Period){TACCR0 = Period;}

工作于增模式時(shí),TA計數到TACCR0,設CCR0就完成了周期的設置。

設置占空比:設置TA的PWM輸出的有效電平的時(shí)間。

void TAPwmSetDuty(char Channel,unsigned int Duty){switch(Channel){case 1: TACCR1=Duty; break; case 2: TACCR2=Duty; break;    }}

根據參數分別設置每一路的參數。

設置占空比,用千分比設置:

* 入口參數:Channel: 當前設置的通道號  1/2Percent: PWM有效時(shí)間的千分比 (0~1000) * 出口參數:無(wú)* 說(shuō)    明: 1000=100.0%  500=50.0% ,依次類(lèi)推        * 范    例: TAPwmSetPermill(1,300)設置PWM通道1方波的占空比為30.0%TAPwmSetPermill(2,825)設置PWM通道2方波的占空比為82.5%*/void TAPwmSetPermill(char Channel,unsigned int Percent){unsigned long int Period;unsigned int Duty;Period = TACCR0;Duty = Period * Percent / 1000;TAPwmSetDuty(Channel,Duty);}

這個(gè)函數用千分比來(lái)設置PWM輸出的有效時(shí)間。方便程序的使用。

有關(guān)定時(shí)器,TI提供的大量的例程,這些歷程都很簡(jiǎn)潔、清晰。需要其他功能可以自己根據例程編寫(xiě)對應的程序。程序實(shí)現就這么多了,下面說(shuō)下本程序的使用方法。

使用示例:

使用方式:依然是在工程中加入c文件;文件包含h頭文件;然后就可以正常使用本函數了。詳細參考示例工程和main.c。

main主要程序如下:

#include "msp430x16x.h"     //430寄存器頭文件#include "TAPwm.h"          //TA PWM輸出程序庫頭文件void main(){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;ClkInit();TAPwmInit(A,1,P,P);   //將定時(shí)器TA初始化成為PWM發(fā)生器//時(shí)鐘源=ACLK ; 無(wú)分頻;  通道1和通道2均設為高電平模式。TAPwmSetPeriod(500);        //通道1/2的PWM方波周期均設為500個(gè)時(shí)鐘周期TAPwmSetDuty(1,200);        //1通道 有效200個(gè)時(shí)鐘周期TAPwmSetPermill(2,200);     //2通道 20.0%LPM0;}

本程序調用程序庫,產(chǎn)生兩路PWM波形。

TA的PWM輸出就到這兒了,如果需要更多路的PWM波,可以使用TB,他可以產(chǎn)生6路完整的PWM波形;可以參考本程序編寫(xiě)TB的波形輸出程序。



關(guān)鍵詞: MSP430定時(shí)器PWM輸

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>