目錄
1.算法仿真效果
2.算法涉及理論知識(shí)概要
3.MATLAB核心程序
4.完整算法代碼文件
1.算法仿真效果
Quartus II 12.1(64-Bit)
ModelSim-Altera 6.6d?Starter Edition
仿真結(jié)果如下:
2.算法涉及理論知識(shí)概要
整個(gè)系統(tǒng)的結(jié)構(gòu)如下所示:
1、采集到兩相電流
2、經(jīng)過(guò)clarke變換后得到兩軸正交電流量,
3、經(jīng)過(guò)旋轉(zhuǎn)變換后得到正交的電流量 Id、Iq,其中Iq與轉(zhuǎn)矩有關(guān),Id與磁通有關(guān)。在實(shí)際控制中,常將Id置為0。得到的這兩個(gè)量不是時(shí)變的,因此可以單獨(dú)的對(duì)這兩個(gè)量進(jìn)行控制,類似直流量控制一樣。而不需要知道具體要給電機(jī)三相具體的電壓為多少。
4、將第3步中得到的Iq與Id量分別送進(jìn)PI調(diào)節(jié)器,得到對(duì)應(yīng)的輸出Vq和Vd;
5、通過(guò)傳感器得到電機(jī)轉(zhuǎn)過(guò)的角度。
6、進(jìn)行逆park變換,得到二軸電流量。
7、對(duì)第6步中的Va,Vb進(jìn)行逆clarke變換,得到實(shí)際需要的三相電壓輸入給逆變電橋,驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)。
? ? ? ?FOC控制的其實(shí)是電機(jī)的電磁場(chǎng)方向。轉(zhuǎn)子的轉(zhuǎn)子力矩正比于定子的磁場(chǎng)向量與轉(zhuǎn)子磁場(chǎng)矢量的矢量積。由矢量的關(guān)系可知,若使電機(jī)的轉(zhuǎn)矩時(shí)刻保持最大,則定子磁場(chǎng)向量應(yīng)與轉(zhuǎn)子磁場(chǎng)向量相互垂直。又因?yàn)榇艌?chǎng)的大小與方向與電流的大小與方向有著直接的關(guān)系,所以在用FOC控制算法控制BLDC時(shí)的關(guān)鍵就是控制三相輸入的電流大小與方向。而控制電流產(chǎn)生定子磁場(chǎng)與轉(zhuǎn)子磁場(chǎng)垂直的關(guān)鍵在:控制穩(wěn)定的三相輸入電壓及其電流向量,并且我們得知道轉(zhuǎn)子的實(shí)時(shí)位置。
? ? ? ?輸入電流的方向控制,F(xiàn)OC給出了空間電流矢量的概念。其實(shí)質(zhì)是將三相的電流矢量結(jié)合,再分解為垂直和平行于轉(zhuǎn)子磁體軸方向的兩個(gè)分量即d-q結(jié)構(gòu)。垂直方向的電流分量所產(chǎn)生磁場(chǎng)正交于轉(zhuǎn)子的磁場(chǎng),這就產(chǎn)生了旋轉(zhuǎn)力矩。而平行于轉(zhuǎn)子磁軸方向的電流分量,所產(chǎn)生的磁場(chǎng)與轉(zhuǎn)子磁場(chǎng)一致,就不會(huì)產(chǎn)生任何的力矩。另外,一個(gè)好的控制算法就需要使這個(gè)平行于轉(zhuǎn)子磁軸方向的電流分量盡量最小化,因?yàn)?,這個(gè)電流分量只會(huì)使電機(jī)產(chǎn)生多余的熱量,并加劇軸承的磨損。我們需要控制線圈的電流,以使垂直于轉(zhuǎn)子磁軸方向的電流分量達(dá)到最大。由此而得到的電機(jī)力矩和這個(gè)電流分量的大小成比例。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-612268.html
3.Verilog核心程序
...................................................................
PID_tops PID_tops_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_kp (16'b0001_1111_1111_1111),
.i_ki (16'b0000_0000_0010_0011),
.i_kd (16'b0000_0000_0000_0001),
.i_din (err1),
.o_dout (o_pid_dout),
//test port
.o_doutp (),
.o_douti (),
.o_doutd ()
);
wire signed[15:0]o_Id;
wire signed[15:0]o_Iq;
wire signed[15:0]err11;
wire signed[15:0]err12;
assign err11 = o_pid_dout-o_Id;
assign err12 = 0-o_Iq;
wire signed[15:0]o_pid_dout1;
wire signed[15:0]o_pid_dout2;
PID_tops PID_tops_u1(
.i_clk (i_clk),
.i_rst (i_rst),
.i_kp (16'b0001_1111_1111_1111),
.i_ki (16'b0000_0000_0010_0011),
.i_kd (16'b0000_0000_0000_0001),
.i_din (err11),
.o_dout (o_pid_dout1),
//test port
.o_doutp (),
.o_douti (),
.o_doutd ()
);
PID_tops PID_tops_u2(
.i_clk (i_clk),
.i_rst (i_rst),
.i_kp (16'b0001_1111_1111_1111),
.i_ki (16'b0000_0000_0010_0011),
.i_kd (16'b0000_0000_0000_0001),
.i_din (err12),
.o_dout (o_pid_dout2),
//test port
.o_doutp (),
.o_douti (),
.o_doutd ()
);
//
//INV PARK
wire signed[15:0]o_Uaref;
wire signed[15:0]o_Ubref;
INVPARK INVPARK_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_D (o_pid_dout1),
.i_Q (o_pid_dout2),
.i_theta (o_theta),
.o_alpha (o_Uaref),
.o_beta (o_Ubref)
);
//
//SVPWM
wire w_PWM1;
wire w_PWM2;
wire w_PWM3;
wire w_PWM4;
wire w_PWM5;
wire w_PWM6;
SVPWM SVPWM_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_Uaref(o_Uaref),
.i_Ubref(o_Ubref),
.o_PWM1 (w_PWM1),
.o_PWM2 (w_PWM2),
.o_PWM3 (w_PWM3),
.o_PWM4 (w_PWM4),
.o_PWM5 (w_PWM5),
.o_PWM6 (w_PWM6)
);
//
//IGBT+PMSM
IGBT_PMSM_simple IGBT_PMSM_simple_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_PWM1 (w_PWM1),
.i_PWM2 (w_PWM2),
.i_PWM3 (w_PWM3),
.i_PWM4 (w_PWM4),
.i_PWM5 (w_PWM5),
.i_PWM6 (w_PWM6),
.i_pid (o_pid_dout),
.i_Te (16'd100),
.o_Ia (o_Ia),
.o_Ib (o_Ib),
.o_Ic (o_Ic),
.o_Te (o_Te),
.o_Wm (o_Wm),
.o_theta(o_theta)
);
//
//CLARK
CLARK CLARK_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_Ia (o_Ia),
.i_Ib (o_Ib),
.o_Id (o_Ialpha),
.o_Iq (o_Ibeta)
);
//
//PARK
PARK PARK_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_d (o_Ialpha),
.i_q (o_Ibeta),
.i_theta (o_theta),
.o_ID (o_Id),
.o_IQ (o_Iq)
);
endmodule
08_060_m
4.完整算法代碼文件
V文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-612268.html
到了這里,關(guān)于m基于FPGA的FOC控制器verilog實(shí)現(xiàn),包括CLARK,PARK,PID及SVPWM,含testbench的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!