我是靠谱客的博主 潇洒雪碧,最近开发中收集的这篇文章主要介绍运动控制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

													**运动控制函数:**

初始化控制卡(d2210_board_init)函数 ==》

	脉冲模式设置(d2210_set_pulse_otmode)函数		
	中断控制函数(若有)	<<——>>用户定义中断程序
运		
动
过			运动函数调用(d2210_t_vmove)函数
程			运动状态检测(d2210_check_done)函数
处		
理			等等.........	==

最终要释放控制卡调用(d2210_board_close)函数

初始化函数:WORD.d2210_board_init(void)
功能:为DMC2210运动控制卡分配系统资源并初始化控制卡
返回值:卡数(0-8),0表示没有卡

关闭操控卡函数:void d2210_board_close(void)
功能:释放控制卡占用的系统资源,当程序结束时必须调用此函数
无参数 无返回值
例程:
初始化:cardcount=d2210_board_init();
关闭控制卡: d2210_board_close();

脉冲输出模式的设置:
用户在调用运动控制函数前应先调用d2210_set_pulse_outmode函数来设置指令脉冲模式。
指令脉冲包括两项基本信息:电机运转距离即脉冲数,和电机转方向。
有两种基本指令模式:(1):脉冲/方向模式(即PULSE/DIR模式)
(2):双脉冲模式(即CW/CCW模式)

脉冲输出方式的设置函数:
void d2210_set_pulse_outmode(WORD axis,WORD outmode)

功能:设置指定轴的脉冲输出方式
参数: axis:轴号
outmode:脉冲输出方式选择

在DMC2210函数库中距离或位置的单位为脉冲;速度单位为脉冲/秒;时间单位为秒

梯形速度曲线设置函数:
void d2210_set_profile(WORD axis,double Min_Vel,double Max_Vel,double Tacc,double Tdec)

功能:设定梯形速度曲线的起始速度、运动速度、加速时间、减速时间
参数:axis:轴号
Min_Vel:起始速度,或简称为低俗
Max_Vel:运行速度,或简称为高速
Tacc:总加速时间(Time of Acceleration)
Tdec:总减速时间(Time of Deceleration)
无返回值
(图5-4)
在这里插入图片描述
以对称梯形曲线为速度的位移控制函数:
void d2210_t_pmove(WORD axid,Long Dist,WORD Posi_mode)

功能:让指定轴以对称梯形曲线速度做点为运动
参数:axis:轴号
Dist:运动距离(Distance)
Posi_mode:坐标模式,相对位移为0,绝对位移为1
无返回值

以非对称梯形曲线为速度的位移控制函数:
void d2210_ex_t_pmove(WORD axis,Long Dist,WORD posi_mode)

功能:让指定轴以非对称梯形的曲线速度作点位运动
参数:axis:轴号
Dist:运动距离(Distance)
Posi_mode:坐标模式,相对位移为0,绝对位移为1
无返回值
例程:执行以非对称梯形速度曲线作点位运动
d2210_set_profile(0,500,6000,0.02,0.01) 设置0号轴起始速度为500脉冲每秒,运行速度为6000脉冲每秒,加速时间为0.02秒,减速时间为0.01秒
d2210_ex_t_pmove(0,5000,0)设置0号轴运动距离为5000个脉冲,相对坐标并开始执行运动

单轴运行中改变当前运行速度的函数:
void d2210_change_speed(WORD axis,double curr_vel)

功能:当指定轴在作连续运动时,调用此函数可以改变当前的运动速度,并立即按所指定的速度连续运行
参数:axis:轴号
curr_vel:新的运动速度
无返回值

改变目标位置函数:
void d2210_rest_target_position(WORD axis,long dist)

功能:在运动中改变目标位置,若目标位置比当前位置远,则继续向前运动,到达新目标位置后,停止脉冲输出;若目标位置比当前位置近,控制卡将先停止当前运动,然后反方向运动至目标位置。注意:该函数仅能在相对位置模式下使用
参数:axis:轴号
dist:新的位置
无返回值
例程:改变速度,改变终点位置
d2210_set_profile(0,500,6000,0.01,0.02) //设置梯形曲线运动
d2210_ex_t_pmove(0,5000,0)//设置距离、相对坐标模式
if(“改变速度的条件”)
{
curr_vel=9000;
d2210_change_speed(0,curr_vel);//执行改速命令
}
if(“改变终点位置条件”)
{
d2210_reset_target_position(0,5500)//将终点位置改成5500
}

