您现在的位置:首页 >> 智能控制 >> 内容

m基于FPGA的FOC控制器verilog实现,包括CLARK,PARK,PID及SVPWM,含te

时间:2023/4/27 21:06:57 点击:

  核心提示:08_060_m,包括程序操作录像+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZZyVl51t

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览


3.算法概述

      FOC控制的其实是电机的电磁场方向。转子的转子力矩正比于定子的磁场向量与转子磁场矢量的矢量积。由矢量的关系可知,若使电机的转矩时刻保持最大,则定子磁场向量应与转子磁场向量相互垂直。又因为磁场的大小与方向与电流的大小与方向有着直接的关系,所以在用FOC控制算法控制BLDC时的关键就是控制三相输入的电流大小与方向。而控制电流产生定子磁场与转子磁场垂直的关键在:控制稳定的三相输入电压及其电流向量,并且我们得知道转子的实时位置。

4.部分源码

...................................................................

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   


作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168