8. STM32-PWM(上)

我手上的板子是L476RG,在当中一共有11个定时器:
https://ithelp.ithome.com.tw/upload/images/20220314/20146325bcNQrE9W8D.png
https://ithelp.ithome.com.tw/upload/images/20220314/20146325aYomniOnY1.png
其中分为基本、通用、高阶三种
基本定时器:TIM6,TIM7
通用定时器:TIM2,TIM3,TIM4,TIM5,TIM15,TIM16,TIM17
高阶定时器:TIM1,TIM8

  1. 高阶定时器:具有6个可输出PWM通道1个混合通道、输入捕获、输出比较、单脉冲模式、PWM生成
    https://ithelp.ithome.com.tw/upload/images/20220314/20146325rhlNQglDCP.png
  2. 通用定时器:具有4个可输出PWM通道1个混合通道、输入捕获、输出比较、单脉冲模式、PWM生成(15仅有2个独立通道,16,17各1个独立通道)
    https://ithelp.ithome.com.tw/upload/images/20220314/201463250UXgalzIG6.png
  3. 基本定时器:只能做定时功能与单脉冲模式,无独立通道
    https://ithelp.ithome.com.tw/upload/images/20220314/20146325M37ePDywEg.png
    在使用时可以透过DataSheet查找对应的脚位,或是直接透过IDE当中去的GPIO去查询相关的脚位~
    https://ithelp.ithome.com.tw/upload/images/20220314/20146325MRMSXOqyGJ.png

PWM工作原理

PWM是将类比信号转换为脉波,一般转换後脉波的周期固定,但脉波的占空比会依类比信号的大小而改变。

什麽是占空比(Duty Cycle)?
占空比是指输出的PWM当中,高电位保持的时间与整个周期之比。可以看到下图当中最上方为50%的占空比,也就是高电位与低电位各占50%。

周期:一个脉冲信号的时间(高电位+低电位)
脉冲时间:高电位的时间

https://ithelp.ithome.com.tw/upload/images/20220314/20146325jUIJv3yTlo.png
举例来说周期是10ms,脉冲时间(高电位)是6ms低电位是4ms,加总就会等於6/6+4=60%,占空比也就等於60%。
https://ithelp.ithome.com.tw/upload/images/20220314/20146325hRX5ag97e1.png
Timer使用PWM输出模式时,相比前面所介绍到的Timer定时模式CNT与ARR,还会多了一个CCRx。可以看到上方的图片,在模式2向上计数的情况下,CNT计数值大於CCRx的时候会输出高电位,相反的低於CCRx时则是低电位。
https://ithelp.ithome.com.tw/upload/images/20220314/20146325XwFCEkiMan.jpg
按照上方的图来看可以得知 :

ARR : 主要控制的是频率,也就是绿框的部分
CCRx : 主要为控制占空比,也就是蓝框的部分


计算方法

  1. PWM频率计算
    Fpwm =Tclk / ((arr+1)*(psc+1))(单位:Hz)
  2. 工作周期(占空比)
    duty cycle = pulse/ARR * 100%

假如时钟频率为16Mhz分频系数设为15,想要产生一个200hz的工作周期为75%的方波,计算方式如下:
200hz = 16mhz / (arr+1)*(15+1) 这样arr会等於5000
工作周期计算则会变成
pulse/5000x100% = 75% 这样pulse会等於3750
https://ithelp.ithome.com.tw/upload/images/20220314/20146325E8Zn3VnDob.png
以上内容如果有误的话,麻烦各位通知我。感谢~


<<:  .NET 前後分离 Web API 蓝新金流串接

>>:  【原创】自制资料库管理工具 - JasonQuery

Day03 - [丰收款] 分析技术文件後,开始做个Nonce开胃菜吧!

接下来就从两大主题丰收款消费支付API与Shioaji证券API之间,挑一个来进行,既然证券开盘时间...

Day 14 来看一下hook是如何测试的 初阶版

今天来讲讲如何来测试hook的原始版本 来,我们来先做一个超简单的hook就叫useName吧 im...

DAY23神经网路(续一)

昨天介绍完单层感知机模型演算法,今天要来研究单层感知机模型程序: 首先先把x资料做标准化 #个别标准...

伸缩自如的Flask [day2] blue_print

开始之前,我相信你已经有碰过flask的经验,或是至少知道藉由 pip install Flask ...

Day 0xA - WebHook Api 建立( part 2 )

0x1 前言 昨天建立好 Sinopac controller,今天持续完成 receive_msg...