单片机原理及应用系统设计第12章--IAP15W4K58S4单片机的-PWM模块课件_第1页
单片机原理及应用系统设计第12章--IAP15W4K58S4单片机的-PWM模块课件_第2页
单片机原理及应用系统设计第12章--IAP15W4K58S4单片机的-PWM模块课件_第3页
单片机原理及应用系统设计第12章--IAP15W4K58S4单片机的-PWM模块课件_第4页
单片机原理及应用系统设计第12章--IAP15W4K58S4单片机的-PWM模块课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第12章 IAP15W4K58S4单片机的 PWM模块单片机原理及应用系统设计本章主要内容312单片机PWM模块的结构单片机PWM模块的应用单片机PWM模块的控制IAP15W4K58S4单片机内部集成了一组(各自独立6路)增强型的PWM波形发生器。增强型PWM发生器大大增加了PWM控制的灵活性。 第12章 IAP15W4K58S4单片机PWM模块PWM波形发生器内部有一个15位的PWM计数器供6路PWM使用,用户可以设置每路PWM的初始电平。另外,PWM波形发生器为每路PWM又设计了两个用于控制波形翻转的计数器T1/ T2 ,可以非常灵活的每路PWM 的高低电平宽度,从而达到对PWM 的占空

2、比以及PWM 的输出延迟进行控制的目的。由于6路PWM是各自独立的,且每路PWM 的初始状态可以进行设定,所以用户可以将其中的任意两路配合起来使用,即可实现补对称输出以及死区控制等特殊应用。 12.1 IAP15W4K58S4单片机PWM模块的结构增强型的PWM波形发生器还设计了对外部异常事件(包括外部端口P2.4的电平异常、比较器比较结果异常)进行监控的功能,可用于紧关闭PWM输出。PWM波形发生器还可在15 位的PWM计数器归零时触发外部事件(触发外部事件、外部事件、ADC转换)。 12.1 IAP15W4K58S4单片机PWM模块的结构 -IAP15W4K58S4单片机PWM模块的结构

3、12.1 IAP15W4K58S4单片机PWM模块的结构图12-1 PWM波形发生器结构框图 表12-1 端口配置寄存器各位的定义 12.2 IAP15W4K58S4单片机PWM模块的控制位号B7B6B5B4B3B2B1B0位名称EAXSFR000-S4_SS3_SS2_SEAXSFR :扩展SFR 访问控制使能。 EAXSFR=0 :MOVX A,DPTR/MOVX DPTR,A指令的操作对象为扩展RAM(XRAM)。 EAXSFR=1 :MOVX A,DPTR/MOVX DPTR,A指令的操作对象为扩展SFR (XSFR)。注意:若要访问PWM在扩展RAM区的特殊功能寄存器,必须先将EAX

4、SFR 位置为1;BIT6, BIT5, BIT4为内部测试使用,用户必须填0。1. 端口配置寄存器P_SW2该寄存器地址为BAH,复位值为00H。 各位定义如表12-1所示: 12.2 IAP15W4K58S4单片机PWM模块的控制位号B7B6B5B4B3B2B1B0位名称-CBTADCC7INIC6INIC5INIC4INIC3INIC2INI表12-2 PWM配置寄存器PWMCFG各位定义2. PWM配置寄存器PWMCFG该寄存器地址为F1H,复位值为00H。各位定义如表12-2所示。CBTADC :PWM计数器归零时(CBIF=1 时)触发ADC转换 0:PWM计数器归零时不触发ADC

5、转换。 1:PWM计数器归零时自动触发ADC转换。(注:前提条件是PWM和ADC必须被使能,即ENPWM=1,且ADCON=1)CnINI:设置PWM 输出端口的初始电平,n=27。 0:PWM7 输出端口的初始电平为低电平。 1:PWM7 输出端口的初始电平为高电平。CBTADC :PWM计数器归零时(CBIF=1 时)触发ADC转换 0:PWM计数器归零时不触发ADC转换。 1:PWM计数器归零时自动触发ADC转换。(注:前提条件是PWM和ADC必须被使能,即ENPWM=1,且ADCON=1)CnINI:设置PWM 输出端口的初始电平,n=27。 0:PWM7 输出端口的初始电平为低电平。

6、 1:PWM7 输出端口的初始电平为高电平。 12.2 IAP15W4K58S4单片机PWM模块的控制ENPWM :使能增强型PWM波形发生器 0:关闭PWM波形发生器。 1:使能PWM波形发生器,PWM计数器开始计数。ECBI :PWM计数器归零中断使能位 0:关闭PWM计数器归零中断(CBIF依然会被硬件置位)。 1:使能PWM计数器归零中断。ENCnO :PWMn 输出使能位,n=27。 0:PWM通道n的端口为GPIO。 1:PWM通道n的端口为PWM输出口,受PWM波形发生器控制。 12.2 IAP15W4K58S4单片机PWM模块的控制位号B7B6B5B4B3B2B1B0位名称EN

