STM32初学——TIM输出比较

2023-05-16

 TIM输出比较——主要功能——输出PWM波形——》驱动电机的必要条件

一、如何实现LED呼吸灯——LED连续调控亮度???

PWM的功劳

二、PWM驱动舵机

三、PWM驱动直流电机

  • OC ——output compare输出比较
  • IC——input capture输入捕获
  • CC——capture/compare——输入捕获和输出比较的单元

OC(Output Compare)输出比较

输出比较可以通过比较CNT计数器与CCR捕获/比较寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形

每个高级定时器和通用定时器都拥有4个输出比较通道

高级定时器的前3个通道额外拥有死区生成和互补输出的功能——驱动三相无刷电机

CCR Capture/Compare Register——捕获/比较寄存器

输入捕获和输出比较共用

当使用IC时,是捕获寄存器;当使用OC时,比较寄存器——电路比较CCR与CNT的值,CNT计数自增,CCR是我们给定的值

由上图可以读到:有四个输出比较的通道,可以同时输出四路PWM波形,这四个通道有各自的CCR寄存器,但是它们共用一个CNT计数器

 

基本定时器最为简单,无输出比较和输入捕获功能 

PWM波形——数字输出信号,由高低电平组成,连续变化电平信号

function:在数字系统等效实现一个模拟信号的输出

  • 最开始提出的问题:数字输出端口控制的LED,按理来说,只有高低电平——完全亮灭两种状态,如何实现呼吸灯??? 
  • 回答ANSWER:让LED不断亮灭,其点亮、熄灭的频率足够大时,LED不会闪烁(起码人眼识别不到——余晖、人眼的视觉暂留现象,LED不会立即熄灭,而是过一小会儿再熄灭),其呈现一个中等亮度,通过调控点亮、熄灭的时间比例,使LED呈现不同的亮度级别

电机调速也是类似的原理——让电机不断的通断电(以一个很快的频率),致使电机速度能维持在一个中等速度

  • PWM秘诀——天下武功,唯快不破
  • 应用场景——惯性系统
  • 使高低电平跳变的数字信号可以  =等效=  模拟量

参数一  ——PWM频率

PWM频率越快,其等效的模拟信号越平稳,但同时性能开销也越大

一般而言PWM频率在几k—几十KHz

参数2  ——  占空比——决定PWM等效出来的模拟电压的大小

占空比越大,等效的模拟电压越趋近于高电平;占空比越小,趋向于低电平。

 参数3  ——  分辨率——占空比变化的精细程度

匹配时电平翻转——

  • function——输出一个频率可调,占空比始终为50%的PWM波形——假设你设置CCR = 0,那CNT每次更新清0时,就会产生CNT = CCR的事件——》导致输出电平翻转一次,即每更新两次,输出为一个周期,输出波形频率 = 更新频率 / 2

编程PWM模块主体思想 ——打通上图所示的这些模块,实现PWM输出

1、RCC开启时钟,打开我们需要使用的TIM外设、GPIO外设的时钟

2、配置时基单元

3、配置输出比较单元——CCR的值、输出比较模式、极性选择、输出使能(结构体统一配置)

4、配置GPIO——把PWM对应的GPIO口,初始化为复用推挽输出

5、运行控制——启动CNT计数器

先来理解外部电路 ,再来理解内部电路

死区生成与互补输出

  • 两个互补的输出端口,
  • 按理说,我们假设上管导通,下管需立即关断,但由于——器件不理想,上管还没完全断,下管就已经导通了,出现短暂上下管同时导通——电源短路——lead to ——功率损耗、器件发热
  • 为了避免以上问题——死区生成电路:作用机理:在上管关闭时,延迟一段时间,再导通下管 

     

推挽电路——四种模式

  • 上管导通,下管断开——高电平输出
  • 下管导通,上管断开——低电平输出
  • 上管导通,下管导通——电源短路,不允许
  • 上管断开,下管断开——高阻态输出

推挽电路的实际应用

  • 两个推挽电路——H桥电路——实现控制直流电机正反转
  • 3个推挽电路———实现——驱动三相无刷电机

实际控制——对于单片机STM32来控制的话需要两个控制极A/B,且A、B 两个控制极电平相反——互补

涉及知识点: 

6-3  LED呼吸灯

采用正极性接法,使实验现象更为直观——占空比越大,LED越亮;

介绍函数: (我仅仅记录了小部分)

配置输出比较 outout compare——用结构体初始化输出比较单元的(master)

