Залипает сам актуатор? Или транзистор? Если тразистор может чтоб не залипала частоту шим увеличить.
залипает электровакуумный клапан (иногда не возвращается в ноль). Лечится подачей значения близкого к нулю. Думаю сделаю программно. Но это не критично. Электроника работает четко.
вот скетч
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей
int analogPinP = A1; // давление наддува
int analogPinM = A2; // положение педали газа
int analogPinR = 9; // управление питанием ЭВклапана
unsigned long timing;
int maxBoost=1.4; // максимально допустимый наддув
// зависимость наддува от положения педали
float gaz[21]={0, 0.13, 0.36, 0.52, 0.58, 0.64, 0.67, 0.71, 0.74, 0.77, 0.80, 0.84, 0.86, 0.88, 0.9, 0.92, 0.95, 0.97, 0.99, 1, 1};
// зависимость вакуума от сигнала управления
float sig[50]={0, 0, 0, 1, 2, 4, 8, 10.8, 11.4, 12.8, 13.5, 14, 14.5, 15, 15.3, 15.6, 15.9, 16.3, 16.6, 17, 17.4, 17.7, 18, 18.3, 18.6, 18.9, 19.3, 19.7, 20, 20.25, 20.5, 20.75, 21, 21.25, 21.5, 21.75, 22, 22.2, 22.4, 22.6, 22.8, 23, 23.25, 23.5, 23.75, 24, 24.25, 24.5, 24.75, 25};
void setup()
{
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
pinMode(analogPinR,OUTPUT);
}
void loop()
{
// считываем значение наддува
float analogValueP = (analogRead(analogPinP)-90)*2.51/1000;
// считываем положение педали
float analogValueM = (508 - analogRead(analogPinM))/1.9;
// на всякий случай
if (analogValueM>100) { analogValueM=100; }
if (analogValueM<0) { analogValueM=0; }
float t,sign=0;
for (int i=0; i<21; i++) {
if (analogValueM > i*5) {
sign=gaz[i]+(gaz[i+1]-gaz[i])/5*(analogValueM-i*5);
}
}
sign=sign*maxBoost;
float vac=(2*sign-analogValueP)*0.5/maxBoost*100;
for (int i=0; i<51; i++) {
if (vac > i*2) {
t=sig[i];
}
}
// управляем вакуумом на актуаторе
analogWrite(analogPinR, 215+t);
// вывод на экран
if (millis() - timing > 100)
{
timing = millis();
lcd.setCursor(0, 0);
lcd.print("Bst ");
lcd.setCursor(4, 0);
lcd.print(analogValueP);
lcd.setCursor(8, 0);
lcd.print(" T");
lcd.setCursor(11, 0);
lcd.print(t);
lcd.setCursor(0, 1);
lcd.print("Thr ");
lcd.setCursor(4, 1);
lcd.print(analogValueM);
lcd.setCursor(8, 1);
lcd.print(" ");
}
}
2 дня катаюсь, ничего не глючит и не залипает. ищу кусок трубы для адаптера...
Сообщение отредактировал -Zheka-: 26 November 2018 - 09:05