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
热门推荐
解密:义和团“刀枪不入”的真相
原创文字、医学都一骑绝尘的古埃及,为何唯独被冶铁技术“拖后腿”?
医生解答:绿茶可以降尿酸吗?
如何识别网络图片是否具备版权保护
晚上下班健身,应该在饭前还是饭后?
稀客!国家一级保护动物白头鹤首次现身洪泽湖湿地国家级自然保护区
探索薛仁贵的东征历程,“薛仁贵征东”的故事为何能广泛传播?
孕妈秋季吃水果的正确打开方式
贴片电阻的三种测量方法详解
托福雅思怎么自学?上岸学姐分享亲身经历
解读非主流,时代的印记与文化现象
视网膜脱落:症状、诊断与治疗全解析
打造令人惊艳的PPT:从布局到配色的全攻略
铱催化剂的废料来源:失活铱催化剂的价值
偏头痛防治的8种有创治疗方法
鹦鹉拔毛症:症状、成因与治疗全解析
合同盖章主体资质审核的重要性与操作要点
Redis中的大key和热key问题及其解决方案
发酵有机肥原料发酵腐熟感官标准和原理
平潭海上渔排团建攻略:一日游行程安排及注意事项
物业合同查询方法:小区居民如何获取相关信息
水文化丨说水解字:涌
多个监护人责任认定标准及监护人责任险购买指南
尊重和保障人权:构建和谐社会的基石
商鞅为什么被车裂
2008年,张柏芝陷照片门风波,支撑她的非霆锋,母爱是关键
热设计中,工程师可以优化哪些设计元素实现有效降本
孕妇能吃桑葚吗 吃桑葚有什么好处
各品种国债“一债难求”!风险等级R3的超长期特别国债适合“无脑入”吗?
医院整体搬迁方案