TIM输出比较

目录

OC 输出比较

PWM 脉冲宽度调制

输出比较通道(通用)

输出比较模式

PWM基本结构

舵机

直流电机及驱动

PWM输出配置相关函数


本篇文章内容的前置知识为 TIM定时中断,如果不了解,可点击链接学习

TIM定时中断-CSDN博客

OC 输出比较

        在 STM32 的定时器中,输出比较(Output Compare,简称 OC)是一种通过将计数器 CNT 的当前值与捕获/比较寄存器 CCR 中设定的值进行比较,从而控制输出引脚电平变化的功能。
        当 CNT 的计数值与 CCR 相等时,定时器可以根据配置,将对应的输出通道引脚设置为高电平、低电平,或执行电平翻转操作。这种机制常用于输出具有特定频率和占空比的 PWM(脉冲宽度调制)波形。
        每个高级定时器(TIM1、TIM8)和通用定时器(TIM2~TIM5)都具备最多 4 个输出比较通道,可以独立配置输出模式,实现多路 PWM 输出等功能。
        此外,高级定时器的前 3 个输出通道还支持死区时间生成和互补输出,因此在电机控制、开关电源等应用中具备更强的灵活性和安全性。

PWM 脉冲宽度调制

        PWM(Pulse Width Modulation,脉冲宽度调制)是一种通过调节脉冲信号高电平持续时间(即脉冲宽度)来控制输出平均电压或功率的技术。
        在一些具有惯性的系统中(如电机、灯光、加热器等),这些设备对能量的响应存在延迟或缓冲,因此可以不连续地供能,通过快速切换开关并调节“开”的时间比例,来实现对模拟量的等效控制
        具体而言,PWM 信号是由周期性脉冲组成的方波,其核心参数是占空比——即高电平持续时间占整个周期的百分比。通过改变占空比,可以控制输出的平均能量大小。

PWM参数:
     频率 = 1 / T_S            占空比 = T_ON / T_S           分辨率 = 占空比变化步距

T_ON:高电平持续时间(脉冲宽度)
T_OFF:低电平持续时间
T_S:PWM 周期(T_S = T_ON + T_OFF)

输出比较通道(通用)

1. CNT 与 CCR1 比较:
输出模式控制器根据 CNT 与 CCR1 的比较结果,生成 oc1ref 信号
2. oc1ref 输出路径:
oc1ref 一方面送到主模式控制器,另一方面经过一个选择器(由 CC1P 控制是否取反)进入输出使能电路。
3. 输出控制:
若 CC1E 使能,最终 oc1ref 控制的信号输出到引脚 OC1。

输出比较模式

模式描述
冻结当 CNT = CCR 时,REF 保持当前状态不变
匹配时置有效电平当 CNT = CCR 时,REF 被设置为有效电平
匹配时置无效电平当 CNT = CCR 时,REF 被设置为无效电平
匹配时电平翻转当 CNT = CCR 时,REF 电平翻转(高低电平切换)
强制为无效电平忽略 CNT 和 CCR 的比较结果,REF 被强制设置为无效电平
强制为有效电平忽略 CNT 和 CCR 的比较结果,REF 被强制设置为有效电平
PWM 模式 1向上计数:CNT < CCR 时 REF 为有效电平,CNT ≥ CCR 时 REF 为无效电平
向下计数:CNT > CCR 时 REF 为无效电平,CNT ≤ CCR 时 REF 为有效电平
PWM 模式 2向上计数:CNT < CCR 时 REF 为无效电平,CNT ≥ CCR 时 REF 为有效电平
向下计数:CNT > CCR 时 REF 为有效电平,CNT ≤ CCR 时 REF 为无效电平

PWM基本结构

这里选择了PWM 模式 1的向上计数模式
右上角蓝色是CNT,黄色是ARR,红色是CCR,绿色是高低电平

