m基于FPGA的FOC控制器verilog实现,包含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_m		  

4.完整算法代码文件

V

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 基于FPGAFOC(Field Oriented Control)控制算法是一种通过FPGA芯片实现的用于电机控制的算法。FOC算法是一种高性能的转子电流控制方法,通过将电机控制系统转换为一个等同于直流电动机的控制问题,可以实现更高的控制精度和响应速度。 基于FPGAFOC控制算法有以下几个优点: 1.实时性强:FPGA芯片具有高度可编程性和并行处理能力,能够实时处理大量的数据。FOC算法需要对电流、位置和速度等参数进行实时测量和计算,FPGA的实时性强的特性可以满足FOC算法的需求。 2.灵活性高:FPGA芯片具有可重构和可扩展的特性,可以根据不同的电机类型和控制需求进行灵活配置和优化。FOC算法可以根据不同的电机参数和运行条件进行实时调整和优化,FPGA的灵活性可以满足FOC算法的需求。 3.可靠性强:FPGA芯片具有高度可靠性和抗干扰能力,能够有效抵御噪声和电磁干扰等外部干扰。FOC算法对电机控制的精度和稳定性要求较高,FPGA的可靠性保证了FOC算法的稳定性和可靠性。 4.实现成本低:基于FPGAFOC控制算法相对于传统的硬件实现方式具有较低的成本。FPGA芯片具有集成度高和功耗低的特性,可以减少硬件的占用空间和成本。同时,基于FPGAFOC控制算法可以灵活扩展和升级,满足不同应用场景的需求。 总之,基于FPGAFOC控制算法通过充分发挥FPGA芯片的可编程性、并行处理能力和抗干扰能力等特点,实现了一种高性能、实时性强、灵活性高、可靠性强且成本低的电机控制算法。 ### 回答2: 基于FPGAFOC(Field Oriented Control,场向控制)算法是一种通过对电机的磁场进行控制来实现精确的电机控制的方法。FPGA(Field Programmable Gate Array,现场可编程门阵列)是一种可编程逻辑器件,具有高度灵活性和实时性的特点,因此适合用于FOC控制算法的实现FOC控制算法包括两个主要步骤:磁场定向和磁场电流控制。磁场定向通过测量电机的角度和速度,并通过转换成正弦和余弦信号,将电机的磁场定向到所需的位置。磁场电流控制通过计算控制电流的大小和相位,将电机运行在所需的工作点上。 在基于FPGAFOC控制算法中,可以使用FPGA内部的逻辑单元和片上存储器实现实时的数据处理和计算。FPGA的并行计算能力和低延迟特性可以提供高速的信号处理和控制响应。同时,FPGA还可以与其他系统组件进行高速数据传输和通信。 基于FPGAFOC控制算法可以实现高精度的电机控制,具有快速响应和灵活性的优势。此外,FPGA可编程的特性使得FOC算法可以根据具体应用的需求进行定制和优化,从而提高控制效果和效率。然而,基于FPGAFOC控制算法需要考虑硬件资源和功耗的限制,以及对FPGA编程的复杂性和开发成本的影响。 总而言之,基于FPGAFOC控制算法是一种可编程、高性能且灵活的电机控制方法。它能够提供精确的控制和高效的运行,并具有广泛的应用前景。 ### 回答3: 基于FPGAFOC (Field Oriented Control) 控制算法是一种用于电机控制的高级算法。FOC算法基于电机的动态模型,通过对电机的电流和磁通进行准确控制,实现对电机的精确控制。 FPGA是一种可编程逻辑设备,可以重新配置硬件逻辑电路,提供了高度的定制能力和并行处理能力。基于FPGAFOC控制算法可以通过实时响应电机的控制需求,在微秒级的时间内对电机的控制信号进行计算和生成。相较于传统的控制器,基于FPGAFOC算法具有更高的运算速度和更低的延迟。 基于FPGAFOC控制算法主要包括以下几个关键步骤: 1. 位置和速度测量:通过传感器测量电机的位置和速度,并将这些信息反馈给控制算法。 2. 电流控制环:通过对电机绕组的电流进行控制,实现电机的力矩控制。 3. 空间矢量调制:根据电机的速度和位置信息,通过空间矢量调制技术生成适当的PWM (Pulse Width Modulation)波形,控制电机的电流和磁通。 4. PI调节器:通过PI (Proportional-Integral)调节器,根据电机实际输出和期望输出之间的误差来调整控制器的输出信号,实现电机的闭环控制。 5. 输出控制信号:通过FPGA的硬件逻辑电路,将计算得到的控制信号转换为具体的PWM信号,驱动电机运行。 基于FPGAFOC控制算法具有很高的灵活性和可扩展性,可以根据具体的应用需求进行定制和优化。同时,由于FPGA的并行处理能力,能够实现多种电机的同时控制,适用于多轴控制和高性能控制系统。因此,基于FPGAFOC控制算法在工业自动化和新能源领域具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱C编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值