stm32学习记录---pwm

STM32F1定时器-PWM输出 因为dir初始化为1,所以进入while循环后,led0pwmval++,等led0pwmval增加到大于300时,dir 被置为 0,led0pwmval又开始减少,减到0后,dir置为1,led0pwmval再增加,如此反复。ARPE = 0时更新事件,意思是在CNT计数器计数过程中,在计数溢出之前,人为改变了ARR寄存器的值,写入了新值,那这个新值会在下一个计数周期才生效,在写入新值的当前周期里,还是计数到旧值就产生溢出。简单的说, ARPE=1,ARR立即生效;0:高电平有效,1:低电平有效。 阅读详情

目标

使用PWM驱动舵机,直流电机,呼吸灯

输出比较OC(OutputCompare)

  • 输出比较可以通过比较CNT与RCC寄存器值的关系,来对输出电平进行置0,1或翻转的操作,用于输出一定频率和占空比的PWM波形
  • 每个高级定时器和通用定时器都有4个输出比较通道(同时生成4个PWM波,CNT共用,但CCR各有各的值)
  • 高级定时器的前三个通道额外拥有死区生成和互补输出功能(驱动三相无刷电机)

 CNT----计数的值,

CCR(R-register寄存器)----捕获-比较寄存器,当使用输出比较时,就是输出比较寄存器,使用输入捕获时,就是输入捕获寄存器

输出比较时:

比较CNT和CCR的值,CNT自增,CCR是我们给定的值.当CNT > CCR CNT == CCR CNT < CCR时,就会置1,0,1,0

PWM波

输出的是数字信号(也就是0101)PWM就是用数字量模拟模拟信号,比如对于LED灯,我们让它亮、灭、亮、灭,频率足够大时,它看起来就是一个中等亮度。我们调控通电、断电的时间比,就可以控制亮度。

一定要在惯性系统中。比如人眼有视觉暂留,LED灭后不会立即灭。PWM就是利用这种“惯性”。

上图中左图的黑线是输出的电平(数字信号),紫色线是它等效的模拟信号。TS是输出的变化周期,周期的倒数即频率(频率=1/Ts),频率越大,模拟效果越好,占空比:高电平时间占一个周期的百分比(占空比越大,等效输出越趋近于高电平的电压)占空比变化时有一个间距(如以1%为步距变化,就是1%,2%,1%。。。这个变化的间距,就是分辨率,表示PWM波变化的细腻程度)

输出比较通道(通用)

 左边是在比较,比较的结果输出到REF(reference)。CC1P上面这里写0不翻转,写1翻转(输入1输出0)输出使能这里是看看是不是要输出

左边比较的模式(可简单理解无效电平为低电平,有效电平为高电平):

强制输出模式:想暂停PWM输出时可以考虑

PWM模式:输出频率和占空比都可调的PWM波,一般使用向上计数。模式2可看作模式1的取反

上图蓝线是CNT值,黄线是ARR值,CNT自增,到ARR后清零。CCR是红线,CNT小于CCR,输出高电平,大于CCR,输出低电平(CCR越高,占空比越大)PWM的一个周期=计数器溢出周期

CNT从0~29是高电平,一个周期计100个数(0~99)

CCR的值可以在0~ARR中,所以分辨率是上面的公式

舵机简介

 此处舵机是SG90,有三根输入线,两根电源线,一根信号线。轴会固定在某个角度,这个角度是由PWM波控制的。电位器会检测角度,大于输入角度就反转。可理解为PWM成为了一种通信协议。

注意:电机是大功率设备,最好单独供电 

直流电机

 H桥可以控制电流方向,O1,O2这里接一个电机,左右是两路推挽输出

VM这里的要求同上,要一个能接大电流的电源 ,这里电压要与额定电压一样。

有三个GND,随便选一个接

PWMA,AIN1,AIN2控制AO1,AO2的电机,PWMA,AIN1,AIN2输出低功率到AO1,AO2,这样AO1,AO2就会从VM汲取电流控制电机。

STBY这里接3.3V正常工作,接地进入待机模式(接GPIO,给高低电平也能控制)

反转:IN1给低,IN2给高,PWM高转低不转

正转:IN1给高,IN2给低,PWM高转低不转

接线

 

 

程序部分

PWM波驱动

打通硬件电路即可