四个初始化函数对应四个输出比较单元 / 通道,不同通道所对应的GPIO口也是不一样的

 给输出比较结构体赋默认值

 仅高级定时器使用,在使用高级定时器输出PWM时,需要调用此函数,使能主输出,否则PWM将不能正常输出

 运行时更改参数的函数

 配置CCR的预装功能——影子寄存器——写入的值不会立即生效,而是在更新事件才会生效

 单独更改输出极性

 

单独修改输出使能参数

 单独更改CCR寄存器值的函数 ——运行时,更改占空比(master)

默认复用功能——片上外设端口与GPIO的连接关系 

配置PA0/PA15

使用复用推挽输出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //使用复用推挽输出

普通开漏、推挽输出

引脚控制权来自于输出数据寄存器

复用推挽输出——定时器控制引脚,输出数据寄存器被断开,输出控制权转移给片上外设,对于此片上外设引脚连接的就是TIM2的CH1通道,只有将GPIO设置成复用推挽输出,才可以将引脚的输出控制权转移给片上外设,PWM的波形才能通过引脚输出

 程序的参数计算

	TIM_BaseInitStructure.TIM_Period = 10000 - 1;//周期——ARR自动重装器的值
	TIM_BaseInitStructure.TIM_Prescaler = 7200 - 1;//PSC预分频器的值
	TIM_OCInitStructure.TIM_Pulse = ;//设置CCR寄存器

 

让LED呈现呼吸灯的效果——不断更改CCR的值

引脚重映射 ——PA15——AFIO

引脚重映射配置 

把PA0——》PA15,可使用部分重映像、完全重映像 

解决调试端口的复用

SWJ——SWD/JTAG两种调试方式

调试端口

使用

PB4变成普通IO口

PA15、PB3、PB4变回普通IO口 

 五个引脚全部变为普通GPIO,没有调试功能,千万小心使用

如果你重映射的引脚正好是调试端口,三步走

  • //打开AFIO时钟
  •   //重映射引脚
  •     //解除调试端口

6-2 PWM驱动舵机

同一个定时器不同通道输出PWM的特点: 

  •  对于同一个定时器的不同通道输出的PWM,共用一个CNT计数器;所以他们的频率必须一样,
  • 他们的占空比由各自的CCR决定,所以占空比可以各自设定;
  • 他们的相位,由于计数器更新,所有的PWM同时跳变,所以相位是同步的

错误——

 

错误——2.情况:SWJ功能在代码中被关闭了
 这种情况的特点往往是:之前烧录都好好的,某次烧录后突然就不行。并且当你一直按着开发板的reset键时,你会发现又能识别设备了(根据这个现象,网上有给出先按住reset键,在点烧录按钮后立刻松开reset的笨办法,这个方法看手速和人品,有概率解决)。
————————————————
版权声明:本文为CSDN博主「冯凤阳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/vskjrv/article/details/122416836

存疑

     中定义了PB1、PB11两个GPIO,但是在PB1接入一个按键的基础上,再在PB11上接一个按键,这个PB11上的按键相当于RESET复位按键,为什么呢???

6-5 PWM驱动直流电机

PA2对应与——TIM2的通道三

  •  发现问题:电机会发出像蜂鸣器一样的响声——因为电机里面也是线圈和磁铁,如何避免此问题?

  • A:加大PWM频率,当其频率足够大时,超出人耳范围时,就听不到了,人耳听到声音的频率是20Hz—20KHz,
  • 我们目前给的是1KHz,人耳可以听到 

由于声音太大,没能下载,只是编译。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32初学——TIM输出比较 的相关文章

  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • 优化 ARM Cortex M3 代码

    我有一个 C 函数 它尝试将帧缓冲区复制到 FSMC RAM 这些函数将游戏循环的帧速率降低至 10FPS 我想知道如何分析反汇编的函数 我应该计算每个指令周期吗 我想知道CPU把时间花在哪里 在哪个部分 我确信该算法也是一个问题 因为它的
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • 136-基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真+源程序

    资料编号 136 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 蜂鸣器 制作一个基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真 2 通过DHT11传感器检测当前温湿度 并且显示到L
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE

