STC15W4K32S4-PWM-2014-8-11

更新时间:2024-01-02 07:53:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

STC15W4K32S4系列新增6通道增强型带死区控制高精度PWM波形发生器应用

STC15W4K32S4系列的单片机集成了一组(各自独立6路)增强型的PWM波形发生器。PWM波形发生器内部有一个15位的PWM计数器供6路PWM使用,用户可以设置每路PWM的初始电平。另外,PWM波形发生器为每路PWM又设计了两个用于控制波形翻转的计数器T1/T2,可以非常灵活的每路PWM的高低电平宽度,从而达到对PWM的占空比以及PWM的输出延迟进行控制的目的。由于6路PWM是各自独立的,且每路PWM的初始状态可以进行设定,所以用户可以将其中的任意两路配合起来使用,即可实现互补对称输出以及死区控制等特殊应用。

增强型的PWM波形发生器还设计了对外部异常事件(包括外部端口P2.4的电平异常、比较器比较结果异常)进行监控的功能,可用于紧急关闭PWM输出。PWM波形发生器还可在15位的PWM计数器归零时出发外部事件(ADC转换)。

STC15W4K32S4系列增强型PWM输出端口定义如下:

[PWM2:P3.7, PWM3:P2.1, PWM4:P2.2, PWM5:P2.3, PWM6:P1.6, PWM7:P1.7] 每路PWM的输出端口都可使用特殊功能寄存器位CnPINSEL分别独立的切换到第二组 [PWM2_2:P2.7, PWM3_2:P4.5, PWM4_2:P4.4, PWM5_2:P4.2, PWM6_2:P0.7, PWM7_2:P0.6]

所有与PWM相关的端口,在上电后均为高阻输入态,必须在程序中将这些口设置为双向口或强推挽模式才可正常输出波形 端口模式设置相关特殊功能寄存器

符号 P1M1 P1M0 P0M1 P0M0 P2M1 P2M0 P3M1 P3M0 P4M1 P4M0 描述 P1模式配置1 P1模式配置0 P0模式配置1 P0模式配置0 P2模式配置1 P2模式配置0 P3模式配置1 P3模式配置0 P4模式配置1 P4模式配置0 地址 B7 91H 92H 93H 94H 95H 96H B1H B2H B3H B4H 位地址及符号 B6 B5 B4 B3 B2 B1 B0 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 初始值 端口模式设置 PxM1 0 0 1 1 PxM0 0 1 0 1 模式 准双向口 强推挽输出 高阻输入 开漏输出 若需要正常使用与PWM相关的端口,则需要将相应的端口设置为准双向口或强推挽输出口

例如将端口均设置为准双向口的汇编代码如下:

增强型PWM波形发生器相关的特殊功能寄存器

符号 P_SW2 PWMCFG PWMCR PWMIF PWMFDCR PWMCH PWMCL PWMCKS PWM2T1H PWM2T1L PWM2T2H PWM2T2L PWM2CR PWM3T1H PWM3T1L PWM3T2H PWM3T2L PWM3CR PWM4T1H PWM4T1L PWM4T2H PWM4T2L PWM4CR PWM5T1H PWM5T1L PWM5T2H PWM5T2L PWM5CR MOV P0M0,#00H MOV P0M1,#00H MOV P1M0,#00H MOV P1M1,#00H MOV P2M0,#00H MOV P2M1,#00H MOV P3M0,#00H MOV P3M1,#00H MOV P4M0,#00H MOV P4M1,#00H

