單片機驅動CPLD的PWM正弦信號發(fā)生器設計
正弦信號發(fā)生器MCU 演示程序:
#include reg51.h>
#include absacc.h>
#define PWM XBYTE[0xffe8]
unsigned char code sine_dot[32]={49,59,68,77,84,90,95,98,99,98,95,90,84,77,68,59,49,40,30,22,14,8,4,1,0,1,4,8,14,22,30,40};// 正弦表
void main()
{
unsigned char i=0;
while(1) {
PWM = sine_dot[i];
i=(i++)0x1f;
}// 如果要嚴格控制SPWM 的周期,這里的while 循環(huán)請用定時器來驅動
}
四、三路精確相位差正弦信號發(fā)生器
對CPLD 改進設計,很容易實現(xiàn)多路PWM 輸出。
例如設計具有精確相位差的三相正弦信號,CPLD 電路VerilogHDL 程序如下:
module Mini51b_PWM(P0,ALE,P27,WR,PWM);
input [7:0]P0;
input ALE,P27,WR;
output [2:0]PWM;
wire [3:0]addr;
reg [7:0]daPWMc;
reg [7:0]daPWMs0,daPWMs1,daPWMs2;
reg [2:0]PWM;
wire clk,nclk,a,b,c,d;
assign addr= (ALE)?P0[3:0]:addr; // 低八位地址鎖存
always @(negedge WR)
begin
case({P27,addr})
5'H10: daPWMs0 = P0;// 寫帶地址的寄存器
5'H11: daPWMs1 = P0;// 寫帶地址的寄存器
5'H12: daPWMs2 = P0;// 寫帶地址的寄存器
default:
begin
daPWMs0 = daPWMs0;
daPWMs1 = daPWMs1;
daPWMs2 = daPWMs2;
end
endcase
end
always @(posedge clk) begin
daPWMc = daPWMc+1; //PWM 調整精度1%
if(daPWMs0 daPWMc) PWM[0] = 0;//PWM 發(fā)生器
else PWM[0] = 1;
if(daPWMs1 daPWMc) PWM[1] = 0;//PWM 發(fā)生器
else PWM[1] = 1;
if(daPWMs2 daPWMc) PWM[2] = 0;//PWM 發(fā)生器
else PWM[2] = 1;
end
assign nclk=!clk;
LCELL A0(。in(nclk), .out(a));
LCELL A1(。in(a), .out(b));
LCELL A2(。in(b), .out(c));
LCELL A3(。in(c), .out(d));
LCELL A4(。in(d), .out(clk));//PWM 時鐘來自CPLD 內部
LCELL 延遲電路振蕩器
endmodule
與之對應的MCU 演示程序:
#include reg51.h>
#include absacc.h>
#define PWM0 XBYTE[0xfff0]
#define PWM1 XBYTE[0xfff1]
#define PWM2 XBYTE[0xfff2]
unsigned char code sine_dot[36]= //8 階,36 點正弦表
{
0x80,0x96,0xab,0xbf,0xd2,0xe2,0xee,0xf8,0xfe,0xff,0xfe,0xf8,
0xee,0xe2,0xd2,0xc0,0xab,0x96,0x80,0x69,0x54,0x40,0x2
d,0x1e,
0x11,0x07,0x01,0x00,0x01,0x07,0x10,0x1d,0x2d,0x3f,0x53,
0x69
};
void main()
{
unsigned char a,b,c;
a=0;
while(1) {
a %= 36;// 對36 取余數(shù)及0~35
b=(a+12)%36;// 較a 路滯后120 度相位
c=(a+24)%36;// 較a 路滯后240 度相位
PWM0 = sine_dot[a];
PWM1 = sine_dot[b];
PWM2 = sine_dot[c];
a++;
}
}
實際得到的三相正弦信號示波器截圖效果如圖7所示,只是雙蹤示波器同時只能看兩路信號。
圖7 具有精確相位差的三相正弦信號示波器截圖
五、結束語
今后,MCU+CPLD 結構將是很多電子系統(tǒng)設計的一種基本架構,MCU 可以用程序實現(xiàn)復雜智能的控制與檢測,CPLD 又可以實現(xiàn)靈活多變的外圍擴展電路設計,尤其是可以用硬件實現(xiàn)特殊的MCU 無法實現(xiàn)的功能,彌補MCU 響應速度慢影響實時性問題,兩者互補,完全實現(xiàn)硬件軟設計,使得同一硬件平臺能夠通過軟件實現(xiàn)更多的功能。
pwm相關文章:pwm原理
負離子發(fā)生器相關文章:負離子發(fā)生器原理 分頻器相關文章:分頻器原理 塵埃粒子計數(shù)器相關文章:塵埃粒子計數(shù)器原理 脈寬調制相關文章:脈寬調制原理 離子色譜儀相關文章:離子色譜儀原理
評論