北京市电子设计大赛一等奖Word文件下载.docx

上传人:b****6 文档编号:19954775 上传时间:2023-01-12 格式:DOCX 页数:14 大小:46.54KB
下载 相关 举报
北京市电子设计大赛一等奖Word文件下载.docx_第1页
第1页 / 共14页
北京市电子设计大赛一等奖Word文件下载.docx_第2页
第2页 / 共14页
北京市电子设计大赛一等奖Word文件下载.docx_第3页
第3页 / 共14页
北京市电子设计大赛一等奖Word文件下载.docx_第4页
第4页 / 共14页
北京市电子设计大赛一等奖Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

北京市电子设计大赛一等奖Word文件下载.docx

《北京市电子设计大赛一等奖Word文件下载.docx》由会员分享,可在线阅读,更多相关《北京市电子设计大赛一等奖Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

北京市电子设计大赛一等奖Word文件下载.docx

//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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1