почти собрал похожий прибор: спидометр+тахометр+мини-бортовик. Одна беда - сильно жужжит при вращении редуктор шагового двигателя (он новый - X27.589 X25.589 ). Он должен жужжать? Или масла в него влить какого? просто не держал в руках подобных моторов...
Регистрация: 09.03.2004 Сообщения: 1858 Темы: 84 Откуда: Полоцк, Беларусь Мото: пока нет :(
Сильно жужжит - понятие относительное. Должен издовать небольшой звук, но что-бы сильно ... Любой шаговик от принтера и прочего гораздо больше шума издаёт. Может алгоритм управления какой корявый ?
У меня в полношаговом режиме даже во время инициализации, когда стрелка в ограничитель упирается не сказать что сильно шумит.
С алгоритмом поколдую. Попробую полушаг - в таком режиме должно быть плавнее, тише, но медленнее? А как быстро Ваша стрелка от 0 до максимума двигается (сколько времени прмерно). Моя от 0 до максимума (градусов 250, шагов 500 примерно) секунду где-то ползёт - вот думаю это нормально или медленно?
В общем всё нормально работает. Громко жужжит при частой смене направлений и при частых стартах/остановках, а при непрерывном движении очень даже тихо. Вот оно: http://youtu.be/UiKPXbwircI
на видео мотор делает по 500 шагов в одну и другую строну - почти три четветри круга! Скорость - 500 шагов в секунду ( по 2 миллисекунды на шаг).
И как кто решает такой вопрос: внезапное отключение зажигания, например, на полном газу - как стрелку в 0 возвращать? Я хочу попробовать питать контроллер от ионистора ) пары секунд должно хватить на возвращения всего в 0 и записи данных в память.[/url]
Уважаемые форумчане. Очень интересная тема здесь поднята. Может кто-то может поделиться кусочком кода на Си, как, шаговый двигатель движется вперед-назад в зависимости от входных импульсов. Мне просто как-то трудно представить, как будет успевать шаговый двигатель по показателям, так и обратной связи нет. И во время написанння этого вопроса у меня возникло еще один: Получается что шаговый двигатель или скорее крутится вперед или назад когда сравнив, что входное значение меньше предыдущего? И вот еще что: Я так понимаю, что лучше не считать количество импульсов на входе в единицу времени, а считать количество циклов внутреннего таймера за определенное количество импульсов. Поправьте меня если я ошибаюсь в чем-то.
Перекладено Google'ом.
Добавлено спустя 4 минуты 19 секунд:
andrew-6676 писал(а):
В общем всё нормально работает. Громко жужжит при частой смене направлений и при частых стартах/остановках, а при непрерывном движении очень даже тихо. Вот оно: http://youtu.be/UiKPXbwircI
на видео мотор делает по 500 шагов в одну и другую строну - почти три четветри круга! Скорость - 500 шагов в секунду ( по 2 миллисекунды на шаг).
И как кто решает такой вопрос: внезапное отключение зажигания, например, на полном газу - как стрелку в 0 возвращать? Я хочу попробовать питать контроллер от ионистора ) пары секунд должно хватить на возвращения всего в 0 и записи данных в память.[/url]
В заводских тахометр выставляется на ноль (шаговый двигатель упирается в исходное положение) в начале включения прибора. Так, что я считаю проще при включении выставлять на ноль, чем во время выключения.
Перекладено Google'ом.
Регистрация: 09.03.2004 Сообщения: 1858 Темы: 84 Откуда: Полоцк, Беларусь Мото: пока нет :(
Я сделал некоторое количество приборов (спидометры и тахометры) на pic12f675 - было некоторое количество в запасе. Алгоритм следующий :
конфигурим tmr1 без делилителя (сам контроллер тактируется от внутреннего RC генератора частотой 4 мгц, инкримент tmr1 через 1us.
Для тахометра. считаем сколько натикал tmr1 за время между импульсами с датчика зажигания, если бсз однокнальная, то каждый импульс будет
через каждые пол оборота коленвала, если двуканальная, то через каждый полный оборот. За минуту таймер натикает 60 000 000 , если это значение поделить на тики таймера между импульсами с датчика зажигания в результате получим значение оборотов в минуту. (для одноканальной системы зажигания делимое 30 000 000)
Но нам нужно не значение оборотов в минуту, а количество шагов мотора для поворота стрелки на необходимый угол в соответствии со шкалой. Допустим у нас линейная шкала от 0 до 10 000 оборотов в минуту. Полный разворот шкалы 270 градусов. Шаговый мотор SWITEC,
которые я использовал в своих самоделках за 3 шага поворачивает стрелку на один градус.
270 * 3 = 810 (270 - полный разворот шкалы, 3 - шагов мотора на один градус) 810 шагов надо сделать мотору для того что-бы передвинуть стрелку от 0 до 10 000 оборотов на шкале.
60 000 000 / (10 000 / 810) = 4 860 000 константа для 1 импульс зажигания на 1 оборот коленвала (двуканальная система зажигания)
30 000 000 (10 000 / 810) = 2 430 000 константа для 2 импульса зажигания на 1 оборот коленвала (одноканальная система зажигания)
дак вот, если эти константы делить на тики tmr1 между импульсами зажигания, то в результате получаем количество шагов необходимое для того что=бы стрелка показала результат на нашей шкале.
теперь управление шаговиком. настраиваю прерывания по переполнению tmr0, делитель настроен на необходимую скорость
мотора для спидометра помедлений, для тахометра побыстрей. При каждой обработки прерывания сравниваю результат расчёта шагов на который нужно повернуть стрелку и переменну в которую занесено текущее положение стрелки, по результату даю команду шаг вперёд или шаг назат или стоять на месте.
инициализация. при подачи питания на прибор гоню стрелку влево на сотни две шагов, что=бы она гарантировано указала на 0, там она тупо опирается в ограничитель и никуда не шагает, кстати стрелка чуть леве чем ноль на шкале, потом даю команду вправо на несколько шагов (промежуток от ограничителя до 0 на шкале) и обнуляю переменную расчётное положение стрелки. (считается что стрелка указывает на 0 шкалы)
ну обычно она и указывает готовы к измерениям. При отключении питания контроллер запитан от ёмкости в 4700 - его заряда хватает что-бы вернуть стрелку на 0 при обесточивании устройства. Ну и всякие мелочи типа переполнение tmr1 при остановке двигателя.
Да не закрытый... надо просто оформит всё боле менее ...
Готов помочь в оформлении схемы в сплане и гифе, могу развести печать в спринтлэе. Какие проблемы? Вам останется хекс приложить.
Или уже не ждать?
И да, если шаговики (кстати какие?) не особо доставабельны то затея провальна. _________________ головой не только кушают
Регистрация: 09.03.2004 Сообщения: 1858 Темы: 84 Откуда: Полоцк, Беларусь Мото: пока нет :(
Шаговики SWITEC я писал про них в этой ветке. Сможете их достать ?
Хотя в продаже есть куча подобных движков, как тока будет моторчик у кого либо на руках, пишете, начнём ...
Регистрация: 10.12.2022 Сообщения: 1 Темы: 0 Откуда: Братск Мото: нет
НЕ ССУДИТЕ СТРОГО В ЭТОМ НОВИЧЕК
пытаюсь написать скетч для тахометр спидометр через библиотеку // 1 July 2022 Rev.1 adds include of Wire.h -jkl
// Adds support for a4988 driver for VID2905 stepper motor. Provides Tachometer reading.
// 12 November 2022 by jkl
////////////////////////////////////////////////////////////////////////////////////////////
// Скетч для работы на Ардуино Mega2560 PRO mini
// Либо отдельным пином сигнала OBD get OBD data(OBD_RPM) изучаю код написания
// Либо отдельным пином сигнала OBD get OBD data(OBD_SPD). изучаю код написания
// Считывается информация с кода данных OBD1 getOBDdata подключение считывания с
tachStepper.moveTo((long)(map(getOBDdata(OBD_RPM), 0, MAX_RPM_RANGE, 1, STEPS_PER_REVOLUTION * uSteps * 2)));
(OBD_SPD)
// При запуске скетча задействовать режим тест стрелок с последующем вкл в рабочий режим
// Установка выводов
const int dirPin = 28;
const int stepPin = 26;
const int en = 30; // задействовать .
const int stepsperevolution = 300;
const int dirPin1 = 50;
const int stepPin1 = 48;
const int en1 = 47; // задействовать .
const int stepsperevolution1 = 300;
// подключаем библиотеку
#include <AccelStepper.h>
// модифицирован для шагового двигателя и контроллера тахометра
AccelStepper tachStepper(AccelStepper::DRIVER, stepPin, dirPin); // works for a4988 (Bipolar, constant current, step/direction driver)
const long STEPS_PER_REVOLUTION = 315; // for the VID2905 stepper
// Set this value based on a4988 configuration.
// 1 = full step, 2 = 1/2 step, 4 = 1/4 step, 8 = 1/8 step
const int uSteps = 2; // micro step rate
const int MAX_RPM_RANGE = 7000; // Maximum RPM range to display for your car
// модифицирован для шагового двигателя и контроллера спидометр
AccelStepper spdStepper(AccelStepper::DRIVER, stepPin, dirPin); // works for a4988 (Bipolar, constant current, step/direction driver)
const long STEPS_PER_REVOLUTION1 = 315; // for the VID2905 stepper
// Set this value based on a4988 configuration.
// 1 = full step, 2 = 1/2 step, 4 = 1/4 step, 8 = 1/8 step
const int uSteps1 = 2; // micro step rate
const int MAX_RPM_RANGE1 = 7000; // Maximum RPM range to display for your car
void setup() {
tachStepper.setMaxSpeed(250 * uSteps); // these valuses seem to work for VID2905
tachStepper.setAcceleration(250 * uSteps);
tachStepper.runToNewPosition(-300 * uSteps); // move to zero position
tachStepper.runToNewPosition(10 * uSteps); // now move needle almost to zero -- tach is ready to use.
delay(1000);
spdStepper.setMaxSpeed(250 * uSteps); // these valuses seem to work for VID2905
spdStepper.setAcceleration(250 * uSteps);
spdStepper.runToNewPosition(-300 * uSteps); // move to zero position
spdStepper.setCurrentPosition(0); // set as 0 rpm reference
spdStepper.runToNewPosition(10 * uSteps); // now move needle almost to zero -- tach is ready to use.
delay(1000);
} // END VOID SETUP.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы