「STM32入门」TIM输出比较

2023-05-16

输出比较的简介

  • 输出比较英文写作OC (Output Compare) 
  • 输出比较可以通过比较CNT和CCR寄存器值的关系,来对输出电平进行置高或者置低或者翻转的操作,用于输出一定频率和占空比的PWM波形
  • 常见应用例子如:呼吸灯,调速电机等
  • CCR(Capture/Compare Register的缩写,及捕获/比较寄存器) 

CNT与CCR之间的逻辑关系

  • CNT计数自增,CCR是我们给定的一个值

PWM简介 

  • Pulse Width Modulation 脉冲宽度调制
  • 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速领域
  • PWM的参数:
  • 频率 = \frac{1}{T_{s}} 
  • 占空比 = \frac{T_{on}}{T_{s}}
  • 分辨率 = 占空比变化步距

如何理解上述所说的:PWM可用于等效获得模拟参量呢?

在我们通常点亮LED实验中,我们只能给LED置1或者置0,也就是亮或者灭。但是当我们以一个很高的频率点亮熄灭,点亮熄灭,点亮熄灭...的时候,LED就会呈现出中等亮度,具体的亮暗程度就取决于亮的时间的占空比。

同理:我们不断地给电机通电断电,通电断电,通电断电...就可以让电机的速度维持在一个中等速度。

定时器的输出比较模块输出PWM

根据上面这张图,我们关注输出模式控制器这一模块。它的输入端是CNT和CCR的大小关系,输出则是oc1ref的高低电平。

在输出模式控制器中有许多输出比较模式,一般来说最常用也是这里要介绍的是PWM模式

 其中具体选模式1还是模式2,向上计数还是向下计数都是可以在代码中进行配置的,这两个模式可以输出频率和占空比都可调的波形。


接下来重点介绍PWM基本结构(该图对应PWM模式1)

我们首先关注右上角的图,其中黄线代表ARR的值,蓝线代表CNT的值,红线代表CCR的值

CNT从0开始自增,一直增到ARR,也就是99,之后清0,再继续自增...一直循环下去

可以看到,我们设置CCR为30,当蓝线在红线下面时,输出高电平;当蓝线在红线上面时,输出低电平,对应PWM模式1的执行逻辑。

在这里我们发现:当我们将CCR的值设高,高电平的时间就延长,占空比升高。对应回我们的两个例子的现象就是,灯变得更亮,电机转的更快。

流程图中的REF指的就是一个频率可调,占空比也可调的PWM波形。最终再经过极性选择和输出使能,通向GPIO口。

参数计算 

PWM频率:Freq = CK_PSC / (PSC + 1) / (ARR + 1) 

PWM占空比:Duty = CCR / (ARR + 1) 

PWM分辨率:Reso = 1 / (ARR + 1) 

其中CK_PSC是系统频率72MHz,PSC是预分频系数


举个例子

如果我们要产生一个频率为1kHz,占空比为50%,分辨率为1%的PWM波形

那么 

CK_PSC / (PSC + 1) / (ARR + 1) = 1000

CCR / (ARR + 1) = 50%

1 / (ARR + 1) = 1% 

解得:

ARR = 99,CCR = 50,PSC = 719 

由于个人项目需要,这里补充简介一下直流电机及其驱动,权当笔记。 

直流电机及其驱动

电机(左)

驱动电路(右) 

  • 直流电机有两个电极,当电极正接时,电机正转;反接则反转。
  • 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合驱动电路来操作
  • 查表控制电机正转或反转
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