分别配置四个输出比较单元OC(output compare)
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_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);

更改CCR寄存器值(和CNT计数值比较的那个值,可以调占空比)
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
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);

先到这了,下期再分享程序部分~

 

STM32:TIM定时器输出比较(OC) PWM(Pluse Width Modulation)脉冲宽度调制在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟量,常用于电机控速等领域,也就是说,使用这个PWM波形,是用来等效地实现一个模拟信号的输出,也就是以一个很快的频率,给电机通电、断电,也就使电机维持在一个中等速度PWM参数:频率=1/Ts 占空比=Ton/Ts 分辨率=占空比变化步距这四个函数就是配置输出比较模块,一个函数配置一个单元用来给输出比较结构体赋一个默认的值的。 阅读详情

相关推荐

STM32 学习10 PWM输出

PWM的全称是脉冲宽度调制(Pulse Width Modulation),是一种控制模拟信号的方法。它通过改变脉冲的宽度来控制模拟信号的平均值。STM32F1除了基本定时器TIM6和TIM7,其它定时器都可以产生PWM输出。TIM1和TIM8:均可同时产生7路PWM输出;其它通用定时器:均可同时产生4路PWM输出。在STM32微控制器中,生成PWM信号通常涉及到自动重装载寄存器(ARR)和比较寄存器(CCR)两个重要的寄存器。

猿来这样-谢厂节的博客 2329

STM32 学习笔记(七)定时器中断:输出比较

学习自b站up: 江协科技。

jtwqwq的博客 4854

STM32 CUBEMX主从定时器配置PWM任意相位可调,占空比以及频率可调(学习记录)

通常使用的是PWM模式,可以通过PWM功能可以生成频率和占空比可调的方波信号,有时候需要生成初始相位可调的方波,PWM功能就就不能满足要求了。但可以通过主从定时器来实现。定时器可以设置主从关系,简单来说就是可以用主定时器控制从定时器,这个过程可以套娃,如:从定时器可以控制从从定时器。主从模式定时器内部连接图:定时器内部触发连接源,例:若从定时器为TIM2,主定时器为TIM1,那么触发源为TR0。

m0_58944197的博客 7820

STM32-定时器输出比较

这里的电平翻转的时机就靠CNT和CCR比较而来,假设在PWM1模式下,向上计数。如上图A所示,CCR为30,99为ARR,CNT向上自增,在CNT小于CCR的时候,输出高电平,当CNT大于CCR(30)的时候,就输出低电平,自增到ARR时,变为0,重新开始自增。即72MHz经过720分频:72M/72=100w,即计100w个数是1s,那么计20ms需要:20000;输出比较通过设置CNT与CCR寄存器的值的关系,来对输出电平进行置1、置0和翻转操作。传入一个角度,经过计算得到占空比,赋值给CCR。

qq_26048279的博客 2247

在CUBEMX上配置STM32定时器PWM输出(学习记录)

STM32在cubeMX上对PWM进行配置

m0_58944197的博客 744

蓝牙HCI Dongle实战:从芯片选型到协议栈集成的完整指南

本文详细介绍了蓝牙HCI Dongle的实战应用,从芯片选型到协议栈集成的完整指南。通过对比CSR8510、nRF52840等主流芯片的性能和价格,提供选型建议和避坑技巧。同时,深入解析Zephyr协议栈移植和常见问题排查,帮助开发者高效完成蓝牙项目开发。

weixin_30786657的博客 321

STM32学习记录--关于PWM引脚配置

PWM(Pulse Width Modulation)是一种脉宽调制技术,用来调节信号波形的高电平时间(脉冲宽度)的比例,从而改变有效值。PWM技术常见于电子电路中,广泛应用于各种领域和设备中,包括但不限于以下几个方面:1. 电机控制:PWM可用于控制直流电机、步进电机和交流电机的转速和转向。通过调节脉冲宽度,可以实现精确的电机速度控制和精度定位。2. 电源调节:PWM用于调节电源输出电压或电流。通过控制开关器件的导通时间和断开时间,可以实现电源输出的稳定调节,以满足不同的负载需求。

herui的博客 1万+

Rstudio安装org.Hs.eg.db