PWM频率:    Freq = CK_PSC / (PSC + 1) / (ARR + 1)
PWM占空比:    Duty = CCR / (ARR + 1)
PWM分辨率:    Reso = 1 / (ARR + 1)

这里的分辨率指的是占空比变化步距

舵机

舵机是一种根据输入PWM信号占空比来控制输出角度的装置
输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms

直流电机及驱动

直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转
直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作
TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向

左图是H 桥电路的基本结构,右图是电机驱动模块硬件电路

PWM输出配置相关函数

函数名功能主要参数说明
TIM_OCStructInit()将 TIM_OCInitTypeDef 结构体初始化为默认值&TIM_OCInitStructure:结构体指针。确保所有成员初始有意义的值
TIM_OC1Init()配置定时器通道1的输出比较功能TIM2:定时器; &TIM_OCInitStructure:配置结构体指针
TIM_SetCompare1()设置通道1的比较值(CCR1),控制 PWM 占空比TIM2:定时器; Compare:比较值(0~ARR)

结构体 TIM_OCInitTypeDef 成员说明

成员说明
TIM_OCMode输出比较模式,例如 TIM_OCMode_PWM1(PWM模式1)
TIM_OCPolarity输出极性,TIM_OCPolarity_High 表示有效电平为高
TIM_OutputState输出使能,TIM_OutputState_Enable 开启输出
TIM_Pulse初始比较值,对应 CCR1 值,影响初始占空比


尚未完结,可点击链接跳转下一篇文章

TIM 输入捕获-CSDN博客

