Сборка

28-004 (x)

ИНТЕРНЕТ-РЕСУРС
окрашен синтетической эмалью

Цвет эмали

Онлайн

0 участник(а/ов)

Белорусский Клуб
автолюбителей «Москвич - ретро»

Рег №004 - 2024



Форум


Стиль: МЗМА, ТКМ
Сообщений/обсуждений на странице:

Форум » Разное » Флейм » Arduino в Москвич

Arduino в Москвич
Abarigen 18 марта 2020, 20:12:44

Vladik
Не в "идеальных условиях", а при условии, что диаметр резины и передаточное число главной пары соответствуют расчетному коэффициенту этого привода - 624об/км.
Да. Я как-бы это и имел ввиду.
 
Для корректировки несоответствия в формулу добавил поправочный коэффициент. Пока равен 1, а дальше будет корректировать под автомобиль. В идеале нужно сделать онлайн подстройку без перезаливки скетча, но пока не придумал как это грамотно реализовать.
 
Сгенерировал выходной сигнал 10 Гц, что по сути своей и есть 10 импульсов в секунду (10 выбрал чтобы легче проаерять) или 2,671 м/с или 9,615 км/ч.
 

 
Работает это дело по следующему алгоритму:
Каждый раз, как на 2 контакте платы Arduino UNO происходит смена сигнала с низкого на высокий (проскакивает очередной импульс с датчика), вызывается функция обработки внешних прерываний и подсчитывает импульсы (переменная impuls).
Каждую секунду я обнуляю счетчик, предварительно пересчитав частоту в скорость [м/с]. Дальше зная скорость могу считать все остальное.
 

volatile uint16_t impuls = 0;
 
void setup (){
  attachInterrupt (0, pinChange, RISING);  // Подключаем обработчик прерывания на контакте 2
}
 
// Функция обработки прерывания
void pinChange ()
{
  impuls = impuls + 1;
}
 
void loop (){
  while(millis() - lastTime >= 1000){      
    Vs = ((float)impuls*1000)/(float)k;    // [м/c]
    impuls = 0;
    lastTime = millis();
  }
}

Изначально я наступил на несколько граблей:
1. Неверно выбрал режим прерывания CHANGE вместо RISING, в итоге получил частоту в два раза выше генерируемой. Благо додумался осциллографом перепроверить.
2. Получал большую погрешность измерения 3-5%. Думал что это из-за потери частичного импульса в момент обнуления счетчика, но когда стал поочередно отслеживать место появление погрешности выяснил что при делении одной целой переменной на вторую целую получается тоже целая, хоть и записывается в дробную. Поэтому перед делением нужно обязательно конвертировать int во float.
 
Пока настольные испытания продолжаются положительно.

Прикрепленный файл (Размер: 160 КБайт)


______________________________________
Купил Москвич и не жалею... Никого...
Мастерская 
Вся дискуссия в этом обсуждении:

Форум » Разное » Флейм » Arduino в Москвич