随机推荐

  • 一起自学SLAM算法:1.1 ROS简介

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 1 1 ROS简介 1 2 ROS开发环境搭建 1 3 ROS系统架构 1 4 ROS调试工具 1 5 ROS节点通信 1 6 ROS其
  • 一起自学SLAM算法:1.2 ROS开发环境搭建

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 1 1 ROS简介 1 2 ROS开发环境搭建 1 3 ROS系统架构 1 4 ROS调试工具 1 5 ROS节点通信 1 6 ROS其
  • 戴尔电脑恢复系统后,D盘被加密Bitlocker,要求输入48位密钥,才能打开D盘---解决过程

    一 前言 今天DELL电脑恢复系统后 xff0c D盘被加密 xff08 D盘图标上有一把黄色的锁 xff09 xff0c 鼠标双击准备打开D盘 xff0c 提示了一个密钥ID xff0c 让输入48位码解密 xff0c 被microsof
  • 一起自学SLAM算法:1.4 ROS调试工具

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 1 1 ROS简介 1 2 ROS开发环境搭建 1 3 ROS系统架构 1 4 ROS调试工具 1 5 ROS节点通信 1 6 ROS其
  • 一起自学SLAM算法:1.5 ROS节点通信

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 1 1 ROS简介 1 2 ROS开发环境搭建 1 3 ROS系统架构 1 4 ROS调试工具 1 5 ROS节点通信 1 6 ROS其
  • 一起自学SLAM算法:3.4 图像特征点提取

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 3 1 认识图像数据 3 2 图像滤波 3 3 图像变换 3 4 图像特
  • 一起自学SLAM算法:第4章-机器人传感器

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 第4章 机器人传感器 4 1 惯性测量单元 4 2 激光雷达 4 3 相
  • 一起自学SLAM算法:5.4 ARM主机Jetson-tx2

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 第4章 机器人传感器 第5章 机器人主机 5 1 X86与ARM主机对比
  • 一起自学SLAM算法:6.1 底盘运动学模型

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 第4章 机器人传感器 第5章 机器人主机 第6章 机器人底盘 6 1 底
  • 一起自学SLAM算法:7.5 基于因子图的状态估计

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 第4章 机器人传感器 第5章 机器人主机 第6章 机器人底盘 第7章 S
  • 一起自学SLAM算法:10.2 VINS算法

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 第4章 机器人传感器 第5章 机器人主机 第6章 机器人底盘 第7章 S
  • 一起自学SLAM算法:12.3 autoware导航系统

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 第4章 机器人传感器 第5章 机器人主机 第6章 机器人底盘 第7章 S
  • 一起自学SLAM算法:13.1 运行机器人上的传感器

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 第4章 机器人传感器 第5章 机器人主机 第6章 机器人底盘 第7章 S
  • UBLOX配置/GPS配置设置/u-center使用

    对u blox的GPS接收机设置可以查看文档 xff0c 文档比较长 xff0c 刚开始看完全没有头绪 xff0c 可以使用u center对b blox进行设置 本文先描述使用u center的设置方法 xff0c 随后补充一些配置报文的
  • 一起自学SLAM算法:13.2 运行SLAM构建地图

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 第2章 C 43 43 编程范式 第3章 OpenCV图像处理 第4章 机器人传感器 第5章 机器人主机 第6章 机器人底盘 第7章 S
  • AttributeError: partially initialized module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘

    AttributeError partially initialized module cv2 has no attribute gapi wip gst GStreamerPipeline 报错解决 import cv2 aruco报错解
  • 面试问题总结——OpenCV基础

    1 OpenCV中cv Mat的深拷贝和浅拷贝问题 深拷贝 xff1a 分配新内存的同时拷贝数据 xff0c 当被赋值的容器被修改时 xff0c 原始容器数据不会改变 浅拷贝 xff1a 仅拷贝数据 xff0c 当被赋值容器修改时 xff0
  • MATLAB图像二值化函数im2bw与imbinarize对给定阈值的内部处理细节

    MATLAB图像处理工具包中的im2bw函数和imbinarize函数均可以实现灰度图像的二值化功能 xff0c 且在MATLAB R2018a之后推荐使用imbinarize 但两者在内部处理图像的时候具有一些较为隐晦的预设 xff0c
  • JS的定时器

    JS的定时器 1 Interval的开启和关闭2 Timeout定时器 JS中的定时器有两种 xff0c 分别是Interval和setTimeout 1 Interval的开启和关闭 开启setInterval 函数 时间 按照指定的周期
  • STM32初学——TIM输出比较

    TIM输出比较 主要功能 输出PWM波形 驱动电机的必要条件 一 如何实现LED呼吸灯 LED连续调控亮度 xff1f xff1f xff1f PWM的功劳 二 PWM驱动舵机 三 PWM驱动直流电机 OC output compare输出