探索ARM + FPGA架构运动控制卡的奥秘
开发板ARM+FPGA架构运动控制卡 运动控制器 本运动控制卡采用ARM单片机+FPGA架构; ARM单片机是基于Cortex-M3内核的LM3S6911,插补核心算法均在该ARM内完成,一方面通过以太网与上位机界面交换加工数据,另一方面与FPGA(ALTERA的EP1C3)交换加工脉冲计数与IO开关量等相关参数。 FPGA主要负责实时性的功能和开关量的扩展。 具体系统参数如下: 1-4轴运动控制控制卡是以太网通讯的高性能四轴伺服/步进控制卡,可使用连续插补等先进功能。 脉冲输出方式可用单脉冲(脉冲方向)方式,最大脉冲频率4MHz。 支持多种控制方式,如定量运动,连续运动,回零运动,多轴直线插补,圆弧插补等。 插补一般用定速运动,也可用直线、S曲线加减速,(S曲线加减速不能用于圆弧插补)。 插补带有连续插补功能,即在插补过程中输入下一点的插补数据,以保证脉冲的连续,使插补达到更快更好的性能。 最大插补速度可达4MHz。 速度控制可用定速、直线以及S曲线加减速,可用自动/手动减速,在定量驱动时可防止速度曲线产生三角波形。 每轴有2个32位比较寄存器,用于产生中断或作为软件限位。 支持24路光藕隔离输入,所有数字输入信号均有滤波器,以防止干扰。 支持24路光藕隔离输出,其中16路可以直接驱动继电器,电磁阀等。 支持4路编码器输出。 可以轻松通过组网控制8-64轴单轴运动。 注:图片为旧版实物图,出售的是新版本,元器件布局更合理,跟图中的实物图稍有不同。 提供原理图,PCB图,FPGA源码,ARM去掉算法后的框架源码。 无ARM核心算法部分,请注意。
最近在研究运动控制相关的项目,发现了一款超有意思的开发板——基于ARM + FPGA架构的运动控制卡,今天就来和大家分享分享。
架构解析
这款运动控制卡采用的是ARM单片机 + FPGA的架构。其中ARM单片机选用的是基于Cortex - M3内核的LM3S6911 。这个ARM单片机可是承担了不少重任,插补核心算法都在它内部完成。它就像一个信息枢纽,一方面通过以太网和上位机界面愉快地交换加工数据,另一方面又和FPGA(ALTERA的EP1C3 )传递加工脉冲计数以及IO开关量等重要参数。
开发板ARM+FPGA架构运动控制卡 运动控制器 本运动控制卡采用ARM单片机+FPGA架构; ARM单片机是基于Cortex-M3内核的LM3S6911,插补核心算法均在该ARM内完成,一方面通过以太网与上位机界面交换加工数据,另一方面与FPGA(ALTERA的EP1C3)交换加工脉冲计数与IO开关量等相关参数。 FPGA主要负责实时性的功能和开关量的扩展。 具体系统参数如下: 1-4轴运动控制控制卡是以太网通讯的高性能四轴伺服/步进控制卡,可使用连续插补等先进功能。 脉冲输出方式可用单脉冲(脉冲方向)方式,最大脉冲频率4MHz。 支持多种控制方式,如定量运动,连续运动,回零运动,多轴直线插补,圆弧插补等。 插补一般用定速运动,也可用直线、S曲线加减速,(S曲线加减速不能用于圆弧插补)。 插补带有连续插补功能,即在插补过程中输入下一点的插补数据,以保证脉冲的连续,使插补达到更快更好的性能。 最大插补速度可达4MHz。 速度控制可用定速、直线以及S曲线加减速,可用自动/手动减速,在定量驱动时可防止速度曲线产生三角波形。 每轴有2个32位比较寄存器,用于产生中断或作为软件限位。 支持24路光藕隔离输入,所有数字输入信号均有滤波器,以防止干扰。 支持24路光藕隔离输出,其中16路可以直接驱动继电器,电磁阀等。 支持4路编码器输出。 可以轻松通过组网控制8-64轴单轴运动。 注:图片为旧版实物图,出售的是新版本,元器件布局更合理,跟图中的实物图稍有不同。 提供原理图,PCB图,FPGA源码,ARM去掉算法后的框架源码。 无ARM核心算法部分,请注意。
而FPGA呢,主要负责实时性的功能以及开关量的扩展。可以说,两者分工明确,携手让整个运动控制卡高效运转。
系统参数亮点
- 多轴运动与先进插补:这是一款1 - 4轴运动控制的控制卡,通过以太网通讯,是高性能的四轴伺服/步进控制卡,支持连续插补等先进功能。就比如说在一些复杂的机械加工场景中,连续插补功能就能让加工路径更加平滑,加工精度更高。
- 脉冲输出与控制方式:脉冲输出方式采用单脉冲(脉冲方向)方式,最大脉冲频率能达到4MHz 。并且支持多种控制方式,像定量运动、连续运动、回零运动,还有多轴直线插补、圆弧插补等等。这里以直线插补为例,简单写段伪代码示意下(这里只是简单逻辑示意,非完整可运行代码):
// 假设定义结构体存储轴的参数
typedef struct {
int position;
int target;
int speed;
} Axis;
// 直线插补函数
void linearInterpolation(Axis axes[], int axisCount) {
// 计算总步数
int totalSteps = 0;
for (int i = 0; i < axisCount; i++) {
totalSteps += abs(axes[i].target - axes[i].position);
}
// 按照速度逐步移动
while (totalSteps > 0) {
for (int i = 0; i < axisCount; i++) {
if (axes[i].position < axes[i].target) {
axes[i].position += axes[i].speed;
} else if (axes[i].position > axes[i].target) {
axes[i].position -= axes[i].speed;
}
}
totalSteps--;
}
}
这段代码里,先通过结构体存储每个轴的位置、目标位置和速度信息。然后在直线插补函数里,先计算总步数,再根据每个轴的目标位置和当前位置关系,按照设定速度逐步移动,实现直线插补。
- 速度控制与插补加速:插补一般用定速运动,也能用直线、S曲线加减速,不过要注意S曲线加减速不能用于圆弧插补哦。速度控制除了能用定速、直线以及S曲线加减速外,还可用自动/手动减速,在定量驱动时能有效防止速度曲线产生三角波形。想象一下,在一个快速移动并突然停止的场景中,如果没有合适的加减速控制,就可能会对设备造成冲击,而这些加减速控制就能很好地避免这种情况。
- 寄存器与输入输出:每轴有2个32位比较寄存器,这可是有大用处的,既可以用于产生中断,又能当作软件限位。而且它支持24路光藕隔离输入,所有数字输入信号都配备了滤波器,有效防止干扰。输出方面也很强大,支持24路光藕隔离输出,其中16路还能直接驱动继电器、电磁阀等设备。同时还支持4路编码器输出,通过组网甚至可以轻松控制8 - 64轴单轴运动。
资源提供
这里还有个好消息,虽然没有ARM核心算法部分,但是会提供原理图、PCB图、FPGA源码,以及ARM去掉算法后的框架源码。这对于想要深入研究或者基于此进行二次开发的小伙伴来说,简直是福音。可以通过研究FPGA源码,看看它是如何实现实时性功能和开关量扩展的。比如下面这段简单的Verilog代码(同样为示意):
module io_control (
input wire clk,
input wire reset,
input wire [23:0] input_signal,
output reg [23:0] output_signal
);
always @(posedge clk or posedge reset) begin
if (reset) begin
output_signal <= 24'b0;
end else begin
// 简单的处理逻辑,比如取反输出
output_signal <= ~input_signal;
end
end
endmodule
这段代码定义了一个简单的IO控制模块,在时钟上升沿或者复位信号有效时,对输入信号进行处理并输出。通过类似这样的代码,我们就能大概了解FPGA在处理输入输出信号时的逻辑。
最后要提一下,虽然展示的图片是旧版实物图,但出售的可是新版本哦,元器件布局更合理,性能说不定更上一层楼呢。希望对运动控制感兴趣的小伙伴可以一起探讨探讨这款超酷的运动控制卡呀。

更多推荐


所有评论(0)