如果运动距离很短,当距离小于或等于(Max_Vel+Min_Vel)×Tacc 时,理论上速度曲线
将变为三角形;但 DMC2210 运动控制卡有自动调整功能,将三角形的尖峰去,以避免速度
变化太大发生冲击现象,请参见图 5-8。
在这里插入图片描述

指定轴的运动状态监测函数:
WORD d2210_check_done(WORD axis);

功能:检测指定轴的运动状态,是运动还是停止
参数:axis:轴号
返回值:0表示指定轴正在运行
1表示指定轴停止运行

S形速度曲线运动
若将加速度改为线性变化,则速度曲线相应将变得光滑,如图 5-9 所示。升速和减速阶
均变得象“S”形状。采用此种速度曲线,运动更平稳,且有助于缩短加速过程、降低运
装置的振动和噪声,以及延长机械传动部分的寿命。

设置S形速度曲线及其点位运动的函数如下:
非对称S形速度曲线设置函数:
void d2210_set_s_profile(WORD axis,double Min_Vel,double Max_Vel,double Tacc,double Tdec,long Sacc,long Sdec)

功能:设置S形速度曲线的起始速度、运动速度、加速速度、S段加/减速距离
参数: axis:轴号
Min_Vel:起始速度
Max_Vel:运行速度
Tacc:总加速时间
Tdec:总减速时间
Sacc:S段加速距离
Sdec:S段减速距离
无返回值

以对称S形曲线为速度的位移控制函数:
void d2210_s_pmove(WORD axis,long Dist,WORD posi_mode)

功能:让指定轴以对称S形速度曲线作点位运动
参数:axis:轴号
Dist:运动距离
posi_mode:坐标模式,相对模式为0,绝对模式为1
无返回值

以非对称S形曲线为速度的位移控制函数:
void d2210_ex_s_pmove(WORD axis,long Dist,WORD posi_mode)

功能:让指定轴以非对称S形速度曲线作点位运动
参数:axis:轴号
Dist:运动距离(Distance)
posi_mode:坐标模式,相对模式为0,绝对模式为1
无返回值

梯形速度曲线单轴连续运动函数:
void d2210_t_vmove(WORD axis,WORD dir)

功能:让指定轴以梯形速度曲线加速到指定的运行速度后,连续运动
参数: axis:轴号
dir:指定运动的方向,其中0表示负方向,1表示正方向
无返回值

S形速度曲线单轴连续运动函数:
void d2210_s_vmove(WORD axis,WORD dir)

功能:让指定以S形速度曲线加速到指定的运行速度后,连续运动
参数: axis:轴号
dir:指定运动方向,其中0表示负方向,1表示正方向
无返回值

减速停止函数:void d2210_decel_stop(WORD axis,double Tdec)
功能:指定轴减速停止。调用此函数后立即减速,到达起始速度后停止
参数: axis:轴号
Tdec:总减速时间
无返回值

例程:以 S 形速度曲线加速的连续运动及变速、停止控制
……
d2210_set_profile(0,500,1000,0.1,0.1); //设置梯形曲线速度,加、减速时间
d2210_t_vmove(0,1); //0 号轴连续运动,方向为正
if(“改变速度条件”) //如果改变速度条件满足,则执行改变速度命令
{
Curr_Vel= 1200; //设置新的速度
d2210_change_speed(0,Curr_Vel); //执行改变速度指令
}
if(“停止条件”) //如果运动停止条件满足,则执行减速停止命令
d2210_decel_stop(0,0.1); //减速停止,减速时间为 0.1 秒
……

加速过程距离(脉冲数)计算:
对于梯形速度曲线运动,加速段的运动距离(脉冲数)可以按以下公式计算:
Dacc=(1/2) X (Max_Vel+Min_Vel)X Tacc
Ddec=(1/2) X (Max_Vel+Min_Vel)X Tdec
其中:Dacc,Ddec分别为加速段距离和减速段距离:
Min_Vel,Max_Vel为起始速度和运行速度;
Tacc,Tdec为加速时间和减速时间
以上公式也完全适合于S曲线的情况