7、PWMECBIENC70ENC60ENC50ENC40ENC30ENC203. PWM控制寄存器PWMCR该寄存器地址为F1H,复位值为00H。各位定义如表12-3所示。表12-3 PWM控制寄存器PWMCFG各位定义12.2 IAP15W4K58S4单片机PWM模块的控制4. PWM中断标志寄存器PWMIF 该寄存器地址为F6H,复位值为00H。各位定义如表12-4所示。表12-4 PWM中断标志寄存器PWMIF各位定义。 5. PWM外部异常控制寄存器PWMFDCR 该寄存器地址为F7H,复位值为00H。各位定义如表12-5所示。表12-5 PWM中断标志寄存器PWMIF各位定义。位号B7

8、B6B5B4B3B2B1B0位名称-CBIFC7IFC6IFC5IFC4IFC3IFC2IF位号B7B6B5B4B3B2B1B0位名称-ENFDFLTFLIOEFDIFDCMPFDIOFDIF12.2 IAP15W4K58S4单片机PWM模块的控制 5. PWM外部异常控制寄存器PWMFDCR该寄存器地址为F7H,复位值为00H。各位定义如表12-5所示。位号B7B6B5B4B3B2B1B0位名称-ENFDFLTFLIOEFDIFDCMPFDIOFDIF表12-5 PWM中断标志寄存器PWMIF各位定义12.2 IAP15W4K58S4单片机PWM模块的控制ENFD :PWM外部异常检测功能控

9、制位 0:关闭PWM的外部异常检测功能。 1:使能PWM的外部异常检测功能。FLTFLIO :发生PWM外部异常时对PWM输出口控制位 0:发生PWM外部异常时,PWM的输出口不作任何改变。 1:发生PWM外部异常时,PWM的输出口立即被设置为高阻输入模式(既不对外输出电流,也不对内输出电流)。【注】只有ENCnO=1 所对应的端口才会被强制悬空;当PWM外部异常状态取消时,相应的PWM的输出口会自动恢复以前的I/O设置。EFDI :PWM异常检测中断使能位 0:关闭PWM异常检测中断(FDIF依然会被硬件置位)。 1:使能PWM异常检测中断。12.2 IAP15W4K58S4单片机PWM模块

10、的控制FDCMP :设定PWM异常检测源为比较器的输出 0:比较器与PWM无关 。 1:当比较器正极P5.5/CMP+ 的电平比比较器负极P5.4/CMP-的电平高或者比较器正极。 P5.5/CMP+ 的电平比内部参考电压源1.28V高时,触发PWM异常。FDIO :设定PWM异常检测源为端口P2.4 的状态 0:P2.4 的状态与PWM无关。 1:当P2.4 的电平为高时,触发 为高时,触发PWM异常。FDIF :PWM异常检测中断标志位 当发生PWM异常(比较器正极P5.5/CMP+ 的电平比比较器负极P5.4/CMP- 的电平高 或比较器正极P5.5/CMP+ 的电平比内部参考电压源1.

11、28V 高或者P2.4 的电平为高)时,硬件自动将此位置1 。当EFDI=1 时,程序会跳转到相应中断入口执行中断服务程序。需要软件清零。 12.2 IAP15W4K58S4单片机PWM模块的控制 6. PWM计数器(1)PWM计数器高字节PWMCH(高7位)该寄存器地址为FFF0H(XSFR),复位值为00H。各位定义如表12-6所示。 表12-6 PWM计数器高字节PWMCH各位定义位号B7B6B5B4B3B2B1B0位名称-PWMCH14:812.2 IAP15W4K58S4单片机PWM模块的控制(2)PWM计数器低字节PWMCL(低8位) 该寄存器地址为FFF1H(XSFR),复位值为

