IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F103-PWM输出配置及simulink自动代码生成 -> 正文阅读

[嵌入式]STM32F103-PWM输出配置及simulink自动代码生成

目录

STM32的PWM输出介绍:

pwm输出配置:

附件


本文记录STM32F103PWM输出配置过程,及simulink模型配置,代码生成

STM32的PWM输出介绍:

脉冲宽度调制模式可以生成一个信号,该信号频率由TIMx_ARR 寄存器值决定,其占空比则由TIMx_CCRx 寄存器值决定。

从下图可以看出,当CCR寄存器和CNT计数器数值一样时,会产生动作(改变通道对应的GPIO电平)。由于CNT溢出时,重载值由TIMx_ARR寄存器值决定的。

所以说TIMx_ARR寄存器值决定周期,而TIMx_CCRx寄存器值决定CNT溢出时,经过多久会产生动作(改变通道对应的GPIO电平),也就是决定了占空比。

向上计数为例,重载值为ARR,比较值为CRRx

上图可以看出:

0-t1段,定时器计数器TIMx_CNT值小于CCRx值,输出低电平。

t1-t2段,定时器计数器TIMx_CNT值大于CCRx值,输出高电平。

当TIMx_CNT值达到ARR时,定时器溢出,重新向上计数...循环此过程至此一个PWM周期完成。

上图更加形象的说明了

信号频率由 TIMx_ARR 寄存器值决定。

占空比则由 TIMx_CCRx 寄存器值决定。

①TIMx_CCMR1寄存器的OC1M[2:0]位,设置输出模式控制器

110:PWM模式1,111:PWM模式2。

②计数器值TIMx_CNT与通道1捕获比较寄存器CCR1进行比较,通过比较结果输出有效电平和无效电平。

OC1REF=0 无效电平,OC1REF=1无效电平。

③通过输出模式控制器产生的信号。TIMx_CCER寄存器的CC1P位,设置输入/捕获通道1输出极性。

0:高电平有效,1:低电平有效。

④TIMx_CCER:CC1E位控制输出使能电路,信号由此输出到对应引脚。

0:关闭,1:打开。

首先对PWM模式1和PWM模式2进行介绍:

模式1:

在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

模式2:

在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

PWM输出高低电平由TIMx_CCMR1:OC1M位和TIMx_CCER:CC1P位共同决定。

总结下来:

模式1:

CNT<CCR为有效电平//(OC1REF =1)

CNT>CCR为无效电平//(OC1REF =0)

模式2:

CNT<CCR为无效电平//(OC1REF =0)

CNT>CCR为有效电平//(OC1REF =1)

CC1P:

0:高电平有效

1:低电平有效

举例:配置向上计数,MODE1CC1P置0,则PWM波先输出高电平的,到占空比后再输出低电平

参数TIM_OCPolarity用来设置极性是高还是低。(取值为TIM_OCPolarity_High时,计数值比CCR小时定义为高电平,比CCR大时定义为低电平,取值为TIM1_OCPolarity_Low时相反)

pwm输出配置:

设置TIM3的通道3,4为PWM输出模式,对应的引脚为PB0,PB1

TIM_APBClock 总线时钟-根据时钟树决定

不同引脚的时钟源:

在cube中配置好后,保存配置。

打开simulink模型,在模块库中拖一个TIM模块到模型中,Timer选择TIM3(cube配置好保存后才会出来选项)

总线时钟经过分频后得到对应TIM时钟

这里的时钟为72M,分频系数 TIM_Prescaler,取分频系数为71,计算出来的TIM时钟为1M

TIM_ARR 自动重装载值 -这个值决定pwm输出频率

TIM时钟/TIM_ARR 即为PWM波频率

取ARR为1000,此处计算出来的PWM波频率为1Khz

再选择占空比 ,根据通道,设置对应CCR的值(对应下面的pulse value)。

对于Simulink模型来说,模块设计了可以指定外部输入的占空比,勾选Duty cycle is an input port即可

通道4与通道3配置类似。

通过外部输入改变占空比,即可改变PWM输出的占空比。

配置完后即可生成代码,编译下载运行~

实际测试之前测试过没问题,现在示波器不好弄,不贴图了。

有问题可以评论区回复或直接联系:QQ/WX:953909472
欢迎点赞分享~

附件

测试工程及代码

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:58:47  更:2022-04-18 18:01:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:54:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码