<think>好的,我现在需要回答用户关于定时器中输出比较输出捕获的区别的问题。用户可能对这两个功能的工作模式和差异不太清楚,需要详细解释。首先,我得回顾一下自己之前的知识,并结合用户提供的引用内容来组织回答。首先,输出比较(OutputCompare)和输入捕获(Input Capture)是定时器的两种不同功能,它们在STM32等微控制器中常见。根据引用[2],输出比较主要用于生成PWM信号,通过设置CCR寄存器的值来控制占空比。而输入捕获则是用来测量外部信号的参数,比如脉冲宽度或频率。接下来需要明确两者的工作模式。输出比较模式下,定时器的计数器不断递增,当计数值与CCR寄存器中的设定值匹配时,会根据配置改变输出电平,从而生成PWM波形。例如,引用[2]中的代码示例展示了如何配置PWM模式,设置CCR值和极性,以及动态调整占空比。这说明输出比较是主动控制输出信号的行为。而输入捕获模式则是当外部信号发生跳变(比如上升沿或下降沿)时,定时器会捕获当前的计数值,并记录在CCR寄存器中。通过两次捕获的时间差,可以计算出信号的周期或脉宽。例如,如果用户想测量一个脉冲的高电平时间,第一次捕获上升沿,第二次捕获下降沿,两次的CCR值之差乘以计时器的时钟周期就能得到高电平持续时间。 用户提供的引用[1]中的结构体TIM_OCInitTypeDef涉及输出比较的配置参数,如OCMode、OutputState、Pulse(即CCR值)、极性等,这进一步支持了输出比较的配置方式。而输入捕获可能涉及不同的配置,比如捕获边沿的选择、输入滤波等,但用户提供的引用中没有直接提到输入捕获的结构体,可能需要依赖其他知识补充。 另外,引用[3]提到推挽输出和开漏输出模式,这可能与输出比较的物理输出方式有关,但用户的问题主要关注功能区别,这部分可能不需要深入,除非用户问到硬件层面的输出模式。关于定时器的销毁,引用[4]提到KillTimer函数,但这可能与功能区别无关,暂时可以忽略。总结下来,回答的结构应该包括: 1.功能定义:输出比较用于生成信号,输入捕获用于测量信号。 2.工作原理:比较模式主动改变输出,捕获模式被动记录时间。 3.应用场景:PWM生成vs信号测量。4.配置差异:结构体参数的不同,如输出比较需要配置Pulse、极性,而输入捕获需要配置捕获边沿、滤波器等。5.寄存器操作:输出比较设置CCR来改变占空比,输入捕获读取CCR获取时间戳。 需要确保使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$。例如,在解释PWM周期时,可以写周期由ARR决定,即$T=(ARR +1) \times \text{时钟周期}$,占空比为$D= \frac{CCR}{ARR+1}$。可能还需要生成相关问题,例如如何配置输入捕获来测量频率,或者输出比较的其他模式(如翻转、强制输出等)。需要检查是否引用了用户提供的引用内容,比如引用[2]中的PWM配置示例,引用[1]中的结构体字段,但要注意引用标识的正确添加。最后,确保回答结构清晰,分点说明,使用中文,并符合用户要求的格式。</think>### TIM输出比较 vs 输出捕获的区别 **定时器输出比较(Output Compare)**和**输入捕获(Input Capture)**是定时器的两种核心功能,分别用于**主动控制信号输出**和**被动测量外部信号**。以下是具体区别: --- #### 1. **功能定义** - **输出比较(OC)**: 通过比较定时器计数器(CNT)与预设的比较寄存器(CCR)值,主动控制输出引脚的电平变化,用于生成PWM、方波等信号[^2]。 - 示例:生成PWM时,当CNT < CCR输出高电平,CNT ≥ CCR输出低电平(模式1)[^2]。 - 公式:PWM周期由ARR(自动重载值)决定,即$T = (ARR + 1) \times \text{时钟周期}$,占空比为$D = \frac{CCR}{ARR + 1}$[^2]。 - **输入捕获(IC)**: 当外部信号发生边沿跳变(如上升沿/下降沿)时,自动捕获当前CNT值并存入CCR寄存器,用于测量脉冲宽度、频率等[^1]。 - 示例:测量高电平时间时,首次捕获上升沿时间戳$t_1$,第二次捕获下降沿时间戳$t_2$,则脉宽为$(t_2 - t_1) \times \text{时钟周期}$。 --- #### 2. **工作原理** - **输出比较**: - 定时器CNT持续递增,与CCR值匹配时触发动作(如翻转电平、输出高/低)。 - 需配置输出模式(如PWM模式、强制输出)、极性(高电平有效或低电平有效)等[^1]。 ```c // STM32 PWM配置示例(输出比较模式) TIM_OC_InitTypeDef sConfigOC = { .OCMode = TIM_OCMODE_PWM1, // PWM模式1 .Pulse = 500, // CCR值决定占空比 .OCPolarity = TIM_OCPOLARITY_HIGH }; HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_1); ``` - **输入捕获**: - 外部信号触发边沿时,硬件自动将当前CNT值存入CCR,并可能产生中断。 - 需配置捕获边沿(上升/下降)、滤波(抗噪声)等参数。 --- #### 3. **应用场景** - **输出比较**: - 生成PWM驱动电机、LED调光[^2]。 - 定时触发事件(如DMA传输)。 - **输入捕获**: - 测量超声波传感器回波时间。 - 计算旋转编码器的转速。 --- #### 4. **硬件配置差异** | **配置项** | **输出比较** | **输入捕获** | |------------------|----------------------------------|----------------------------------| | 寄存器操作 | 写CCR值控制占空比[^2] | 读CCR值获取时间戳 | | 引脚方向 | 输出模式(推挽/开漏)[^3] | 输入模式(浮空/上拉) | | 触发条件 | CNT与CCR匹配 | 外部信号边沿跳变 | --- #### 5. **关键代码区别** - **输出比较**:关注CCR写入和输出模式: ```c __HAL_TIM_SET_COMPARE(&htim, TIM_CHANNEL_1, 300); // 动态修改CCR ``` - **输入捕获**:关注捕获触发和中断处理: ```c HAL_TIM_IC_Start_IT(&htim, TIM_CHANNEL_2); // 启动捕获并启用中断 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { uint32_t timestamp = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值