您的位置:首页 > 其它

【龙印】步进电机使用七段式抛物线型S曲线加减速和路径规划的理论分析和实现

2017-02-22 10:26 656 查看
本文为在用龙芯1c做3D打印机过程中的笔记。龙芯1c做的3d打印机简称“龙印”,Git地址“http://git.oschina.NET/caogos/marlin_ls1c”

理论分析

S曲线算法的核心思想是让加速度不产生突变,从而使被控对象的速度控制具有快速、平稳的特性。这就回答了为什么要使用S曲线的原因。
常见的S曲线有抛物线型和三角函数型。这里主要探讨抛物线型。这里说的抛物线指的是速度曲线为抛物线,加速度的曲线却为梯形曲线。同样marlin中使用的梯形曲线也指的是速度曲线。



注意观察与后面的抛物线型S曲线的异同。
本文参考以下论文



七段式抛物线型S曲线



常见的需求是从一点(一个坐标)运动到灵一点(另一个坐标),要求用最短的时间,但是最大速度不能超过某个值。
在实际应用中,如果需要运动的距离太短,可能还来不及加速度最大速度,甚至加速度都还没达到最大值。这时可能就没有加加速阶段或者匀速阶段等。那么实际的速度曲线可能就是六段式,五段式,四段式抛物线型S曲线。
这就要求在路径规划时,需要根据每条路径的长短情况,选择不同的抛物线型S曲线。
其它网友有一种方案——将S曲线做成一张表,然后查表,实现S曲线加减速。假设每个路径的起点和终点速度都是v0,即从v0加速后再减速到v0。现在有两个不同长度的路径,但用的却是同一个表,同一个抛物线曲线,这会造成速度是连续的。加速度不连续,这点不太好理解,慢慢理解吧,呵呵!

六段式抛物线型S曲线



五段式抛物线型S曲线



四段式抛物线型S曲线



下面以四段式抛物线型S曲线为例详细讲解

从0到t1

[0,t1]
加速度的加速度=h_max
a(t)=h_max*t
对a(t)求积分
v(t)=h_max/2*t*t+c
将(0,v0)代入,求得c=v0
所以,v(t)=h_max/2*t*t+v0
对v(t)求积分
s(t)=h_max/2/3*t*t*t+v0*t+c
将(0,0)代入,求得c=0
所以,s(t)=h_max/6*t*t*t+v0*t
[0,t1]之间的距离S = s(t1)-S(0) = s(t1) = h_max/6*t1*t1*t1 + v0*t1

在t=t1时,
a(t1)=h_max*t1
v(t1)=h_max/2*t1*t1+v0
s(t1)=h_max/6*t1*t1*t1+v0*t1

从t1到t2

[t1,t2]
a(t)=k*t+b
将(t1,h_max*t1)和(2*t1,0)代入,求得
k=-h_max
b=2*h_max*t1
那么,a(t)=-h_max*t+2*h_max*t1
对a(t)积分
v(t)=-h_max/2*t*t+2*h_max*t1*t+c
将t=t1时的速度代入,(t1,h_max/2*t1*t1+v0)
h_max/2*t1*t1+v0=h_max/2*t1*t1+2*h_max*t1*t1+c
求得
c = v0 - h_max*t1*t1
所以,v(t)=-h_max/2*t*t + 2*h_max*t1*t + v0-h_max*t1*t1
对v(t)积分
s(t)=-h_max/2/3*t*t*t + 2*h_max*t1/2*t*t + (v0-h_max*t1*t1)*t + c
=-h_max/6*t*t*t + h_max*t1*t*t + (v0-h_max*t1*t1)*t + c
将t=t1时的距离代入,(t1,h_max/6*t1*t1*t1+v0*t1)
h_max/6*t1*t1*t1 + v0*t1 = -h_max/6*t1*t1*t1 + h_max*t1*t1*t1 + (v0-2*h_max*t1*t1)*t1 + c
求得
c = 1/3*h_max*t1*t1*t1
所以,s(t)=-h_max/6*t*t*t + h_max*t1*t*t + (v0-h_max*t1*t1)*t + 1/3*h_max*t1*t1*t1
[t1,t2]之间的距离
S = s(t2) - s(t1)
= s(2*t1) - s(t1)
=[-h_max/6*(2*t1)*(2*t1)*(2*t1) + h_max*t1*(2*t1)*(2*t1) + (v0-h_max*t1*t1)*(2*t1)]
- [-h_max/6*t1*t1*t1 + h_max*t1*t1*t1 + (v0-h_max*t1*t1)*t]
=5/6*h_max*t1*t1*t1 + v0*t1
[0,t2]的距离
S[0,t1] + S[t1,t2]
=[h_max/6*t1*t1*t1 + v0*t1] + [5/6*h_max*t1*t1*t1 + v0*t1]
=h_max*t1*t1*t1 + 2*v0*t1
再回顾下v(t1)=h_max/2*t1*t1+v0,仔细对比你会发现[0,t2]的距离S=2*v(t1)*t1,其中t2=2*t1。

用一个实际例子验证前面的公式

假设
v0=6
h_max=5
t1=7
t2=14

在区间[0,7]
加速度公式
a(t)=5t
v(t)=5/2*t*t+c
代入(0,6)
6=c
速度公式
v(t)=2.5*t*t+6
s(t)=2.5/3*t*t*t+6t+c
代入(0,7)
s(t)=5/6*t*t*t+6t+7
[0,7]的距离
S=s(7)-s(0)
= (5/6*7*7*7 + 6*7 + 7) - (7)
= 5/6*7*7*7 + 6*7
= 327.83

t=7时
a(7)=35
v(7)=128.5
s(7)=2009/6=334.83

