摘要:一直说要调调430的PWM控制器,却放到今天才调。
要准备电设,还是先把程序贴出,后面再做补充吧!
#include <msp430x14x.h>
#define MODE MC_1 //定时器工作模式,stop,Up to CCR0,Continous up,Up/Down
#define OUTMODE1 OUTMOD_6 //PWM1-PWM6的输出模式,参考手册
#define OUTMODE2 OUTMOD_2
#define OUTMODE3 OUTMOD_6
#define OUTMODE4 OUTMOD_2
#define OUTMODE5 OUTMOD_6
#define OUTMODE6 OUTMOD_2
/*----------------------------------------------------------------------------------
函数名称:Open_PWMB
功 能:打开PWM模块——定时器B
参 数:无
返回值 :无
----------------------------------------------------------------------------------*/
void Open_PWMB(void)
{
TBCTL|=TBSSEL1 + ID_0 + MODE+ TBCLR ;
}
/*----------------------------------------------------------------------------------
函数名称:Close_PWMB
功 能:关闭PWM模块
参 数:无
返回值 :无
----------------------------------------------------------------------------------*/
void Close_PWMB(void)
{
TBCTL&=~(MC1|MC0);
}
/*----------------------------------------------------------------------------------
函数名称:Set_PWM_FreqB
功 能:设置PWM频率
参 数:Freq--PWM频率
返回值 :无
----------------------------------------------------------------------------------*/
void Set_PWM_FreqB(unsigned int Freq)
{
TBCCR0=(8000000/Freq)-1;
}
/*----------------------------------------------------------------------------------
函数名称:Set_ScaleB
功 能:设置PWM占空比
参 数:PWM_N--PWM引用的引脚分布于DB7-DB1,Scale--PWM占空比
返回值 :无
----------------------------------------------------------------------------------*/
void Set_ScaleB(unsigned char PWM_N,unsigned char Scale)
{
unsigned char temp;
temp=0x02;
if(temp&PWM_N) TBCCR1=(Scale*TBCCR0)/100; temp=temp<<1;
if(temp&PWM_N) TBCCR2=(Scale*TBCCR0)/100; temp=temp<<1;
if(temp&PWM_N) TBCCR3=(Scale*TBCCR0)/100; temp=temp<<1;
if(temp&PWM_N) TBCCR4=(Scale*TBCCR0)/100; temp=temp<<1;
if(temp&PWM_N) TBCCR5=(Scale*TBCCR0)/100; temp=temp<<1;
if(temp&PWM_N) TBCCR6=(Scale*TBCCR0)/100; temp=temp<<1;
}
/*----------------------------------------------------------------------------------
函数名称:Set_OUT_Mode
功 能:设置PWM输出模式
参 数:PWM_N--PWM引用的引脚分布于DB7-DB1
返回值 :无
----------------------------------------------------------------------------------*/
void Set_OUT_Mode(unsigned char PWM_N)
{
unsigned char temp;
temp=0x02;
if(temp&PWM_N) TBCCTL1|=OUTMODE1;temp=temp<<1;
if(temp&PWM_N) TBCCTL2|=OUTMODE2;temp=temp<<1;
if(temp&PWM_N) TBCCTL3|=OUTMODE3;temp=temp<<1;
if(temp&PWM_N) TBCCTL4|=OUTMODE4;temp=temp<<1;
if(temp&PWM_N) TBCCTL5|=OUTMODE5;temp=temp<<1;
if(temp&PWM_N) TBCCTL6|=OUTMODE6;temp=temp<<1;
}
/*----------------------------------------------------------------------------------
函数名称:Setup_PWMB
功 能:启动PWM模块
参 数:无
返回值 :无
----------------------------------------------------------------------------------*/
void Setup_PWMB(unsigned char PWM_N,unsigned int Freq,unsigned char Scale)
{
P4SEL|=PWM_N; P4DIR|=PWM_N;
Set_PWM_FreqB(Freq);
Set_ScaleB(PWM_N,Scale);
Set_OUT_Mode(PWM_N);
Open_PWMB();
}