电机的S加速、减速曲线,可以实现速度和加速度的平滑;
使用Sigmoid函数,
total = 1000;%脉冲数
max = 400;%间隔时间最大值
min = 100;%间隔时间最小值
step1_start = 0;
step1_end = fix(total/3.0);
step2_start = fix(total/3.0);
step2_end = fix(total/3.0) * 2;
step3_start = fix(total/3.0) * 2 + 1;
step3_end = total;
x1 = step1_start:0.01:step1_end;
y1 = 1./(1+exp(0.05*(x1-fix(step1_end/2)*ones(1,length(x1)))));
speed_avg = 1/(1+exp(0.2*(step1_end-fix(step1_end/2))));
x2 = step2_start:0.01:step2_end;
y2 = speed_avg * ones(1,length(x2));
x3 = step3_start:0.01:step3_end;
%y3 = 1./(1+exp(0.05*(fix(step1_end/2)*4*ones(1,length(x3))-x3)));
y3 = 1./(1+exp(-0.06*(x3 - 5*fix(step1_end/2)*ones(1,length(x3)))));
x = [x1,x2,x3];
y = [y1,y2,y3];
y = y .* (max - min) + min .* ones(1,length(y));
plot(x,y)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2019/11/11增加:
如果要在硬件上实现,有两种方式,第一种是具有硬件pwm发生器的,相对比较方便;但我手中用的一块物联网芯片,没有硬件pwm,所有只能用GPIO来模拟,特别注意,脉冲发生器的代码,运行过程中不能被其它线程或是任务中断,否则会导致步进电机出现丢步的问题;