在区间[7,14]
a(t)=kx+b
代入(7,35)和(14,0)
35=7k+b
0=14k+b
k=-5
b=70
加速度公式
a(t)=-5t+70
v(t)=-5/2*t*t+70*t+c
代入(7,128.5)
128.5=-5/2*7*7+70*7+c
c=-239
速度公式
v(t)=-5/2*t*t+70*t-239
s(t)=-5/2/3*t*t*t+70/2*t*t-239*t+c
=-5/6*t*t*t + 35*t*t -239*t + c
代入(7,2009/6)
2009/6=-5/6*7*7*7 + 35*7*7 - 239*7 + c
=-1715/6 + 1715 - 1673 + c
=-1715/6 + 42 + c
c = 2009/6 + 1715/6 + 42
= 3724/6 + 42
= 662.67
面积公式
s(t)=-5/6*t*t*t + 35*t*t - 239*t + c
[7,14]的面积
S=s(14)-s(7)
= (-5/6*14*14*14 + 35*14*14 - 239*14 + c) - (-5/6*7*7*7 + 35*7*7 - 239*7 + c)
= -13720/6 + 3514 - (-1715/6 + 42)
= -13720/6 + 3514 + 1715/6 - 42
=-12005/6 + 3472
=-2000.83 + 3472
=1471.17

[0,14]的距离
[0,7]的距离+[7,14]的距离
S = 327.83 + 1471.17
= 1799
应用前面推论得到的公式
S = h_max*t1*t1*t1 + 2*v0*t1
= 5*7*7*7+2*6*7
= 1799
根据推论:[0,t2]的距离S=2*v(t1)*t1,其中t2=2*t1
S=2*v(7)*7=2*128.5*7=1799
实际计算结果和以上推论是相符合的,说明公式是正确的。

实现

用定点运算代替浮点运算

四段式抛物线型S曲线

假设,步进电机的初始速度v0=10mm/s,最大速度为100mm/s,最大加速度为20mm/s2,加速度的加速度h_max=10mm/s3。
由四段式抛物线的加速度曲线可知:当t=t1时加速度最大,即a(t1)=h_max*t1=10*t1=20mm/s2,求得t1=2s。

从0到t1

以加加速阶段为例,看看如何在中断中计算定时器的周期
根据T=s/v,即时间=运行的距离/速度
再有,给步进电机一个脉冲,步进电机走一步,即定时器的定时时间内,步进电机运行的距离为一个(微)步。步进电机一个微步的距离micro_step_mm=0.01mm,即s=0.01mm。
速度v可以用加加速阶段的速度计算公式v(t)=h_max/2*t*t+v0=10/2*t*t+10=5*t*t+10。
综上所述,定时器周期T=s/v=0.01/(5*t*t+10),单位为秒。
将定时器周期T转换为微秒T_us=T*1000000=0.01*1000000/(5*t*t+10)=10000/(5*t*t+10),
再将时间t转换为微秒t_us后得,
T_us
= 10000 / (5*(t_us/1000000)*(t_us/1000000)+10)
= 10000 / (5*t_us*t_us/1000000/1000000+10)
为避免t_us*t_us溢出,将t_us/1000再相乘,变换后得
T_us=10000/(5*(t_us/1000)*(t_us/1000)/1000/1000 + 10)
当t_us<10秒时,不会溢出。10s可以跑很远了,对大部分打印机来说,一条G指令执行时间不会超过10s。
虽然龙芯1c定时器的时钟频率为126Mhz,定时精度小于1us,但对于3d打印机来说,精度为1us就已经足够了,如果将定时器时间改为纳秒级,时间值就是很大的整数,t_ns*t_ns很容易溢出。所以将定时器精度定为1us。
计算定时器周期T_us的表达式中,中分母最小为10。当分母为11时,计算得到的T_us=909,与分母为10时的T_us=1000相差很大。
为了进一步减小误差,将分子分母同时乘以100,得
T_us=10000*100/(100 * (5*(t_us/1000)*(t_us/1000)/1000/1000+10) )
整理后得
T_us=1000000/(5*(t_us/1000)*(t_us/1000)/10000+1000)
分母最小为1000,对应的T_us=1000us,当分母为1001时,T_us=999us,由此可知已达到定时器周期精度为1us的要求。这很重要,如果计算出来的定时器周期跳变很大,也会导致步进电机加速度不连续,即实现的和理论的偏差很大,那样的话就失去了抛物线加减速的意义了。
// 测试驱动中进行定点运算
static void motor_test(void)
{
unsigned int t_i_us;
unsigned int t_sum_us;
unsigned int T_i_us;
int i;

t_sum_us = 1000;
i=1;
for ( ; 1000000>t_sum_us; )
{
t_i_us = t_sum_us;
T_i_us = 1000000 / (5*(t_i_us/1000)*(t_i_us/1000)/10000+1000);
t_sum_us += T_i_us;
printk(KERN_INFO "[%s] i=%d, t_sum_us=%d, T_i_us=%d\n", __FUNCTION__, i, t_sum_us, T_i_us);

i++;
}

return ;
}

测试结果

