STM32F429第二十篇之高级定时器——PWM(OSSI,OSSR)
文章目录
- 前言
- 高级定时器
- PWM模式
- 互补通道与刹车
- 重要寄存器
前言
从本文开始,介绍F429的高级时钟特性。本文主要介绍高级时钟的PWM功能的应用。关于PWM,本文重点介绍实现带有断路功能的双通道互补无延时的PWM波的实现方式。
本文主要参考文献为:
- ST.RM0090 参考手册
- 刘火良.STM32库开发实战指南.机械工业出版社
更新列表:
- 2021.02.23——更新关于OSSI与OSSR分析。
- 2021.04.16——更新关于PWM时序
高级定时器
本文不打算详细介绍高级定时器的每个特点,因为高级定时器的内容太多琐碎与复杂。本文决定通过以实验的方式,分别介绍高级定时器的三个应用场景:
- PWM波输出
- 输入捕获
- 编码器功能
通过三个比较常用的应用场景,比较全面的将高级定时器分解介绍。若以后遇到其他的应用场景,再详细介绍。
首先,我们看一下官方提供的高级定时器框图。该框图相对于基本定时器十分复杂,先大致了解一下即可。在此处,本文重点介绍高级定时器与芯片外部的接口。在框图中,输入接口在框图的左边,输出接口在框图的右边。通过观察该框图,可以了解到:F429的高级定时器与外部的物理接口可以大致分成以下三种类型:
- 外部触发输出接口 TIMx_ETR。
- 刹车输入接口 TIMx_BKIN
- 四通道接口
其中,前两种接口在图上比较明确不再详细展开,下面重点讲解一下四通道接口:
在高级定时器中,每个定时器有4个通道。而每个通道与芯片外部都有对应的物理接口。需要注意的是,其中输入接口是的对应关系可以通过寄存器配置,而输出接口是直接对应无法改变的。输入接口与通道是一一对应的,而每个通道提供输出接口的同时还提供对应的互补接口。也就是说,每一个通道对应两个输出接口。另外需要注意的就是,虽然在框图中将每个通道输入接口和输出接口分开画在框图的左右两侧,其实在物理上,名称相同的接口为同一个接口。
高级定时器与通用定时器的对外接口与F429的管脚对应关系总结如下:
通道 | TIM1 | TIM8 | TIM2 | TIM5 | TIM3 | TIM4 | TIM9 | TIM10 | TIM11 | TIM12 | TIM13 | TIM14 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
CH1 | PA8/PE9/PC10 | PC6/PI15 | PA0/PA5/PA15 | PA0/PH10 | PA6/PC6/PB4 | PD12/PB6 | PE5/PA2 | PF6/PB8 | PF7/PB9 | PH6/PB14 | PF8/PA6 | PF9/PA7 |
CH1N | PA7/PE8/PB13 | PA5/PA7/PH13 | ||||||||||
CH2 | PE11/PA9 | PC7/PI6 | PA1/PB3 | PA1/PH11 | PA7/PC7/PB5 | PD13/PB7 | PE6/PA3 | PH9/PB15 | ||||
CH2N | PB0/PE10/PB14 | PB0/PB14/PH14 | ||||||||||
CH3 | PE13/PA10 | PC8/PI7 | PA2/PB10 | PA2/PH12 | PB0/PC8 | PD14/PB8 | ||||||
CH3N | PB1/PE12/PB15 | PB1/PB15/PH15 | ||||||||||
CH4 | PE14/PA11 | PC9/PI2 | PA3/PB11 | PA3/PI0 | PB1/PC9 | PD15/PB9 | ||||||
ETR | PE7/PA12 | PA0/PI3 | PA0/PA5/PA15 | PD2 | PE0 | |||||||
BKIN | PA6/PE15/PB12 | PA6/PI4 |
PWM模式
PWM即脉冲宽度调制模式,PWM的频率由TIMx_ARR寄存器值确定,其占空比由比较寄存器TIMx_CCRx值确定。
在PWM模式中,信号流经的主要模块已经通过红色方框圈起来,大致分成以下三个部分:
- 时钟来源和基础定时器一样,直接来自RCC提供的内部时钟。
- 计数器模块和基本定时器基本一致。和基本定时器相比,只是多了一个重复计数器(Repetion Counter)。该功能暂时不到,暂且不论。所以,这部分只需要当做基本定时器的结构处理即可。
- 输出通道。输出通道共有4个,本文圈出只是1通道,以此为例。
关于基本定时器的更多知识,可以参考博客<STM32F429第十八篇之基本定时器> 。
其基本原理是,随着内部时钟的脉冲,CNT的计数值不断变化。当CNT的值产生溢出或者等于Capture/Compare 1 寄存器时,其OCxREF的电平发生变化,从而输出通道与互补输出通道的电平跟着变化。所以,自动重载寄存器(AutoReload Register)的值决定了计数器(CNT)的计数周期,也就是PWM的频率。而比较寄存器(Capture/Compare 1 Register)的值决定了PWM的占空比。
以边缘对齐模式为例,只要 TIMx_CNT < TIMx_CCRx,PWM 参考信号 OCxREF 便为 高电平,否则为低电平。如果 TIMx_CCRx 中的比较值大于自动重载值(TIMx_ARR 中),则 OCxREF 保持为“1”。如果比较值为 0,则 OCxRef 保持为“0”。
注意:
- ARR寄存器的数值加1,才是PWM波的周期数。
- CCRx寄存器的值直接等于有效电平的时间。
互补通道与刹车
互补通道与刹车功能是高级寄存器特有的功能。
在使用互补通道时,往往还需要考虑死区等特殊功能。而本文为了简单起见,不再考虑死区区间。通过配置TIMx_CCER寄存器,来使能互补通道,且将OCxREF 重定向到 OCx 输出或 OCxN 输出。
互补信号 OCx 和 OCxN 通过以下多个控制位的组合进行激活:TIMx_CCER 寄存器中的 CCxE 和 CCxNE 位以及 TIMx_BDTR 和 TIMx_CR2 寄存器中的 MOE、OISx、OISxN、OSSI 和 OSSR 位。
注意:
此处中文文档过于陈旧,最新的英文参考手册有不同的描述,如下所示:
关于OSSR和OSSI的作用,看文档有点云里雾里,通过实验,我个人认为其主要作用如下:
OSSR在MOE=1时起作用,即PWM处于运行状态。下面分条陈述:
- 若互补通道都使能(CCxE=CCxNE=1),此时很容易理解,两个端口按照配置正常输出PWM波。
- 若互补通道都禁用(CCxE=CCxNE=0),此时存疑,可以认为两个端口都处于高阻状态。
- 若互补通道有一个使能,一个禁用。则使能的端口正常输出PWM波,禁用的端口的状态与OSSR相关。
若OSSR=0,则禁用端口输出高阻(存疑),与CCxP或者CCxNP无关。
若OSSR=1,则禁用端口输出无效电平。假设OC1N为被禁用,即(CC1NE=0),则此时OC1N的输出为无效电平,即CC1NP为0时,高电平有效,输出电平为0,CC1NP为1是,低电平有效,输出电平为1。
OSSI与OSSR的作用很类似,其只有在MOE=0时起作用,即PWM处于高阻状态。我们假定互补的两个通道都使能,下面分条陈述:
- 若OISx与OSIxN不同,有且只有一个电平为高电平,则通道输出的电平对应空闲状态。即OCxN=OSIxN,OCx=OISx。
- 若OISx=OSIxN=1时,只有CCxP=CCxNP=0时,OCx=OCxN=0;其余时候OCx=OCxN=1。
- 若OISx=OSIxN=0时,与前面相似,只有CCxP=CCxNP=1时,OCx=OCxN=1,其余时候OCx=OCxN=0。
上面3种情况是OSSI=1的效果,若OSSI=0,此时输出高阻(存疑)。
可以这样理解:若是OISx=OSIxN且CCxP=CCxNP时,此时输出的是无效电平。其余的时候,OCxN=OSIxN,OCx=OISx。
真值表如下:
OSSI | 0 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|
OSIx | x | 0 | 0 | 1 | 1 |
OSIxN | x | 0 | 1 | 0 | 1 |
CCxP | x | 1 | x | x | 0 |
CCxNP | x | 1 | x | x | 0 |
OCx | x | 1 | 0 | 1 | 0 |
OCxN | x | 1 | 1 | 0 | 0 |
OSSR | 0 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|
CCxP | x | 使能 | 使能 | 0 | 1 |
CCxNP | x | 0 | 1 | 使能 | 使能 |
OCx | x | 使能 | 使能 | 0 | 1 |
OCxN | x | 0 | 1 | 使能 | 使能 |
发生断路(断路输入上出现所选电平)时:
重要寄存器
与PWM通道相关的重要寄存器如下所示:
CCMR1
在该寄存器中,需要配置以下几位:
CR1
在该寄存器中,需要配置以下几位:
EGR
CCER
BDTR
CR2
STM32F429第二十篇之高级定时器——PWM(OSSI,OSSR)相关推荐
- STM32F429第二十三篇之电容按键
文章目录 前言 硬件分析 原理 源程序 主函数 TpadInit GetTimeUntoched GetTimeCharge TpadScan 前言 本文主要介绍电容按键的原理与使用方法,主要使用的A ...
- 【WB32库开发】第10章 TIM1高级定时器——PWM互补输出
在上一章的输出多路PWM的基础上,本章主要讲述如何配置WB32上的高级定时器TIM1完成PWM互补输出. 对PWM互补输出的概括放到10.3节中,请大家先跟随10.1节了解PWM互补输出如何配置,再结 ...
- STM32F103的11个定时器详解 高级定时器pwm
STM32F103VC这款单片机一共有2个高级定时器TIM1和TIM8 这2个高级定时器都可以同时产生3路互补带死区时间的PWM信号和一路单独的PWM信号, 具有刹车输入功能,在紧急的情况下这个刹车功 ...
- 自学前端第二十九天 CSS高级之细节技巧
第二十九天 css高级细节技巧 一.background-color :属性设置元素的背景颜色. 定义和用法 background-color 属性设置元素的背景颜色. 元素背景的范围 backgro ...
- LinuxGUI自动化测试框架搭建(二十一)-截止第二十篇,如果出现以下错误,请修改代码+截止目前的全局配置文件config.py内容
(二十一)-截止第二十篇,如果出现以下错误,请修改代码 1 错误类型 2 原因分析 3 解决方法 4 修改common/screenShot.py 5 修改config/config.py 1 错误类 ...
- GD32通用定时器、高级定时器PWM输出例程
通用定时器 /********************************************************************************************* ...
- 【WB32库开发】第12章(上)TIM1高级定时器——PWM输入捕获
本章要学习的PWM输入捕获是定时器又一重要应用,使用PWM输入捕获可以测量输入PWM的频率和占空比. PWM输入只能使用定时器的两个通道:通道1和通道2,且一路PWM输入要占用两个捕获寄存器,一个用于 ...
- STM32入门(二十五)----高级定时器
高级定时器 定时器 高级定时器 高级定时器GPIO 高级定时器功能框图 时钟源 内部时钟源 外部时钟1 外部时钟2 内部触发输入 内部触发连接 TIM1为TIM2提供时钟 控制器 时基单元 预分频器 ...
- STM32F429第二十八篇之ADC
文章目录 前言 框图 1.对外引脚 引脚描述 输入电压与AD值关系 2.输入通道 通道与GPIO 规则转换与注入转换 转换顺序 3. 触发源 控制开关 外部触发源 4. 时钟与时间 时钟 转化时间 5 ...
最新文章
- 23. matlab并行计算原理以及parpool函数
- 初学python之路-day10
- git放弃本地修改,强制覆盖本地文件
- Java学习之模拟纸牌游戏,List的ArrayList,Map的HashMap,重写Collections类的sort方法对指定类进行通过特定属性排序,输入异常处理等的学习...
- java remove all_如何使用Java List等集合类的removeAll方法
- ppt流程图字体太小_简单三步,用WPS轻松完成一个又大气又好看的流程图!
- 手机局域网html,手机遥控电脑开机神器!局域网唤醒App
- PHP仿代下狗源码-素材代下载搜索引擎系统整站打包
- 【C语言】一维数组排序(函数,数组和循环结构语句)
- 关于头文件的一道选择题
- [转]正则表达式中re.match、re.search、re.findall的用法和区别
- Spring.net 控制反转(IoC)容器_(收集)
- python实现自动开机_python自动循环定时开关机(非重启)测试
- Prototype如何使用?
- 中国二代居民身份证校验_编码正确性校验 java实现
- 中继器 网桥 路由器 网关
- Excel打造翻译神器(自定义函数)
- 国内优秀的设计公司有哪些?
- 【技术分享】新核心业务系统数据架构规划与数据治理
- 第四范式上市更进一步:再募资7亿美元,AI独角兽们陷亏损泥潭