STM32高级定时器输出SPWM(中心对称方式)
创作时间:
作者:
@小白创作中心
STM32高级定时器输出SPWM(中心对称方式)
引用
CSDN
1.
https://blog.csdn.net/aligadoo/article/details/138215702
本文将详细介绍如何使用STM32的高级定时器输出中心对称的SPWM波形。通过配置定时器参数和编写中断回调函数,可以生成频率为20kHz的SPWM波形,适用于电机控制、电源转换等应用。
目标
我们要使用TIM8输出一个频率为20kHz的SPWM波,需要关注哪些参数呢?
示例
本人使用stm32f446系列
1、首先使用正弦表格确定时钟频率、载波频率、基波频率(即SPWM频率)
图中的幅值就是一个PWM的周期,也就是自动重装值。SPWM数据输出是按照三角波和基波比较(规则采样得到的)推导过程可参考https://www.docin.com/p-2284891757.html或者相关论文,直观地理解为一个PWM周期内的高电平时长。
2、使用CubeMX创建工程
我这里输出的是两对互补的PWM,这里只展示定时器的配置,其他配置根据实际需求。要注意一下的是计数模式、计数周期、重复计数器。为什么这里的计数周期变成了374,步骤1里面不是写了750-1了吗?因为中心对称模式可以认为是向上和向下计数的组合,所以一个周期其实是374的双倍,在频率的公式变成了*fpwm=fsys/(arr+1)(ccr+1)*2。重复计数器这个值必须设置成1,否则可能会不符合预期。
3、生成工程代码后,需要修改每个PWM周期的比较值才会产生占空比变化的PWM从而模拟出正弦输出
#include "main.h"
float spwm_duty[10] = {0.5, 0.795, 0.976, 0.976, 0.795, 0.5, 0.205, 0.024, 0.024, 0.205};
uint16_t spwm_wave[10] = {188, 298, 366, 366, 298,188,77,9,9,77};
// 计算PWM表中点的数量
uint8_t POINT_NUM = sizeof(spwm_wave)/sizeof(spwm_wave[0]);
// 更新中断回调函数,修改CCR
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM8)
{
if (spwm_index < POINT_NUM)
{
spwm_index++;
}
else
{
spwm_index = 1; //
}
TIM8->CCR2 = spwm_wave[spwm_index-1];
TIM8->CCR3 = spwm_wave[spwm_index-1];
}
}
在每次更新中断回调中,修改下一个周期的比较寄存器的值。
这是使用向上计数输出的PWM,仔细看波形是不太对称的。
这是中心对称输出的PWM,仔细看波形是很对称的。
本文原文来自CSDN,作者:aligadoo
热门推荐
释放压抑情绪最好的方式:空椅子疗法
产品经理撕逼怎么办?十大应对策略助你化解职场冲突
【柳岸·星】农民(散文)
没出过国的魏源,撰写的《海国图志》,有何积极意义与缺陷呢
英语四级提前多久备考?这里有一份备考指南
抗核抗体1∶100会导致胎停吗?
条条大路“通”呼和浩特
情商(EQ)在生活和人际关系中的重要性及提升方法探讨
Excel求和函数完全指南:八个常用函数详解与实战应用
10部经典历史正剧,真实历史吊打流量剧
肾性高血压忌口的有哪些食物
春秋瑰宝“子乍弄鸟尊”
什么是极限、导数、微分与积分(通俗易懂)!
快速离婚的流程和手续办理
14.10版本亚索全新最优出装思路:颠覆传统,或成历代最强
莫匹罗星软膏的功效和作用分别是什么
这张“华西版”腹部九宫格位置图,让你秒懂肚子痛的分区
一天可以吃幾顆蛋?這3種人要少吃,雞蛋熱量、營養詳解
为什么你不主动联系别人,别人就不会找你,原因只有一个
日出摄影技巧:捕捉光辉的最佳时机和角度
如何安全有效地更换Debian系统的软件源?
新华走笔丨法源寺边读《北京法源寺》
如何给教授写感谢信
Excel中固定列宽的多种方法详解
水木属性的男孩名字:寓意与选择指南
闪卡组合技巧,在记忆中事半功倍
第22道压轴题几乎是【原题】?2024年广东省中考数学解析
构建高效用户成长体系:策略与实践
如何进行研发费用资本化管理?
成本11.5元卖到5000元——谨防“保健品”坑人骗局