Нужен совет по нескольким вопросам в создании АЗУ для авто
- Войдите на сайт для отправки комментариев
Всем доброго дня! Хочу влиться в ваш дружный коллектив и поскольку мы простых путей не ищем, то захотелось мне ни много ни мало, а автоматическое зарядное устройство для свинцовых батарей.
Аппаратное: 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 имеет смысл если нужна гальваническая развязка. В данном случае взять обычный шунт и мерять на нем напряжение.
Писк из-за шима. Ну и для правильной зарядки нужно не только ток но и напряжение на АКБ мерять
К библиотекам Гайвера у старожил форума неоднозначное отношение однако )))
Я не в курсе, но думаю, что это вопрос "религии". Сначала надо добиться стабильной работы.
[ Сначала надо добиться стабильной работы.
Вот с этим, какрас, у гайверовского кода и проблемы