Корректировка спидометра, При замене ГП, коробки и т.д. и т.п. |
Здравствуйте, гость ( Вход | Регистрация )
Корректировка спидометра, При замене ГП, коробки и т.д. и т.п. |
![]() ![]()
Сообщение
#1
|
||
![]() Вставить ник ![]() Группа: Пользователи Сообщений: 91 Регистрация: 11.4.2015 Из: Tallinn, Estonia Пользователь №: 9 797 Авто:JZA80 2JZ-GTE+W58 ![]() |
Было несколько тем "как поправить?". Собственно, решение было либо "устройство за 100 еврорублей", либо ничего. Собрал я корректировщик, выложу схему и прошивку, может кому пригодится.
Само устройство делает 2 вещи: 1. меняет частоту сигнала на прибоку от датчика скорости на коробке. 2. убирает отсечку по скорости, приборка и мозг больше не видят скорость выше 180км/ч. Код самой прошивки для среды Arduino: Код //==========INPUT============================
bool state = HIGH; bool sig = HIGH; unsigned long time_IN_LAST=0; unsigned long time_IN_NOW=0; //unsigned long timeMID2=4130;//4920 * 0.84 = 4130 micros delay in 180km/h unsigned long timeMID=500000; //=====EXEPTIOT=============== unsigned long micros_EXCEPTION=10000000; unsigned long micros_EXCEPTION2=4294000000; //==OUT=========================================================================== ========= unsigned long time_OUT_NOW=0; unsigned long time_OUT_LAST=0; bool sigOUT=LOW; void setup() { // Serial.begin(115200); pinMode(4, OUTPUT); pinMode(2, INPUT); delay(500); sig=digitalRead(2); state=sig; } void loop() { //======INPUT=================== sig=digitalRead(2); if(state!=sig) { time_IN_NOW=micros(); timeMID=time_IN_NOW-time_IN_LAST; if(timeMID<4920)timeMID=4920; //speed limit time_IN_LAST=time_IN_NOW; state=sig; // Serial.print("IN:"); // Serial.println(timeMID); } //========OUT============ time_OUT_NOW=micros(); if(time_OUT_NOW<micros_EXCEPTION&&time_OUT_LAST>micros_EXCEPTION2)time_OUT_LAST=0; if(time_OUT_NOW>time_OUT_LAST+timeMID*0.84) //0.84 correction in % { digitalWrite(4, sigOUT); sigOUT = !sigOUT; // Serial.print("OUT:"); // Serial.println(time_OUT_LAST-time_OUT_NOW); time_OUT_LAST=time_OUT_NOW; } } |
|
|
||
![]() |
![]()
Сообщение
#2
|
|
![]() Вставить ник ![]() Группа: Пользователи Сообщений: 91 Регистрация: 11.4.2015 Из: Tallinn, Estonia Пользователь №: 9 797 Авто:JZA80 2JZ-GTE+W58 ![]() |
Небольшое пояснение:
Строка: if(time_OUT_NOW>time_OUT_LAST+timeMID*0.84) 0,84 - это коэффициент частоты сигнала. В данном случае подбирается вручную на машине(так проще, чем считать зубы пар и датчика), примерную погрешность мы уже знаем. Если реальная скорость больше, чем на спидометре, то X<1. Если реальная скорость машины меньше, чем показывает спидометр, то X>1. Строка: //unsigned long timeMID2=4130 Сама эта переменная не используется. число 4130 - интервал в микросекундах между сменой знака сигнала на приборку при 180км/ч. То есть реальная частота импульсов 1/0,008260=~120 полных импульсов в секунду. Строка: if(timeMID<4920)timeMID=4920; Эта строка убирает отсечку по скорости. Стрелка зависнет около 180км/ч, машина продолжит разгоняться. Число 4920 это 4130/0,84. То есть 4130 надо разделить на коэффициент частоты сигнала. В данный момент устройство засунул в свою машину, коррекция работает исправно, отсечку по скорости не проверял. Если отсечка не пропадет, то надо вместо 4130 ставить 4140, 4150 и т.д. |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 3.5.2025, 3:31 |