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

时间:2025-09-12  作者: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;}

 

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

顺时针旋转

逆时针旋转

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

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

四端子电阻高精度和稳定性被应用。捷比信(JBC)作为知名的电子测量设备品牌,其四端子电阻产品在业内享有良好口碑。本文将围绕“捷比信四端子电阻电流参数多少品牌”这...
2023-02-03 20:38:31

在选择电话机时,了解其参数是非常重要的。通话质量是关键,受麦克风和扬声器的影响。高灵敏度麦克风和清晰的扬声器能够提供更好的通话体验。电话机的功能也不可忽视,现代...
2009-08-20 00:00:00

NTC热敏电阻因其良好的温度敏感特性被应用于温度检测与控制系统中。作为知名品牌,TOKEN(德键)NTC热敏电阻优异的性能和稳定的质量赢得了众多客户的青睐。对于...
2013-03-18 07:29:22

在现代工业自动化领域中,各种传感器、执行器和控制器都需要通过通讯协议进行数据交换。而DeviceNET通讯协议则是其中一种广泛应用的协议。为了实现DeviceN...
2023-08-18 13:59:00

贴片电阻在电子电路中是很重要的配件,选择合适的尺寸很重要。贴片电阻的尺寸通常用四位数字代码表示,例如0402、0603、0805、1206等。这些数字代表着电阻...
2024-11-29 10:26:06

贴片电阻,电子产品中的常见元件,它的读法看似复杂,其实掌握规律后很简单。一般来说,贴片电阻上会印有3位或4位数字,也可能印有字母和数字的组合。三位数字的读法是前...
2025-04-14 15:03:48

MOS管是什么?MOS管,也称为金属-氧化物-半导体场效应晶体管(Metal-Oxide-Semiconductor Field-Effect Transist...
2024-09-09 00:00:00

如今的照明市场中,LED驱动器作为LED灯具的核心组件,对于灯具性能的影响不容小觑。了解LED驱动器的参数含义,不仅可以帮助我们选择更加适合的产品,还能为生活带...
2024-06-29 00:00:00

当今快节奏的生活中,配件的选择不仅关乎实用性,更是体现个性与品位的重要元素。本文将详细介绍“Accessories_12X3.6MM_TM”,并探讨其特点及应用...
2025-04-26 12:00:36

功率电感是电子设备中关键的元件。在电路中起着重要的作用。本文将探讨功率电感的功能和应用。能量储存功率电感能储存能量。当电流通过时,电感会产生磁场。这个磁场能量可...
2025-03-22 17:00:35