基于FPGA的电机控制系统设计

时间:2025-07-25  作者:Diven  阅读:0

FPGA 非常适合精密电机控制,在这个项目中,我们将创建一个简单的电机控制程序,在此基础上可以构建更复杂的应用。

基于FPGA的电机控制系统设计

需要的硬件

Digilent Pmod HB3

 

介绍

我们可以用一个简单的 8 位微控制器来控制电机,输出一个简单的脉宽调制波形。当想要进行精密或高级电机控制时,没有什么比 FPGA 的确定性和实时响应更好的了。接口的灵活性还使得可以通过单个设备控制多个电机,从而提供更加集成的解决方案。

我们将学习一些有关电机控制理论的知识,并创建一个简单的示例。我们都知道,我们可以通过PWM信号来驱动直流电机并控制其速度。高效、精确地驱动需要对电机控制理论有更多的了解。

电机

 

不管你信不信,我在大学最喜欢的课程是控制理论。在该模块中,我们研究了交流电机和直流电机,了解理论和实际用例。有多种类型的交流电机由交流电源供电,可分为同步电机和感应电机。例如,交流电机通常用于泵和压缩机。

直流电机分为有刷电机和无刷电机两种。在两种类型中,有刷是最容易驱动的,因为只需要一个电源。在有刷直流电机中,电刷向连接有转子和线圈的换向器提供电流。电流在线圈中感应出电场,该电场被外部磁体(定子)排斥。为了确保旋转,换向器的设计使得电流反向流动以确保连续旋转。

第二种类型的直流电机是无刷电机,驱动稍微复杂一些,因为没有换向器。相反,磁体安装在转子上,线圈缠绕在定子周围,这样线圈的电流就可以从外部控制和排序。

两者中最容易控制的是有刷直流电机,所以我们就以这类电机为例。

脉宽调制驱动

使用 PWM 驱动电机的理论是,可以控制电机得到的平均电压,从而控制其速度。在 PWM 信号占空比为 100% 时,电机处于满电压并全速运行。如果提供 10% 的占空比,电机就会全速的 10% 运行。

为了有效地运行电机,我们需要正确确定 PWM 周期。直流电机具有串联电感和串联电阻,这意味着电机将充当低通滤波器。频率削减为

其中时间常数由 L/R 给出 - 我们可以从电机数据表中获得这些值。

为了确保稳定的速度,我们需要选择高于电机频率截止的 PWM 频率,以确保观察到直流分量。

我们要选择一个至少是截止频率 5 倍的频率。

FPGA

为了开始这个项目,我们首先要创建一个针对 FPGA 板的硬件设计。

开始创建一个新项目

为项目命名

选择 RTL 项目但不指定来源

创建项目后,创建一个新的框图

从“板”选项卡将系统时钟拉到框图上

对 USB UART 也执行相同操作

从 IP 库添加 MICroBlaze 处理器

运行块自动化连接,选择本地内存大小为32KB并取消选中中断控制器

添加 AXI 定时器

运行连接自动化

打开时钟向导并取消选择复位输入

添加 GPIO

重新定制GPIO为1位宽,仅输出

选择 GPIO 输出和 AXI 定时器 PWM 并将其设引出

完成后应如下所示。

综合完成后,我们可以打开综合视图并将 IO 分配给 GPIO 和定时器输出 - 对于 GPIO,引脚是 J1,对于 PWM,引脚是 L2

构建比特流并导出平台

vitis设计

打开Vitis创建一个新的应用程序项目并选择刚刚导出的XSA。

输入项目名称

选择独立

创建一个新的 hello world 应用程序

应用软件非常简单,我们将根据所需的 PWM 周期以及所需的占空比配置 AXI 定时器。

 

