基于stm32cubemx实现spwm调制
本篇文章主要讲述了如何利用STM32CUBEMX实现发出SPWM波形
一.基础知识
1.定时器
(1)STM32H750有八个定时器
高级定时器:TIM1 TIM8
通用定时器:TIM2 TIM3 TIM4 TIM5
基本定时器:TIM6 TIM7
(2)预分频器:
预分频器(Prescaler-PSC)用来将定时器时钟源进行分频输出。
当预分频器设置为1时,预分频器数0、1后才发送一个脉冲到计数器
(3)自动重装载计数器:
实时监控计数器的值是否和自己的值相同,当计数器记到和自己相同的值时,便将计数器的值重置为零并触发中断
二. SPWM原理
假设定时器工作模式设置为向上计数 PWM模式,且当 CNT<CCRx 时,输出 1,当 CNT>=CCRx 时输出 0,则:
当 CNT 值小于 CCRx 的时候, IO 输出高电平 (1)
当 CNT 值大于等于 CCRx 的时候,IO 输出低电平 (0)
当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。
因此,改变 CCRx 的值,就可以改变 PWM 输出的占空比和幅值,
改变 ARR 或者psc的值,就可以改变 PWM 输出的周期(频率),
因为我们配置的晶振是72Mhz,所以将psc设为0,arr设为7200-1,可以算出频率10000Hz(72000000/0+1/7200),
三.实现过程
1.时钟源配置
APB1和APB2都设置为72MHz
2.定时器设置
TIM1设置为中央计数模式,开启互补通道,设置死区时间,死区时间是多少个时钟计数周期,比如TIM1计数周期是72M,设置为72就是1000ns。
需要更改的参数如下图所示,其他参数默认即可。
高级定时器TIM1参数配置
通用定时器TIM2参数设置
spwm频率设置为10k,然后TIM1每个通道的比较值达到时更新比较值。
调制度m范围为0~1,设为0.8
正弦调制波的频率是自己设置的,方法是f=载波频率/表中点数,这里设置的是载波频率10K,取200个点,得到的正弦频率就是50Hz。
正弦表可以用取点工具得到。
3. 代码实现
头文件
四.实验结果