| |
|
开发:
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自动代码生成 |
目录 本文记录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:低电平有效 举例:配置向上计数,MODE1,CC1P置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例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |