STM32Cube的PWM控制算法篇(一)數字鎖相環初步設計Digital phase locked loop

**

數字鎖相環

**
Digital phase locked loop數字鎖相環是一個通過PID算法使PWM調頻改變相位,以達到與目標模型同頻同相或同頻穩定相位差的目的,在實際應用中較爲常見,其中包括齒輪對接、遠距離水下超長波低頻通信等

正弦波函數

爲毛子要講正弦波呢?
正弦波是一個賊有用的東西,不管是信號通信、電機驅動基本都是正弦波,要了解正弦波就要了解正弦波基本函數結構(放心,中小學知識,不會講很難):
正弦函數y:正弦波
A:幅值
ω:角速度
x:x自變量
φ:相位偏移
現在我們根據嵌入式的方法簡化一下這個正弦波:

簡化正弦波
A:當前幅值
ω:角速度
t:時間
φ:相位偏移

在此引入正弦波週期和頻率公式:
在這裏插入圖片描述
T:週期
ω:角速度
f:頻率
所以得到ω=2π×f

若使A=sin(2π×f×t),f=50
得到的圖像同matlab仿真就是如下所示:
加粗樣式
上圖爲50Hz正弦波,現在問題來了,我們如何改變頻率來改變相位呢?

正弦波函數推導

已知有:
在這裏插入圖片描述
而且
在這裏插入圖片描述
我們改變頻率:f
就可以改變週期:T 則有
在這裏插入圖片描述
因爲原始波形的週期是不變的保持爲T,所以我們改變頻率後每運行一個週期,就會與原始波形產生一個固定相位差,如下圖棕色框中棕色線段所示
在這裏插入圖片描述
在0<=t<0.04時,藍色波與紅色波頻率幅值相位均一致,頻率爲50Hz
在0.04<t後,藍色波頻率變高到60Hz,經過一個週期之後,藍色波相位超前紅色波一個固定時間,記爲p

由上述公式可以得出

在這裏插入圖片描述
p :一個週期產生的相位差
T :原始週期
T':變化後的週期

在得到一個週期相位的變化量之後,我們就可以將一個固定的相位差S分解成N個p,經過N個週期疊加後,相位移動就爲S,則可以得到:
在這裏插入圖片描述
N :週期數
S :需要移動的相位
p :單週期的相位移動
所以我們變頻經過N個週期後恢復原始頻率,就可以保證相位角可以前移或後移固定角度。
最後通過結合以上所有公式得到一個通式:

在這裏插入圖片描述
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

結果如圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章