本文基于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的互补仿真波形。
如有错误,欢迎指正。