「STM32入门」TIM输出比较 的相关文章

  • 51单片机 数码管中断操作

    实践目的 1 掌握中断的概念和思想 2 掌握51单片机中断系统和相关软硬件设计 实践内容 1 利用单片机的P0口接数码管的字段脚 P1 0脚接共阴极 P3 2 P3 3引脚接独立按键产生外部中断信号 编写程序 当程序正常运行时数码管显示H字
  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • 在没有 IDE 的情况下如何使用 CMSIS?

    我正在使用 STM32F103C8T6 并想使用 CMSIS 这本质上只是寄存器定义 没有代码 让我的生活更轻松 同时仍保持在较低水平 问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用 所有文档似乎都与特定于供应商的 I
  • GCC - 如何停止链接 malloc?

    我正在努力将我的代码缩减到最小的骨架大小 我使用的是只有 32k 闪存的 STM32F0 需要很大一部分闪存用于数据存储 我的代码已经有大约 20k 闪存大小 其中一些是由于使用了 STM32 HAL 函数 我可以在以后需要时对其进行解释和
  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 无法使用 OpenOCD 找到脚本文件

    我正在尝试按照本教程将 OpenOCD 与我的 ST 发现板一起使用 https japaric github io discovery README html https japaric github io discovery READM
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • 将你的电脑远程连接树莓派的简单方法

    不使用网线或者显示器 键盘 鼠标等外接设备 xff0c 即可远程建立树莓派与电脑的连接 目录 1 提前准备 1 1 准备硬件 1 2 系统镜像 1 3 准备软件 2 烧录系统 3 使用ssh连接电脑热点 4 VNC远程控制连接树莓派桌面 1
  • DMA简介

    为什么要有 DMA 技术 dma主要是用于读写数据用的 在没有 DMA 技术前 xff0c I O 的过程是这样的 xff1a CPU 发出对应的指令给磁盘控制器 xff0c 然后返回 xff1b 磁盘控制器收到指令后 xff0c 于是就开
  • c语言冒泡法对10个整数进行递增排序

    分析 xff1a 冒泡法排序的思路是 xff0c 第一次排序对n个元素从头到尾反复进行相邻两个数的比较 xff0c 将小的调到前头 xff0c 第一趟冒泡结束后 xff0c 最大的元素就是数组序列中最后一个元素 xff0c 也就是它的最终位
  • 全网最详细的openstack安装教程

    前言 相信很多安装过openstack的人都知道 xff0c openstack的安装过程很麻烦 xff0c 总是需要修改文件 xff0c 并且还有一堆报错信息 xff0c 遇到一些报错也不知道怎么去解决 xff0c 所以这次就记录并分享一
  • 前缀极差

    前缀极差 蒜头君有 n 个数 xff0c 他提出了 q 个问题 xff0c 每个问题是说 xff0c 询问前 x 个数的极差 xff08 最大值减最小值 xff09 你能帮助他解决这 q 个问题吗 xff1f 输入格式 第一行两个整数 n
  • 「数据库SQL」 ‘三小时快速入门’

    目录 写在前面 数据类型 将自动补全改为默认大写字母的方法 视频 0 xff5e 1 39 11 39 30 对应代码及笔记 删除 修改资料 获得资料 创建公司资料库表格 获取公司资料 聚合函数 万用字元 联集 连接 子查询 写在前面 本篇
  • C++:将输出结果写入文件、从文件中读取数据

    应用背景 很多时候我们会使用语句 xff1a cout lt lt lt lt endl 来进行将某个变量的值展示在屏幕上 xff0c 但如果我们希望将这个结果写入文件中 该怎样操作呢 xff1f 下面展示了如何将输出结果写入txt文件之中
  • C++:set的常用用法详解

    1 关于set C 43 43 STL 之所以得到广泛的赞誉 xff0c 也被很多人使用 xff0c 不只是提供了像vector string list等方便的容器 xff0c 更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构
  • 计算分部积分实例:t^2 * e^2t 的积分

  • 采样定理扩展结论

    已知 xff1a x t 的奈奎斯特律为 y t 的奈奎斯特率为 那么有以下结论 x t y t 时域相乘 61 gt 频谱卷积 61 gt 新信号的奈奎斯特率为和的和 x t y t 时域卷积 61 gt 频谱相乘 61 gt 新信号的奈
  • Acwing:合适数对

    今天在补AcWing周赛题目的时候遇到了一道很经典的区间和问题 xff0c 因此写下本篇博客记录下来 原题链接 xff1a 4316 合适数对 AcWing题库 题目描述 输入样例1 xff1a 5 4 5 1 3 4 1 输出样例1 xf
  • 蓝桥杯:统计子矩阵(十三届省赛C++组)

    前言 xff1a 这道题目是矩阵类型题目经典题型 xff0c 解题大体思路是前缀和 43 双指针扫描 xff0c 在我这篇博客中 第十三届蓝桥杯省赛C 43 43 B组题解 第十三届蓝桥杯b组c 43 43 答案 正在黑化的KS的博客 CS
  • pyqt 之 QTableView listvview 添加复选框 Checkbox

    目录 简述 常见的实现方式 具体实现 1 自定义模型QAbstractTableModel xff0c 通过flags 函数来实现 2 自定义委托QAbstractItemDelegate xff0c 通过paint 函数来实现 3 QSt
  • 第十四届蓝桥杯模拟赛第三期(Python)

    写在前面 包含本次模拟赛的10道题题解能过样例 xff0c 应该可以AC若有错误 xff0c 欢迎评论区指出本次题目除了最后两题有些难度 xff0c 其余题目较为简单 xff0c 我只将代码和结果给出 xff0c 如果不能理解欢迎私信我 x
  • Acwing: 一道关于线段树的好题(有助于全面理解线段树)

    题目链接 x1f517 xff1a 2643 序列操作 AcWing题库 前驱知识 xff1a 需要理解线段树的结构和程序基本框架 以及懒标记的操作 题目描述 题目分析 对区间在线进行修改和查询 xff0c 一般就是用线段树来解决 xff0
  • 扩展欧几里得算法及其应用

    前言 由于数论的板子真的很抽象 xff0c 也很难背 xff0c 所以特此记录扩展欧几里得算法的板子和它的用途 本篇文章只涉及应用 xff0c 不涉及证明 xff0c 如需理解证明还请各位移步其他优秀的讲解 xff01 扩展欧几里得算法 先
  • 蓝桥杯:Python组再也不怕组合数计数

    有一类题目是是这样的 xff1a 要求我们从n个数中选m个 xff0c 问共有多少种取法 如果是用C 43 43 写的话 xff0c 要应用到Lucas定理 xff0c 暴力阶乘会超时 这里给大家介绍一个Python3 8 math库自带的
  • 模拟角频率和数字角频率的关系

    概念 xff1a 模拟频率f xff1a 每秒经历多少个周期 xff0c 单位Hz xff0c 即1 s xff1b 模拟角频率 xff1a 每秒经历多少弧度 xff0c 单位rad s xff1b 数字角频率w xff08 归一化角频率
  • 对于时不变系统的理解

    来源 xff1a 信号与系统 对 时不变性 判定的一点注记 知乎
  • 「STM32入门」TIM输出比较

    输出比较的简介 输出比较英文写作OC Output Compare 输出比较可以通过比较CNT和CCR寄存器值的关系 xff0c 来对输出电平进行置高或者置低或者翻转的操作 xff0c 用于输出一定频率和占空比的PWM波形常见应用例子如 x