描述 端口配置寄存器 PWM配置 PWM控制 PWM中断标志 PWM外部异常控制 PWM计数器高位 PWM计数器低位 PWM时钟选择 PWM2T1计数高位 PWM2T1计数低位 PWM2T2计数高位 PWM2T2计数低位 PWM2控制 PWM3T1计数高位 PWM3T1计数低位 PWM3T2计数高位 PWM3T2计数低位 PWM3控制 PWM4T1计数高位 PWM4T1计数低位 PWM4T2计数高位 PWM4T2计数低位 PWM4控制 PWM5T1计数高位 PWM5T1计数低位 PWM5T2计数高位 PWM5T2计数低位 PWM5控制 地址 B7 BAH F1H F5H F6H F7H FFF0H FFF1H FFF2H FF00H FF01H FF02H FF03H FF04H FF10H FF11H FF12H FF13H FF14H FF20H FF21H FF22H FF23H FF24H FF30H FF31H FF32H FF33H FF34H - - - - - - - - - - - - - - - - - - - - - - - EAXSFR - ENPWM - - - 位地址及符号 B6 0 CBTADC ECBI CBIF - 初始值 B2 S4_S C4INI ENC4O C4IF FDCMP B5 0 C7INI ENC7O C7IF ENFD B4 0 C6INI ENC6O C6IF FLTFLIO B3 - C5INI ENC5O C5IF EFDI B1 S3_S C3INI ENC3O C3IF FDIO B0 S2_S C2INI ENC2O C2IF FDIF 0000,0000 0000,0000 0000,0000 x000,0000 xx00,0000 x000,0000 0000,0000 PWMCH[14:8] PWMCL[7:0] SELT2 PWM2T1H[14:8] PWM2T1L[7:0] PWM2T2H[14:8] PWM2T2L[7:0] - PWM2_PS EPWM2I EC2T2SI EC2T1SI PS[3:0] xxx0,0000 x000,0000 0000,0000 x000,0000 0000,0000 xxxx,0000 x000,0000 0000,0000 x000,0000 0000,0000 PWM3T1H[14:8] PWM3T1L[7:0] PWM3T2H[14:8] PWM3T2L[7:0] - PWM3_PS EPWM3I EC3T2SI EC3T1SI xxxx,0000 x000,0000 0000,0000 x000,0000 0000,0000 PWM4T1H[14:8] PWM4T1L[7:0] PWM4T2H[14:8] PWM4T2L[7:0] - PWM4_PS EPWM4I EC4T2SI EC4T1SI xxxx,0000 x000,0000 0000,0000 x000,0000 0000,0000 PWM5T1H[14:8] PWM5T1L[7:0] PWM5T2H[14:8] PWM5T2L[7:0] - PWM5_PS EPWM5I EC5T2SI EC5T1SI xxxx,0000 PWM6T1H PWM6T1L PWM6T2H PWM6T2L PWM6CR PWM7T1H PWM7T1L PWM7T2H PWM7T2L PWM7CR PWM6T1计数高位 PWM6T1计数低位 PWM6T2计数高位 PWM6T2计数低位 PWM6控制 PWM7T1计数高位 PWM7T1计数低位 PWM7T2计数高位 PWM7T2计数低位 PWM7控制 FF40H FF41H FF42H FF43H FF44H FF50H FF51H FF52H FF53H FF54H - PWM6T1H[14:8] PWM6T1L[7:0] x000,0000 0000,0000 x000,0000 0000,0000 - PWM6T2H[14:8] PWM6T2L[7:0] - - - - - PWM6_PS EPWM6I EC6T2SI EC6T1SI xxxx,0000 x000,0000 0000,0000 x000,0000 0000,0000 PWM7T1H[14:8] PWM7T1L[7:0] - PWM7T2H[14:8] PWM7T2L[7:0] - - - - PWM7_PS EPWM7I EC7T2SI EC7T1SI xxxx,0000

端口配置寄存器P_SW2

地址:BAH

B7 EAXSFR B6 0 B5 0 B4 0 B3 - B2 S4_S 初始值:0000,0000B

B1 S3_S B0 S2_S EAXSFR:扩展SFR访问控制使能

0:MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) 1:MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR)

注意:若要访问PWM在扩展RAM区的特殊功能寄存器,必须先将EAXSFR位置为1 BIT6,BIT5,BIT4为内部测试使用,用户必须填0

PWM配置寄存器PWMCFG

地址:F1H

B7 - B6 CBTADC B5 C7INI B4 C6INI B3 C5INI B2 C4INI 初始值:0000,0000B

B1 C3INI B0 C2INI CBTADC:PWM计数器归零时(CBIF==1时)触发ADC转换 0:PWM计数器归零时不触发ADC转换

1:PWM计数器归零时自动触发ADC转换。(注:前提条件是PWM和ADC必须被使能,即ENPWM==1,且ADCON==1)

