Вопрос по шаговому двигателю для спидометра...

Garik_spb
Offline
Зарегистрирован: 23.12.2014

Добрый день всем!

Совсем недавно стал  обладателем  конструктора Arduino опыта в таких делах почти нет. Но уже кое что освоил благодаря форуму. Решил я на Nano сделать приборную панель для скутера. Почти все понял как сделать и уже кое что получается. на данный момент  реализовал  спидометр одометр и тахометр используя два прерывания что есть в нано. На ЛСД дисплее все отлично отображается генератором импульсов проверяю все работает отлично. но посетила меня мысль сделать спидометр  стрелочный. Используя для этого шаговый мотор. и вот  тут никак мне не сообразить как вычислить количество шагов для поворота стрелки...

Задача такая  скорость обновляется каждые  500мс  я бы хотел как то вычислить разницу между значением последним и предпоследним. То есть что вроде:  Количество шагов = скорость (последняя)-скорость(предпоследняя) 

прошу подсказать как это сделать в скетче...

наверно для этой цели проще сервомашинку  использовать  но мне кажется встроенного потенциометра на долго не хватит.

faraddin
Offline
Зарегистрирован: 11.08.2013

Вам все равно потребуется находить нулевое положение стрелки, так что лучше серву

Garik_spb
Offline
Зарегистрирован: 23.12.2014

проблему нуля думаю решить поставив фрикционную муфту  на стрелке. и упор для стрелки в нулевом положении. при включении зажигания давать некое количество шагов назад что бы стрелка ложилась на упор а муфта проскальзывала.

faraddin
Offline
Зарегистрирован: 11.08.2013

Смысла конечно нет, но если хочется, то ради бога. А задачка Ваша решается просто, если знаете разницу скорости и знаете сколько один шаг дает вот вам и прямая завсимость. Хотя я бы просто высчитал прямую зависимость угла поворота от скорости и стремился бы к этому углу всегда.

Garik_spb
Offline
Зарегистрирован: 23.12.2014

так вот у меня и вопрос как эту разницу скорости узнать =)) а уж на нужное количество шагов я по ней вычислю. Кстати приборки всех современных автомобилей на шаговых моторах. А серва точно сдохнет через 100км  особенно в городском режиме.

faraddin
Offline
Зарегистрирован: 11.08.2013

Ну так заведите переменную под названием ПрошлаяСкорость. Запишите в нее значение скорости а через пол секундны считайте скорость заново. Вот вам данные для анализа: ПрошаяСкорость и ТекущаяСкорость. потом как вычтете одно из другого присвойте ПрошлойСкорости значение ТекущейСкорости

Garik_spb
Offline
Зарегистрирован: 23.12.2014

ладно  попробую разобраться. спасибо

SergCh
Offline
Зарегистрирован: 18.12.2014

 В библиотеке AccelStepper есть команда MoveTo(xxx) по моему называется, устанавливающая ротор в заданное положение , если считать от нулувого. Соответстенно говоришь ему встать в положение, пропорциональное частоте импульсов с датчика скорости. Не надо никаких разностей высчитывать.

А нулевое положение задаётся в сетапе, дав количество шагов в минус с запасом, и затем обнулив его.