STM8 PWM模式 STM8的脉冲宽度调制(PWM)模式可以产生一个由TIM1_ARR寄存器确定频率、由TIM1_CCRi寄存器确定占空比的信号。 在TIM1_CCMRi寄存器中的OCiM位写入'110'(PWM模式1)或'111'(PWM模式2),能够独立地设置每个OCi输出通道产生一路PWM。必须设置TIM1_CCMRi寄存器的OCiPE位使能相应的预装载寄存器,也可以设置TIM1_CR1寄存器的ARPE位使能自动重装载的预装载寄存器(在向上计数模式或中央对称模式中)。 由于仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置TIM1_EGR寄存器的UG位来初始化所有的寄存器。 OCi的极性可以通过软件在TIM1_CCERi寄存器中的CCiP位设置,它可以设置为高电平有效或低电平有效。OCi的输出使能通过(TIM1_CCERi和TIM1_BKR寄存器中)CCiE、MOE、OISi和OSSR位和OSSI位的组合来控制。详见TIM1_CCERi寄存器的描述。 在PWM模式(模式1或模式2)下,TIM1_CNT和TIM1_CCRi始终在进行比较,(依据计数器的计数方向)以确定是否符合TIM1_CCRi≤TIM1_CNT或者TIM1_CNT≤TIM1_CCRi。 根据TIM1_CR1寄存器中CMS位域的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号。 PWM边沿对齐模式 - 向上计数配置
当TIM1_CR1寄存器中的DIR位为低的时候执行向上计数。 下面是一个PWM模式1的例子。当TIM1_CNT<TIM1_CCRi时,PWM参考信号OCiREF为高,否 则为低。如果TIM1_CCRi中的比较值大于自动重装载值(TIM1_ARR),则OCiREF保持为'1'。如 果比较值为0,则OCiREF保持为'0'。下图为TIM1_ARR=8时边沿对齐的PWM波形实例。
(图67:STM8边沿对齐,PWM模式1的波形(ARR=8))
- 向下计数的配置
当TIM1_CR1寄存器的DIR位为高时执行向下计数。 在PWM模式1时,当TIM1_CNT>TIM1_CCRi时参考信号OCiREF为低,否则为高。如果TIM1_CCRi中的比较值大于TIM1_ARR中的自动重装载值,则OCiREF保持为'1'。该模式下不能产生0%的PWM波形。
PWM中央对齐模式 当TIM1_CR1寄存器中的CMS位不为'00'时为中央对齐模式(所有其他的配置对OCiREF/OCi信号都有相同的作用)。 根据不同的CMS位的设置,比较标志可以在计数器向上计数,向下计数,或向上和向下计数时被置1。TIM1_CR1寄存器中的计数方向位(DIR)由硬件更新,不要用软件修改它。参看17.3.6的中央对齐模式。 图68给出了一些中央对齐的PWM波形的例子 - TIMx_ARR=8
- PWM模式1
- 标志位在以下三种情况下被置位(以箭头形式在─中标出)
─只有在计数器向下计数时(CMS=01) ─只有在计数器向上计数时(CMS=10) ─在计数器向上和向下计数时(CMS=11)
(图68:STM8中央对齐的PWM波形(APR=8))
单脉冲模式 STM8单脉冲模式(OPM)是前述众多模式的一个特例。这种模式允许计数器响应一个激励,并在一个程序可控的延时之后产生一个脉宽可控的脉冲。 可以通过时钟/触发控制器启动计数器,在输出比较模式或者PWM模式下产生波形。设置TIM1_CR1寄存器的OPM位将选择单脉冲模式,此时计数器自动地在下一个更新事件UEV时停止。 仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发),必须如下配置: - 向上计数方式:计数器CNT<CCRi≤ARR,
- 向下计数方式:计数器CNT>CCRi。
(图48:STM8单脉冲模式图例)
例如,你需要在从TI2输入脚上检测到一个上升沿之后,延迟tDELAY,在OC1上产生一个tPULSE宽度的正脉冲: 假定IC2作为触发1通道的触发源: - 置TIM1_CCMR2寄存器的CC2S=01,把IC2映射到TI2。
- 置TIM1_CCER1寄存器的CC2P=0,使IC2能够检测上升沿。
- 置TIM1_SMCR寄存器的TS=110,使IC2作为时钟/触发控制器的触发源(TRGI)。
- 置TIM1_SMCR寄存器的SMS=110(触发模式),IC2被用来启动计数器。
OPM的波形由写入比较寄存器的数值决定(要考虑时钟频率和计数器预分频器)
- tDELAY由TIM1_CCR1寄存器中的值定义。
- tPULSE由自动装载值和比较值之间的差值定义(TIM1_ARR–TIM1_CCR1)。
- 假定当发生比较匹配时要产生从0到1的波形,当计数器达到预装载值时要产生一个从1到0的波形;首先要置TIM1_CCMR1寄存器的OCiM=111,进入PWM模式2;根据需要有选择地设置TIM1_CCMR1寄存器的OC1PE=1,置位TIM1_CR1寄存器中的ARPE,使能预装载
寄存器;然后在TIM1_CCR1寄存器中填写比较值,在TIM1_ARR寄存器中填写自动装载值,设置UG位来产生一个更新事件,然后等待在TI2上的一个外部触发事件。
在这个例子中,TIM1_CR1寄存器中的DIR和CMS位应该置低。 因为只需要一个脉冲,所以设置TIM1_CR1寄存器中的OPM=1,在下一个更新事件(当计数器从自动装载值翻转到0)时停止计数。 特殊情况:OCx快速使能 在单脉冲模式下,对TIi输入脚的边沿检测会设置CEN位以启动计数器。然后计数器和比较值间的比较操作产生了单脉冲的输出。但是这些操作需要一定的时钟周期,因此它限制了可得到的最小延时tDELAY。 如果要以最小延时输出波形,可以设置TIM1_CCMRi寄存器中的OCiFE位;此时强制OCiREF(和OCx)直接响应激励而不再依赖比较的结果,输出的波形与比较匹配时的波形一样。 OCiFE只在通道配置为PWM1和PWM2模式时起作用。 |