CnINI:设置PWM输出端口的初始电平 0:PWM输出端口的初始电平为低电平 1:PWM输出端口的初始电平为高电平

PWM控制寄存器PWMCR

地址:F5H

B7 ENPWM B6 ECBI B5 ENC7O B4 ENC6O B3 ENC5O B2 ENC4O 初始值:0000,0000B

B1 ENC3O B0 ENC2O ENPWM:使能增强型PWM波形发生器 0:关闭PWM波形发生器

1:使能PWM波形发生器,PWM计数器开始计数 ECBI:PWM计数器归零中断使能位

0:关闭PWM计数器归零中断(CBIF依然会被硬件置位) 1:使能PWM计数器归零中断

ENCnO:PWM输出使能位 0:相应PWM通道的端口为GPIO

1:相应PWM通道的端口为PWM输出口,受PWM波形发生器控制

PWM中断标志寄存器PWMIF

地址:F6H

B7 - B6 CBIF B5 C7IF B4 C6IF B3 C5IF B2 C4IF 初始值:x000,0000B

B1 C3IF B0 C2IF CBIF:PWM计数器归零中断标志位

当PWM计数器归零时,硬件自动将此位置1。当ECBI==1时,程序会跳转到相应中断入口执行中断服务程序。需要软件清零。 CnIF:第n通道的PWM中断标志位

可设置在翻转点1和翻转点2触发CnIF(详见ECnT1SI和ECnT2SI)。当PWM发生翻转时,硬件自动将此位置1。当EPWMnI==1时,程序会跳转到相应中断入口执行中断服务程序。需要软件清零。

PWM外部异常控制寄存器PWMFDCR

地址:F7H

B7 - B6 - B5 ENFD B4 FLTFLIO B3 EFDI B2 FDCMP 初始值:xx00,0000B

B1 FDIO B0 FDIF ENFD:PWM外部异常检测功能控制位 0:关闭PWM的外部异常检测功能 1:使能PWM的外部异常检测功能

FLTFLIO:发生PWM外部异常时对PWM输出口控制位 0:发生WM外部异常时,PWM的输出口不作任何改变

1:发生WM外部异常时,PWM的输出口立即被设置为高阻输入模式。(注:只有ENCnO==1所对应的端口才会被强制悬空) EFDI:PWM异常检测中断使能位

0:关闭PWM异常检测中断(FDIF依然会被硬件置位) 1:使能PWM异常检测中断

FDCMP:设定PWM异常检测源为比较器的输出 0:比较器与PWM无关

1:当比较器的输出由低变高时,触发PWM异常 FDIO:设定PWM异常检测源为端口P2.4的状态 0:P2.4的状态与PWM无关

1:当P2.4的电平由低变高时,触发PWM异常 FDIF:PWM异常检测中断标志位

当发生PWM异常(比较器的输出由低变高或者P2.4的电平由低变高)时,硬件自动将此位置1。当EFDI==1时,程序会跳转到相应中断入口执行中断服务程序。需要软件清零。

PWM计数器的高字节PWMCH(高7位)

地址:FFF0H(XSFR)

B7 - B6 B5 B4 B3 PWMCH[14:8] B2 初始值:x000,0000B

B1 B0 PWM计数器的低字节PWMCL(低8位) 地址:FFF1H(XSFR)

