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_m
4.完整算法代码文件
V
m基于FPGA的FOC控制器verilog实现,包括CLARK,PARK,PID及SVPWM,含testbench相关推荐
- 基于FPGA的16QAM调制器verilog实现,包括testbench,并通过MATLAB显示FPGA输出信号的星座图
目录 1.算法仿真效果 2.verilog核心程序 3.算法涉及理论知识概要 4.完整verilog 1.算法仿真效果 matlab2022a/vivado2019.2仿真结果如下: 将FPGA仿真的 ...
- 基于FPGA的FOC电流采样Bug调试记录
#基于FPGA的FOC电流采样Bug调试记录 博主在调试FOC闭环控制中遇到了一个bug,冥思苦想两三天,最终一步步地调试时序,最终找到了bug,在调试过程中学会了debug的思想,也明白了调试过程中 ...
- 基于 FPGA 的 UART 控制器设计(VHDL)(下)
今天给大侠带来基于FPGA的 UART 控制器设计(VHDL)(下),由于篇幅较长,分三篇.今天带来第三篇,下篇,使用 FPGA 实现 UART.话不多说,上货. 之前有关于 Veriliog HDL ...
- 基于FPGA的以太网控制器(MAC)设计(中)
今天给大侠带来基于FPGA的以太网控制器(MAC)设计,由于篇幅较长,分三篇.今天带来第二篇,中篇,以太网控制器(MAC)程序的实现.话不多说,上货. 导读 当前,互联网已经极大地改变了我们的生产和生 ...
- 基于FPGA开发板使用Verilog设计PWM呼吸灯实验
基于FPGA开发板使用Verilog设计PWM呼吸灯实验 1,实验原理 2,实验模块设计 2.1 RTL设计,呼吸灯模块设计 2.2,测试数据,下载到FPGA开发板板级的数据 2.3,两个模块综合的n ...
- 基于FPGA的以太网控制器(MAC)设计(下)
今天给大侠带来基于FPGA的以太网控制器(MAC)设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,程序的仿真与测试和总结.话不多说,上货. 导读 当前,互联网已经极大地改变了我们的生产和生活.与之相 ...
- 基于FPGA的SDRAM控制器设计(二)
基于FPGA的SDRAM控制器设计(二) 1. SDRAM理论基础 2. SDRAM初始化模块以及仿真 3.TOP模块的仲裁机制 4. SDRAM刷新模块代码以及仿真 5.代码 6.参考资料 1. S ...
- 基于FPGA,解扰码器Verilog的实现,以及扰码器与解扰码器的联合仿真。附上仿真结果。
文章目录 前言 一.扰码器 二.解扰码器 三.Descrambler的Verilog实现 1.descrambler.v 2.descrambler_tb.v 四.扰码器与解扰码器的联合仿真 1.sc ...
- 基于FPGA的SDRAM控制器设计(1)
基于FPGA的SDRAM初始化配置 SDRAM简述 SDRAM的引脚及作用 SDRAM初始化时序控制 SDRAM上电时序代码 SDRAM测试模块的代码 仿真测试结果 参考文献 总结 SDRAM简述 S ...
最新文章
- 【Luogu】P1613 跑路
- linux创建永不过期用户,linux下如何设置用户密码永不过期_网站服务器运行维护...
- TypeScript里的interface扩展,多继承以及对应的JavaScript代码
- VS静态库和动态库的区别
- 机房线路故障,引发多家公司不能上网,和自己de经历有感
- leetcode python3 简单题83. Remove Duplicates from Sorted List
- 挚同道合,物所不能!挚物·AIoT产业领袖峰会报名进入倒计时!
- Hadoop简介(1)
- ARM开发7.5.1 基础实训( 5 ) 4×4 矩阵键盘和 2 路 LED 显示系统( 1)--LPC21XX
- CFree注册码及破解过程【转】
- 迁移到MySQL的语法转换工具初步设计
- 如何在oracle导入dmp,如何在oracle中导入导出dmp文件
- 通过console线登录交换机
- 机电一体化综合实训考核装置
- 图片下载器爬虫 ItemLoader
- H3 R4900 G3装系统详细步骤
- Java-Collection集合和Map集合总结
- css特效之openbox
- 一张图把DCDC电源拓扑“融会贯通”
- android开机图片修改工具栏,如何以编程方式更改android工具栏中的图标...
热门文章
- CommonGen: A Constrained Text Generation Challenge for Generative Commonsense Reasoning 代码执行记录
- java 过滤微信表情
- 双系统设置成默认启动Windows的问题
- 【转】乔布斯经典语录
- 数据库入库的方式实现
- 潍坊工厂车间数字化vr三维仿真系统,vr电力虚拟仿真培训系统,vr消防安全教育体验馆
- php 0x80070003,Windows 10安装适用于 Linux 子系统(Ubuntu 20.04)
- dhclient 卡死
- php后门绕过eval关键字,一些变态的PHP一句话后门收集
- 2020年7月11日