回原点运动
在进行精确的运动控制之前,需要设定运动坐标系的原点。DMC2210提供多个与原点设
置相关的函数:原点信号的有效逻辑电平由d2210_set_HOME_pin_logic函数设置,回原点
模式由d2210_config_home_mode函数指定,回原点的动作由d2210_home_move函数控制,
回原点的速度则由 d2210_set_profile 函数设置,到达原点后指令脉冲计数器由
d2210_set_position函数清零。

设置原点信号函数:
void d2210_set_HOME_pin_logic(WORD axis,WORD org_logic,WORD filter)
功能:设置原点信号的点平和芯片内部滤波器使能。滤波器为硬件低通滤波器,当输入信号小于4us时,信号将被忽略。
参数:axis:轴号
org_logic:原点信号的有效电平,0表示低电平有效,1表示高点平有效
filter:设置滤波功能,0表示禁止,1表示允许

设置回原点模式函数:
void d2210_config_home_mode(WORD axis,WORD mode,WORD EZ_count)
功能:DMC2110运动控制卡提供了多种不同的回原点模式,实现精确定位到原点的方案,通过调用此函数便可以选择其中一种模式。
参数: axis:轴号
mode:回原点的模式,0表示只计home,1表示计home和EZ
EZ_count:在回原点运动过程中,当找到原点信号后,该轴的EZ信号出现的了EZ_count次后,点击停止。该参数的取值范围是:1~16。
无返回值

回原点函数:
void d2210_home_move(WORD axis,WORD home_mode,WORD vel_mode)

功能:按指定的方向和速度方式开始回原点。
参数: axis:轴号
home_mode:回原点的方法,1表示正方向回原点,2表示负方向回原点
vel_mode:选择回原点的速度方式,0表示低速回原点,1表示高速回原点,遇到原点信号,减速后停止
无返回值

执行完d2210_home_move函数后,指令脉冲计数器不会自动清零;如需清零可以在回零运动完成后,调用d2210_set_position函数软件清零
方式0:只计home方式
该方式以低速回原点,适合与行程短,安全性要求高的场合。动作过程为:电机从初始位置以恒定低速度向原点方向运动,当到达原点开关位置,原点信号被触发,电机立即停止(过程0);将停止位置设为原点位置,图5-14所示
在这里插入图片描述例程:低速回原点
……
d2210_set_HOME_pin_logic(0,0,1); //设置 0 号轴的原点信号低电平有效,使能滤波功能
d2210_config_home_mode(0,0,1); //设置 0 号轴模式为遇原点后停止,EZ 信号出现次数为
1
d2210_set_profile(0,500,1000,0.1,0.1); //设置 0 号轴梯形曲线速度,加、减速时间
d2210_home_move(0,2,0); //设置 0 号轴为负方向回原点,速度方式为低速回原点
while (d2210_check_done(0) == 0) //等待回原点动作完成
{
}
d5400_set_position(0,0); //设置 0 号轴的指令脉冲计数器绝对位置为 0
……

**方式1:**计home和EZ方式
若将上面的程序 d2210_config_home_mode(0,0,1)改为 d2210_config_home_mode(0,1,1),EZ信号出现次数为1次,则回原点过程如图5-15所示在这里插入图片描述
多轴运动控制
1.多轴联动
几个轴同时运动,一般称为多轴联动。
DMC2210 运动控制卡可以控制多个电机同时执行 d2210_t_move、d2210_s_move 这类
单轴运动函数。所谓同时执行,是在程序中顺序调用 d2210_t_move、d2210_s_move 等函
数,因为程序执行速度很快,在瞬间几个电机都开始运动,给人的感觉就是同时开始运动。
多轴联动在各轴速度设置不当时,各轴停止时间不同、在起点与终点之间运动的轨迹也不
是直线。如图 5-19 所示
多轴联动2。直线插补运动
插补运动与多轴联动则不同:插补运动不但能保证起点、终点位置准确外,X 轴和 Y 轴
的脉冲是按照直线斜率成比例发出的,所以在插补运动过程中的每一个时刻,其运动轨迹与
理论曲线的误差总是小于一个脉冲当量,如图 5-20 所示。
在这里插入图片描述DMC2210 卡可以进行任意 2 轴直线插补,插补工作由控制卡上硬件执行,用户只需将插
补运动的速度、加速度、终点位置等参数写入相关函数,而无需介入插补过程中的计算工作。

