Как заставить компас шагового двигателя проходить через 360 градусов - PullRequest
0 голосов
/ 10 ноября 2018

Здравствуйте, я строю мокрый компас для симулятора полета. В настоящее время у меня есть шаговый двигатель, хорошо работающий с симулятором, но в точке пересечения 360–0 градусов степпер делает полный реверс 360, чтобы войти в положение.

Мой вопрос ... может ли кто-нибудь помочь мне в создании кода, который заставляет линейный крест от 360 до 0 работать в обоих направлениях.

Имитатор подает Float Val, который составляет 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; }}

Заранее благодарен за любую помощь

1 Ответ

0 голосов
/ 10 ноября 2018

, если вы уже узнали разрешение вашего шагового двигателя, просто выполните простую задачу преобразования:

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 в градусе шага.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...