目录
本篇文章内容的前置知识为 TIM定时中断,如果不了解,可点击链接学习
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 值,影响初始占空比 |
尚未完结,可点击链接跳转下一篇文章