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的互补仿真波形。

如有错误,欢迎指正。

生成单极SPWM(Single-Pulse Width Modulation),您可以使用STM32的定时器和比较器功能。以下是一些基本步骤: 1. 配置定时器和比较器: 您需要配置一个定时器(例如TIM1)作为PWM生成器,并将其与一个比较器(例如TIM1_CH1)结合使用。您还需要将定时器设置为向上计数模式,并将其时钟频率设置为适当的值,以便为所需的PWM频率提供足够的分辨率。 2. 设置PWM占空比: 要生成单极SPWM,您需要在比较器的输入捕获模式下设置PWM占空比。这可以通过设置比较器的捕获/比较模式为“捕获比较模式”并将比较器的捕获值设置为所需的占空比来完成。 3. 启动定时器: 一旦您完成了定时器和比较器的配置,您可以启动定时器并开始生成PWM信号。 4. 调整PWM频率和占空比: 如果您需要更改PWM频率或占空比,您可以重新配置定时器和比较器,并重新启动定时器以生成新的PWM信号。 下面是一些示例代码片段,可帮助您开始编写单极SPWM生成代码: ``` // 定义PWM频率和占空比 #define PWM_FREQ 10000 // PWM频率为10kHz #define PWM_DUTY_CYCLE 50 // PWM占空比为50% // 配置定时器和比较器 TIM_HandleTypeDef htim1; TIM_OC_InitTypeDef sConfigOC; htim1.Instance = TIM1; htim1.Init.Prescaler = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 839; // 时钟频率为84MHz,PWM频率为10kHz,因此Period为839 htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim1); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = (htim1.Init.Period * PWM_DUTY_CYCLE) / 100; // 设置占空比 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1); // 启动定时器 HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); ``` 请注意,这只是一个简单的示例代码片段,您还需要根据您的特定应用程序进行适当的配置和调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值