大家好,小弟在一个项目中用到这个步进电机,程序是javascript写的 ,用ULN2003驱动板,树莓派控制,设置了个setTimeout不停的给4相不同的高低电平,大概这样:
gpio.write(pins[p],0,function()
{
gpio.write(pins[(p+1)%4],1,function()
{
console.log(p);
p++;
if(p==4)
{
p=0
}
setTimeout(_f,10)
});
});
但是这个间隔小于10左右就效果很不明显了,不知道是程序的问题还是这款步进电机的硬件参数限制的,看了一些优酷上网友做的这种步进电机的demo,速度也差不多,想请教一下专业高手是什么问题,如果程序上的可以如何改进,如果是硬件的限制就不纠结了,或者可不可以把这个四相变成两相,应该如何调整?麻烦大家了!!!!
我在公司里问了一下 @Integ
setTimeout理论上的确是没有最小值限制的。
但SOF等网站上都反映,实际上根据JS的运行环境不同而客观上有。就是说Interval值低于多少再往下调就失效了。我估计10有可能就是减小到了这个限度值以下。
这种事情不能理论分析。你应当使用逻辑分析仪直接查看你的节拍信号是否符合你的预期,在Interval减小时是否成功缩减了。
用JS这种高层手段给这种直接驱动硬件的信号似乎不是一个好主意。你也许应该考虑JS提供高层服务,C底层驱动硬件。
首先 在去掉负载(电机)的情况下 请使用示波器看看2803/2003驱动芯片输出的波形的高电平是不是你需要的高电平
如果空载正常的话 那就是这个时间太小。 电机有惯性的。
步进电机磁场旋转速度过快,转子由于惯性失步了吧。
不用,你那个驱动板不就带了4个LED嘛,你肉眼观察下LED的闪动频率跟你调节后的频率差,估计肉眼就能看出来。
树莓派运行的是linux操作系统,实时性不高。
要精确的定时要么使用DMA模块,要么就用树莓派+Arduino的组合。