m基于FPGA的FOC控制器verilog实现,包括CLARK,PARK,PID及SVPWM,含testbench
目錄
1.算法仿真效果
2.算法涉及理論知識概要
3.MATLAB核心程序
4.完整算法代碼文件
1.算法仿真效果
Quartus II 12.1(64-Bit)
ModelSim-Altera 6.6d?Starter Edition
仿真結果如下:
2.算法涉及理論知識概要
整個系統的結構如下所示:
1、采集到兩相電流
2、經過clarke變換后得到兩軸正交電流量,
3、經過旋轉變換后得到正交的電流量 Id、Iq,其中Iq與轉矩有關,Id與磁通有關。在實際控制中,常將Id置為0。得到的這兩個量不是時變的,因此可以單獨的對這兩個量進行控制,類似直流量控制一樣。而不需要知道具體要給電機三相具體的電壓為多少。
4、將第3步中得到的Iq與Id量分別送進PI調節器,得到對應的輸出Vq和Vd;
5、通過傳感器得到電機轉過的角度。
6、進行逆park變換,得到二軸電流量。
7、對第6步中的Va,Vb進行逆clarke變換,得到實際需要的三相電壓輸入給逆變電橋,驅動電機轉動。
? ? ? ?FOC控制的其實是電機的電磁場方向。轉子的轉子力矩正比于定子的磁場向量與轉子磁場矢量的矢量積。由矢量的關系可知,若使電機的轉矩時刻保持最大,則定子磁場向量應與轉子磁場向量相互垂直。又因為磁場的大小與方向與電流的大小與方向有著直接的關系,所以在用FOC控制算法控制BLDC時的關鍵就是控制三相輸入的電流大小與方向。而控制電流產生定子磁場與轉子磁場垂直的關鍵在:控制穩定的三相輸入電壓及其電流向量,并且我們得知道轉子的實時位置。
? ? ? ?輸入電流的方向控制,FOC給出了空間電流矢量的概念。其實質是將三相的電流矢量結合,再分解為垂直和平行于轉子磁體軸方向的兩個分量即d-q結構。垂直方向的電流分量所產生磁場正交于轉子的磁場,這就產生了旋轉力矩。而平行于轉子磁軸方向的電流分量,所產生的磁場與轉子磁場一致,就不會產生任何的力矩。另外,一個好的控制算法就需要使這個平行于轉子磁軸方向的電流分量盡量最小化,因為,這個電流分量只會使電機產生多余的熱量,并加劇軸承的磨損。我們需要控制線圈的電流,以使垂直于轉子磁軸方向的電流分量達到最大。由此而得到的電機力矩和這個電流分量的大小成比例。
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_m4.完整算法代碼文件
V
總結
以上是生活随笔為你收集整理的m基于FPGA的FOC控制器verilog实现,包括CLARK,PARK,PID及SVPWM,含testbench的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用WinHex查看还原精灵密码
- 下一篇: 倍量过左峰选股公式,找到起爆点