二轴直线插补:
如图 5-21 所示,2 轴直线插补从 P0 点运动至 P1 点,X、Y 轴同时启动,并同时到达终
点;X、Y 轴的运动速度之比为 ΔX:ΔY,二轴合成的矢量速度为:
在这里插入图片描述在这里插入图片描述
调用 2 轴直线插补函数时,调用者需提供矢量速度,包括其起始矢量速度 Min_Vel 和工作矢
量速度 MaxVel,梯形和 S 形速度曲线参数

二轴直线补插函数:
void d2210_t_line2(WORD axis,long Dist1,WORD axis2,long Dist2,WORD posi_mode)

功能:让指定的两轴作对称的梯形加减速补插运动。当posi_mode为0时,作相对位移运动,运动方向由Dist的正负值确定,为1,作绝对位移运动,运动方向由Dist与当前位置的差值决定。
参数:axis1,axis2:第一、二轴轴号
Dist1,Dist2:第一、第二轴距离
posi_mode:位置模式,0表示相对位移,1表示绝对位移
无返回值
例程: XY轴直线插补
short AxisArray[2];
AxisArray[0]=0 //定义插补0轴为X轴
AxisArray[1]=1 //定义插补1轴为Y轴
d2210_set_vector_profile(1000,5000,0.1,0.2);
d2210_t_line2(AxisArray[0],30000,AxisArray[1],40000,0)
该例程使X,Y轴进行相对模式直线插补运动,其相关参数为:
ΔX=30000 pulse
ΔY=40000 pulse
起始矢量速度=1000pps (0轴,1轴分速度为600,800pps)
工作矢量速度=5000pps (0轴,1轴分速度为3000,4000pps)
梯形加速时间=0.1s
梯形减速时间=0.2s
相关函数: d2210_set_vector_profile

3圆弧插补
DMC2210卡的两轴之间可以进行圆弧插补,圆弧插补分为相对位置圆弧插补和绝对位置
圆弧插补,运动的方向分为顺时针(CW)和逆时针(CCW)

二轴绝对位置插补函数:
void d2210_arc_move(WORDaxis,longtarget_pos,long*cen_pos,WORD arc_dir)

功能:让指定的二轴作绝对位置圆弧插补运动
参数:axis:轴号列表
target_pos:目标位置列表(指定圆弧终点)
cen_pos:圆心位置列表
ar_dir:圆弧方向,0表示顺时针,1表示逆时针
无返回值

二轴相对位置插补函数:
void d2210_rel_arc_move(WORDaxis,longrel_pos,long)

功能:让指定的二轴作相对位置圆弧插补运动。
参数:axis:轴号列表
rel_pos:目标位置列表(指定圆弧终点)
rel_cen:圆心位置列表
arc_dir:圆弧方向,0表示顺时针,1表示逆时针
无返回值
例程: XY轴圆弧插补
word AxisArray[2];
AxisArray[0]=0 //定义0轴为插补X轴
AxisArray[1]=1 //定义1轴为插补Y轴
long Pos[2]={5000,0}
long Cen[2]={5000,-5000};
d2210_set_vector_profile(1000,3000,0.1,0.2);
d2210_arc_move(AxisArray,Pos,Cen,0) //XY轴进行顺时针方向绝对圆弧插补运动,终点(5000,0),圆心(5000,-5000)

连续缓冲插补运动
DMC2210 卡允许两轴电机进行连续缓冲插补运动,但是线段之间有一个小的加/减
速过程,效果可以用图 5-24 来表示在这里插入图片描述本控制卡上具有两级硬件缓冲功能,能预先存储两步运动的数据。控制卡当前运动的数
据存储在工作寄存器R(register)中,下一个运动的数据存储在预置缓冲区PR(pre-register)
中,如图5-25所示。当前运动完成,PR中的数据自动移至R中开始执行,此时寄存器PR1变
为空。PC机查询到PR为空后,即可补充下一运动的数据。如此不断循环,直至完成所有运
动。
在这里插入图片描述
读取指定轴预置缓冲区状态的函数:
WORD d2210_prebuff_status(WORD axis)
功能:读取指定轴预置缓冲区状态
参数:axis:轴号
返回值: 预置缓冲区状态,0表示预置缓冲区为空,1表示预置缓冲区满
连续缓冲插补注意事项:
1、连续缓冲插补运动只支持相对模式的插补运动
2、预置缓冲区不为空时,用户不能写入新的运动命令,否则将导致错误。
3、如果在插补运动过程轴,出现触发限位而停止,那么后续写入的资料和命令都是无效的