[LOONSON@3DPrinter:~]#/test/3dprinter_app
[motor_test] i=1, t_sum_us=2000, T_i_us=1000
[motor_test] i=2, t_sum_us=3000, T_i_us=1000
[motor_test] i=3, t_sum_us=4000, T_i_us=1000
[motor_test] i=4, t_sum_us=5000, T_i_us=1000
[motor_test] i=5, t_sum_us=6000, T_i_us=1000
[motor_test] i=6, t_sum_us=7000, T_i_us=1000
[motor_test] i=7, t_sum_us=8000, T_i_us=1000
[motor_test] i=8, t_sum_us=9000, T_i_us=1000
[motor_test] i=9, t_sum_us=10000, T_i_us=1000
[motor_test] i=10, t_sum_us=11000, T_i_us=1000
[motor_test] i=11, t_sum_us=12000, T_i_us=1000
[motor_test] i=12, t_sum_us=13000, T_i_us=1000
[motor_test] i=13, t_sum_us=14000, T_i_us=1000
[motor_test] i=14, t_sum_us=15000, T_i_us=1000
[motor_test] i=15, t_sum_us=16000, T_i_us=1000
[motor_test] i=16, t_sum_us=17000, T_i_us=1000
[motor_test] i=17, t_sum_us=18000, T_i_us=1000
[motor_test] i=18, t_sum_us=19000, T_i_us=1000
[motor_test] i=19, t_sum_us=20000, T_i_us=1000
[motor_test] i=20, t_sum_us=21000, T_i_us=1000
[motor_test] i=21, t_sum_us=22000, T_i_us=1000
[motor_test] i=22, t_sum_us=23000, T_i_us=1000
[motor_test] i=23, t_sum_us=24000, T_i_us=1000
[motor_test] i=24, t_sum_us=25000, T_i_us=1000
[motor_test] i=25, t_sum_us=26000, T_i_us=1000
[motor_test] i=26, t_sum_us=27000, T_i_us=1000
[motor_test] i=27, t_sum_us=28000, T_i_us=1000
[motor_test] i=28, t_sum_us=29000, T_i_us=1000
[motor_test] i=29, t_sum_us=30000, T_i_us=1000
[motor_test] i=30, t_sum_us=31000, T_i_us=1000
[motor_test] i=31, t_sum_us=32000, T_i_us=1000
[motor_test] i=32, t_sum_us=33000, T_i_us=1000
[motor_test] i=33, t_sum_us=34000, T_i_us=1000
[motor_test] i=34, t_sum_us=35000, T_i_us=1000
[motor_test] i=35, t_sum_us=36000, T_i_us=1000
[motor_test] i=36, t_sum_us=37000, T_i_us=1000
[motor_test] i=37, t_sum_us=38000, T_i_us=1000
[motor_test] i=38, t_sum_us=39000, T_i_us=1000
[motor_test] i=39, t_sum_us=40000, T_i_us=1000
[motor_test] i=40, t_sum_us=41000, T_i_us=1000
[motor_test] i=41, t_sum_us=42000, T_i_us=1000
[motor_test] i=42, t_sum_us=43000, T_i_us=1000
[motor_test] i=43, t_sum_us=44000, T_i_us=1000
[motor_test] i=44, t_sum_us=45000, T_i_us=1000
[motor_test] i=45, t_sum_us=45999, T_i_us=999
[motor_test] i=46, t_sum_us=46998, T_i_us=999
[motor_test] i=47, t_sum_us=47997, T_i_us=999
[motor_test] i=48, t_sum_us=48996, T_i_us=999
[motor_test] i=49, t_sum_us=49995, T_i_us=999
[motor_test] i=50, t_sum_us=50994, T_i_us=999
[motor_test] i=51, t_sum_us=51993, T_i_us=999
[motor_test] i=52, t_sum_us=52992, T_i_us=999
[motor_test] i=53, t_sum_us=53991, T_i_us=999
[motor_test] i=54, t_sum_us=54990, T_i_us=999
[motor_test] i=55, t_sum_us=55989, T_i_us=999
[motor_test] i=56, t_sum_us=56988, T_i_us=999
[motor_test] i=57, t_sum_us=57987, T_i_us=999
[motor_test] i=58, t_sum_us=58986, T_i_us=999
[motor_test] i=59, t_sum_us=59985, T_i_us=999
[motor_test] i=60, t_sum_us=60984, T_i_us=999
[motor_test] i=61, t_sum_us=61983, T_i_us=999
[motor_test] i=62, t_sum_us=62982, T_i_us=999
[motor_test] i=63, t_sum_us=63981, T_i_us=999
[motor_test] i=64, t_sum_us=64980, T_i_us=999
[motor_test] i=65, t_sum_us=65978, T_i_us=998
[motor_test] i=66, t_sum_us=66976, T_i_us=998
[motor_test] i=67, t_sum_us=67974, T_i_us=998
[motor_test] i=68, t_sum_us=68972, T_i_us=998
[motor_test] i=69, t_sum_us=69970, T_i_us=998
[motor_test] i=70, t_sum_us=70968, T_i_us=998
[motor_test] i=71, t_sum_us=71966, T_i_us=998
[motor_test] i=72, t_sum_us=72964, T_i_us=998
[motor_test] i=73, t_sum_us=73962, T_i_us=998
[motor_test] i=74, t_sum_us=74960, T_i_us=998
[motor_test] i=75, t_sum_us=75958, T_i_us=998
[motor_test] i=76, t_sum_us=76956, T_i_us=998
[motor_test] i=77, t_sum_us=77954, T_i_us=998
[motor_test] i=78, t_sum_us=78952, T_i_us=998
[motor_test] i=79, t_sum_us=79949, T_i_us=997
[motor_test] i=80, t_sum_us=80946, T_i_us=997
[motor_test] i=81, t_sum_us=81943, T_i_us=997
[motor_test] i=82, t_sum_us=82940, T_i_us=997
[motor_test] i=83, t_sum_us=83937, T_i_us=997
[motor_test] i=84, t_sum_us=84934, T_i_us=997
[motor_test] i=85, t_sum_us=85931, T_i_us=997
[motor_test] i=86, t_sum_us=86928, T_i_us=997
[motor_test] i=87, t_sum_us=87925, T_i_us=997
[motor_test] i=88, t_sum_us=88922, T_i_us=997
[motor_test] i=89, t_sum_us=89919, T_i_us=997
[motor_test] i=90, t_sum_us=90916, T_i_us=997
[motor_test] i=91, t_sum_us=91912, T_i_us=996
[motor_test] i=92, t_sum_us=92908, T_i_us=996
[motor_test] i=93, t_sum_us=93904, T_i_us=996
[motor_test] i=94, t_sum_us=94900, T_i_us=996
[motor_test] i=95, t_sum_us=95896, T_i_us=996
[motor_test] i=96, t_sum_us=96892, T_i_us=996
[motor_test] i=97, t_sum_us=97888, T_i_us=996
[motor_test] i=98, t_sum_us=98884, T_i_us=996
[motor_test] i=99, t_sum_us=99880, T_i_us=996
[motor_test] i=100, t_sum_us=100876, T_i_us=996
[motor_test] i=101, t_sum_us=101871, T_i_us=995
[motor_test] i=102, t_sum_us=102866, T_i_us=995
[motor_test] i=103, t_sum_us=103861, T_i_us=995
[motor_test] i=104, t_sum_us=104856, T_i_us=995
[motor_test] i=105, t_sum_us=105851, T_i_us=995
[motor_test] i=106, t_sum_us=106846, T_i_us=995
[motor_test] i=107, t_sum_us=107841, T_i_us=995
[motor_test] i=108, t_sum_us=108836, T_i_us=995
[motor_test] i=109, t_sum_us=109831, T_i_us=995
[motor_test] i=110, t_sum_us=110826, T_i_us=995
[motor_test] i=111, t_sum_us=111820, T_i_us=994
[motor_test] i=112, t_sum_us=112814, T_i_us=994
[motor_test] i=113, t_sum_us=113808, T_i_us=994
[motor_test] i=114, t_sum_us=114802, T_i_us=994
[motor_test] i=115, t_sum_us=115796, T_i_us=994
[motor_test] i=116, t_sum_us=116790, T_i_us=994
[motor_test] i=117, t_sum_us=117784, T_i_us=994
[motor_test] i=118, t_sum_us=118778, T_i_us=994
[motor_test] i=119, t_sum_us=119772, T_i_us=994
[motor_test] i=120, t_sum_us=120765, T_i_us=993
[motor_test] i=121, t_sum_us=121758, T_i_us=993
[motor_test] i=122, t_sum_us=122751, T_i_us=993
[motor_test] i=123, t_sum_us=123744, T_i_us=993
[motor_test] i=124, t_sum_us=124737, T_i_us=993
[motor_test] i=125, t_sum_us=125730, T_i_us=993
[motor_test] i=126, t_sum_us=126723, T_i_us=993
[motor_test] i=127, t_sum_us=127716, T_i_us=993
[motor_test] i=128, t_sum_us=128708, T_i_us=992
[motor_test] i=129, t_sum_us=129700, T_i_us=992
[motor_test] i=130, t_sum_us=130692, T_i_us=992
[motor_test] i=131, t_sum_us=131684, T_i_us=992
[motor_test] i=132, t_sum_us=132676, T_i_us=992
[motor_test] i=133, t_sum_us=133668, T_i_us=992
[motor_test] i=134, t_sum_us=134660, T_i_us=992
[motor_test] i=135, t_sum_us=135652, T_i_us=992
[motor_test] i=136, t_sum_us=136643, T_i_us=991
[motor_test] i=137, t_sum_us=137634, T_i_us=991
[motor_test] i=138, t_sum_us=138625, T_i_us=991
[motor_test] i=139, t_sum_us=139616, T_i_us=991
[motor_test] i=140, t_sum_us=140607, T_i_us=991
[motor_test] i=141, t_sum_us=141598, T_i_us=991
[motor_test] i=142, t_sum_us=142589, T_i_us=991
[motor_test] i=143, t_sum_us=143579, T_i_us=990
[motor_test] i=144, t_sum_us=144569, T_i_us=990
[motor_test] i=145, t_sum_us=145559, T_i_us=990
[motor_test] i=146, t_sum_us=146549, T_i_us=990
[motor_test] i=147, t_sum_us=147539, T_i_us=990
[motor_test] i=148, t_sum_us=148529, T_i_us=990
[motor_test] i=149, t_sum_us=149519, T_i_us=990
[motor_test] i=150, t_sum_us=150508, T_i_us=989
[motor_test] i=151, t_sum_us=151497, T_i_us=989
[motor_test] i=152, t_sum_us=152486, T_i_us=989
[motor_test] i=153, t_sum_us=153475, T_i_us=989
[motor_test] i=154, t_sum_us=154464, T_i_us=989
[motor_test] i=155, t_sum_us=155453, T_i_us=989
[motor_test] i=156, t_sum_us=156441, T_i_us=988
[motor_test] i=157, t_sum_us=157429, T_i_us=988
[motor_test] i=158, t_sum_us=158417, T_i_us=988
[motor_test] i=159, t_sum_us=159405, T_i_us=988
[motor_test] i=160, t_sum_us=160393, T_i_us=988
[motor_test] i=161, t_sum_us=161381, T_i_us=988
[motor_test] i=162, t_sum_us=162369, T_i_us=988
[motor_test] i=163, t_sum_us=163356, T_i_us=987
[motor_test] i=164, t_sum_us=164343, T_i_us=987
[motor_test] i=165, t_sum_us=165330, T_i_us=987
[motor_test] i=166, t_sum_us=166317, T_i_us=987
[motor_test] i=167, t_sum_us=167304, T_i_us=987
[motor_test] i=168, t_sum_us=168291, T_i_us=987
[motor_test] i=169, t_sum_us=169277, T_i_us=986
[motor_test] i=170, t_sum_us=170263, T_i_us=986
[motor_test] i=171, t_sum_us=171249, T_i_us=986
[motor_test] i=172, t_sum_us=172235, T_i_us=986
[motor_test] i=173, t_sum_us=173221, T_i_us=986
[motor_test] i=174, t_sum_us=174207, T_i_us=986
[motor_test] i=175, t_sum_us=175192, T_i_us=985
[motor_test] i=176, t_sum_us=176177, T_i_us=985
[motor_test] i=177, t_sum_us=177162, T_i_us=985
[motor_test] i=178, t_sum_us=178147, T_i_us=985
[motor_test] i=179, t_sum_us=179132, T_i_us=985
[motor_test] i=180, t_sum_us=180116, T_i_us=984
[motor_test] i=181, t_sum_us=181100, T_i_us=984
[motor_test] i=182, t_sum_us=182084, T_i_us=984
[motor_test] i=183, t_sum_us=183068, T_i_us=984
[motor_test] i=184, t_sum_us=184052, T_i_us=984
[motor_test] i=185, t_sum_us=185036, T_i_us=984
[motor_test] i=186, t_sum_us=186019, T_i_us=983
[motor_test] i=187, t_sum_us=187002, T_i_us=983
[motor_test] i=188, t_sum_us=187985, T_i_us=983
[motor_test] i=189, t_sum_us=188968, T_i_us=983
[motor_test] i=190, t_sum_us=189951, T_i_us=983
[motor_test] i=191, t_sum_us=190934, T_i_us=983
[motor_test] i=192, t_sum_us=191916, T_i_us=982
[motor_test] i=193, t_sum_us=192898, T_i_us=982
[motor_test] i=194, t_sum_us=193880, T_i_us=982
[motor_test] i=195, t_sum_us=194862, T_i_us=982
[motor_test] i=196, t_sum_us=195844, T_i_us=982
[motor_test] i=197, t_sum_us=196825, T_i_us=981
[motor_test] i=198, t_sum_us=197806, T_i_us=981
[motor_test] i=199, t_sum_us=198787, T_i_us=981
[motor_test] i=200, t_sum_us=199768, T_i_us=981
[motor_test] i=201, t_sum_us=200749, T_i_us=981
[motor_test] i=202, t_sum_us=201729, T_i_us=980
[motor_test] i=203, t_sum_us=202709, T_i_us=980
[motor_test] i=204, t_sum_us=203689, T_i_us=980
[motor_test] i=205, t_sum_us=204669, T_i_us=980
[motor_test] i=206, t_sum_us=205649, T_i_us=980
[motor_test] i=207, t_sum_us=206628, T_i_us=979
[motor_test] i=208, t_sum_us=207607, T_i_us=979
[motor_test] i=209, t_sum_us=208586, T_i_us=979
[motor_test] i=210, t_sum_us=209565, T_i_us=979
[motor_test] i=211, t_sum_us=210544, T_i_us=979
[motor_test] i=212, t_sum_us=211522, T_i_us=978
[motor_test] i=213, t_sum_us=212500, T_i_us=978
[motor_test] i=214, t_sum_us=213478, T_i_us=978
[motor_test] i=215, t_sum_us=214456, T_i_us=978
[motor_test] i=216, t_sum_us=215434, T_i_us=978
[motor_test] i=217, t_sum_us=216411, T_i_us=977
[motor_test] i=218, t_sum_us=217388, T_i_us=977
[motor_test] i=219, t_sum_us=218365, T_i_us=977
[motor_test] i=220, t_sum_us=219342, T_i_us=977
[motor_test] i=221, t_sum_us=220319, T_i_us=977
[motor_test] i=222, t_sum_us=221295, T_i_us=976
[motor_test] i=223, t_sum_us=222271, T_i_us=976
[motor_test] i=224, t_sum_us=223247, T_i_us=976
[motor_test] i=225, t_sum_us=224223, T_i_us=976
[motor_test] i=226, t_sum_us=225198, T_i_us=975
[motor_test] i=227, t_sum_us=226173, T_i_us=975
[motor_test] i=228, t_sum_us=227148, T_i_us=975
[motor_test] i=229, t_sum_us=228123, T_i_us=975
[motor_test] i=230, t_sum_us=229098, T_i_us=975
[motor_test] i=231, t_sum_us=230072, T_i_us=974
[motor_test] i=232, t_sum_us=231046, T_i_us=974
[motor_test] i=233, t_sum_us=232020, T_i_us=974
[motor_test] i=234, t_sum_us=232994, T_i_us=974
[motor_test] i=235, t_sum_us=233968, T_i_us=974
[motor_test] i=236, t_sum_us=234941, T_i_us=973
[motor_test] i=237, t_sum_us=235914, T_i_us=973
[motor_test] i=238, t_sum_us=236887, T_i_us=973
[motor_test] i=239, t_sum_us=237860, T_i_us=973
[motor_test] i=240, t_sum_us=238832, T_i_us=972
[motor_test] i=241, t_sum_us=239804, T_i_us=972
[motor_test] i=242, t_sum_us=240776, T_i_us=972
[motor_test] i=243, t_sum_us=241748, T_i_us=972
[motor_test] i=244, t_sum_us=242719, T_i_us=971
[motor_test] i=245, t_sum_us=243690, T_i_us=971
[motor_test] i=246, t_sum_us=244661, T_i_us=971
[motor_test] i=247, t_sum_us=245632, T_i_us=971
[motor_test] i=248, t_sum_us=246602, T_i_us=970
[motor_test] i=249, t_sum_us=247572, T_i_us=970
[motor_test] i=250, t_sum_us=248542, T_i_us=970
[motor_test] i=251, t_sum_us=249512, T_i_us=970
[motor_test] i=252, t_sum_us=250481, T_i_us=969
[motor_test] i=253, t_sum_us=251450, T_i_us=969
[motor_test] i=254, t_sum_us=252419, T_i_us=969
[motor_test] i=255, t_sum_us=253388, T_i_us=969
[motor_test] i=256, t_sum_us=254356, T_i_us=968
[motor_test] i=257, t_sum_us=255324, T_i_us=968
[motor_test] i=258, t_sum_us=256292, T_i_us=968
[motor_test] i=259, t_sum_us=257260, T_i_us=968
[motor_test] i=260, t_sum_us=258228, T_i_us=968
[motor_test] i=261, t_sum_us=259196, T_i_us=968
[motor_test] i=262, t_sum_us=260164, T_i_us=968
[motor_test] i=263, t_sum_us=261132, T_i_us=968
[motor_test] i=264, t_sum_us=262099, T_i_us=967
[motor_test] i=265, t_sum_us=263066, T_i_us=967
[motor_test] i=266, t_sum_us=264033, T_i_us=967
[motor_test] i=267, t_sum_us=265000, T_i_us=967
[motor_test] i=268, t_sum_us=265966, T_i_us=966
[motor_test] i=269, t_sum_us=266932, T_i_us=966
[motor_test] i=270, t_sum_us=267898, T_i_us=966
[motor_test] i=271, t_sum_us=268864, T_i_us=966
[motor_test] i=272, t_sum_us=269830, T_i_us=966
[motor_test] i=273, t_sum_us=270795, T_i_us=965
[motor_test] i=274, t_sum_us=271760, T_i_us=965
[motor_test] i=275, t_sum_us=272725, T_i_us=965
[motor_test] i=276, t_sum_us=273690, T_i_us=965
[motor_test] i=277, t_sum_us=274654, T_i_us=964
[motor_test] i=278, t_sum_us=275618, T_i_us=964
[motor_test] i=279, t_sum_us=276582, T_i_us=964
[motor_test] i=280, t_sum_us=277545, T_i_us=963
[motor_test] i=281, t_sum_us=278508, T_i_us=963
[motor_test] i=282, t_sum_us=279471, T_i_us=963
[motor_test] i=283, t_sum_us=280434, T_i_us=963
[motor_test] i=284, t_sum_us=281396, T_i_us=962
[motor_test] i=285, t_sum_us=282358, T_i_us=962
[motor_test] i=286, t_sum_us=283320, T_i_us=962
[motor_test] i=287, t_sum_us=284281, T_i_us=961
[motor_test] i=288, t_sum_us=285242, T_i_us=961
[motor_test] i=289, t_sum_us=286203, T_i_us=961
[motor_test] i=290, t_sum_us=287164, T_i_us=961
[motor_test] i=291, t_sum_us=288124, T_i_us=960
[motor_test] i=292, t_sum_us=289084, T_i_us=960
[motor_test] i=293, t_sum_us=290044, T_i_us=960
[motor_test] i=294, t_sum_us=291003, T_i_us=959
[motor_test] i=295, t_sum_us=291962, T_i_us=959
[motor_test] i=296, t_sum_us=292921, T_i_us=959
[motor_test] i=297, t_sum_us=293880, T_i_us=959
[motor_test] i=298, t_sum_us=294839, T_i_us=959
[motor_test] i=299, t_sum_us=295797, T_i_us=958
[motor_test] i=300, t_sum_us=296755, T_i_us=958
[motor_test] i=301, t_sum_us=297713, T_i_us=958
[motor_test] i=302, t_sum_us=298670, T_i_us=957
[motor_test] i=303, t_sum_us=299627, T_i_us=957
[motor_test] i=304, t_sum_us=300584, T_i_us=957
[motor_test] i=305, t_sum_us=301540, T_i_us=956
[motor_test] i=306, t_sum_us=302496, T_i_us=956
[motor_test] i=307, t_sum_us=303452, T_i_us=956
[motor_test] i=308, t_sum_us=304408, T_i_us=956
[motor_test] i=309, t_sum_us=305364, T_i_us=956
[motor_test] i=310, t_sum_us=306320, T_i_us=956
[motor_test] i=311, t_sum_us=307276, T_i_us=956
[motor_test] i=312, t_sum_us=308231, T_i_us=955
[motor_test] i=313, t_sum_us=309186, T_i_us=955
[motor_test] i=314, t_sum_us=310141, T_i_us=955
[motor_test] i=315, t_sum_us=311095, T_i_us=954
[motor_test] i=316, t_sum_us=312049, T_i_us=954
[motor_test] i=317, t_sum_us=313003, T_i_us=954
[motor_test] i=318, t_sum_us=313957, T_i_us=954
[motor_test] i=319, t_sum_us=314911, T_i_us=954
[motor_test] i=320, t_sum_us=315864, T_i_us=953
[motor_test] i=321, t_sum_us=316817, T_i_us=953
[motor_test] i=322, t_sum_us=317770, T_i_us=953
[motor_test] i=323, t_sum_us=318722, T_i_us=952
[motor_test] i=324, t_sum_us=319674, T_i_us=952
[motor_test] i=325, t_sum_us=320626, T_i_us=952
[motor_test] i=326, t_sum_us=321577, T_i_us=951
[motor_test] i=327, t_sum_us=322528, T_i_us=951
[motor_test] i=328, t_sum_us=323479, T_i_us=951
[motor_test] i=329, t_sum_us=324429, T_i_us=950
[motor_test] i=330, t_sum_us=325379, T_i_us=950
[motor_test] i=331, t_sum_us=326329, T_i_us=950
[motor_test] i=332, t_sum_us=327278, T_i_us=949
[motor_test] i=333, t_sum_us=328227, T_i_us=949
[motor_test] i=334, t_sum_us=329176, T_i_us=949
[motor_test] i=335, t_sum_us=330124, T_i_us=948
[motor_test] i=336, t_sum_us=331072, T_i_us=948
[motor_test] i=337, t_sum_us=332020, T_i_us=948
[motor_test] i=338, t_sum_us=332967, T_i_us=947
[motor_test] i=339, t_sum_us=333914, T_i_us=947
[motor_test] i=340, t_sum_us=334861, T_i_us=947
[motor_test] i=341, t_sum_us=335808, T_i_us=947
[motor_test] i=342, t_sum_us=336754, T_i_us=946
[motor_test] i=343, t_sum_us=337700, T_i_us=946
[motor_test] i=344, t_sum_us=338646, T_i_us=946
[motor_test] i=345, t_sum_us=339592, T_i_us=946
[motor_test] i=346, t_sum_us=340538, T_i_us=946
[motor_test] i=347, t_sum_us=341484, T_i_us=946
[motor_test] i=348, t_sum_us=342429, T_i_us=945
[motor_test] i=349, t_sum_us=343374, T_i_us=945
[motor_test] i=350, t_sum_us=344319, T_i_us=945
[motor_test] i=351, t_sum_us=345263, T_i_us=944
[motor_test] i=352, t_sum_us=346207, T_i_us=944
[motor_test] i=353, t_sum_us=347151, T_i_us=944
[motor_test] i=354, t_sum_us=348094, T_i_us=943
[motor_test] i=355, t_sum_us=349037, T_i_us=943
[motor_test] i=356, t_sum_us=349980, T_i_us=943
[motor_test] i=357, t_sum_us=350923, T_i_us=943
[motor_test] i=358, t_sum_us=351865, T_i_us=942
[motor_test] i=359, t_sum_us=352807, T_i_us=942
[motor_test] i=360, t_sum_us=353749, T_i_us=942
[motor_test] i=361, t_sum_us=354690, T_i_us=941
[motor_test] i=362, t_sum_us=355631, T_i_us=941
[motor_test] i=363, t_sum_us=356571, T_i_us=940
[motor_test] i=364, t_sum_us=357511, T_i_us=940
[motor_test] i=365, t_sum_us=358451, T_i_us=940
[motor_test] i=366, t_sum_us=359390, T_i_us=939
[motor_test] i=367, t_sum_us=360329, T_i_us=939
[motor_test] i=368, t_sum_us=361268, T_i_us=939
[motor_test] i=369, t_sum_us=362206, T_i_us=938
[motor_test] i=370, t_sum_us=363144, T_i_us=938
[motor_test] i=371, t_sum_us=364082, T_i_us=938
[motor_test] i=372, t_sum_us=365020, T_i_us=938
……
……
……
[motor_test] i=1022, t_sum_us=901281, T_i_us=711
[motor_test] i=1023, t_sum_us=901992, T_i_us=711
[motor_test] i=1024, t_sum_us=902703, T_i_us=711
[motor_test] i=1025, t_sum_us=903414, T_i_us=711
[motor_test] i=1026, t_sum_us=904124, T_i_us=710
[motor_test] i=1027, t_sum_us=904834, T_i_us=710
[motor_test] i=1028, t_sum_us=905544, T_i_us=710
[motor_test] i=1029, t_sum_us=906253, T_i_us=709
[motor_test] i=1030, t_sum_us=906962, T_i_us=709
[motor_test] i=1031, t_sum_us=907671, T_i_us=709
[motor_test] i=1032, t_sum_us=908379, T_i_us=708
[motor_test] i=1033, t_sum_us=909087, T_i_us=708
[motor_test] i=1034, t_sum_us=909794, T_i_us=707
[motor_test] i=1035, t_sum_us=910501, T_i_us=707
[motor_test] i=1036, t_sum_us=911208, T_i_us=707
[motor_test] i=1037, t_sum_us=911915, T_i_us=707
[motor_test] i=1038, t_sum_us=912622, T_i_us=707
[motor_test] i=1039, t_sum_us=913328, T_i_us=706
[motor_test] i=1040, t_sum_us=914034, T_i_us=706
[motor_test] i=1041, t_sum_us=914739, T_i_us=705
[motor_test] i=1042, t_sum_us=915444, T_i_us=705
[motor_test] i=1043, t_sum_us=916149, T_i_us=705
[motor_test] i=1044, t_sum_us=916853, T_i_us=704
[motor_test] i=1045, t_sum_us=917557, T_i_us=704
[motor_test] i=1046, t_sum_us=918261, T_i_us=704
[motor_test] i=1047, t_sum_us=918964, T_i_us=703
[motor_test] i=1048, t_sum_us=919667, T_i_us=703
[motor_test] i=1049, t_sum_us=920370, T_i_us=703
[motor_test] i=1050, t_sum_us=921072, T_i_us=702
[motor_test] i=1051, t_sum_us=921774, T_i_us=702
[motor_test] i=1052, t_sum_us=922476, T_i_us=702
[motor_test] i=1053, t_sum_us=923177, T_i_us=701
[motor_test] i=1054, t_sum_us=923878, T_i_us=701
[motor_test] i=1055, t_sum_us=924579, T_i_us=701
[motor_test] i=1056, t_sum_us=925280, T_i_us=701
[motor_test] i=1057, t_sum_us=925980, T_i_us=700
[motor_test] i=1058, t_sum_us=926680, T_i_us=700
[motor_test] i=1059, t_sum_us=927380, T_i_us=700
[motor_test] i=1060, t_sum_us=928079, T_i_us=699
[motor_test] i=1061, t_sum_us=928778, T_i_us=699
[motor_test] i=1062, t_sum_us=929477, T_i_us=699
[motor_test] i=1063, t_sum_us=930175, T_i_us=698
[motor_test] i=1064, t_sum_us=930873, T_i_us=698
[motor_test] i=1065, t_sum_us=931571, T_i_us=698
[motor_test] i=1066, t_sum_us=932268, T_i_us=697
[motor_test] i=1067, t_sum_us=932965, T_i_us=697
[motor_test] i=1068, t_sum_us=933662, T_i_us=697
[motor_test] i=1069, t_sum_us=934358, T_i_us=696
[motor_test] i=1070, t_sum_us=935054, T_i_us=696
[motor_test] i=1071, t_sum_us=935749, T_i_us=695
[motor_test] i=1072, t_sum_us=936444, T_i_us=695
[motor_test] i=1073, t_sum_us=937139, T_i_us=695
[motor_test] i=1074, t_sum_us=937834, T_i_us=695
[motor_test] i=1075, t_sum_us=938529, T_i_us=695
[motor_test] i=1076, t_sum_us=939223, T_i_us=694
[motor_test] i=1077, t_sum_us=939917, T_i_us=694
[motor_test] i=1078, t_sum_us=940611, T_i_us=694
[motor_test] i=1079, t_sum_us=941304, T_i_us=693
[motor_test] i=1080, t_sum_us=941997, T_i_us=693
[motor_test] i=1081, t_sum_us=942690, T_i_us=693
[motor_test] i=1082, t_sum_us=943383, T_i_us=693
[motor_test] i=1083, t_sum_us=944075, T_i_us=692
[motor_test] i=1084, t_sum_us=944767, T_i_us=692
[motor_test] i=1085, t_sum_us=945459, T_i_us=692
[motor_test] i=1086, t_sum_us=946150, T_i_us=691
[motor_test] i=1087, t_sum_us=946841, T_i_us=691
[motor_test] i=1088, t_sum_us=947532, T_i_us=691
[motor_test] i=1089, t_sum_us=948222, T_i_us=690
[motor_test] i=1090, t_sum_us=948912, T_i_us=690
[motor_test] i=1091, t_sum_us=949602, T_i_us=690
[motor_test] i=1092, t_sum_us=950291, T_i_us=689
[motor_test] i=1093, t_sum_us=950980, T_i_us=689
[motor_test] i=1094, t_sum_us=951669, T_i_us=689
[motor_test] i=1095, t_sum_us=952357, T_i_us=688
[motor_test] i=1096, t_sum_us=953045, T_i_us=688
[motor_test] i=1097, t_sum_us=953732, T_i_us=687
[motor_test] i=1098, t_sum_us=954419, T_i_us=687
[motor_test] i=1099, t_sum_us=955106, T_i_us=687
[motor_test] i=1100, t_sum_us=955792, T_i_us=686
[motor_test] i=1101, t_sum_us=956478, T_i_us=686
[motor_test] i=1102, t_sum_us=957164, T_i_us=686
[motor_test] i=1103, t_sum_us=957850, T_i_us=686
[motor_test] i=1104, t_sum_us=958536, T_i_us=686
[motor_test] i=1105, t_sum_us=959221, T_i_us=685
[motor_test] i=1106, t_sum_us=959906, T_i_us=685
[motor_test] i=1107, t_sum_us=960591, T_i_us=685
[motor_test] i=1108, t_sum_us=961275, T_i_us=684
[motor_test] i=1109, t_sum_us=961959, T_i_us=684
[motor_test] i=1110, t_sum_us=962643, T_i_us=684
[motor_test] i=1111, t_sum_us=963326, T_i_us=683
[motor_test] i=1112, t_sum_us=964009, T_i_us=683
[motor_test] i=1113, t_sum_us=964692, T_i_us=683
[motor_test] i=1114, t_sum_us=965375, T_i_us=683
[motor_test] i=1115, t_sum_us=966057, T_i_us=682
[motor_test] i=1116, t_sum_us=966739, T_i_us=682
[motor_test] i=1117, t_sum_us=967421, T_i_us=682
[motor_test] i=1118, t_sum_us=968102, T_i_us=681
[motor_test] i=1119, t_sum_us=968783, T_i_us=681
[motor_test] i=1120, t_sum_us=969464, T_i_us=681
[motor_test] i=1121, t_sum_us=970144, T_i_us=680
[motor_test] i=1122, t_sum_us=970824, T_i_us=680
[motor_test] i=1123, t_sum_us=971504, T_i_us=680
[motor_test] i=1124, t_sum_us=972183, T_i_us=679
[motor_test] i=1125, t_sum_us=972862, T_i_us=679
[motor_test] i=1126, t_sum_us=973541, T_i_us=679
[motor_test] i=1127, t_sum_us=974219, T_i_us=678
[motor_test] i=1128, t_sum_us=974897, T_i_us=678
[motor_test] i=1129, t_sum_us=975575, T_i_us=678
[motor_test] i=1130, t_sum_us=976252, T_i_us=677
[motor_test] i=1131, t_sum_us=976929, T_i_us=677
[motor_test] i=1132, t_sum_us=977606, T_i_us=677
[motor_test] i=1133, t_sum_us=978283, T_i_us=677
[motor_test] i=1134, t_sum_us=978959, T_i_us=676
[motor_test] i=1135, t_sum_us=979635, T_i_us=676
[motor_test] i=1136, t_sum_us=980311, T_i_us=676
[motor_test] i=1137, t_sum_us=980986, T_i_us=675
[motor_test] i=1138, t_sum_us=981661, T_i_us=675
[motor_test] i=1139, t_sum_us=982336, T_i_us=675
[motor_test] i=1140, t_sum_us=983010, T_i_us=674
[motor_test] i=1141, t_sum_us=983684, T_i_us=674
[motor_test] i=1142, t_sum_us=984358, T_i_us=674
[motor_test] i=1143, t_sum_us=985031, T_i_us=673
[motor_test] i=1144, t_sum_us=985704, T_i_us=673
[motor_test] i=1145, t_sum_us=986377, T_i_us=673
[motor_test] i=1146, t_sum_us=987049, T_i_us=672
[motor_test] i=1147, t_sum_us=987721, T_i_us=672
[motor_test] i=1148, t_sum_us=988393, T_i_us=672
[motor_test] i=1149, t_sum_us=989065, T_i_us=672
[motor_test] i=1150, t_sum_us=989736, T_i_us=671
[motor_test] i=1151, t_sum_us=990407, T_i_us=671
[motor_test] i=1152, t_sum_us=991078, T_i_us=671
[motor_test] i=1153, t_sum_us=991748, T_i_us=670
[motor_test] i=1154, t_sum_us=992418, T_i_us=670
[motor_test] i=1155, t_sum_us=993088, T_i_us=670
[motor_test] i=1156, t_sum_us=993757, T_i_us=669
[motor_test] i=1157, t_sum_us=994426, T_i_us=669
[motor_test] i=1158, t_sum_us=995095, T_i_us=669
[motor_test] i=1159, t_sum_us=995763, T_i_us=668
[motor_test] i=1160, t_sum_us=996431, T_i_us=668
[motor_test] i=1161, t_sum_us=997099, T_i_us=668
[motor_test] i=1162, t_sum_us=997767, T_i_us=668
[motor_test] i=1163, t_sum_us=998435, T_i_us=668
[motor_test] i=1164, t_sum_us=999102, T_i_us=667
[motor_test] i=1165, t_sum_us=999769, T_i_us=667
[motor_test] i=1166, t_sum_us=1000436, T_i_us=667
这是截取串口打印的一部分,从这个结果可以看出——定时器的定时时间T_i_us在相邻两个中变化量小于等于1us。当然有需要的话,还可以进一步优化。

经过测试发现,我手上这款三角洲3d打印机的启动速度可以达到30mm/s,并且以30mm/s的速度匀速(不加减速)打印,能够达到较好的打印质量。关键是我以30mm/s的速度打印时,感觉机器的动静有点大,当时买的是滑车版,不知道光轴版和线轨版是不是会好些。另外,我当时买的是DIY套件,商家推荐把速度设为20mm/s,这样打印质量会好些。但我看到有些大神的视频中进给率都达到7000了,换算为速度超过100mm/s。虽然我坚信可以把速度加上去,对于是否有必要实现加减速算法,还处于思考中。暂时就这样吧!
在找S曲线加减速的资料时,发现网上很少关于S曲线加减速的路径规划方面的资料,所以决定在这里将目前搜集整理的资料分享给大家,希望对你有帮助,谢谢!

使用硬件浮点运算单元

龙芯1c支持硬件浮点运算,但为了避免在中断中进行浮点运算,需要将浮点运算放在中断的下半部。
是否使用硬件浮点是由定点运算精度是否达到要求决定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息