Здравствуйте, гость ( Вход | Регистрация )

Корректировка спидометра, При замене ГП, коробки и т.д. и т.п.
AlexTLN
сообщение 21.5.2016, 17:25
Сообщение #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;

  
}


}
Перейти в начало страницы
 
+Цитировать сообщение
 
Начать новую тему
Ответов
AlexTLN
сообщение 23.5.2016, 14:45
Сообщение #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 и т.д.
Перейти в начало страницы
 
+Цитировать сообщение

Сообщений в этой теме


Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 23.4.2024, 14:19