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
热门推荐
五类常见消化药物详解
瑞士卷爆红背后:从传统工艺到网络流行
最新!深圳发布汽车、家电、电动自行车以旧换新衔接政策
梵文书法走红:《心经》成网红打卡点背后的文化密码
宝可梦大集结对战模式攻略:从入门到精通
喀什古城:南疆旅游必打卡的历史遗迹
喀什古城探秘:打卡艾提尕尔清真寺
重庆夜游打卡地:洪崖洞、九街、洞子火锅
重庆露台餐吧:夜生活的全新打开方式
观音桥夜游攻略:重庆夜生活的正确打开方式
清洁剂使用不当致伤频发,专家提醒:这些搭配要不得
文学作品中的拟人句魔法
高胆固醇血症饮食指南:这些食物要少吃,必要时需用药
管仲改革:齐国称霸之路的基石
LC3:自噬过程的关键蛋白,与多种疾病发生密切相关
新材料技术突破:从船舶到新能源汽车的产业革新
秋冬的长期主义单品指南
无花果变“致富果”,阿图什农民笑开颜
古玉上的小篆:字形、书写与含义解析
王者荣耀:吕布新手出装及基础打法思路
圆明园数字化修复新进展:数字技术再现昔日辉煌
杨绛先生教你50岁夫妻关系调适秘籍
“公建民营”能否破解养老困局?专家:首先要养活自己
Word表格对角线,职场文档必备技能!
Word表格对角线制作全攻略:单斜线、多斜线详细教程
三年级英语怎么学(汇总5篇)
室内设计师开发香薰 用气味打造归属感
康熙帝智定尼布楚条约,奠定东北边疆百年和平
无创肝弹检查:职场人守护肝脏健康的快捷选择
冬季美食必备:猪肚清洗秘籍