自己也是个小白,初次安装org.Hs.eg.db碰到好多问题,步骤总结如下: 第一,instal.packages()安装,不行则换 BiocManager::install() 第二,如BiocManager不成,说明不是最新版本,可按提示安装最新版 BiocManager::install(version = '3.13') #由于R版本较新,按照提示中的相关信息,安装最新版本的 第三,再次安装 BiocManager::install("org.Hs.eg.db") 第四,之后每个人.

ZH_DDong的博客 2万+

【学习记录】 STM32 PWM输出实验

【学习记录】 STM32 PWM输出实验

weixin_47723114的博客 1152

从工艺到器件:用Silvaco ATLAS仿真PIN二极管击穿电压的保姆级指南

本文详细介绍了使用Silvaco ATLAS仿真PIN二极管击穿电压的全流程指南,从工艺仿真基础搭建到器件结构构建,再到击穿特性仿真和结果分析。通过Silvaco工具链,工程师可以在设计阶段精准预测器件性能,优化击穿电压,提升研发效率。

weixin_34259816的博客 355

卡尔曼滤波与目标追踪

卡尔曼滤波与目标追踪为什么要学卡尔曼滤波?卡尔曼滤波是什么?一些概率论的知识基础卡尔曼滤波完整推导状态估计计算卡尔曼增益预测和更新 卡尔曼滤波部分我打算分三节(三次博客的内容): 卡尔曼滤波与行人状态估计 扩展卡尔曼滤波(EKF)与传感器融合 过程模型,无损卡尔曼滤波(UKF)与车辆状态轨迹 为什么要学卡尔曼滤波? 卡尔曼滤波以及其扩展算法能够应用于目标状态估计,如果这个目标是行人,那么就是行人状态估计(或者说行人追踪),如果这个目标是自身,那么就是车辆自身的追踪(结合一些地图的先验,GPS等数据的话就

qq_43232556的博客 4170

STM32学习记录-PWM输出

该文章记录一些我在学习过程中的一些理解和收集的资料,以及一些我总结归纳的编程思路,如果有误,恳请指出,感激不尽。 一、梗概 首先,明白现象。原本应该是灯DS0(PA8)逐渐由暗变亮,再由亮变暗,如此反复,但是为了以后配置外部的PWM输出(如控制小车轮子转速),我将输出接到PA11上,在PA11接了一个发光二极管模拟,现象也是“呼吸灯”。 二、什么是PWM PWM信号其实就是将数字信号0或1转换成模...

qq_44802989的博客 833

直流电源滤波电路的设计与优化:从基础原理到高效应用

本文深入探讨直流电源滤波电路的设计与优化,从基础原理到高效应用全面解析。重点介绍电容滤波和电感滤波的工作原理及实战设计要点,分享复合滤波电路的进阶技巧,并提供常见问题排查指南。文章还涵盖现代滤波技术的新发展,如有源滤波和数字控制滤波的应用,帮助工程师提升电源系统的稳定性和效率。

weixin_29255731的博客 175

STM32cubemx学习记录————TIM输出PWM(基于STM32F407ZG)

STM32定时器输出一路PWM(控制LED灯的亮度) STM32的定时器具有强大的功能,今天的输出PWM功能是属于其中的输出比较功能。 stm32输出PWM原理:(以下为个人理解,如果错误的地方 请多多指教OoO) CNT是计数值 ARR是重装载值 CCRx是比较值 定时器输出PWM有两种模式: PWM 模式1 计数值大于比较值 输出有效电平 否则输出无效电平 PWM 模式2 计数值大于比较...

Aa_lihua的博客 8122

如何通过 Python 爬虫抓取并分析政府开放数据

通过本文的介绍,我们展示了如何使用Python 爬虫抓取并分析政府开放数据。通过requests获取政府开放数据的 API 接口数据。使用和pandas进行数据清洗与存储。使用matplotlib对数据进行可视化。你可以根据不同的政府开放平台和数据集进行调整,应用于不同领域的数据分析,如公共健康、交通、环保等。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1076

基于YOLOv5/v8/v10的答题卡填涂识别与评分系统(附数据集+UI界面+完整代码)

在教育信息化的大背景下,传统的手工阅卷方式正在被智能化技术所取代。答题卡识别作为标准化考试的核心环节,其准确率和效率至关重要。本文将详细介绍如何利用YOLO系列目标检测算法(YOLOv5、YOLOv8、YOLOv10)构建一个答题卡填涂识别与评分系统。文章从数据集的制作与标注开始,逐步深入到模型的训练、评估与对比,最后基于PyQt5设计了一个用户友好的桌面端UI界面,实现了从图像输入到得分输出的全流程自动化。

YOLO 634

STM32 PWM 控制舵机学习记录

sg90_angle这个值就是舵机上电后的初始脉宽。开 PWM,改 CCR,看舵机转。PSC控速度ARR控周期CCR控脉宽舵机靠 PWM 脉宽定位就能很快上手这类项目。

2601_96778950的博客 517

【AVRCP】规范精讲[19]: 媒体属性全解析,让你的蓝牙设备显示完整歌曲信息

AVRCP协议中的媒体属性是蓝牙音频设备传输歌曲元数据的关键,包含标题、艺术家、专辑等32位ID标识的键值对信息。规范要求字符串属性必须使用UTF-8编码,但乱码问题频发(如中文显示异常),主因是设备未遵循编码标准或使用GBK等非规范格式。常见问题包括信息不全(仅显示标题)、封面缺失(因带宽限制或格式不支持)及更新延迟(通知机制未启用)。解决方案包括强制UTF-8编码、优化封面大小(如300x300像素JPEG)、主动请求缺失属性。Android示例代码展示了通过广播接收器解析媒体属性的方法。

byte轻骑兵的技术小窝 1万+

stm32cubemx hal学习记录:PWM

stm32

ohhjack的博客 1220

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【STM32学习记录06】PWM驱动LED呼吸灯&PWM驱动直流电机

本次内容之后将会转为使用HAL库开发。

guilin 782

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

stm32学习记录-5.2PWM输出控制sg90舵机角度

1.同一定时器输出多路PWM波形都是一样的吗同一个定时器所以频率、相位一样,占空比由各自输出比较配置确定2.输出PWM错误1.端口输出模式要配置为复用推挽输出。2.检查定时器是否选择错误,通道端口号是否正确3.使用定时器高级定时器无法输出PWM高级定时器还要进行主输出使能, TIM_CtrlPWMOutputs。

qq_45417579的博客 3571

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32学习记录(八)————定时器输出PWM及舵机的控制

一个学习STM32的小白~ 有错误评论区或私信指出提示:以下是本篇文章正文内容,下面案例可供参考。

qq_63556165的博客 1466

STM32学习过程记录5——内部中断+PWM

目录 第五课,定时器中断(内部定时器的使用) 一.32的定时器中断简述 1.功能模式简述: 2.时钟周期计算: 3.时间值的寄存器 二.寄存器的设置过程 1.过程简述 2.配置代码(与上面对应) 3.快捷模板 第五课,定时器中断(内部定时器的使用) 一.32的定时器中断简述 1.功能模式简述: 三种记数模式,对应值预设值的不同: 一般基本上都是选用的内部时钟。 2...

康娜喵的原创博客 1126

论持久战-STM32实现的PWM输出学习记录

本来打算假期把stm32吃透的怎奈家里的床就像吸铁石,手机里的王者就像农药蚕食我的计划(珍爱生命远离王者)。                      那么我提一下目前的在搞的PWM输出吧。因为正在搞四轴飞行器,所以需要四路可调占空比的PWM信号来控制四个无刷电机。所以我需要利用stm32中的TIM4定时器来产生四路PWM。首先说下配置的思路及过程:

tomyuan—techhome 1119

STM32学习记录 -- PWM周期与频率的理解(F103与F407)+示波器图解

😎😎最近学习PWM波形输出,记录一下学习心得,对于我们输出的波形,主要依赖三个数据算出来,芯片的自带的主频(即CPU的时钟频率),arr 是计数值,psc 是预分频值,我们输出的波形根据这个三个数据算出周期,还有一个变量数值来调控PWM波输出的占空比😎 进入正题➡️......

herui的博客 9382

正点原子STM32HAL库学习记录(stm32f103zet6)——通用定时器PWM输出实验(实现呼吸灯效果)

PWM是什么:脉宽调制,PWM(Pulse Width Modulation),通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。本次实验涉及到通用定时器框图中的⑤和⑥部分,具体可以点击传送门👉🕳👈。

weixin_73952614的博客 2695
上一篇: Qt学习记录---Signal
下一篇: Godot学习记录---转场
python_use
博客等级 码龄5年 430粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值