首页 > 技术 > 内容

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

时间:2025-11-29  作者:Diven  阅读:0

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;}

 

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

顺时针旋转

逆时针旋转

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

  审核编辑:汤梓红

猜您喜欢


起重机作为重要的机械设备,应用于建筑、制造、港口等行业。其工作原理涉及复杂的电气系统,其中电阻器是非常重要的配件。电阻器不仅影响起重机的性能,还对其安全性和可靠...
2025-04-14 02:31:09
品牌的地域归属往往成为消费者关注的一个焦点。特别是对于那些在特定领域享有盛誉的品牌,了解其背景不仅能增添产品的信任度,还能满足人们对文化多样性的好奇。士康(SA...
2012-03-20 01:20:19
在物联网的快速发展中,ZigBee模块因其低功耗和高效能而受到关注。市场上的ZigBee模块种类繁多,各自具有不同的特点和应用场景。从功能上看,ZigBee模块...
2008-08-20 00:00:00
iPad 已成为我们生活中重要的一部分,无论是工作、学习还是娱乐,都能提供出色的体验。 为了确保您的 iPad 始终保持最佳状态,了解正确的电池充电方法很重要。...
2024-02-02 00:00:00
半导体放电管(TSS)作为重要的电子元件,其主要优势体现在多个方面。TSS具有快速响应的特性,能够在极短的时间内完成放电,有效保护电路免受瞬态过电压的损害。TS...
2008-03-15 00:00:00
CONN_13.6X2.8MM_TM是应用于电子设备中的连接器,其独特的尺寸和设计使其在各种工业和消费电子产品中有着着重要作用。本文将深入探讨CONN_13.6...
2025-04-20 20:31:09
贴片电阻的规格主要体现在尺寸和阻值上。尺寸通常采用英制表示,例如0402、0603、0805、1206等,数字表示长宽尺寸,例如0402代表长宽为0.04英寸 ...
2024-11-29 10:26:05
贴片电阻上的12B并不是直接表示阻值大小,而是采用一种数字字母混合的编码方式。其中,12代表有效数字,而B代表乘数。要理解12B代表的阻值,需要将12乘以B对应...
2024-11-29 10:26:08
光敏电阻作为重要的光电传感元件,应用于自动照明、环境监测、光控开关等领域。泰科电子(TE Connectivity)作为全球领先的电子元器件制造商,其光敏电阻产...
2020-11-05 06:44:51