MACH3脉冲的工作与输出(三)

电子说

1.3w人已加入

描述

前两篇我们知道了,MACH3的加速度参数之间的关系,那如何用数学公式做出分散的与加速度有关的时间间隔点呢???

我们知道一个物体的加速度有下面几个公式

V=V0+AT;

S=V0 T+1/2(A (T^2));

当V0为0时,则:

V=A*T;

S=1/2*(A*(T^2));

这几个公式都是在连续的时间段时的公式,但CNC只能按步来控制,也就是说这控制时间上时间是分散的,隔离的.
步进加速度分散点如下所示:

0      0     0    0   0  0  0  0  0  0  0   0    0     0      0

 ---------加速----------匀速---------减速-------------

从开始速度最小加速到速度最大(加速),后按最大速度运行(匀速),又从速度最大是降速到速度最小时(减速),每次的时隔不一,

这个怎才能算出来的呢??

推论:

常量:

Steps.per 每mm单位的步值

F 速度

A 加速度

加速到最高速时所用到的参数:

Nm 所用的脉冲数量

fmax 最大时速时的频率(HZ)

Tmax 最大时间

加速到最高速时的频率: fmax= (F/60)*(Steps.per)

加速到最高速时所用到的脉个数: Nm=(fmax*Tm)/2

加速到最高速时所用时间: Tmax =(F/60)/A

加速到最高速时所用脉冲个数: Nmax = (fmax*Tmax)/2

由前几个公式推出分散点n所要时间与参数之间的关系:

Tn^2= (2Tmaxn)/fmax;

Tn= sqrt((2Tmaxn)/fmax);

理论有了,现在就按这个思路写出程序:

<<预处理梯型加速时间表>> ******

因为运算中有开根号与双精度运算,每次所调用的时间很大,为了提供更大的空间给插补运算,

所以提前在程序头中算好所需的时间,填入时间表中

但请注意,这里所需的内存很大,不过为了运行时间,这个还是值的.

#define Steps_per 320
#define Steps_mms 1200 //速度 MM/分钟
#define Steps_A 120

u16 Fmax(u16 Steps_mms_s,u16 Steps_per_s)
{
return (Steps_mms_s/60)*Steps_per_s;

}

double Tmax(u16 Steps_mms_s, u16 Steps_A_s)
{
return (double)(Steps_mms_s/60)/Steps_A_s;
}

u16 Nmax(u16 Fmax,double Tmax)
{
return Fmax * Tmax/2;
}

Fm = Fmax(Steps_mms,Steps_per);

 Tm = Tmax(Steps_mms,Steps_A);

 Nm=  Nmax(Fmax(Steps_mms,Steps_per),Tmax(Steps_mms,Steps_A));

for(i=0;i {

Tn=(sqrt((2*Tm*i)/Fm)*1000000)-Tn_z;     //因为算出来为秒,但在程序中用秒为时间单位会太大,所以就换成微秒
  Tn_z= sqrt((2*Tm*i)/Fm)*1000000;




}

本来是想做到运算器程序里,因本人图个快捷,就电子表格生成一个:

把时间间隔倒数后导入到电子表格中生成如下加速曲线表

这样更直观地反应参数之间的关系

加速度计

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分