STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop

**

数字锁相环

**
Digital phase locked loop数字锁相环是一个通过PID算法使PWM调频改变相位,以达到与目标模型同频同相或同频稳定相位差的目的,在实际应用中较为常见,其中包括齿轮对接、远距离水下超长波低频通信等

正弦波函数

为毛子要讲正弦波呢?
正弦波是一个贼有用的东西,不管是信号通信、电机驱动基本都是正弦波,要了解正弦波就要了解正弦波基本函数结构(放心,中小学知识,不会讲很难):
正弦函数y:正弦波
A:幅值
ω:角速度
x:x自变量
φ:相位偏移
现在我们根据嵌入式的方法简化一下这个正弦波:

简化正弦波
A:当前幅值
ω:角速度
t:时间
φ:相位偏移

在此引入正弦波周期和频率公式:
STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第1张图片
T:周期
ω:角速度
f:频率
所以得到ω=2π×f

若使A=sin(2π×f×t),f=50
得到的图像同matlab仿真就是如下所示:
STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第2张图片
上图为50Hz正弦波,现在问题来了,我们如何改变频率来改变相位呢?

正弦波函数推导

已知有:
STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第3张图片
而且
STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第4张图片
我们改变频率:f
就可以改变周期:T 则有
STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第5张图片
因为原始波形的周期是不变的保持为T,所以我们改变频率后每运行一个周期,就会与原始波形产生一个固定相位差,如下图棕色框中棕色线段所示
STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第6张图片
在0<=t<0.04时,蓝色波与红色波频率幅值相位均一致,频率为50Hz
在0.04

由上述公式可以得出

STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第7张图片
p :一个周期产生的相位差
T :原始周期
T':变化后的周期

在得到一个周期相位的变化量之后,我们就可以将一个固定的相位差S分解成N个p,经过N个周期叠加后,相位移动就为S,则可以得到:
STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第8张图片
N :周期数
S :需要移动的相位
p :单周期的相位移动
所以我们变频经过N个周期后恢复原始频率,就可以保证相位角可以前移或后移固定角度。
最后通过结合以上所有公式得到一个通式:

STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第9张图片
N :周期数
S :需要移动的相位
f :初始频率
f':变频频率

Matlab代码如下:

clc;
clear;
S=2*pi/3;
f1=50;
f2=60;
f3=f1;
dp=(((1/f1)-(1/f2))/(1/f1))*2*pi;
N=S/dp;
t1=N/f1;
t2=N/f2;
t3=N/f3;
fs=3000;
t=0:1/fs:(t1+t2+t3);
y=sin(f1*2*pi*t);
p=rem((f1*2*pi*t),2*pi);
part1=sin(f1*2*pi*t).*(t>=0&t<=t1);
part2=sin(f2*2*pi*(t-t1)).*(t>=t1&t<=(t1+t2));
part3=sin(f3*2*pi*(t-t1-t2)).*(t>=(t1+t2)&t<=(t1+t2+t3));
yy=part1+part2+part3;
pp1=rem((f1*2*pi*t.*(t>=0&t<=t1)),2*pi);
pp2=rem(((f2*2*pi*(t-t1)).*(t>=t1&t<=(t1+t2))),2*pi);
pp3=rem(((f3*2*pi*(t-t1-t2)).*(t>=(t1+t2)&t<=(t1+t2+t3))),2*pi);
pp=pp1+pp2+pp3;

d=p-pp;

subplot(2,2,1)
plot(t,yy,"b");xlabel('时间/S'),ylabel('信号y')
hold on
box off

subplot(2,2,2)
plot(t,pp,"b");xlabel('时间/S'),ylabel('相位p')
hold on
box off

subplot(2,2,3)
plot(t,y,"r");xlabel('时间/S'),ylabel('信号y')
hold on
box off

subplot(2,2,2)
plot(t,p,"g");xlabel('时间/S'),ylabel('相位p')
hold on
box off
subplot(2,2,4)
plot(t,d,"y");xlabel('时间/S'),ylabel('相位差p')
hold on
box off

结果如图:
STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop_第10张图片

你可能感兴趣的:(STM32,算法,电机控制基础)