第6章PWM波形发生器PWM波形的产生.docx

上传人:b****8 文档编号:11047165 上传时间:2023-02-24 格式:DOCX 页数:23 大小:535.07KB
下载 相关 举报
第6章PWM波形发生器PWM波形的产生.docx_第1页
第1页 / 共23页
第6章PWM波形发生器PWM波形的产生.docx_第2页
第2页 / 共23页
第6章PWM波形发生器PWM波形的产生.docx_第3页
第3页 / 共23页
第6章PWM波形发生器PWM波形的产生.docx_第4页
第4页 / 共23页
第6章PWM波形发生器PWM波形的产生.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

第6章PWM波形发生器PWM波形的产生.docx

《第6章PWM波形发生器PWM波形的产生.docx》由会员分享,可在线阅读,更多相关《第6章PWM波形发生器PWM波形的产生.docx(23页珍藏版)》请在冰豆网上搜索。

第6章PWM波形发生器PWM波形的产生.docx

第6章PWM波形发生器PWM波形的产生

第6章PWM波形的产生

6.1PWM波形发生器

6.1.1采用事件管理器模块中的通用定时器产生PWM波形

1.硬件连接图

+3.3V

29

2S

我波

PWMI戟波

186

129

RS

DIJU

111*,

42丽

PIMS320LF2407A

IMS320LF2407A

XTAI.IOJCIK'llPUrM/r]CMJ5/IOPB4XTAL2[■2f:

WM/]X,MI7K)PH5

4]

76

125