通过一个例子说明连续缓冲插补的应用
在这里插入图片描述描述:假定在一工作平面上,刀具在系统XY轴物理原点的正向位置(X轴对应Axis[0], Y
轴对应Axis[1]),现刀具先回到系统的物理原点,再执行插补运动C1, 然后执行圆弧插补运动
C2,接着执行插补运动C3,最后执行插补运动C4回到P1点,如图5-26所示
例程: XY 轴连续缓冲插补
WORD Axis[2]; //定义运动轴
Axis[0] = 0; Axis[1] = 1;
long Pos1[2] = {3598,5000}; //定义 C2 圆弧插补的终点位置 P3
long Pos2[2] = {1000,3000}; //定义 C4 圆弧插补的终点位置 P1
long Cen1[2] = {2732,4500}; //定义 C2 圆弧插补的圆心位置 O1
long Cen2[2] = {2732,1994}; //定义 C2 圆弧插补的圆心位置 O2
d2210_set_vector_profile (50, 500, 0.01, 0.01); //设置插补速度、加减速时间
d2210_set_HOME_pin_logic(0, 0, 1); //设置轴 0 原点信号低电平有效,使能滤波功能
d2210_config_home_mode(0, 0, 1); //设置轴 0 模式为遇原点后停止,EZ 信号次数为 1
d2210_set_HOME_pin_logic(1, 0, 1); //设置轴 1 原点信号低电平有效,使能滤波功能
d2210_config_home_mode(1, 0, 1); //设置轴 1 模式为遇原点后停止,EZ 信号次数为 1
d2210_home_move(0, 2, 0); //设置轴 0 为负方向回原点,速度方式为低速回原点
while (d2210_check_done (0) = =0) //判停
{}
d2210_home_move(1, 2, 0); //设置轴 1 为负方向回原点,速度方式为低速
while (d2210_check_done (0) = =0) //判停
{}
d2210_t_line2(Axis[0], 1000, Axis[1], 3000, 1); //执行行程 C1,到达 P2 点
while (d2210_prebuff_status = =1) //等待缓冲寄存器为空
{}
d2210_rel_arc_move(Axis, Pos1, Cen1, 0); //执行行程 C2,到达 P3 点
while (d2210_prebuff_status = =1) //等待缓冲寄存器为空
{}
d2210_t_line2(Axis[0], 4464, Axis[1], 3000, 1); //执行行程 C3,到达 P4 点
while (d2210_prebuff_status = =1) //等待缓冲寄存器为空
{}
d2210_rel_arc_move(Axis, Pos2, Cen2, 0) ; //执行行程 C3,到达 P4 点
while (d2210_check_done (0) = =0) //判停
{}
注意: 缓冲寄存器不为空时,不得写入新的运动命令,否则将导致错误

位置计数
1.命令位置计数器
命令位置计数器是一个28位正负计数器,对控制卡输出脉冲进行计数。当输出一个正向
脉冲后,计数器加1;当输出一个负向脉冲后,计数器减1
读取指令脉冲位置函数:
long d2210_get_position(WORD axis)

功能:读取指定轴的指令脉冲计数器
参数:axis:轴号
返回值:指令位置脉冲数
设置指令脉冲位置函数:
void d2210_set_position(WORD axis,long current_position)

功能:设置指定轴的指令脉冲计数器
参数:axis:轴号
current_position:指令脉冲计数器的设定值
无返回值
例程: 位置操作
d2210_set_postion(0,100); //设置轴0的脉冲位置为100
position=d2210_get_position(0); //读轴0的当前位置值至变量position

2.反馈位置计数器

最后

以上就是潇洒雪碧为你收集整理的运动控制的全部内容,希望文章能够帮你解决运动控制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部