B7 B6 B5 B4 PWMCL[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM计数器位一个15位的寄存器,可设定1~32767之间的任意值作为PWM的周期。PWM波形发生器内部的计数器从0开始计数,每个PWM时钟周期递增1,当内部计数器的计数值达到[PWMCH,PWMCL]所设定的PWM周期时,PWM波形发生器内部的计数器将会从0重新开始开始计数,硬件会自动将PWM归零中断中断标志位CBIF置1,若ECBI==1,程序将跳转到相应中断入口执行中断服务程序。

PWM时钟选择寄存器PWMCKS

地址:FFF2H(XSFR)

B7 - B6 - B5 - B4 SELT2 B3 B2 PS[3:0] 初始值:xxx0,0000B

B1 B0 SELT2:PWM时钟源选择

0:PWM时钟源为系统时钟经分频器分频之后的时钟 1:PWM时钟源为定时器2的溢出脉冲

PS[3:0]:系统时钟预分频参数。当SELT2==0时,PWM时钟为系统时钟/( PS[3:0]+1)

PWM2的第一次翻转计数器的高字节PWM2T1H

地址:FF00H(XSFR)

B7 - B6 B5 B4 B3 PWM2T1H[14:8] B2 初始值:x000,0000B

B1 B0 PWM2的第一次翻转计数器的低字节PWM2T1L 地址:FF01H(XSFR)

B7 B6 B5 B4 PWM2T1L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM2的第二次翻转计时器的高字节PWM2T2H 地址:FF02H(XSFR)

B7 - B6 B5 B4 B3 PWM2T2H[14:8] B2 初始值:x000,0000B

B1 B0 PWM2的第二次翻转计时器的低字节PWM2T2L 地址:FF03H(XSFR)

B7 B6 B5 B4 PWM2T2L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

PWM2的控制寄存器PWM2CR

地址:FF04H(XSFR)

B7 - B6 - B5 - B4 - B3 PWM2_PS B2 EPWM2I 初始值:xxxx,0000B

B1 EC2T2SI B0 EC2T1SI PWM2_PS:PWM2输出管脚选择位 0:PWM2的输出管脚为PWM2:P3.7

1:PWM2的输出管脚为PWM2_2:P2.7 EPWM2I:PWM2中断使能控制位 0:关闭PWM2中断

1:使能PWM2中断,当C2IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。 EC2T2SI:PWM2的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断

1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将跳转到相应中断入口执行中断服务程序。

EC2T1SI:PWM2的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断

1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将跳转到相应中断入口执行中断服务程序。

PWM3的第一次翻转计数器的高字节PWM3T1H

地址:FF10H(XSFR)

B7 - B6 B5 B4 B3 PWM3T1H[14:8] B2 初始值:x000,0000B

B1 B0 PWM3的第一次翻转计数器的低字节PWM3T1L 地址:FF11H(XSFR)

B7 B6 B5 B4 PWM3T1L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM3的第二次翻转计时器的高字节PWM3T2H 地址:FF12H(XSFR)

B7 - B6 B5 B4 B3 PWM3T2H[14:8] B2 初始值:x000,0000B

B1 B0 PWM3的第二次翻转计时器的低字节PWM3T2L 地址:FF13H(XSFR)

B7 B6 B5 B4 PWM3T2L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

PWM3的控制寄存器PWM3CR

地址:FF14H(XSFR)

B7 - B6 - B5 - B4 - B3 PWM3_PS B2 EPWM3I 初始值:xxxx,0000B

B1 EC3T2SI B0 EC3T1SI PWM3_PS:PWM3输出管脚选择位 0:PWM3的输出管脚为PWM3:P2.1 1:PWM3的输出管脚为PWM3_2:P4.5 EPWM3I:PWM3中断使能控制位 0:关闭PWM3中断

1:使能PWM3中断,当C3IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。 EC3T2SI:PWM3的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断

1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将跳转到相应中断入口执行中断服务程序。

EC3T1SI:PWM3的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断

1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将跳转到相应中断入口执行中断服务程序。

PWM4的第一次翻转计数器的高字节PWM4T1H

地址:FF20H(XSFR)

B7 - B6 B5 B4 B3 PWM4T1H[14:8] B2 初始值:x000,0000B

B1 B0 PWM4的第一次翻转计数器的低字节PWM4T1L 地址:FF21H(XSFR)

B7 B6 B5 B4 PWM4T1L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM4的第二次翻转计时器的高字节PWM4T2H 地址:FF22H(XSFR)

B7 - B6 B5 B4 B3 PWM4T2H[14:8] B2 初始值:x000,0000B

B1 B0 PWM4的第二次翻转计时器的低字节PWM4T2L 地址:FF23H(XSFR)

B7 B6 B5 B4 PWM4T2L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

PWM4的控制寄存器PWM4CR

地址:FF24H(XSFR)

B7 - B6 - B5 - B4 - B3 PWM4_PS B2 EPWM4I 初始值:xxxx,0000B

B1 EC4T2SI B0 EC4T1SI PWM4_PS:PWM4输出管脚选择位 0:PWM4的输出管脚为PWM4:P2.2 1:PWM4的输出管脚为PWM4_2:P4.4 EPWM4I:PWM4中断使能控制位 0:关闭PWM4中断

1:使能PWM4中断,当C4IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。 EC4T2SI:PWM4的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断

1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将跳转到相应中断入口执行中断服务程序。

EC4T1SI:PWM4的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断

1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将跳转到相应中断入口执行中断服务程序。

PWM5的第一次翻转计数器的高字节PWM5T1H

地址:FF30H(XSFR)

B7 - B6 B5 B4 B3 PWM5T1H[14:8] B2 初始值:x000,0000B

B1 B0 PWM5的第一次翻转计数器的低字节PWM5T1L 地址:FF31H(XSFR)

B7 B6 B5 B4 PWM5T1L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM5的第二次翻转计时器的高字节PWM5T2H 地址:FF32H(XSFR)

B7 - B6 B5 B4 B3 PWM5T2H[14:8] B2 初始值:x000,0000B

B1 B0 PWM5的第二次翻转计时器的低字节PWM5T2L 地址:FF33H(XSFR)

B7 B6 B5 B4 PWM5T2L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

PWM5的控制寄存器PWM5CR

地址:FF34H(XSFR)

B7 - B6 - B5 - B4 - B3 PWM5_PS B2 EPWM5I 初始值:xxxx,0000B

B1 EC5T2SI B0 EC5T1SI PWM5_PS:PWM5输出管脚选择位 0:PWM5的输出管脚为PWM5:P2.3 1:PWM5的输出管脚为PWM5_2:P4.2 EPWM5I:PWM5中断使能控制位 0:关闭PWM5中断

1:使能PWM5中断,当C5IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。 EC5T2SI:PWM5的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断

1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将跳转到相应中断入口执行中断服务程序。

EC5T1SI:PWM5的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断

1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将跳转到相应中断入口执行中断服务程序。

PWM6的第一次翻转计数器的高字节PWM6T1H

地址:FF40H(XSFR)

B7 - B6 B5 B4 B3 PWM6T1H[14:8] B2 初始值:x000,0000B

B1 B0 PWM6的第一次翻转计数器的低字节PWM6T1L 地址:FF41H(XSFR)

B7 B6 B5 B4 PWM6T1L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM6的第二次翻转计时器的高字节PWM6T2H 地址:FF42H(XSFR)

B7 - B6 B5 B4 B3 PWM6T2H[14:8] B2 初始值:x000,0000B

B1 B0 PWM6的第二次翻转计时器的低字节PWM6T2L 地址:FF43H(XSFR)

B7 B6 B5 B4 PWM6T2L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

PWM6的控制寄存器PWM6CR

地址:FF44H(XSFR)

B7 - B6 - B5 - B4 - B3 PWM6_PS B2 EPWM6I 初始值:xxxx,0000B

B1 EC6T2SI B0 EC6T1SI PWM6_PS:PWM6输出管脚选择位 0:PWM6的输出管脚为PWM6:P1.6 1:PWM6的输出管脚为PWM6_2:P0.7 EPWM6I:PWM6中断使能控制位 0:关闭PWM6中断

1:使能PWM6中断,当C6IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。 EC6T2SI:PWM6的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断

1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将跳转到相应中断入口执行中断服务程序。

EC6T1SI:PWM6的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断

1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM

的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将跳转到相应中断入口执行中断服务程序。

PWM7的第一次翻转计数器的高字节PWM7T1H

地址:FF50H(XSFR)

B7 - B6 B5 B4 B3 PWM7T1H[14:8] B2 初始值:x000,0000B

B1 B0 PWM7的第一次翻转计数器的低字节PWM7T1L 地址:FF51H(XSFR)

B7 B6 B5 B4 PWM7T1L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM7的第二次翻转计时器的高字节PWM7T2H 地址:FF52H(XSFR)

B7 - B6 B5 B4 B3 PWM7T2H[14:8] B2 初始值:x000,0000B

B1 B0 PWM7的第二次翻转计时器的低字节PWM7T2L 地址:FF53H(XSFR)

B7 B6 B5 B4 PWM7T2L[7:0] B3 B2 初始值:0000,0000B

B1 B0 PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

PWM7的控制寄存器PWM7CR

地址:FF54H(XSFR)

B7 - B6 - B5 - B4 - B3 PWM7_PS B2 EPWM7I 初始值:xxxx,0000B

B1 EC7T2SI B0 EC7T1SI PWM7_PS:PWM7输出管脚选择位 0:PWM7的输出管脚为PWM7:P1.7 1:PWM7的输出管脚为PWM7_2:P0.6 EPWM7I:PWM7中断使能控制位 0:关闭PWM7中断

1:使能PWM7中断,当C7IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。 EC7T2SI:PWM7的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断

1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将跳转到相应中断入口执行中断服务程序。

EC7T1SI:PWM7的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断

1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将跳转到相应中断入口执行中断服务程序。

PWM波形发生器中断控制

PWM波形发生器中断相关的寄存器

IP2 PWMCR PWMIF PWMFDCR PWM2CR PWM3CR PWM4CR PWM5CR PWM6CR PWM7CR 中断优先级控制 PWM控制 PWM中断标志 PWM外部异常控制 PWM2控制 PWM3控制 PWM4控制 PWM5控制 PWM6控制 PWM7控制 B5H F5H F6H F7H FF04H FF14H FF24H FF34H FF44H FF54H - ENPWM - - - - - - - - - ECBI CBIF - - - - - - - - ENC7O C7IF ENFD - - - - - - PX4 ENC6O C6IF FLTFLIO - - - - - - PPWMFD ENC5O C5IF EFDI PWM2_PS PWM3_PS PWM4_PS PWM5_PS PWM6_PS PWM7_PS PPWM ENC4O C4IF FDCMP EPWM2I EPWM3I EPWM4I EPWM5I EPWM6I EPWM7I PSPI ENC3O C3IF FDIO EC2T2SI EC3T2SI EC4T2SI EC5T2SI EC6T2SI EC7T2SI PS2 ENC2O C2IF FDIF EC2T1SI EC3T1SI EC4T1SI EC5T1SI EC6T1SI EC7T1SI xxx0,0000 0000,0000 x000,0000 xx00,0000 xxxx,0000 xxxx,0000 xxxx,0000 xxxx,0000 xxxx,0000 xxxx,0000

中断向量地址及中断控制

优先级设置 中断名称 入口地址 中断请求位 除方式 CBIF C2IF C3IF 00B3H PWM中断 (22) C5IF C6IF C7IF 00BBH PWM异常检测中断 (23) PPWMFD FDIF ENPWM/ENFD/EFDI/EA 需软件清除 ENPWM/ EPWM5I/ EC5T2SI|| EC5T1SI/EA ENPWM/ EPWM6I/ EC6T2SI|| EC6T1SI/EA ENPWM/ EPWM7I/ EC7T2SI|| EC7T1SI/EA 需软件清除 需软件清除 需软件清除 PPWM C4IF ENPWM/ EPWM4I/ EC4T2SI|| EC4T1SI/EA 需软件清除 ENPWM/ECBI/EA ENPWM/ EPWM2I/ EC2T2SI|| EC2T1SI/EA ENPWM/ EPWM3I/ EC3T2SI|| EC3T1SI/EA 需软件清除 需软件清除 需软件清除 中断允许控制 中断标志清

在Keil C中声明中断函数

void PWM_Routine(void) interrupt 22; void PWMFD_Routine(void) interrupt 23;

PWM波形发生器的结构框图

{PWMCH,PWMCL}计计计计计计PWM 计计计计计R计计{T1H,T1L}{T2H,T2L}{T1H,T1L}{T2H,T2L}{T1H,T1L}{T2H,T2L}计计计计计计计计计计计计计计计计计计计计计计计计计计计计计计计计计计计计PWM计计计计计计计

汇编示例代码1

假如要生成一个重复的PWM波形,波形如下:

PWM波形发生器的时钟频率为系统时钟/4,波形由通道4输出,周期为20个PWM时钟,占空比为1/3,由4个PWM时钟的相位延迟(波形如下图所示)

Initialized @ LOW012345678910161901234567891016190123456789101619Period==(16+1) Channel-4: toggle-point-1==3(0003H) toggle-point-2==16 (0010H) 汇编代码可以如下设计:

;; +-------------------------+ ;; | Global Configuration | ;; +-------------------------+

; Set EAXSFR to enable xSFR writing against XRAM writing mov A, P_SW2

orl A, #10000000B mov P_SW2, A ;

; Set channel-4 output register start at LOW mov A, PWMCFG

anl A, #11111011B ; channel-4 start at LOW mov PWMCFG, A ;

; Set a clock of the waveform generator consists of 4 Fosc mov DPTR, #PWMCKS ; FFF2H mov A, #00000011B movx @DPTR, A ;

; Set period as 20

; {PWMCH,PWMCL} <= 19

mov DPTR, #PWMCH ; FFF0H

mov A, #00H ; PWMCH should be changed first movx @DPTR, A

mov DPTR, #PWMCL ; FFF1H

mov A, #13H ; Write PWMCL simultaneous update PWMCH movx @DPTR, A ;

;; +-------------------------+ ;; | Channel-4 Configuration | ;; +-------------------------+

; Set toggle point 1 of Channel-4 as 3

mov DPTR, #PWM4T1H ; FF20H mov A, #00H movx @DPTR, A ;

mov DPTR, #PWM4T1L ; FF21H mov A, #03H movx @DPTR, A ;

; Set toggle point 2 of Channel-4 as 16

mov DPTR, #PWM4T2H ; FF22H mov A, #00H movx @DPTR, A ;

mov DPTR, #PWM4T2L ; FF23H mov A, #10H movx @DPTR, A ;

; Set Channel-4 output pin as default, and disable interrupting mov DPTR, #PWM4CR ; FF24H mov A, #00H movx @DPTR, A ;

; Clear EAXSFR to disable xSFR, return movx-DPTR to normal XRAM access mov A, P_SW2

anl A, #01111111B mov P_SW2, A ;

;; +-------------------------+ ;; | Operate PWM output |

;; +-------------------------+

; Enable counter counting, and enable Channel-4 output mov A, PWMCR

orl A, #10000100B mov PWMCR, A ;

汇编示例代码2

假如要生成两个互补对称输出的PWM波形,波形如下:

PWM波形发生器的时钟频率为系统时钟/4,波形由信道4和信道5输出,,周期为20个PWM时钟,通道4的有效高电平为13个PWM时钟,通道5的有效低电平为10个PWM时钟,信道4和信道5 前端死区为2个PWM时钟,末端死区为1个PWM时钟(波形如下图所示)

Pre-deadband=2Post-deadband=1Initialized @ LOWInitialized @ HIGH012345678910151619012345678910151619012345678910151619Period==(16+1) Channel-4: toggle-point-1==3(0003H) toggle-point-2==16 (0010H) Channel-5: toggle-point-1==5(0005H) toggle-point-2==15 (000FH)

汇编代码可以如下设计:

;; +-------------------------+ ;; | Global Configuration | ;; +-------------------------+

;;;

;;; Set EAXSFR to enable xSFR writing against XRAM writing ;;;

mov A, P_SW2

orl A, #10000000B mov P_SW2, A ;

; Set channel-4 output register start at LOW, channel-5 at HIGH mov A, PWMCFG

anl A, #11111011B ; channel-4 start at LOW orl A, #00001000B ; channel-5 start at HIGH mov PWMCFG, A ;

; Set a clock of the waveform generator consists of 4 Fosc mov DPTR, #PWMCKS ; FFF2H mov A, #00000011B movx @DPTR, A ;

; Set period as 20 ; {PWMCH,PWMCL} <= 19

mov DPTR, #PWMCH ; FFF0H

mov A, #00H ; PWMCH should be changed first movx @DPTR, A

mov DPTR, #PWMCL ; FFF1H

mov A, #13H ; Write PWMCL simultaneous update PWMCH movx @DPTR, A ;

;; +-------------------------+ ;; | Channel-4 Configuration |

;; +-------------------------+

; Set toggle point 1 of Channel-4 as 3

mov DPTR, #PWM4T1H ; FF20H mov A, #00H movx @DPTR, A ;

mov DPTR, #PWM4T1L ; FF21H mov A, #03H movx @DPTR, A ;

; Set toggle point 2 of Channel-4 as 16

mov DPTR, #PWM4T2H ; FF22H mov A, #00H movx @DPTR, A ;

mov DPTR, #PWM4T2L ; FF23H mov A, #10H movx @DPTR, A ;

; Set Channel-4 output pin as default, and disable interrupting mov DPTR, #PWM4CR ; FF24H mov A, #00H movx @DPTR, A ;

;; +-------------------------+ ;; | Channel-5 Configuration | ;; +-------------------------+

; Set toggle point 1 of Channel-5 as 5

mov DPTR, #PWM5T1H ; FF30H mov A, #00H movx @DPTR, A ;

mov DPTR, #PWM5T1L ; FF31H mov A, #03H movx @DPTR, A ;

; Set toggle point 3 of Channel-5 as 15

mov DPTR, #PWM5T2H ; FF32H mov A, #00H movx @DPTR, A ;

mov DPTR, #PWM5T2L ; FF33H mov A, #0FH movx @DPTR, A ;

; Set Channel-5 output pin as default, and disable interrupting mov DPTR, #PWM5CR ; FF34H mov A, #00H movx @DPTR, A ;

;;; Clear EAXSFR to disable xSFR, return movx-DPTR to normal XRAM access mov A, P_SW2

anl A, #01111111B mov P_SW2, A ;

;; +-------------------------+ ;; | Operate PWM output |

;; +-------------------------+

; Enable counter counting, and enable Channel-4 and Channel-5 output mov A, PWMCR

orl A, #10001100B mov PWMCR, A ;

两通道CCP/PCA/增强PWM

相关SFR

符号 CCON CMOD CCAPM0 CCAPM1 CL 描述 地址 D8H D9H DAH DBH E9H 位地址及符号 B7 CF CIDL - - B6 CR - ECOM0 ECOM1 B5 - - CCAPP0 CCAPP1 B4 - - CCAPN0 CCAPN1 B3 - CPS2 MAT0 MAT1 B2 - CPS1 TOG0 TOG1 B1 CCF1 CPS0 PWM0 PWM1 B0 CCF0 ECF ECCF0 ECCF1 初始值 00xx,xx00 0xxx,0000 x000,0000 x000,0000 0000,0000 CH CCAP0L CCAP0H CCAP1L CCAP1H PCA_PWM0 PCA_PWM1 F9H EAH FAH EBH FBH F2H F3H EBS0_1 EBS1_1 EBS0_0 EBS1_0 PWM0_B9H PWM1_B9H PWM0_B8H PWM1_B8H PWM0_B9L PWM1_B9L PWM0_B8L PWM1_B8L EPC0H EPC1H EPC0L EPC1L 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 0000,0000 STC15W4K32S4的两路CCP与STC12F2K60S2的CCP完全兼容,并在STC12F2K60S2的CCP的基础上对PWM的功能进行增强,不仅可将STC15W4K32S4的CCP设置为6/7/8位PWM,还可设置为10位PWM。10位PWM的低字节仍用CCAP0L/CCAP1L设置(CCAP0H/CCAP1H为重装值),10位PWM的高两位使用[PWM0_B9L,PWM0_B8L]/ [PWM1_B9L,PWM1_B8L]进行设置([PWM0_B9H,PWM0_B8H]/ [PWM1_B9H,PWM1_B8H] 为重装值)。 [EBS0_1,EBS0_0]: 00:PWM0为8位PWM模式 01:PWM0为7位PWM模式 10:PWM0为6位PWM模式 11:PWM0为10位PWM模式 [EBS1_1,EBS1_0]: 00:PWM1为8位PWM模式 01:PWM1为7位PWM模式 10:PWM1为6位PWM模式 11:PWM1为10位PWM模式

10位PWM的比较值由{PWMn_B9L,PWMn_B8L,CCAPnL[7:0]}组成,10重装值由{PWMn_B9H,PWMn_B8H,CCAPnH[7:0]}组成

注意:在更新重装值时,必须先写高两位PWMn_B9H,PWMn_B8H,后写低八位CCAPnH

本文来源:https://www.bwwdw.com/article/w3tx.html

Top