前言
博文基于STM32F103ZET6芯片,标准固件库3.5.0和MDK5编写;
博文并不讨论PWM的基础知识,而是直接去谈对PWM灵活的控制问题;想全面了解的可以看看我写的专门针对PWM的博客: https://blog.csdn.net/wuyuzun/article/details/72851940
如有不足之处还行多多指教;
PWM的两个重要参数
占空比:0~100%;
信号周期:PWM信号里一个高电平和一个低电平的时间和;
对这两个参数的设置是配置PWM输出的核心也是今天要讨论的主要任务;
是什么决定上面这两个重要参数
首先要明白一个知识:STM32的定时器输出的PWM的占空比由定时器的三个寄存器决定,分别是
定时器计数器TIMx_CNT;
定时器自动重装载寄存器TIMx_ARR;
定时器捕获/比较寄存器TIMx_CCRx;
定时器预分频器TIMx_PSC;
CNT和CCRx的对占空比的影响:
对于本实验要满足的前提如下:
6. CNT是向上计数的方式;需设置TIMx_CRx寄存器中的DIR[1:0]=0;
7. CRx输出极性为高;需要设置TIMx_CCER寄存器中的CCxP=1;
8. CHx的模式为输出PWM1模式;需设置TIMx_CCMRx寄存器中的OCxM[2:0]=110;
(上面这三个因素对于PWM的输出至关重要,而且是定时器很难理解的地方)
占空比的形成过程:
计算公式:
当CNT当CNT>=CCRx时,OCxREF=0,Polarity=1,则CHx输出高电平1;当CNT的值更新后,CHx从高电平再次转为低电平,自此下一个周期就开始了;
满足以上前提的时序图:(令ARR=8,下图中的CCxIF为捕获/比较中断标志位)
还可以从图中得到另一个结论:PWM的信号周期就等于CNT的更新周期;
占空比的计算:占空比 = CCRx/ARR; (前提不同,公式可能会变成1-(CCRx/ARR));
信号周期的计算:信号周期= (ARR+1)(PSC+1)/PCLKx; (这其实就是CNT的更新周期的计算)
总结
欲改变灯的亮度,只需改变占空比,欲改变占空比,只需改变CCRx的值或者ARR的值,一般都是改变CCRx的值;
PWM的信号周期如果长,整个灯就看不出来渐变的效果了,而是闪烁的效果,根据人的视觉暂留效应,对于信号周期的配置很重要;大于这个值的时候,用肉眼就可以看出闪烁感觉了;
关键字:STM32 PWM占空比 信号周期
引用地址:
STM32 PWM占空比和信号周期的控制因素分析
推荐阅读最新更新时间:2024-11-11 18:33
STM32寄存器学习笔记篇——SysTick寄存器设置
这个模块总共操作四个寄存器 控制与状态寄存器:SysTick_CTRL 重装值寄存器:SysTick_LOAD 当前值寄存器:SysTick_VAL 校准寄存器:SysTick_CALRB 简单的延时只用到两个寄存器SysTick_CTRL、SysTick_LOAD。 SysTick_CTRL: 其中第16位为状态标志,当从上次重装开始减到0,则该位被置1,且被读取后自动清零。 CLKSOURCE=1 使用内部时钟,=0 使用外部参考时钟。 TICKINT=1 向下计数到0时会导致SysTick处理器挂起。=0 不会挂起且软件可以使用CLKSOURCE 判断计时是否到0。 ENABLE=1 开启计数器工作连拍模式,=0禁止计
[单片机]
STM32之内部温度传感器
和ADC的设置基本相同,算是ADC的扩展应用。 只是在计算方法上有变化,在adc的初始化程序里面做一些变动就可以了。 包含函数: (1)Main /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台 : ST 官方三合一套件 + 硬件 : STM32F103C8T6 + 开发平台 : IAR For ARM 5.40 + 仿真器 : J-Link + 日期 : 2010-10-28 + 频率 :HSE = 8MHz ,主频 = 72MHz +++++++++++++++++++++++++
[单片机]
STM32固件IAP升级实战
硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 2.3 Keil 工程 IAP 的相关设置 3 Application 3.1 启动流程 3.2 IAP 中的引导部分 3.3 关于 VTOR 3.4 Keil 工程设置 4 附件 1 预备知识 基于标准外设库(STM32F10x_StdPeriph_Lib_V3.5.0)的 IAP 升级相关资料可以参考 IAP ST 官方资料汇总。 STM32 升级的三种方式:IAP,ICP,ISP;具体有什么区别可以自行 Googl
[单片机]
基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)
简介:本实验基于stm32最小系统、0.96寸OLED(68*128)和摇杆实现一个经典的贪吃蛇小游戏。 硬件设计: 普通摇杆,0.96寸OLED 单色屏幕(SPI协议通讯),stc32f103c8t6最小系统开发板,如下所示。 器件齐全后,用杜邦线将摇杆和oled正确地连接到stm32开发板上,注意各个器件的电源需要接到同一电压,下图是接线说明: 接好线之后,将源码编译下载,进入调试,正常运行如下图所示,如果屏幕出现花屏,那么将res引脚接到GND进行复位,再重新进行调试或单片机复位: 接着按下摇杆的中键就可以进入游戏: 屏幕的上方显示得分,通过摇杆控制蛇的运动方向。 游戏失败后可按下摇杆中键重
[单片机]
基于STM32的磁导航自主导引车通用驱动器设计
引言 AGV系统在当前柔性制造系统(FMS)和自动化仓储系统中扮演着重要的角色。AGV具有适应性好、柔性程度高、可靠性好、可实现生产和搬运功能的集成化和自动化等优点[1]。 AGV的导航方式主要有激光导航、电磁导航、视觉导航、GPS(全球定位系统)导航、磁导航等,本文主要针对磁导航方式的AGV进行深入探讨,磁导航AGV主要是基于磁导航传感器感应贴在路面上的磁条进行路径跟踪并完成其自主行驶的功能。 磁导航传感器通过检测铺设在地面上的磁条来判断AGV与目标路径的偏差,然后输出电压模拟量[2]。对于磁导航AGV驱动器的设计,为更好地满足通用性需求,需要对现有驱动器的组成单元进行总结和归纳,并且结合实际需求,找出共同点和不同点,为
[单片机]
工作问题笔记-----STM32休眠问题
STM32低功耗分三种: SLEEP: 电压调节器开启,Cortex-M3内核停止运行,外设保持运行态; STOP: 电压调节器可选择性开启,所有外设时钟、PLL、HSI和HSE被关闭,Cortex-M3内核和所有外设停止运行,保留SRAM和寄存器的内容; STANDBY: 待机模式Standby:电压调节器关闭、整个1.8v区域断电。除了备份区域和待机电路的寄存器以外,SRAM和寄存器的内容全部丢失。 在休眠状态下,MCU的代码并不会继续执行,而是进入休眠状态,等待唤醒,唤醒的过程会先执行IRQ中断服务函数,然后再执行WFI后的函数。 省电级别由低到高,standby休眠后会让我们的数据丢失,而SLEE
[单片机]
STM32中断理解
题外话: 几乎所有的要学习的实在或虚拟的事物(或仅仅是一个理论)都可以用下面的方法对其了解; 但对于具体某一个事物不一定需要全部研究下面的项目; 什么是XXX 为什么要XXX XXX的分类 XXX的组成 XXX的特点 XXX的流程 用及XXX时注意事项 其他特有项目 ----------------------------------------------- stm32中断主题: 1 什么是中断 暂停原先的程序或事情,执行另外一些程序或事情,执行完成后返回原来的程序。 2 为什么要中断 因为另一些程序或事情比你原先正在做的事情要重要,或者这些突发事情你是无法控制它的来临的。 3 中断的分类 按不同方法进行分类 3.1 内部中
[单片机]
工程师STM32单片机学习基础手记(4):用PWM实现荧火虫灯(五)
按SW方式来调试 1脚不接时出现的画面 DMA初步 DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。 有多少个DMA资源 有两个DMA控制器,DMA1有7个通道,DMA2有5个通道。 数据从什么地方送到什么地方? 外设到SRAM(I2C/UART等获取数据并送入SRAM); SRAM的两个区域之间; 外设到外设(ADC读取数据后送到TIM1控制其产生不同的PWM占空比); SRAM到外设(SRAM中预先保存的数据送入DA
[模拟电子]