12、00H。各位定义如表12-7所示。 表12-7 PWM计数器高字节PWMCH各位定义 PWM计数器位一个15位的寄存器,可设定132767之间的任意值作为PWM 的周期。PWM 波形发生器内部的计数器从0开始计数,每个PWM 时钟周期递增1,当内部计数器的计数值达到PWMCH,PWMCL所设定的PWM周期时,PWM波形发生器内部的计数器将会从0重新开始开始计数,硬件会自动将PWM归零中断中断标志位CBIF置1,若ECBI=1 ,程序将跳转到相应中断入口执行中断服务程序。位号B7B6B5B4B3B2B1B0位名称PWM2CR7:07. PWM时钟选择寄存器PWMCKS 该寄存器地址为FFF2H(

13、XSFR),复位值为00H。各位定义如表12-8所示。 表12-8 PWM时钟选择寄存器器PWMCKS各位定义SELT2 :PWM时钟源选择 0:PWM时钟源为系统时钟经分频器分频之后的时钟 。 1:PWM时钟源为定时器2 的溢出脉冲PS3:0 :系统时钟预分频参数。当SELT2=0时,PWM时钟为系统时钟 / ( PS3:0+1)。 12.2 IAP15W4K58S4单片机PWM模块的控制位号B7B6B5B4B3B2B1B0位名称-PS3:012.2 IAP15W4K58S4单片机PWM模块的控制 8. PWMn的翻转计数器(n=27) (1)PWMn的第一次翻转计数器的高字节PWMnT1H

14、,复位值是00H。各位定义如表12-9所示。 表12-9 PWMn的第一次翻转计数器的高字节PWMnT1H(n=27)各位定义。 位号B7B6B5B4B3B2B1B0位名称-PWM2T1H14:812.2 IAP15W4K58S4单片机PWM模块的控制(2) PWMn的第一次翻转计数器的低字节PWMn T1L,各位定义如表12-10所示。表12-10 PWMn的第一次翻转计数器的低字节PWMnT1L(n=27)各位定义。(3)PWMn的第二次翻转计数器的高字节PWMnT2H,复位值是00H。各位定义如表12-11所示。表12-11 PWMn的第一次翻转计数器的高字节PWMnT2H(n=27)各

15、位定义。位号B7B6B5B4B3B2B1B0位名称PWM2T1L7:0位号B7B6B5B4B3B2B1B0位名称-PWM2T1H14:812.2 IAP15W4K58S4单片机PWM模块的控制(4)PWMn的第二次翻转计数器的低字节PWMnT2L,各位定义如表12-12所示。表12-12 PWMn的第一次翻转计数器的低字节PWMnT2L(n=27)各位定义。PWM2的第二次翻转计数器的高字节:PWM2T2H,各位定义如表12-13所示。表12-13 PWMn的第二次翻转计数器的高字节PWMnT2H(n=27)各位定义。 位号B7B6B5B4B3B2B1B0位名称PWM2T1L7:0SFR na

16、meAddressbitB7B6B5B4B3B2B1B0Reset ValuePWM2T2HFF02H(XSFR)name-PWM2T2H14:8x000,0000BPWM2T2HFF02H(XSFR)name-PWM2T2H14:8x000,0000B12.2 IAP15W4K58S4单片机PWM模块的控制PWM2的第二次翻转计数器的低字节:PWM2T2L,各位定义如表12-14所示。SFR nameAddressbitB7B6B5B4B3B2B1B0Reset ValuePWM2CRFF03H(XSFR)namePWM2CR7:00000,0000BPWM波形发生器设计了两个用于控制PWM

17、波形翻转的15位计数器,可设定1327间的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM 的输出波形将发生翻转。表12-14 PWMn的第二次翻转计数器的低字节PWMnT2H(n=27)各位定义12.2 IAP15W4K58S4单片机PWM模块的控制 9. PWMn的控制寄存器PWMnCR 复位值为00H。各位定义如表12-15所示。 表12-15 PWMn的控制寄存器PWMnCR各位定义。PWMn_PS :PWMn输出引脚选择位 0:PWMn的输出引脚为第一组PWMn。 1:PWMn的输出引脚为第二组PWMn_2。EPWMnI :PWMn中断使能控制位。

18、0 :关闭PWMn 中断 。 1:使能PWMn 中断,当CnIF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。 bitB7B6B5B4B3B2B1B0name-PWMnPSEPWMnECn2SIECn1SI12.2 IAP15W4K58S4单片机PWM模块的控制 ECnT2SI :PWMn 的T2匹配发生波形翻转时的中断控制位 0 :关闭T2翻转时中断 。 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM 的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I=1 ,则程序将跳转到相应中断入口执行中断服务程序。 ECnT1SI :PWMn

19、 的T1匹配发生波形翻转时的中断控制位 0 :关闭T1翻转时中断 。 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM 的波形发生翻转,同时硬件将CnIF置1,此时若EPWMnI=1 ,则程序将跳转到相应中断入口执行中断服务程序。6路高低字节两次控制PWM波形翻转的15位计数器和PWMn控制寄存器。PWMnCR地址如表12-16所示。 12.2 IAP15W4K58S4单片机PWM模块的控制 表12-16 PWM2PWM7计数器和寄存器地址地址PWM2PWM3PWM4PWM5PWM6PWM7第一次翻转计数器高字节FF00HFF10HFF20HFF30H

