Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Корректировка спидометра
www.supra-club.ru > Супра клуб > Тюнинг > Электрооборудование и диагностика
AlexTLN
Было несколько тем "как поправить?". Собственно, решение было либо "устройство за 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;

  
}


}
Блек
Спасибо большое.

Тему в FAQ
AlexTLN
Небольшое пояснение:
Строка:
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 и т.д.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2024 IPS, Inc.