Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

www.supra-club.ru _ Электрооборудование и диагностика _ Корректировка спидометра

Автор: AlexTLN 21.5.2016, 17:25

Было несколько тем "как поправить?". Собственно, решение было либо "устройство за 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;

  
}


}

Автор: Блек 23.5.2016, 9:52

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

Тему в FAQ

Автор: AlexTLN 23.5.2016, 14:45

Небольшое пояснение:
Строка:
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 и т.д.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)