STM32(五):定时器——输出比较

news2024/11/16 5:35:18

定时器输出比较功能:输出PWM波形

OC(Output Compare)输出比较

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

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

        高级定时器的前3个通道额外拥有死区生成和互补输出的功能(三项电机)。

        CCR:捕获比较寄存器。IC(InputCompare):输入捕获 CC:Capture/Compare 

PWM(Pulse Width Modulation)脉冲宽度调制

        在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域

PWM参数:

        频率= 1 /TS (频率越快等效的模拟信号越平稳,开销越大)

        占空比= TON / TS(占空比越大,等效的模拟电压就越趋向于高电平,占空比越小,等效的模拟电压就越趋向于低电平)           分辨率= 占空比变化步距(例如:1%,2%,3%   这种分辨率是1%)

        当调控灯的点亮和熄灭的时间比例时,就能让LED呈现出不同的亮度级别。下1图,上长下短等效模拟量偏上。上短下长等效模拟模拟量偏上。

高级定时器前三个输出比较部分电路

通用定时器输出比较部分电路

        CNT>=CCR1,输出模式控制器收到信号会改变OC1REF的输出电平。该信号:1.可以前往主模式控制器,把REF信号映射到主模式的TRGO输出上去;2.通过下路到达极性选择。极性选择:给CC1P写0,即不反转,写1,电平翻转。上方的ETRF一般不用。

输出模式控制器(输出比较模式)

        冻结模式:输出PWM波形时候,想暂停一下, 切换为冻结模式,PWM波形输出停止,高低电平位置暂停时刻的状态,保持不变。

        有效电平和无效电平是高级定时器的说法,是和关断、刹车这些功能配和表述。

        匹配时翻转模式:可以输出一个频率可调,高低电平时间相等,占空比为50%的PWM波形;例如,如CCR为0,那CNT每次更新清0时,就会产生一次CNT=CCR的时间,每更新两次,输出为一个周期。当改变定时器更新频率时,输出波形频率也会随之改变。

        PWM模式1:可以输出频率和占空比都可调的PWM波形,一般只使用向上计数,由于输出模式里可以设置极性,所以PWM模式1的正极性和PWM模式2的反极性最终的输出是一样的。

输出PWM的基本结构:        

        ARR为黄色线;CCR为红色线;CCR设置大一点,占空比就大;CCR设置的小一点,占空比就小;

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

        PWM占空比:  Duty= CCR / (ARR +1) // 因为30时刻已经变成低电平了,所以不是CCR+1

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

PWM使用步骤:

        第一步RCC开始时钟,把要用的TIM外设和GPIO的外设打开;

        第二步 配置时基单元,包括时钟源选择

        第三步 配置输出比较单元,包括CCR的值,输出比较模式,极性选择,输出使能这些参数。

        第四步 配置GPIO。

        第五步 启动计数器。

硬件:

舵机:

        舵机是一种根据输入PWM信号占空比来控制输出角度的装置.

        输入PWM信号要求:周期为20ms高电平宽度为0.5ms~2.5ms;舵机不是使用PWM等效模拟输入,而是把PWM当成一个通信协议;

 直流电机

        直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转

        直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作

        TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向。

 

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);输出比较模块初始化;

void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);配置CCR寄存器的预装功能(影子寄存器);

void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);用来配置快速使能,(单脉冲模式)

void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);

void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);

void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);

void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);外部事件时,清楚ref信号;

void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);

void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);

void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);

void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);用来单独设置输出比较的极性的

void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);N 为互补通道

void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);

void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);

void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);单独修改输出使能参数

void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);

void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);用来单独更改输出比较模式的函数

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);用来单独更改CCR寄存器值的函数

void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);

void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);

void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);

void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);仅在高级定时器使用,在使用该机定时器输出PWM时,需要调用这个函数,使能主输出,否则PWM将不能输出。

AFIO :配置引脚的重映射;

AF_PP复用推挽输出,只有把GPIO设置成复用推挽输出,才能输出到GPIO端口例如PA0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【硬件模块】红外跟随避障模块

红外跟随避障模块实物图 红外避障模块不断发射红外信号,当红外信号: 有反射回来,OUT 输出低电平,输出指示灯(绿灯)亮; 没反射回来,OUT 输出高电平,输出指示灯&#xff08…

tcp通信以及wireshark抓包

loop: //本地回环测试 tcp在传输时,有可能就会将两次发送的内容粘到一起,这是由于tcp的第三个特点:字节流式传输。它不一定会将两次发送出来的数据进行严格区分。这种现象在tcp链接中叫粘包。 但是socket在底层发送东西的时候是会在一段时间…

【微信小程序】使用 npm 包 - API Promise化-- miniprogram-api-promise

1. 基于回调函数的异步 API 的缺点 默认情况下,小程序官方提供的异步 API 都是基于回调函数实现的,例如,网络请求的 API 需要按照如下的方式调用: 缺点:容易造成回调地狱的问题,代码的可读性、维护性差&a…

I2C软件模拟与Delay寄存器延迟函数

环境 芯片:STM32F103ZET6 库:来自HAL的STM32F1XX.H 原理图 有图可知SCL和SDA两条线接到了PB10和PB11 Driver_I2C.h #ifndef __DRIVER_I2C #define __DRIVER_I2C#include "stm32f1xx.h" #include "Com_Delay.h" // 定义拉高SCL引脚的宏操作 #…