#include #include "platform.h"#include "xil_printf.h"#include "xtmrctr.h"#define TMRCTR_DEVICE_ID        XPAR_TMRCTR_0_DEVICE_ID#define PWM_PERIOD              1000000    #define TMRCTR_0                0            #define TMRCTR_1                1            #define CYCLE_PER_DUTYCYCLE     10           #define MAX_DUTYCYCLE           100          #define DUTYCYCLE_DIVISOR       2            XTmrCtr TimerCounterInst;void display_menu(){//Clear the screenxil_printf("�33[2J");//Display the main menuxil_printf("*******************************************");xil_printf("****      www.adiuvoengineering.com    ****");xil_printf("****      Motor Control Example        ****");xil_printf("*******************************************");xil_printf("");xil_printf("   MM10 Motor Control   ");xil_printf("------------------------------------------");xil_printf("");xil_printf("Select a Speed:");xil_printf("  (1)   - Stop");xil_printf("  (2)   - 25 % ");xil_printf("  (3)   - 33 % ");xil_printf("  (4)   - 50 % ");xil_printf("  (5)   - 66 % ");xil_printf("  (6)   - 75 % ");xil_printf("  (7)   - 100 % ");xil_printf("");}void set_pwm(u32 cycle){ u32 HighTime; XTmrCtr_PwmDisable(&TimerCounterInst); HighTime = PWM_PERIOD * (( float) cycle / 100.0 ); XTmrCtr_PwmConfigure(&TimerCounterInst, PWM_PERIOD, HighTime); XTmrCtr_PwmEnable(&TimerCounterInst);}int main(){ u8  Div; u32 Period; u32 HighTime; char key_input; u8 DutyCycle;    init_platform();    print("Hello World");    print("Successfully ran Hello World application");    XTmrCtr_Initialize(&TimerCounterInst, TMRCTR_DEVICE_ID);    Div = DUTYCYCLE_DIVISOR;    XTmrCtr_PwmDisable(&TimerCounterInst); Period = PWM_PERIOD; HighTime = PWM_PERIOD / Div--; XTmrCtr_PwmConfigure(&TimerCounterInst, Period, HighTime); XTmrCtr_PwmEnable(&TimerCounterInst); while(1){  display_menu();  read(1, (char*)&key_input, 1);  xil_printf("Echo %c",key_input);  switch (key_input) {  case '1': //stop  XTmrCtr_PwmDisable(&TimerCounterInst);  break;  case '2': //25%   xil_printf("25%");  DutyCycle = 25;  set_pwm(DutyCycle);  break;  case '3': //33%  DutyCycle = 33;  set_pwm(DutyCycle);  break;  case '4': //50%  DutyCycle = 50;  set_pwm(DutyCycle);  break;  case '5': //66%  DutyCycle = 66;  set_pwm(DutyCycle);  break;  case '6': //75%  DutyCycle = 75;  set_pwm(DutyCycle);  break;  case '7': //100%  DutyCycle = 100;  set_pwm(DutyCycle);  break;  } }    cleanup_platform();    return 0;}

 

当然,我选择的电机包含两个霍尔效应传感器.旋转方向可以通过一个霍尔效应传感器位于另一个霍尔效应传感器前面的输出来确定。

顺时针旋转

逆时针旋转

我们可以使用脉冲频率来确定电机的速度,我们将在后面项目中更详细地研究这一点。

  审核编辑:汤梓红
猜您喜欢

触觉感知技术在人机交互领域具有重要价值。分布在软体机械手的触觉传感器能够在非结构化的场景交互中为人们提供多模态感知信息,如接触状态(稳态、滑动、扭转等)、表面特...
2023-10-17 09:05:00

电解电容器是重要的电子元件。在电路中起到了重要的作用。很多人对的原理和应用并不是很了解。本文将为你介绍电解电容器的基本知识和应用。电解电容器的定义电解电容器是电...
2025-03-28 13:31:07

贴片电阻上的R200标识表示其阻值为200欧姆。 R 在这里代替了小数点,所以不要将其误认为是0.2欧姆。 选择贴片电阻时,除了阻值,还需要考虑其关键参数,例如...
2024-11-29 10:26:13

贴片电阻上的512并非直接代表阻值大小,而是一种编码方式。代表的是51 x 10^2 欧姆,也就是5100欧姆,通常简写为5.1kΩ。这种编码方式遵循EIA-9...
2024-11-29 10:26:37

近日,大华股份与成都安可信电子股份有限公司(以下简称:安可信)签署战略合作协议。双方将围绕气体探测及报警技术与视频物联技术的融合场景展开积极的研发和实践。安可信...
2023-08-30 10:41:00

研究背景呼吸疾病如COVID - 19、甲型流感、病毒性流感和哮喘等持续对人们的生活构成挑战,是必须解决的重要健康问题。可穿戴湿度传感器可监测呼吸状态和体表湿...
2024-12-04 09:07:00

选择贴片电阻的功率大小,需要根据电路的实际工作情况来决定,并非越大越好。一般来说,常见的贴片电阻功率规格有1/16W (0.0625W), 1/10W (0.1...
2024-11-26 11:29:29

角接触球轴承是应用于机械设备中的重要部件,其规格尺寸对于确保设备的正常运行非常重要。通常,角接触球轴承的规格包括内径、外径、宽度及额定载荷等参数。常见的内径尺寸...
2013-10-22 00:00:00

方锉是常用的手工工具,主要用于金属、木材等材料的打磨和修整。工作原理是通过锉齿的切削作用,将材料表面多余的部分去除,从而达到平整、光滑的效果。方锉的形状呈方形,...
2016-04-14 00:00:00

电阻器作为基本的电子元件,是重要的配件。尤其是在电流检测领域,电流检测电阻的性能直接影响着整个电路的安全性与稳定性。华润电阻作为中国知名的电子元件制造品牌,其电...
2018-12-02 18:07:30