20、FF40HFF50H 低字节FF01HFF11HFF21HFF31HFF41HFF51H第二次翻转计数器高字节FF02HFF12HFF22HFF32HFF42HFF52H 低字节FF03HFF13HFF23HFF33HFF43HFF53HPWMn控制寄存器PWMnCRFF04HFF14HFF24HFF34HFF44HFF54H12.2 IAP15W4K58S4单片机PWM模块的控制10. PWM中断优先级控制寄存器IP2该寄存器地址为B5H,复位值为00H。各个中断源均为低优先级中断。不可位寻址,只能用字节操作指令更新相关内容,各位定义如表12-17所示。PPWMFD:PWM异常检测中断优先级

21、控制位。 PPWMFD=0:PWM异常检测中断为最低优先级中断(优先级0) 。 PPWMFD=1:PWM异常检测中断为最高优先级中断(优先级1) 。PPWM: PWM中断优先级控制位。 PPWM=0:PWM中断为最低优先级中断(优先级0) 。 PPWM=1:PWM中断为最高优先级中断(优先级1) 。SFR nameAddressbitB7B6B5B4B3B2B1B0Reset ValueIP2B5Hname-PX4PPWMFDPPWMPSPIPS20000,0000B表12-17 PWM中断优先级控制寄存器IP2各位定义 12.3 IAP15W4K58S4单片机PWM模块的应用 【例12-1】

22、 利用IAP15W4K58S4单片机PWM模块,生成一个占空比可调的波形。占空比初始值为50%。设置3个按键,分别控制占空比的加和减以及恢复至初始值。波形由引脚P1.7输出,可使用示波器观察波形。请编写程序。 解:C语言源程序代码:#include stc15w4k32s4.h /包含单片机头文件#define CYCLE 11059 /PWM计数值unsigned int T2Cnt=CYCLE/2; /PWM翻转计数值 void IO_Init(void); /函数声明void PWM_Init(void);void Key_Process(void);void Delay_ms(unsi

23、gned int ms);void PWM7_SetPWMT2(unsigned int dat);unsigned char Key_Scan(void); 12.3 IAP15W4K58S4单片机PWM模块的应用/* 主函数 */void main(void) IO_Init(); /端口初始化 PWM_Init(); /PWM模块初始化 while(1) Key_Process(); /按键扫描 12.3 IAP15W4K58S4单片机PWM模块的应用 void Delay_ms(unsigned int ms) /延时函数 unsigned int i; while( (ms-) !=

24、 0) for(i = 0; i 580; i+); 12.3 IAP15W4K58S4单片机PWM模块的应用 /* PWM模块初始化函数 */void PWM_Init(void) P1M1 &= (17); /将P17设置为准双向口 P1M0 &= (17); P_SW2 |=0 x80; /允许访问PWM特殊功能寄存器 PWMCR&=0 x7f; /关闭PWM发生器,进行PWM设置 PWMCKS=0 x00; /PWM时钟选择:系统时钟,不分频 PWMC=CYCLE; /PWM计数器,设置PWM周期 PWM7CR=0 x00; /PWM7输出到P1.7,关闭中断 PWMCFG=0 x00

25、; /设置PWM的初始输出低电平 PWMCR |=0 x20; /使能PWM7信号输出 PWMCR|=0 x80; /设置完毕,启动PWM发生器 P_SW2 &=0 x7f; /关闭访问PWM特殊功能寄存器12.3 IAP15W4K58S4单片机PWM模块的应用 /* 设置PWM中T2计数器 */void PWM7_SetPWMT2(unsigned int dat) PWMCR&=0 x7f; /关闭PWM发生器,进行PWM设置P_SW2 |=0 x80; /允许访问PWM特殊功能寄存器PWM7T2=dat;P_SW2 &=0 x7f; /关闭访问PWM特殊功能寄存器PWMCR|=0 x80

26、; /启动PWM发生器unsigned char Key_Scan(void) /按键扫描函数 unsigned char KeyTemp1,KeyTemp2;unsigned char KeyValue;KEYPORT |= (1KEY10) | (1KEY11) |(1KEY12); /读入端口先置高, / P3.3口置高 KeyTemp1=KEYPORT | (1KEY10)|(1KEY11)|(1KEY12);/将读 /入端口不用的位屏蔽掉 if(KeyTemp1!=0 xff) /如果有键按下Delay_ms(20); /延时,防抖动KeyTemp1=KEYPORT | (1KEY10)|(1KEY11)|(1KEY12)if(KeyTemp1!=0 xff) while(KeyTemp1!=0 xff) /等待按键释放 KeyTemp2=K

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论