打印
[APM32F4]

APM32F4系列,定时器的输出比较模式的分析

[复制链接]
1174|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guiyan|  楼主 | 2023-5-30 17:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 guiyan 于 2023-5-30 17:08 编辑

前言
本文旨在分析APM32F4系列芯片定时器的输出比较模式的工作原理。
详细代码可参考APM32F4xx_SDK_v1.3例程TMR_OCActive。

一、输出比较模式简介
         1.1. APM32F4系列,高级/通用定时器都具有4个独立的输出比较通道;
         1.2. 定义是:先预设定好一个匹配值,计数器每递增一次,都会与改预定好的匹配值进行比较,若相同,则相应通道则会输出一个电平。
         1.3. 输出比较一共有八种输出电平模式:冻结、匹配时通道x为有效电平、匹配时通道x为无效电平、翻转、强制为无效电平、强制为有效电平、PWM模式1和PWM模式2.


二、主要寄存器分析
         2.1. TMRx_CCM1[CCnSEL],设置为0,配置为输出比较   
                   
         2.2. TMRx_CCM1[OCnMOD],该3位是配置输出电平模式的                有效/无效电平取决于电平极性。
                  
         2.3. TMRx_CCEN[CCnPOL],该位是配置输出电平极性的
             TMRx_CCEN[CCnEN],该位是控制使能的。
                     
         2.4. TMRx_CCn[CCn],此寄存器是装载预设定的匹配值的
                     
三、编程思路
          3.1. 把定制器配置为输出比较模式(配置TMRx_CCM1[CCnSEL])
          3.2. 配置输出电平的极性(配置TMRx_CCEN[CCnPOL])
          3.3. 配置选定输出比较模式的其中一种输出电平模式(配置TMRx_CCM1[OCnMOD])
          3.4. 设定预匹配的值(配置TMRx_CCn[CCn])
          3.5. 使能开启输出(配置TMRx_CCEN[CCnEN])
四、例程演示
          4.1 主要实现代码
    OCcongigStruct.mode = TMR_OC_MODE_ACTIVE;              /*  输出电平模式为输出一个有效电平 */
    OCcongigStruct.outputState = TMR_OC_STATE_ENABLE;      /*  使能开启输出 */
    OCcongigStruct.polarity = TMR_OC_POLARITY_LOW;        /*  低电平为有效电平 */

    /** TMR2 CH1 delay = 800/1MHz = 800us */
    OCcongigStruct.pulse = 800;                                 /*  预设定匹配值 */
    TMR_ConfigOC1(TMR2, &OCcongigStruct);                       /*  写入通道1的寄存器 */
         4.2 效果演示
                  
          4.3 分析
               配置好相关寄存器,并使能开启输出(在1的时刻),因为低电平为有效电平,所以在CNT匹配成功前,都认为是无效电平(即高电平);
               然后等待CNT与预定的匹配值相等(在2的时刻),就会根据输出模式,输出一个相应的电平。(这里配置输出模式为输出一个有效电平,即低电平)。




使用特权

评论回复
沙发
tpgf| | 2023-6-7 13:16 | 只看该作者
冻结时 定时器是一个什么状态呢?此时可以进行何种操作啊

使用特权

评论回复
板凳
qcliu| | 2023-6-7 13:36 | 只看该作者
tpgf 发表于 2023-6-7 13:16
冻结时 定时器是一个什么状态呢?此时可以进行何种操作啊

呵呵 从字面意义理解 就是所有的都暂停了

使用特权

评论回复
地板
drer| | 2023-6-7 13:59 | 只看该作者
qcliu 发表于 2023-6-7 13:36
呵呵 从字面意义理解 就是所有的都暂停了

理解有误。冻结模式。定时器作为普通定时器使用,不使用输出比较功能

使用特权

评论回复
5
coshi| | 2023-6-7 14:20 | 只看该作者
强置为无效/有效电平模式下,不管比较寄存器和计数器数值,强制设置比较寄存器的输出。

使用特权

评论回复
评论
guiyan 2023-6-9 13:14 回复TA
对的! 谢谢补充! 
6
kxsi| | 2023-6-7 14:42 | 只看该作者
匹配时输出有效/无效电平模式。如递增计数器,比较寄存器内部数值提前设定好,当计数器相等或者大于比较值时,匹配,产生/不产生有效信号输出。当计数器值小于比较值时,不产生/产生有效信号输出。

使用特权

评论回复
7
wiba| | 2023-6-7 14:59 | 只看该作者
电平翻转模式。当匹配时,引脚状态翻转。步进电机控制常用的模式。

使用特权

评论回复
8
guiyan|  楼主 | 2023-6-9 09:56 | 只看该作者
tpgf 发表于 2023-6-7 13:16
冻结时 定时器是一个什么状态呢?此时可以进行何种操作啊

输出模式配置为冻结,那么当CNT与预设定值匹配时,不改变电平极性,就是冻结。但仍有电平输出。

使用特权

评论回复
9
guiyan|  楼主 | 2023-6-9 10:01 | 只看该作者
本帖最后由 guiyan 于 2023-6-9 10:19 编辑
kxsi 发表于 2023-6-7 14:42
匹配时输出有效/无效电平模式。如递增计数器,比较寄存器内部数值提前设定好,当计数器相等或者大于比较值 ...

您好!因为定时器一直会输出信号的,所以这句话应改为:
匹配时输出有效/无效电平模式。如递增计数器,比较寄存器内部数值提前设定好,当计数器相等或者大于比较值时,匹配,产生有效信号/产生无效信号输出。当计数器值小于比较值时,产生无效信号/产生有效信号输出。补充:而强制模式,则匹配前也会强制输出。

使用特权

评论回复
10
guiyan|  楼主 | 2023-6-9 10:10 | 只看该作者
drer 发表于 2023-6-7 13:59
理解有误。冻结模式。定时器作为普通定时器使用,不使用输出比较功能

我是这么理解的。
定时器已经配置为输出比较了,那么定时器就会一直有输出,至于输出什么样的电平,就要看配置哪种输出模式了。
冻结,就是输出时不改变原来的电平极性。
其他输出模式,就会输出相应的电平极性。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

23

帖子

0

粉丝