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
热门推荐
安置房拆迁补偿标准及交易条件详解
最新研究:健身组间休息时间,按自己感觉来也可以!
英雄联盟龙女背景故事一览
定制鞋垫:足弓异常人群的好帮手
降血压按摩部位图:4个关键穴位详解
足弓鞋垫使用指南:哪些人适合,哪些人不适合?
安全工程师国家注册对工作年限要求严格吗?如何计算?
因航司原因取消航班有赔偿吗
如果飞机延误如何获得合理赔偿?这类赔偿的标准是怎样制定的?
Excel表中宏不能用怎么办
心理学:你之所以忘不掉“深爱过的人”,其实是“心锚”在作祟
喉咙发紧像是被勒着了?可能的原因及应对方法
专业解读丨一文秒懂玉石界新宠“非洲翠”
电梯安全钳的保障机制:守护垂直交通的生命线
AI生成会议纪要:提升工作效率的新利器
如何治疗后背颈椎及脖子疼痛
警惕!“视疲劳”并非简单歇歇就能解决!
2024赴境外上市企业在证监会备案需重点关注问题解析
万国表:瑞士制表业的创新传奇
责任与风险:房屋使用安全法律问题探讨
中国观众对好莱坞大片为何如此冷淡?好莱坞大片内地票房再创新低
中美电影市场的文化碰撞:观众口味为何如此迥异?
南京的博物馆有“看头” | 这个开门才2年的新博物馆,你来过吗?
曾毅:助力科研的人工智能仍待多学科交叉理解来塑造
卤鸡爪的历史渊源与现代创新
洪濑鸡爪卤味配方及做法
骑车有助于长高吗
骑自行车能否帮助身高增长?医生专业解答来了
电信IPTV投屏指南:三种实用的投屏方法详解
1039违章代码是什么意思?详解交通违章代码1039