北京市电子设计大赛一等奖Word文件下载.docx
- 文档编号:19954775
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:14
- 大小:46.54KB
北京市电子设计大赛一等奖Word文件下载.docx
《北京市电子设计大赛一等奖Word文件下载.docx》由会员分享,可在线阅读,更多相关《北京市电子设计大赛一等奖Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
//TA1CCR1=500;
CCTL1=CCIE;
CCTL0=CCIE;
//CCR0interruptenabled
CCR0=1000;
CCR2=900;
TACTL=TASSEL_2+MC_1;
//P2.1波形输出
_EINT();
while
(1);
}
#pragmavector=TIMER0_A0_VECTOR
__interruptvoidTimer0_A0(void)//1.0shu
i++;
if(i>
=10000)
{i=0;
k++;
if(k>
=3)k=0;
}
#pragmavector=TIMER0_A1_VECTOR
__interruptvoidTimer0_A1(void)
if(k==0)TA1CCR1=91;
//三个占空比
if(k==1)TA1CCR1=281;
if(k==2)TA1CCR1=470;
电路仿真图:
/*需要调用的C文件
*TA_PWM.c
*
*Createdon:
2013-2-9
*Author:
Administrator
*/
msp430g2553.h"
#defineDEADTIME0//预设死区时间,以TA的clk为单位
/*******设定TA输出IO口,目前设定为MSP430G2553,20Pin封装无TA0.2********/
#defineTA01_SETP1SEL|=BIT2;
P1DIR|=BIT2//P1.6
#defineTA02_SETP3SEL|=BIT0;
P3DIR|=BIT0//P3.0
#defineTA11_SETP2SEL|=BIT1;
P2DIR|=BIT1//P2.1
#defineTA12_SETP2SEL|=BIT4;
P2DIR|=BIT4//P2.4
#defineTA01_OFFP1SEL&
=~BIT6;
//P1.6
#defineTA02_OFFP3SEL&
=~BIT0;
//P3.0
#defineTA11_OFFP2SEL&
=~BIT1;
//P2.1
#defineTA12_OFFP2SEL&
=~BIT4;
//P2.4
/****************************************************************************
*名称:
TA0_PWM_Init()
*功能:
TA0定时器作为PWM发生器的初始化设置函数
*入口参数:
Clk:
时钟源'
=SMCLK;
'
A'
=ACLK;
E'
=TACLK(外部输入);
e'
=TACLK(TACLK取反)
Div:
时钟分频系数:
1/2/4/8
Mode1:
通道1的输出模式'
设为超前PWM(模式7),'
B'
滞后PWM(模式3),'
D'
带死区增PWM(模式6),0=禁用
Mode2:
通道2的输出模式'
P'
滞后PWM(模式3),'
带死区减PWM(模式2),0=禁用
设置输出带死区控制的PWM时,两通道均需使用,且均为死区模式。
*出口参数:
1表示设置成功,0表示参数错误,设置失败。
*说明:
在调用PWM相关函数之前,需要调用该函数设置TA的模式和时钟源。
*范例:
TA0_PWM_Init('
'
)TA时钟设为ACLK,通道1和通道2均为超前PWM输出
4,'
)TA时钟设为SMCLK/4,通道1为死区增PWM、通道2为死区减PWM
0)TA时钟设为ACLK,通道1超前PWM输出,通道2不作TA用。
****************************************************************************/
charTA0_PWM_Init(charClk,charDiv,charMode1,charMode2)
TA0CTL=0;
//清除以前设置
switch(Mode1)//为定时器选择计数模式
{
case'
:
f'
//普通PWM
TA0CTL|=MC_1;
break;
//主定时器为增计数
case'
b'
TA0CTL|=MC_2;
d'
//死区PWM
TA0CTL|=MC_3;
//主定时器为增减计数
default:
return(0);
//其他情况都是设置参数有误,返回0
switch(Clk)//为定时器TA选择时钟源
a'
TA0CTL|=TASSEL_1;
//ACLK
s'
TA0CTL|=TASSEL_2;
//SMCLK
TA0CTL|=TASSEL_0;
//外部输入(TACLK)
TA0CTL|=TASSEL_3;
//外部输入(TACLK取反)
//设置参数有误,返回0
switch(Div)//为定时器TA选择分频系数
case1:
TA0CTL|=ID_0;
//1
case2:
TA0CTL|=ID_1;
//2
case4:
TA0CTL|=ID_2;
//4
case8:
TA0CTL|=ID_3;
//8
//设置参数有误,返回0
switch(Mode1)//设置PWM通道1的输出模式。
TA0CCTL1=OUTMOD_7;
TA01_SET;
TA0CCTL1=OUTMOD_3;
case'
TA0CCTL1=OUTMOD_6;
TA01_SET;
break;
0'
case0:
//如果设置为禁用
TA01_OFF;
//TA0.1恢复为普通IO口
//设置参数有误,返回0
switch(Mode2)//设置PWM通道2的输出模式。
TA0CCTL2=OUTMOD_7;
TA02_SET;
TA0CCTL2=OUTMOD_3;
TA0CCTL2=OUTMOD_2;
TA02_SET;
//如果设置为禁用
TA02_OFF;
break;
//设置参数有误,返回0
return
(1);
TA0_PWM_SetPeriod()
设置PWM发生器的周期
Channel:
TA0=0,TA1=1
*Period:
周期(0~65535)时钟个数
1:
设置成功0:
设置失败
普通PWM与带死区PWM周期相差一倍
TA0_PWM_SetPeriod(500)设置PWM方波周期为500或1000个时钟周期
charTA0_PWM_SetPeriod(unsignedintPeriod)
if(Period>
65535)return(0);
TA0CCR0=Period;
TA0_PWM_SetPermill()
设置PWM输出的占空比(千分比)
当前设置的通道号1/2
Percent:
PWM高电平有效时间的千分比(0~1000),
1设置成功,0设置失败
*说明:
1000=100.0%500=50.0%,依次类推。
死区模式时,两channel同时设定。
*范例:
TA0_PWM_SetPermill(1,300)设置PWM通道1方波的占空比为30.0%
TA0_PWM_SetPermill(2,,825)设置PWM通道2方波的占空比为82.5%
charTA0_PWM_SetPermill(charChannel,unsignedlongintPercent)
unsignedcharMod=0;
switch(Channel)//先判断出通道的工作模式
{
Mod=(TA0CCTL1&
0x00e0)>
>
5;
//读取输出模式,OUTMOD0位于5-7位
Mod=(TA0CCTL2&
//读取输出模式,OUTMOD1位于5-7位
default:
}
switch(Mod)//根据模式设定TACCRx
case6:
/**死区模式2,6时,需要判断修正死区时间,且同时设定TA0CCR1/2的值*/
if((1000-2*Percent)<
=DEADTIME)//预留死区时间
Percent=(1000-DEADTIME)/2;
TA0CCR1=Percent*TA0CCR0/1000;
TA0CCR2=TA0CCR0-TA0CCR1;
case7:
if(Percent>
1000)Percent=1000;
if(Channel==1)TA0CCR1=Percent*TA0CCR0/1000;
if(Channel==2)TA0CCR2=Percent*TA0CCR0/1000;
case3:
//占空比一律为正脉宽,所以需要TA0CCR0减去占空比
if(Channel==1)TA0CCR1=TA0CCR0-Percent*TA0CCR0/1000;
if(Channel==2)TA0CCR2=TA0CCR0-Percent*TA0CCR0/1000;
default:
return
(1);
/*************TA1*******************/
TA1_PWM_Init()
TA1定时器作为PWM发生器的初始化设置函数
charTA1_PWM_Init(charClk,charDiv,charMode1,charMode2)
TA1CTL=0;
switch(Mode1)//为定时器选择计数模式
//普通PWM
TA1CTL|=MC_1;
//主定时器为增计数
//死区PWM
TA1CTL|=MC_3;
//主定时器为增减计数
//其他情况都是设置参数有误,返回0
TA1CTL|=TASSEL_1;
TA1CTL|=TASSEL_2;
TA1CTL|=TASSEL_0;
//外部输入(TACLK)
TA1CTL|=TASSEL_3;
//外部输入(TACLK取反)
TA1CTL|=ID_0;
TA1CTL|=ID_1;
TA1CTL|=ID_2;
TA1CTL|=ID_3;
TA1CCTL1=OUTMOD_7;
TA11_SET;
TA1CCTL1=OUTMOD_3;
TA1CCTL1=OUTMOD_6;
TA11_SET;
TA11_OFF;
//TA0.1恢复为普通IO口
TA1CCTL2=OUTMOD_7;
TA12_SET;
TA1CCTL2=OUTMOD_3;
TA1CCTL2=OUTMOD_2;
TA12_SET;
TA12_OFF;
TA1_PWM_SetPeriod()
TA1_PWM_SetPeriod(500)设置PWM方波周期为500或1000个时钟周期
charTA1_PWM_SetPeriod(unsignedintPeriod)
TA1CCR0=Period;
TA1_PWM_SetPermill(1,300)设置PWM通道1方波的占空比为30.0%
TA1_PWM_SetPermill(2,,825)设置PWM通道2方波的占空比为82.5%
charTA1_PWM_SetPermill(charChannel,unsignedlongintPercent)
unsignedcharMod;
switch(Channel)///先判断出通道的工作模式
Mod=(TA1CCTL1&
Mod=(TA1CCTL2&
/**死区模式2,6时,需要判断修正死区时间,且同时设定TA1CCR1/2的值*/
if((100
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京市 电子设计 大赛 一等奖