你好,我正在为飞行模拟器建造一个湿指南针。我目前有一个步进电机可以在模拟器上很好地运行,但是在360度到0度的交叉点上,步进会进行完整的反向360定位。
我的问题...任何人都可以帮助我创建代码,以使从360到0的线性交叉在两个方向上起作用。
模拟器输入浮点值,该值是360度之外的一个度。 172.13。我的步进器每整转有4076步。您将在下面的代码中看到数学。我正在使用AccelStepper库。
void ProgOut(byte id, float val) {
switch (1) {
case 1:
if (val)
{ stepper1.moveTo(val * 11.3222222); }
stepper1.run();
break; }}
我尝试过这样的事情:
void ProgOut(byte id, float val) {
switch (1) {
case 1:
if ( stepper1.distanceToGo () >= 4064){
stepper1.moveTo(4076);
stepper1.setCurrentPosition(0);
}
else if (val)
{
stepper1.moveTo(val * 11.3222222);
}
stepper1.run();
break; }}
在此先感谢您的帮助
答案 0 :(得分:1)
如果您已经找到了步进电机的分辨率,则只需执行一个简单的转换任务即可:
const float resolution = xx.xx; // put your step resolution here
int step_degree(float desired_degree){
return (desired_degree/resolution);}
可以通过致电使用
stepper.step(step_degree(40)); //rotate 40 degree.
因此,在您的情况下,如果希望它从360平稳过渡到0,则只需以大于360度的角度传递步幅即可。