SPWM就是在PWM的基础上,让PWM的占空比做正弦变化
1、开启新定时器
2、使用软件生成正弦向量表
3、业务代码
uint16_t sin[] = {
1800,1913,2025,2137,2247,2356,2462,2566,2667,2764,
2858,2947,3032,3112,3186,3256,3319,3377,3428,3473,
3511,3543,3568,3585,3596,3600,3596,3585,3568,3543,
3511,3473,3428,3377,3319,3256,3186,3112,3032,2947,
2858,2764,2667,2566,2462,2356,2247,2137,2025,1913,
1800,1686,1574,1462,1352,1243,1137,1033,932,835,
741,652,567,487,413,343,280,222,171,126,
88,56,31,14,3,0,3,14,31,56,
88,126,171,222,280,343,413,487,567,652,
741,835,932,1033,1137,1243,1352,1462,1574,1686
}
int main()
{
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_y); // 开启pwm输出
HAL_TIM_Base_Start_IT(&htimz); //使能刚刚配置的定时器z
while(1)
{
}
}
/**
* @brief 定时器中断的回调函数
* @param htim 触发中断的定时器
* @retval None
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static int i = 0;
if(++i == size) i = 0;
if (htim->Instance == htim3.Instance)
{
__HAL_TIM_SET_COMPARE(&htimx, TIM_CHANNEL_y, sin[i]); //由向量表修改占空比
}
}