m基于FPGA的FOC控制器verilog实现,包含testbench_verilog 电机foc控制-程序员宅基地

技术标签: FOC控制器  FPGA  SVPWM  PARK变换  CLARK变换  Simulink控制器  FPGA通信和信号处理  

目录

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hlayumi1234567/article/details/130414748

智能推荐

【图像加密】基于行列置换和混沌加密图像加解密及配准附Matlab代码-程序员宅基地

文章浏览阅读74次。图像加密是一种保护图像信息安全的重要技术。在现代信息社会中,图像作为一种重要的媒介,广泛应用于各个领域,包括医学影像、网络传输、军事侦察等。因此,对图像进行加密保护是非常必要的。本文将介绍一种基于行列置换和混沌加密的图像加解密及配准算法步骤。首先,我们来了解一下行列置换加密算法。行列置换加密算法是一种经典的图像加密算法,其基本原理是通过对图像的像素进行行列位置上的置换来实现加密。具体步骤如下:将待加密的图像分成若干个小块,每个小块由相同数量的像素组成。

今日arXiv精选 | 14篇EMNLP 2021最新论文-程序员宅基地

文章浏览阅读645次。关于#今日arXiv精选这是「AI 学术前沿」旗下的一档栏目,编辑将每日从arXiv中精选高质量论文,推送给读者。Effective Sequence-to-Sequence Dia..._language domain

c# 中通快递对接_中通快递-单号查询接口-物流路由跟踪信息快递鸟api对接教程...-程序员宅基地

文章浏览阅读658次。看完快递鸟api对接教程这篇文章,然后把源码复制到你的项目上,就能快速完成中通快递接口对接.更适合刚入门的菜鸟,调用快递鸟的中通快递查询API接口,能查询到中通快递单号从收件、运输,到转运中心,派送到签收等各个环节的物流发货状态。快递鸟api接口不区分开发语言,支持Java,C#,PHP,Python,ObjectC等开发语言的程序调用。下面具体讲解实现过程.目录1.完成前期准备工作1.1,去快递..._中通快运对接流程

Android自定义实现点赞效果!_android studio中listview实现点赞特效-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏19次。前言今天朋友看了HenCoder的自定义View后说,HenCoder对自定义View讲的不错。实践中仿写即刻的点赞你有思路吗,你不实现一下?二话不说,看了朋友手机效果,对他说:实现不难,用到了位移,缩放,渐变动画和自定义View的基础用法,好,那我实现一下,刚好加深对自定义View的理解。素材准备把即刻app下载后,以解压包的方式解压,发现点赞效果有三张图,一张是没有点赞的小手图片,..._android studio中listview实现点赞特效

JS判断数组中是否包含某个值的几种方法_jsp判断数组中存在某个字段-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏13次。方法1:array.indexOf此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1。var arr=[1,2,3,4];var index=arr.indexOf(3);console.log(index);方法2:array.includes(searcElement[,fromIndex])此方法判断数组中是否存在某个值,如果存在返回true,否则返回falsevar arr=[1,2,3,4];if(arr.includes(3)) console_jsp判断数组中存在某个字段

UEFI dec,inf 中 Guid和Protocol区别_gefiplatforminfoprotocolguid protocol-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏5次。沙发_gefiplatforminfoprotocolguid protocol

随便推点

Android启动速度优化_安卓启动图时间很短-程序员宅基地

文章浏览阅读2.1w次,点赞4次,收藏34次。欢迎访问我的个人网站:https://coderyuan.com最近做了一些Android App启动速度的优化,有一些心得,整理整理影响启动速度的原因高耗时任务数据库初始化、某些第三方框架初始化、大文件读取、MultiDex加载等,导致CPU阻塞复杂的View层级使用的嵌套Layout过多,层级加深,导致View在渲染过程中,递归加深,占用CPU资源,影响Me..._安卓启动图时间很短

Day_2 HTML5 格式化文本、段落与列表_实训2 格式化文本、段落与列表-程序员宅基地

文章浏览阅读2.4k次。项目1 文本与段落标记的应用知识点:(1)换行br标记<br> <!--插入单个换行-->(2)空格与特殊符号向网页中添加空格和特殊符号可以使用&符号加上相应的英文单词的缩写,以分号结束,如&copy ;表示版权,&nbsp; 表示空格(3)注释comment标记<!--注释内容--> /*方法一*/<commen..._实训2 格式化文本、段落与列表

无线网卡监听模式_win10无线网卡开启监听-程序员宅基地

文章浏览阅读8.3k次。监听模式(Monitor Mode),或RFMON (Radio Frequency MONitor),是指无线网卡可以接收所有经过它的数据流的工作方式,对应于IEEE 802.11网卡的其他模式,诸如Master(路由器)、Managed(普通模式的网卡)、Ad-hoc等。监听模式不区分所接收数据包的目标MAC地址,这点和混杂模式类似。然而,和混杂模式不同的是,监听模式的不需要和无线接入点(_win10无线网卡开启监听

IDEA+Maven 整合SSM框架实现简单的增删改查_maven实现ssm框架增删改查源码-程序员宅基地

文章浏览阅读697次。IDEA+Maven 整合SSM框架实现简单的增删改查工具IntelliJ IDEA Ultimate 2018.2.2tomcat 7.0JDK 1.8.0_121MySQL 5.5Maven 3.6+maven仓库素材下载包链接:https://pan.baidu.com/s/1nD1At3SakzgAIJg4N04_-w提取码:obgr1.工程的创建(1)点击file,..._maven实现ssm框架增删改查源码

信息学奥赛一本通:1033:计算线段长度_已知线段的两个端点的坐标a(xa,ya) ,b(xb,yb) ,求线段ab 的长度,保留到小数点后3-程序员宅基地

文章浏览阅读842次。已知线段的两个端点的坐标A(Xa,Ya),B(Xb,Yb),求线段AB的长度,保留到小数点后3位。一个实数,即线段AB的长度,保留到小数点后3位。输入中所有实数的绝对值均不超过10000。第一行是两个实数Xa,Ya,即A的坐标。第二行是两个实数Xb,Yb,即B的坐标。_已知线段的两个端点的坐标a(xa,ya) ,b(xb,yb) ,求线段ab 的长度,保留到小数点后3

智华计算机终端保护检查系统使用笔记_智华计算机终端保密检查系统-程序员宅基地

文章浏览阅读1.5k次。Keywords: 华大概率是联网的原因,因为Windows设置了【自动同步时间】的功能,于是系统会定时同步时间,当智华检测到时间不符合要求时,就会直接退出;看看Windows.old文件夹是否可以删除。如何快速找出C盘中.pdf类型的文件。可以将笔记本开启飞行模式;_智华计算机终端保密检查系统

推荐文章

热门文章

相关标签