Нужен совет по нескольким вопросам в создании АЗУ для авто
- Войдите на сайт для отправки комментариев
Всем доброго дня! Хочу влиться в ваш дружный коллектив и поскольку мы простых путей не ищем, то захотелось мне ни много ни мало, а автоматическое зарядное устройство для свинцовых батарей.
Аппаратное: Arduino Nano, Encoder, датчик тока ACS750, транзистор 85L02H (N-channel 85A, подтяжка от минуса 10кОм) и временно БП от ноутбука на 19В 4.5А
Что сделано: на энкодер реагируем, напряжение и ток растёт, управление транзистором осуществляется с вывода D3, при этом значения на ACS750 плавают т.е. показываем 0.061А, а следом например 1.230. На клемме аккумулятора при подключении высокочастотный писк (осциллограф пока в ремонте)
Вопросы:
1. Как на ACS750 нормально измерять ток?
2. Высокочастотный писк связан с шим?
3. Транзистор взят первый попавшийся, может посоветуете более подходящий для данной задачи?
Просьба: укажите на ошибки в коде - хочется ток мониторить постоянно, а не при каждом повороте энкодера
Скетч:
#define CLK 10 #define DT 11 #define SW 12 #include "GyverEncoder.h" const int analogIn = A4; // Set your scale factor int mVperAmp = 40; // See Scale Factors Below int pwmPin = 3; // connected to the MOSFET's gate int val = 0; // set between 0 and 255 // Set you Offset int ACSoffset = 2500; // See offsets below int RawValue= 0; double Voltage = 0; double Amps = 0; Encoder enc1(CLK, DT, SW); void setup() { pinMode(pwmPin, OUTPUT); Serial.begin(9600); enc1.setTickMode(AUTO); enc1.setType(TYPE2); // тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип } void loop() { // enc1.tick(); // не нужна, в этом режиме (AUTO) она входит в каждую функцию! if (enc1.isTurn()) { // если был совершён поворот (индикатор поворота в любую сторону) // ваш код RawValue = analogRead(analogIn); Voltage = (RawValue / 1023.0) * 5000; // Gets you mV Amps = ((Voltage - ACSoffset) / mVperAmp); if (enc1.isRight()) val++; if (enc1.isLeft()) val--; analogWrite(pwmPin, val); Serial.print("Raw Value = " ); // shows pre-scaled value Serial.print(RawValue); Serial.print("\t mV = "); // shows the voltage measured Serial.print(Voltage,3); // the '3' after voltage allows you to display 3 digits after decimal point Serial.print("\t Amps = "); // shows the voltage measured Serial.println(Amps,3); // the '3' after voltage allows you to display 3 digits after decimal point Serial.println(val); delay(250); } //if (enc1.isRight()) Serial.println("Right"); // если был поворот //if (enc1.isLeft()) Serial.println("Left"); //if (enc1.isRightH()) Serial.println("Right holded"); // если было удержание + поворот //if (enc1.isLeftH()) Serial.println("Left holded"); //if (enc1.isPress()) Serial.println("Press"); // нажатие на кнопку (+ дебаунс) //if (enc1.isRelease()) Serial.println("Release"); // отпускание кнопки (+ дебаунс) //if (enc1.isHolded()) Serial.println("Holded"); // если была удержана и энк не поворачивался //if (enc1.isHold()) Serial.println("Hold"); // возвращает состояние кнопки //Serial.println(val); }
Всем заранее спасибо!
К библиотекам Гайвера у старожил форума неоднозначное отношение однако )))
ACS750 имеет смысл если нужна гальваническая развязка. В данном случае взять обычный шунт и мерять на нем напряжение.
Писк из-за шима. Ну и для правильной зарядки нужно не только ток но и напряжение на АКБ мерять
К библиотекам Гайвера у старожил форума неоднозначное отношение однако )))
Я не в курсе, но думаю, что это вопрос "религии". Сначала надо добиться стабильной работы.
[ Сначала надо добиться стабильной работы.
Вот с этим, какрас, у гайверовского кода и проблемы