How to have stepper motor compass pass through 360 degree
up vote
0
down vote
favorite
Hello I am building a wet compass for a flight simulator. I currently have a stepper motor functioning well with the simulator but at the point of crossing 360 to 0 degrees the stepper does a full reverse 360 to get into position.
My question... can anyone please assist me in creating code that makes the linear cross from 360 to 0 work in both directions.
The simulator feeds a Float Val that is a degree out of 360 eg. 172.13. My stepper has 4076 steps per full revolution. You will see the math in the code below. I am using the AccelStepper library.
void ProgOut(byte id, float val)
switch (1)
case 1:
if (val)
stepper1.moveTo(val * 11.3222222);
stepper1.run();
break;
I have tried something like this:
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;
Thanks in advance for any assistance
arduino
add a comment |
up vote
0
down vote
favorite
Hello I am building a wet compass for a flight simulator. I currently have a stepper motor functioning well with the simulator but at the point of crossing 360 to 0 degrees the stepper does a full reverse 360 to get into position.
My question... can anyone please assist me in creating code that makes the linear cross from 360 to 0 work in both directions.
The simulator feeds a Float Val that is a degree out of 360 eg. 172.13. My stepper has 4076 steps per full revolution. You will see the math in the code below. I am using the AccelStepper library.
void ProgOut(byte id, float val)
switch (1)
case 1:
if (val)
stepper1.moveTo(val * 11.3222222);
stepper1.run();
break;
I have tried something like this:
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;
Thanks in advance for any assistance
arduino
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
Hello I am building a wet compass for a flight simulator. I currently have a stepper motor functioning well with the simulator but at the point of crossing 360 to 0 degrees the stepper does a full reverse 360 to get into position.
My question... can anyone please assist me in creating code that makes the linear cross from 360 to 0 work in both directions.
The simulator feeds a Float Val that is a degree out of 360 eg. 172.13. My stepper has 4076 steps per full revolution. You will see the math in the code below. I am using the AccelStepper library.
void ProgOut(byte id, float val)
switch (1)
case 1:
if (val)
stepper1.moveTo(val * 11.3222222);
stepper1.run();
break;
I have tried something like this:
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;
Thanks in advance for any assistance
arduino
Hello I am building a wet compass for a flight simulator. I currently have a stepper motor functioning well with the simulator but at the point of crossing 360 to 0 degrees the stepper does a full reverse 360 to get into position.
My question... can anyone please assist me in creating code that makes the linear cross from 360 to 0 work in both directions.
The simulator feeds a Float Val that is a degree out of 360 eg. 172.13. My stepper has 4076 steps per full revolution. You will see the math in the code below. I am using the AccelStepper library.
void ProgOut(byte id, float val)
switch (1)
case 1:
if (val)
stepper1.moveTo(val * 11.3222222);
stepper1.run();
break;
I have tried something like this:
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;
Thanks in advance for any assistance
arduino
arduino
asked Nov 9 at 23:59
Andy Mac
45
45
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
if you already found out the resolution of your motor stepper, just do a simple conversion task:
const float resolution = xx.xx; // put your step resolution here
int step_degree(float desired_degree)
return (desired_degree/resolution);
This can be use by calling
stepper.step(step_degree(40)); //rotate 40 degree.
So in your case if you want it to cross over smoothly from 360 to 0, just pass an angle that is greater than 360 in the step degree.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
if you already found out the resolution of your motor stepper, just do a simple conversion task:
const float resolution = xx.xx; // put your step resolution here
int step_degree(float desired_degree)
return (desired_degree/resolution);
This can be use by calling
stepper.step(step_degree(40)); //rotate 40 degree.
So in your case if you want it to cross over smoothly from 360 to 0, just pass an angle that is greater than 360 in the step degree.
add a comment |
up vote
1
down vote
if you already found out the resolution of your motor stepper, just do a simple conversion task:
const float resolution = xx.xx; // put your step resolution here
int step_degree(float desired_degree)
return (desired_degree/resolution);
This can be use by calling
stepper.step(step_degree(40)); //rotate 40 degree.
So in your case if you want it to cross over smoothly from 360 to 0, just pass an angle that is greater than 360 in the step degree.
add a comment |
up vote
1
down vote
up vote
1
down vote
if you already found out the resolution of your motor stepper, just do a simple conversion task:
const float resolution = xx.xx; // put your step resolution here
int step_degree(float desired_degree)
return (desired_degree/resolution);
This can be use by calling
stepper.step(step_degree(40)); //rotate 40 degree.
So in your case if you want it to cross over smoothly from 360 to 0, just pass an angle that is greater than 360 in the step degree.
if you already found out the resolution of your motor stepper, just do a simple conversion task:
const float resolution = xx.xx; // put your step resolution here
int step_degree(float desired_degree)
return (desired_degree/resolution);
This can be use by calling
stepper.step(step_degree(40)); //rotate 40 degree.
So in your case if you want it to cross over smoothly from 360 to 0, just pass an angle that is greater than 360 in the step degree.
answered Nov 10 at 11:12
Sharat Chandra
567
567
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53234784%2fhow-to-have-stepper-motor-compass-pass-through-360-degree%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown