STC15系列单片机-PWM模块

来源:互联网 发布:网络机顶盒 编辑:程序博客网 时间:2024/05/20 04:50

STC15W内部集成了一个15位的PWM模块, 可以6路独立输出. 此外PWM模块每一路都有两个用于控制波形翻转的计数器T1和T2, 可以灵活地控制每路PWM的高低电平宽度, 从而实现对PWM占空比的设计.

重点: PWM模块相关的寄存器

注:1>x: 代表可以取数字2-7
2>这些寄存器中只指出与PWM相关的控制位

  1. 端口配置寄存器(P_SW2)
    这里写图片描述

    • 复位后 0000 ?000
    • EAXSFR: 访问扩展SFR使能控制位
    • 如果要访问PWM在扩展RAM区的特殊功能寄存器,必须将其置一.
  2. PWM配置寄存器(PWMCFG)
    这里写图片描述

    • 复位后 ?000 0000
    • CBTADC :PWM计数器归零触发ADC转换控制位, 当它为0, 不会触发ADC转换; 为1就触发
      注: 前提是PWM和ADC都要使能, ENPWM = 1 && ADCON = 1
    • CxINI(x: 2-7)
      设置PWMx, 当它为0,表示PWMx输出端口初始电压为低电平, 为1就是高电平
  3. PWM控制寄存器(PWMCR)
    这里写图片描述

    • 复位后 0000 0000
    • ENPWM :使能PWM, 为0, 关闭PWM模块; 为1开通PWM模块
    • ECBI: PWM计数器归零中断使能位, 为0,关闭归零中断(但是CBIF依然会被硬件置位); 为1, 使能PWM计数器归零中断
    • ENCxO: PWMx输出使能位, 为0, 端口为通常IO口, 为1, 就作为PWM波形输出口
  4. PWM中断标志寄存器(PWMIF)
    这里写图片描述

    • CBIF: PWM计数器归零中断标志位. 当PWM计数归零, 硬件将它置一, 同时如果中断允许,程序会跳转到相应的中断入口执行中断程序.
    • CxIF: 第x通道PWM中断标志位, 可设置在翻转点1和翻转点2触发CxIF, 当PWM发生翻转是, 硬件自动将该位置置一. 当EPWMxI为1时, 程序会跳转至相应的中断入口执行中断服务程序
      注: 这个位需要软件清零.
  5. PWM外部异常控制寄存器(PWMFDCR)
    这里写图片描述

    • ENFD: PWM外部异常检测功能控制位. 为0就关闭异常功能检测, 为1就开启
    • FLTFLIO: 发生PWM外部异常时,对PWM输出口的控制位. 为0, 发生PWM外部异常时, PWM输出口不做任何改变, 为1时, PWM输出口立即进入高阻模式
      注: 只有ENCxO为1所对应的端口才会被强制悬空. 当PWM外部异常状态消失后, 相应的PWM输出口就会自动回复以前的I/O口设置
    • EFDI: PWM异常检测中断使能. 当它为0, 关闭异常检测中断(FDIF仍然会被硬件置位); 当该位为1时, 使能PWM异常检测中断
    • 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异常, 即P5.5/CMP+电压比比较器负极P5.4/CMP-的电平高或者比比较器正极P5.5/CMP+的电平比内部参考电压1.28V高, 或者P2.4的电平为高时, 硬件自动将该位置置一. 当EFDI为1时, 程序会跳转到中断入口执行中断服务程序
      注: 该位需要软件清零
  6. PWM计数器(PWMCH&PWMCL)
    这里写图片描述

    • 复位后 ?000 0000

    这里写图片描述

    • 复位后 0000 0000
    • PWM计数器是一个15位寄存器, 计数器1~32768之间的任意值都可以作为PWM的周期. PWM波形发生器内部的计数器从0开始计数, 每个PWM时钟递增1. 当内部计数器达到[PWMCH,PWMCL]设置的PWM周期时, PWM波形发生器内部的计数器将从0开始重新计数. 硬件会自动将PWM归零中断标志位CBIF置一, 如果ECBI为1, 则程序将跳转到相应中断执行中断服务程序.
  7. PWM时钟选择寄存器(PWMCKS)
    这里写图片描述
    • 复位后: ???0 0000
    • SELT2: PWM时钟源选择. 为0, PWM时钟源为系统时钟经过分频器之后的时钟; 为1, PWM时钟源为T2的溢出脉冲
    • PS[3:0] :系统时钟分频参数. SELT2位为0, PWM时钟频率 = 系统时钟频率/(PS[3:0]+1)
  8. PWM翻转计数器(PWMxT1H&PWMxT1L&PWMxT2H&PWMT2L)
    这里写图片描述

    • 复位后 ?000 0000

    这里写图片描述

    • 复位后 0000 0000

    这里写图片描述

    • 复位后 ?000 0000

    这里写图片描述

    • 复位后 0000 0000
  9. PWMx控制寄存器(PWMxCR)
    这里写图片描述
    • 复位后 ???? 0000
    • PWMx_PS: PWMx输出引脚选择位. 为0, PWMx的输出为PWMx/P?.?. 为1, PWMx输出引脚为PWMx_2/P?.?
      注: 引脚可以参看IO脚总结
    • EPWMxI: 中断使能控制位. 为0, 关闭PWMx中断, 为1,开启该中断. 当CxIF被硬件设置为1时, 程序将跳转到相应中断服务程序入口执行中断服务程序.
    • ECxT2SI: PWMx的T2匹配发生波形翻转时的中断控制位. 为0, 关闭T2翻转时的中断, 为1, 开启. 当PWMx波形发生器内部计数值与T2计数器所设置的值匹配时, PWM波形发生翻转, 同时硬件将CxIF置位.
    • ECxT1SI: PWMx的T1匹配发生波形翻转时的中断控制位. 为0, 关闭T1翻转时的中断, 为1, 开启. 当PWMx波形发生器内部计数直与T1计数器所设置的值匹配时,PWM波形发生翻转,同时硬件将CxIF置位.
  10. PWM中断优先级控制寄存器(IP2)
    这里写图片描述
    • PPWMFD: 异常检测中断优先级控制位, 为0, 低优先级, 为1, 高级优先级
    • PPWM: PWM中断优先级控制位. 为0,低优先级, 为1, 高优先级
原创粉丝点击