ARDUINO Управление стрелкой от приборной панели.

Управление стрелкой от приборной панели.
Доброго времени суток ...
Имеется механизм от стрелки спидометра ПБ , какой не известно да и не важно.
Задумка использовать с датчиком (куплен ПО настроено и отлажено) оборотов , для просчёта и вывода скорости.
Проблема : Механизм по сути шаговый двигатель с двумя катушками и ограничением ушла поворота , куплена плата (контроллером язык не повернёться назвать) но всё же управления шаговыми двигателями, запустить получилось крутить также получилось паралельно тестирова две библиотеки от Гайвера и <AccelStepper.h> обе работають. однако проблема мотор при повышении скорости производит поворот после возвращаеться на 0 положение , если в этот момент подать сигнал скорости мотор улетает в - и упераясь в огранечитель трещит после пытаюсь вернуться на 0 уходит на положительное значение и считает его за 0. что можно с этим сделать?
а также время от времени сам по себе 0 позици сдвигаеться . в общем код сырой у меня лапки и вообще это первый мой проект. Буду благодарен за любые подсказки . добавлю код + фото похожего моторчика.
C++:
#include <AccelStepper.h>

AccelStepper mystepper(4, 5,3 ,4 ,6 );
unsigned long lastturn, time_press; //переменные хранения времени
float SPEED; //переменная хранения скорости в виде десятичной дроби
float w_length=0.1; //длина окружности колеса в метрах
float obor;
    const int samplePin = SPEED; 
void setup() {
mystepper.setMaxSpeed(5000);
mystepper.setAcceleration(5000);



 attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала 
  Serial.begin(9200);           
}



void sens() {
    SPEED=w_length/((float)(millis()-lastturn)/1000)*3.6;  //расчет скорости, км/ч
    lastturn=millis();  //запомнить время последнего оборота
  poz=mystepper.currentPosition();
}

void loop() {
 
  
 if ((SPEED)<1){
  mystepper.setAcceleration(50000);
  }
   if ((SPEED)>1){
  mystepper.setAcceleration(500);
  }

  Serial.print(SPEED); 

  if ((millis()-lastturn)>2000){ //если сигнала нет больше 2 секунды
    SPEED=0;  //считаем что SPEED 0
    mystepper.moveTo(0);
  mystepper.run();
  }
 if ((SPEED)>1){
  mystepper.moveTo(SPEED);
  mystepper.run();
  }
 
   if ((millis()-lastturn)>1000){
  mystepper.moveTo(0);
  mystepper.run();
 
 }  }
DAAAAgOmruA-960.jpg
 

Комментарии

StrVV

✩✩✩✩✩✩✩
17 Окт 2023
1
0
Voronezh, Russia
в принципе, помимо ШД использовались и используются ЛОГОМЕТРические указатели, там как раз есть пружина и управление по двум катушкам Sin/Cos.