【电子数据取证】应用程序提取及固定

文章关键词:电子数据取证、手机取证、计算机取证、计算机仿真、云取证 一、前言 在数字化时代,电子数据已成为现代社会不可或缺的一部分,它不仅记录着个人的日常生活轨迹,也承载着企业运营的核心信息,更在司法体系中…

Nginx知识详解(理论+实战更易懂)

目录 一、Nginx架构和安装 1.1 Nginx 概述 1.1.1 nginx介绍 1.1.2 Nginx 功能介绍 1.1.3 基础特性 1.1.4 Web 服务相关的功能 1.2 Nginx 架构和进程 1.2.1 Nginx 进程结构 1.2.2 Nginx 进程间通信 1.2.3 Nginx 启动和 HTTP 连接建立 1.2.4 HTTP 处理过程 1.3 Nginx …

pdf转换成excel在线转换?这3款别错过

作为一名财务人员,我每天的工作都离不开处理大量的文件和数据。其中,将PDF格式的报表转换成Excel表格是一项经常要做的工作。在众多的PDF转换工具中,我试过了三款PDF转换工具,现在就来分享一下我的使用体验。 一、福昕PDF转换大师…

普元EOS-低开页面下拉选择控件加载列表数据

1 前言 普元EOS进行低代码开发页面可以高效提高开发效率,并且减少代码的出错机会。 在低代码开发页面的时候,表单页面中可以使用大量的常用控件。 本文将讲解下拉选择组件的使用。 2 下拉选择使用EOS内置字典作为数据源 下拉选择可从字典作为数据源&a…

25届网安秋招面试之后台信息泄露

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s…

C++ TinyWebServer项目总结(9. I/O 复用)

I/O 复用使得程序能够同时监听多个文件描述符,从而提高程序的性能。I/O 复用本身是阻塞的。Linux 下实现 I/O 复用的系统调用主要有 select、poll 和 epoll。 select 系统调用 select API select系统调用:在一段指定时间内,监听用户感兴趣…

Java语言程序设计——篇十七(1)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

每日OJ_牛客_美国节日(日期模拟)

目录 牛客_美国节日(日期模拟) 解析代码 牛客_美国节日(日期模拟) 美国节日__牛客网 解析代码 题目表述很明白,难点在于要求一个月第N个星期W。那么面对这个问题,拆解的思路是,首先&#xff…

Navicat for MySQL:卓越的跨平台数据库管理开发工具

Navicat for MySQL是一款专为数据库管理员和开发人员设计的强大数据库管理开发工具,支持Mac和Windows操作系统,为用户提供了高效、便捷的数据库操作体验。无论是管理MySQL还是MariaDB数据库,Navicat for MySQL都能轻松胜任。 一、直观易用的…

DB-GPT开源项目文档入门

DB-GPT开源项目文档入门 (qq.com) 场景:服务中小金融机构、服务业小微商家 DB-GPT项目集成了多模型管理、多数据源管理、Text2SQL、增强检索RAG、生成式BI、多智能体,一个大而全的开源框架 项目基本信息 简介:一个原生数据应用开发框架 …

<数据集>流水线纸箱识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:1395张 标注数量(xml文件个数):1395 标注数量(txt文件个数):1395 标注类别数:2 标注类别名称:[GreenCarton,RedCarton] 序号类别名称图片数框数1GreenBox131728482R…

《计算机操作系统》(第4版)第9章 操作系统接口 复习笔记

第9章 操作系统接口 一、用户接口 1. 字符显示式联机用户接口 (1)命令行方式 该方式是以行为单位,输入和显示不同的命令。每行长度一般不超过256个字符,一般情况下,以回车符作 为一个命令的结束标记。通常,命令的执行采用的是间断…

抖音收回“作品代发布”能力?短视频矩阵工具未来何去何从?

相信不少朋友都看到过抖音开放平台的公示,从2024年7月20日开始,官方将要收回“代替用户发布内容到抖音”能力,如果你还在用原有抖音开放平台接口的矩阵系统,那可要注意及时调整了。 那未来的短视频矩阵工具还能用吗?矩…

数学建模~~描述性分析---RFM用户分层模型聚类

目录 1.RFM用户分层模型介绍 2.获取数据,标准化处理 2.1获取数据 2.2时间类型转换 2.3计算时间间隔 3.对于R,F,M的描述性分析 3.1代码分析 3.2分析结果说明 3.3对于F的描述性分析 3.4对于M的描述性分析 4.数据分箱--等级划分 4.1分箱概念 4.3分箱特点 …

区间合并+并查集

前言&#xff1a;写完这个题目的时候没意识到这个和区间合并是等价的&#xff0c;现在看起来确实是一个区间合并的题目 &#xff08;注意这个多米诺骨牌是可以连续推倒的&#xff09; #include<bits/stdc.h> using namespace std;#define int long long int t; int n,m; …

转发和重定向的区别

转发和重定向的区别 转发是一次请求。因此浏览器地址栏上的地址不会发生变化。 重定向是两次请求。因此浏览器地址栏上的地址会发生变化 转发的代码实现&#xff1a;request.getRequestDispatcher(“/index”).forward(request,response); 重定向的代码实现&#xff1a;resp…