L4(J

 

 

图6.1利用通用定时器产生

PWM波形的硬件连接图

2.

工作原理

图6.2非对称PWM波形的产生

定时器的值

Tx^'v-'-'/Tx匚FP

低电平有效

高电平有效

定时周期

无效有效无效无效有效

-无效丄有效丄无效—无效匚有效

图6.3对称PWM波形的产生

6.1.2采用事件管理器模块中的比较单元产生PWM波形

1.硬件连接图

-3JiV

UL

具输出卞细常死肚控制向卩液

2.工作原理

—22

42

67

j1—

L16

133

*nonJI?

n打沖

"ijratF唤%、

XTALirLKIN

PWM7/IOPEIXTAL2PWM8/IOPE2PWM9/IOPE3PWMIO/IOPF4

PWM11/IOPE5卩WMI2/1OPE6

TMS320LF2407A

图6.4利用比较单元产生PWM波形的硬件连接图

1

1

S5(

1

128

3

41

66

76

95

125

140

117

123

124

lOpF

S

 

定时器周期

高电平有效

定时器的值

TxPmx二叶

低电平有效

 

图6.5带死区控制的非对称PWM波形的产生

定时器周期

r

高电平有效

图6.6带死区控制的对称PWM波形的产生

6.2PWM波形

 

6.2.1PWM控制技术

Uryr电■路

W

 

图6.7三相桥式PWM型逆变电路

622SPWM算法

2

I

2

7

j

u

 

6.3TMS320LF2407事件管理器模块的通用定时器与比较单元

6.3.1TMS320LF2407事件管理器模块的组成

6.3.2TMS320LF2407事件管理器模块的通用定时器

1.通用定时器的工作原理

2.通用定时器寄存器

(1)单个通用定时器控制寄存器TxCON(x=1,2或3,4)

(2)通用定时器控制寄存器(GPTCONA/B)

3.通用定时器的计数操作

(1)停止/保持模式

(2)连续增计数模式

(3)定向增/减计数模式

(4)连续增/减计数模式

4.通用定时器的中断实现

(1)所需的复位和中断向量定义文件“vectors.asm”

.ref

nothing

;直接返回的中断服务程序符号

.ref

c

int0

;复位向量符号

.sect

a

.vectors”

reset:

B

_c_int0

int1:

B

_nothing

int2:

B

_T1INT

int3:

B

_nothing

int4:

B

_nothing

int5:

B

_nothing

int6:

B

_nothing

(2)主程序

//该程序利用了定时器1的周期中断功能,每1ms产生一次中断

#include"register.h"//屏蔽中断程序voidinlinedisable(){

asm("setcINTM");}

//开全局中断程序voidinlineenable()

{

asm("clrcINTM");

}//系统初始化子程序

initial()

{

asm("setcSXM");asm("clrcOVM");asm("clrcCNF");

//符号位扩展有效//累加器中结果正常溢出//B0被配置为数据存储空间

*SCSR1=0x81FE;

*WDCR=0x0E8;

//CLKIN=6MHz,CLKOUT=4*CLKIN=24MHz

//不使能看门狗,因为SCSR2中的WDOVERRIDE

//即WD保护位复位后的缺省值为1,故可以用软件禁止看门狗

*IMR=0x0002;

*IFR=0x0FFFF;

//允许INT2中断

//清除全部中断标志,

"写1清0"

WSGR=0x00;

//禁止所有的等待状态

 

//定时器1的初始化子程序inttimer1int()

{

*EVAIMRA=*EVAIMRA|0x0080;//允许定时器1的周期中断

*EVAIFRA=*EVAIFRA&0x0080;//清除定时器1周期中断标志

*T1CON=0x160C;

*T1PER=0x0177;

//连续增计数模式,预分频值为64,使用内部时钟

//周期寄存器的值根据1ms延时和预分频值确定

*T1CNT=0x00;

//计数器清零

}

//定时器1周期中断服务程序

voidinterruptT1INT()

{

intflag;//定义一个局部变量flag=*EVAIFRA&0x0080;

if(flag!

=0x0080)

{

enable();return;

}

//允许全局中断

//如果不是定时器1周期中断,则直接返回

//若是定时器1周期中断定时器1的周期中断,则执行下面的程序

*T1CNT=0x00;

//定时器1的计数器重新赋0

 

*EVAIFRA=*EVAIFRA&0x0080;

enable();return;

}

//清除定时器1周期中断标志,否则以后的中断将被忽略

//允许全局中断,因为进了中断服务程序后全局中断会自动关闭//中断返回

//其它优先级的中断服务程序,虽然程序中已经禁止,但可能由于干扰

//会引起他们的执行,故该中断服务程序无额外操作,直接返回

voidinterruptnothing()

{enable();return;

}

//主程序

//允许全局中断,因一进中断服务程序后全局中断就自动关闭

//中断返回

main()

{

disable();initial();

timer1int();enable();

//初始化时禁止中断//系统初始化//定时器1的初始化//允许全局中断

*T1CON=*T1CON|0x0040;//启动Timer1while

(1)

{

}

}

//等待中断发生

 

6.3.3TMS320LF2407

事件管理器模块的比较单元

1.比较单元的的结构和工作原理

图6.12EVA比较单元结构框图

 

2.比较单元的寄存器

(1)比较控制寄存器A(COMCONA)

(2)比较控制寄存器B(COMCONB)

⑶比较方式控制寄存器A(ACTRA)

⑷比较方式控制寄存器B(ACTRB)

(5)死区控制寄存器A(DBTCONA)

(6)死区控制寄存器DBTCONB

3.用比较单元实现PWM

6.4

中断系统概述

中断响应过程

TMS320LF240X中断系统

6.4.1TMS320LF240X

6.4.2TMS320LF240X

1.中断的管理

2.

图6.19外设中断扩展模块图

3.中断向量

4.假(phantorn)中断向量

5.不可屏蔽中断(NMI)

6.可屏蔽中断的产生

7.

可屏蔽中断响应的流程

 

图6.20CPU响应外设中断的流程图

 

643TMS320LF240X

中断寄存器

 

1.CPU中断寄存器

(1)中断标志寄存器IFR

⑵CPU中断屏蔽寄存器(IMR)

2.外设中断寄存器

(1)

外设中断向量寄存器(

PIVR)

(2)

外设中断请求寄存器

0(PIRQR0)

(3)

外设中断请求寄存器

1(PIRQR1)

(4)

外设中断请求寄存器

2(PIRQR2)

(5)

外设中断应答寄存器

0(PIACKR0

(6)

外设中断应答寄存器

1(PIACKR1

(7)

外设中断应答寄存器

2(PIACKR2

外部中断控制寄存器

3.

6.5用C语言处理DSP中断

6.5.1通过软件识别中断标志的方法实现可屏蔽的中断

voidinterruptCAP4INT()

{

intflag;

flag=*EVBIFRC&0x01;//判断是否是CAP4INT

if(flag!

=0x01)

{

asm(“clrcINTM”);

return;

}

//如果是CAP4INT,则执行相应的中断服务程序

*EVBIFRC=*EVBIFRC*0xfe;//写“0”以清除CAP4INT中断标志

asm(“clrcINTM”);

return;

}

6.5.2通过外围中断向量寄存器PIVR的值实现可屏蔽的中断

voidinterruptGISR4()

{

switch(*PIVR)

{

case0x0036:

break;default:

break;

}

*EVBIFRC=*EVBIFRC*0xfe;asm(“clrcINTM”);

return;

//如果是中断CAP4INT,则执行相应的中断服务程序

//如果不是中断CAP4INT,则直接返回

//写“0”以清除CAP4INT中断标志//中断返回前开中断

//中断返回

6.6

1.所需的复位和中断向量定义文件“vectors.asm”

//该文件利用汇编语言代码定义了复位和中断向量

.ref_nothing;直接返回的中断服务程序符号

.ref_c_int0;复位向量符号

.sect".vectors"reset:

b_c_int0

int0:

b_nothing

int1:

b_nothing

int2:

b_T1CINT

;当发生INT2中断时,程序跳转至“T1CINT”所标志的中断服务程序int3:

b_nothing

PWM波形发生器程序

6.7

int4:

b

_nothing

int5:

b

_nothing

int6:

b

_nothing

2.

主程序

Pwm1.c

*EVAIFRC=*EVAIFRC|0xFFFF;

//位12~11=01,选择连续增/减计数模式

//位10~8=100,选择输入时钟预定标系数=16

//位6=0,禁止定时器的操作

//位5~4=00,选择内部CPU时钟

//位3~2=01,定时器比较寄存器的重装载条件:

当计数值是0

//或等于周期寄存器值时重装载

//位1=1,使能定时器的比较操作

//该中断服务程序主要是为了防止干扰,不做任何其它操作voidinterruptnothing()

{

return;//中断直接返回

}

voidinterruptT1CINT()

{

intflag;

flag=*EVAIFRA&0x0100;//判断是否是T1CINTif(flag!

=0x0100)

{

asm(“clrcINTM”);

return;

}

//如果是T1CINT,则执行相应的中断服务程序

*T1PR=input_carrier;//修改PWM波的载波周期,并存入T1PR*T1CMPR=input_pwm;//修改PWM波的有效脉宽周期,并存入T1CMPRasm(“clrcINTM”);

return;

}

//主程序

6.6.2基于通用定时器的PWM波形发生器程序分析

6.6.3基于比较单元的PWM波形发生器C语言主程序

1.所需的复位和中断向量定义文件“vectors.asm”//该文件利用汇编语言代码定义了复位和中断向量

reset:

b_c_int0

int0:

b_nothing

int1:

b_nothing

int2:

b_T3PINT

;当发生INT2中断时,程序跳转至“T3PINT”所标志的中断服务程序

int3:

b_nothing

int4:

b_nothing

int5:

b_nothing

int6:

b_nothing

2.主程序Pwm2.c

//屏蔽中断程序voidinlinedisable()

asm("setcINTM");

}//允许全局中断程序voidinlineenable()

{

asm(“clrcINTM”);

}//系统初始化子程序intinitial()

asm("setcSXM");

//符号位扩展有效

asm("clrcOVM");

//累加器中结果正常溢出

asm("clrcCNF");

//B0被配置为数据存储空间

*SCSR1=0x81FE;

//CLKIN=6MHz,CLKOUT=4*CLKIN=24M

*WDCR=0x0E8;

//不使能看门狗

*IMR=0x0000;

//禁止所有中断

*IFR=0x0FFFF;

//清除全部中断标志,“写1清0”

WSGR=0x00;

//禁止所有的等待状态

Hz

}

//EVB模块的PWM初始化程序

intpwminitial()

{

*MCRC=*MCRC|0x007E;//IOPE1~6被配置为基本功能方式,PWM7~12*EVAIFRA=*EVAIFRA|0xFFFF;//清EVA模块的全部中断标志寄存器*EVAIFRB=*EVAIFRB|0xFFFF;//防止系统误触发其它不需要的中断*EVAIFRC=*EVAIFRC|0xFFFF;

*ACTRB=0x0666;

//PWM12、10、8低有效,PWM11、9、7高有效

*DBTCONB=0x0F90;

//位11~8=1111,死区控制周期为15

//位7~5=100,输出PWM11、PWM12有死区控制,//PWM7~PWM10不进行死区控制

//位7~5=100,死区定时器的预分频系数是16

*CMPR4=0x1200;

//设置与PWM7、PWM8相应的CMPR4,占空比20%

*CMPR5=0x750;

*CMPR6=0x300;

//设置与PWM9、PWM10相应的CMPR5,占空比50%

//设置与PWM11、PWM12相应的CMPR6,占空比80%

*T3PER=0x1499;

//设置定时器3的周期寄存器,

//也即PWM载波周期为1500个定标器时钟周期

*COMCONB=0xA600;

*T3CNT=0x0000;

//使能比较操作

//清定时器3的计数寄存器

*GPTCONB=0x0041;

*EVAIMRA=0x0080;

//使能所有定时器的比较输出

//定时器3的比较输出低有效

//仅使能EVB模块定时器3的周期中断T3PINT

*EVAIMRB=0x0000;

*EVAIMRC=0x0000;

*T3CON=0x1402;

//配置定时器3的控制寄存器

//位12~11=10,选择连续增计数模式

//位10~8=100,选择输入时钟预定标系数=16

//位6=0,禁止定时器的操作

//位5~4=00,选择内部CPU时钟

//位3~2=00,定时器比较寄存器的重装载条件:

//当计数值是0时重装载

//位1=1,使能定时器的比较操作

//该中断服务程序主要是为了防止干扰,不做任何其它操作voidinterruptnothing()

{

return;//中断直接返回

}

voidinterruptT3PINT()

{

intflag;

flag=*EVBIFRA&0x0080;//判断是否是T3PINT

if(flag!

=0x0080)

{

asm(“clrcINTM”);

return;

return;

}

//主程序main()

{

disable();

initial();

pwminitial();

enable();

*T3CON=*T3CON|0x0040;while

(1)

{

6.6.4

//全局中断禁止//系统初始化//PWM输出初始化//允许全局中断//启动定时器3

基于比较单元的PWM波形发生器程序分析

作业

6.2TMS320LF2407可通过事件管理器的哪些引脚实现PWM波形的输出?

6.4简述通用定时器4种工作方式的特点。

6.5阐述通用定时器输出PWM波形的过程。

6.6阐述比较单元输出PWM波形的过程。

6.9简述TMS320LF2407响应可屏蔽中断的过程。

6.10如何用C语言实现可屏蔽中断的响应?

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

当前位置:首页 > 人文社科 > 教育学心理学

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

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