如何在STM32上生成单极性SPWM波

本文基于stm32g474cbt6单片机所编写,程序基于stm32cubemx所生成。

在上文中,讲解了单相逆变器的硬件仿真,也讲解了如何通过硬件产生单极性SPWM波和双极性SPWM波对逆变电路进行控制。本文讲解如何通过单片机生成SPWM波对逆变电路进行控制。


1、硬件的配置

1.1、时钟和串行通讯配置:

1.2、定时器配置:

对于全桥逆变电路来说,需要两路互补对称的SPWM进行控制,选择一个定时器对其进行时钟的配置和频率的配置。频率的配置公式为 (arr为预分频系数,psc为自动重装载值)。

全部配置完之后即可对工程的生成。

2、程序的编写

在主函数中打开定时器以及PWM的打开。

	HAL_TIM_Base_Start(&htim1);						//打开定时器1
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);		//打开PWM
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);		//打开PWM
	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);		//打开互补PWM
	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);		//打开互补PWM

然后需要生成正弦数组表(也可以直接用正弦公式进行计算,这里我们采用查表法)。可用SPWM表格生成工具对数组进行生成(该图的数据只做演示作用,程序中的数据是另一组)。

随后将生成的数据作为一个数组加入到程序中。

#define SPWM_N 200

static uint16_t SPWM_Data[SPWM_N] = {
400,412,425,437,450,462,474,487,499,511,523,535,547,558,570,581,
592,603,614,624,635,645,654,664,673,682,691,700,708,716,723,730,
737,744,750,756,761,767,771,776,780,784,787,790,792,795,796,798,
799,799,800,799,799,798,796,795,792,790,787,784,780,776,771,767,
761,756,750,744,737,730,723,716,708,700,691,682,673,664,654,645,
635,624,614,603,592,581,570,558,547,535,523,511,499,487,474,462,
450,437,425,412,400,387,374,362,349,337,325,312,300,288,276,264,
252,241,229,218,207,196,185,175,164,154,145,135,126,117,108,99,
91,83,76,69,62,55,49,43,38,32,28,23,19,15,12,9,
7,4,3,1,0,0,0,0,0,1,3,4,7,9,12,15,
19,23,28,32,38,43,49,55,62,69,76,83,91,99,108,117,
126,135,145,154,164,175,185,196,207,218,229,241,252,264,276,288,
300,312,325,337,349,362,374,387
};

最后只需要在主循环中将数组中的值赋值给PWM的寄存器即可生成SPWM波。此步骤在工程中需要在中断中进行赋值,本文演示即在主循环中进行赋值。

TIM1->CCR1 = SPWM_Data[SPWM_Cnt++];
TIM1->CCR2 = SPWM_Data[SPWM_Cnt++];
if(SPWM_Cnt >= 200)
{
	SPWM_Cnt = 0;
} 

3、波形仿真

此图为其中一组SPWM的互补仿真波形。

如有错误,欢迎指正。

作者:Roger…

物联沃分享整理
物联沃-IOTWORD物联网 » 如何在STM32上生成单极性SPWM波

发表评论