学习笔记三.基于cubemx的stm32f103单极性SPWM波和双极性SPWM波频率和占空比的调制,配合低通滤波

学习笔记三.SPWM波频率和占空比的调制

我们知道,PWM波是一个方波,SPWM波就是占空比按照正弦表变化的PWM波。

SPWM(Sinusoidal PWM)法是一种比较成熟的、使用较广泛的PWM法。冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值。(百度百科)
通过单片机的定时器可以输出一个PWM波(详细过程请参考我的 上一篇.
然后添加如下代码
在这里插入图片描述
如果要改变波的频率,则改变PSC这个寄存器,改变幅值的话,就改变CCR1这个寄存器,,具体操作如下,
1.可以用一个定时器回调函数,按时改变CCR1寄存器,就达到了生成SPWM波的效果。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
        if (htim->Instance == htim2.Instance) //判断是否定时器2
        {
					if(i<72)
					{
							htim2.Instance->CCR1= (int)(a[i]*d);
					}
					i++;
					if(i == 72)
					{
						i = 0;
					}
        }

}

2.改变频率


htim2.Instance->PSC =1;

直接用这个改变寄存器的值,频率就等于晶振/ARR/PSC(这里可以让ARR保持不变)
3.改变幅值
如果要改变幅值,则可以考虑把正弦表按照一定比例缩小放大,可以给正线表乘以系数,通过按键控制系数的大小来改变幅值。
欢迎指正
之前写的spwm波,现在加一些内容
1.取点
大家知道,点数越大,生成的波越平滑,在这里为大家介绍一个好用的取点软件,还是比较好用的,附图
在这里插入图片描述
在这里插入图片描述
给各位好友附上链接,实用电子工具箱
2.修改滤波之后的频率
附一段代码,是嫖一起实验室的小伙伴的代码(手动狗头)

/*************************************************
函数名称: FREQ_DEAL
函数功能: 计算滤波后正弦波频率对应的PSC和Arr
传入参数: FPWM
返回参数: 无
注意:要改变形参的值,一开始形参定义的变量赋初始值
**************************************************/
void FREQ_DEAL(int FPWM)             
{
	float midFloat;
	long clkInt, clkFloat;
	long midInt;
	
	clkFloat = 72000000.0f/800/(FPWM);
	
	if(clkFloat-(long)clkFloat>=0.5f)  		clkInt = clkFloat+1;
	else							 										clkInt = (long)clkFloat;
	
	midFloat = sqrt(clkFloat);// 开方
	
	if(midFloat-(long)midFloat>=0.5f)  		midInt = (long)midFloat+1;
	else																	midInt = (long)midFloat;
	
	// 找一组最接近的
	for(int i=midInt;i>=1;i--)
	{
		if(clkInt%i==0)
		{
			prescaler = i;
			period = clkInt/i;
			  break;
		}
	}
	htim1.Instance->ARR = period - 1;
	htim1.Instance->PSC = prescaler - 1;
}

相应的,定时器部分也要更改
在这里插入图片描述
这样就好了。
3.单极性SPWM波,通俗的说,低通滤波之后,正弦波没有上半部分,那么就取码表显示波上半部分的码表就好了,
加个代码链接,想试一下积分下载
代码
欢迎指正

  • 8
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地球先生_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值