paddy
Active member
Hallo zusammen,
für meinen neuen Mäher (Hoverboard + ROS) benötige ich eine Art Base controller, welcher das Batteriemanagement, Perimeter und den Mähmotor übernimmt. Dazu habe ich die bisherige Schaltung für Batterie und Ladungsmanagement auf einer eigenen, kleinen Platine untergebracht. Gesteuert wird dies mittels Arduino Nano.
Vorlage für die Software ist der Azurit Code, Perimeter, ADCManager wurden 1:1 übernommen, Batteriemanagement Funktionen entsprechend heraus kopiert. Perimeter liefert gute Werte, die Batteriespannung weicht aber unfassbar stark ab. So recht erklären kann ich es mir nicht, vielleicht kann mir da jemand weiterhelfen.
Die Batterie ist ein 10S2P, also maximal 42V, aktuell hat sie 40,4V
Als Spannungsteiler verwende ich 150K+10K Widerstände, was bei maximaler Ladung einen Prüfwert von ~ 2,65V ergibt (die Idee war, hier auch mit 3,3V MCUs arbeiten zu können)
Als batFactor wird 0,78 errechnet. Die Funktion VoltageDividerUGes liefert 16 zurück, was nach meinem Verständnis korrekt ist. ADC2Voltage liefert 0,00488V für einen ADC Wert von 1.
Das berechnen der Spannung erfolgt wie beim Azurit Code. Zum debuggen habe ich ein paar Ausgaben in die Konsole geschrieben mit diesem Ergebnis:
Die vorherige ADC Kalibrierung liefert dieses Ergebnis:
Mich wundert, dass der ADC Manger immer 127 als Messwert zurück liefert. Der Messbereich ist nach meinem Verständnis 1023 bei 5V, sollte also irgendwo um 516 liegen, statt bei 127.
Wo steckt denn hier mein Denkfehler?
EDIT: Ich habe eine andere Batterie mit aktuell 38,2V Spannung angeschlossen. Auch in diesem Fall liefert der Code 99,32V bzw. 127 als ADC Wert
Grüße Patrick
für meinen neuen Mäher (Hoverboard + ROS) benötige ich eine Art Base controller, welcher das Batteriemanagement, Perimeter und den Mähmotor übernimmt. Dazu habe ich die bisherige Schaltung für Batterie und Ladungsmanagement auf einer eigenen, kleinen Platine untergebracht. Gesteuert wird dies mittels Arduino Nano.
Vorlage für die Software ist der Azurit Code, Perimeter, ADCManager wurden 1:1 übernommen, Batteriemanagement Funktionen entsprechend heraus kopiert. Perimeter liefert gute Werte, die Batteriespannung weicht aber unfassbar stark ab. So recht erklären kann ich es mir nicht, vielleicht kann mir da jemand weiterhelfen.
Die Batterie ist ein 10S2P, also maximal 42V, aktuell hat sie 40,4V
Als Spannungsteiler verwende ich 150K+10K Widerstände, was bei maximaler Ladung einen Prüfwert von ~ 2,65V ergibt (die Idee war, hier auch mit 3,3V MCUs arbeiten zu können)
Als batFactor wird 0,78 errechnet. Die Funktion VoltageDividerUGes liefert 16 zurück, was nach meinem Verständnis korrekt ist. ADC2Voltage liefert 0,00488V für einen ADC Wert von 1.
Code:
batFactor = voltageDividerUges(150, 10, 1.0) * ADCMan.ADC2voltage(1) * 10; // ADC to battery voltage factor *10
Das berechnen der Spannung erfolgt wie beim Azurit Code. Zum debuggen habe ich ein paar Ausgaben in die Konsole geschrieben mit diesem Ergebnis:
Code:
void Battery::check_battery_voltage()
{
// convert to double
int batADC = ADCMan.read(pinBatteryVoltage);
double batvolt = ((double)batADC) * batFactor;
// low-pass filter
double accel = 0.01;
//double accel = 1.0;
if (abs(batVoltage - batvolt) > 5)
batVoltage = batvolt;
else
batVoltage = (1.0 - accel) * batVoltage + accel * batvolt;
}
batADC | 127 |
batFactor | 0,78 |
UGes bei 1V (voltageDividerUGes(1)) | 16 |
ADC2voltage(1) | 0,004887 |
Batteriespannung laut Arduino | 99,32V |
tatsächliche Spannung | 40,4V |
Spannung am Pin A3 (hier ist die Batterie angeschlossen) | 2,52V |
Die vorherige ADC Kalibrierung liefert dieses Ergebnis:
Code:
13:43:44.324 -> ADC calibration...
13:43:44.792 -> ADC calibration ch0=0
13:43:45.308 -> ADC calibration ch4=127
13:43:45.777 -> ADC calibration ch5=127
13:43:45.777 -> ---ADC calib---
13:43:45.824 -> ADC sampleRate=38462
13:43:45.824 -> AD0 min=0 max=0 diff=0 ofs=0
13:43:45.824 -> AD1 min=5 max=5 diff=0 ofs=0
13:43:45.824 -> AD2 min=0 max=0 diff=0 ofs=0
13:43:45.824 -> AD3 min=127 max=127 diff=0 ofs=0
13:43:45.824 -> AD4 min=127 max=127 diff=0 ofs=127
13:43:45.824 -> AD5 min=127 max=127 diff=0 ofs=127
13:43:45.824 -> AD6 min=0 max=0 diff=0 ofs=0
13:43:45.824 -> AD7 min=0 max=0 diff=0 ofs=0
Mich wundert, dass der ADC Manger immer 127 als Messwert zurück liefert. Der Messbereich ist nach meinem Verständnis 1023 bei 5V, sollte also irgendwo um 516 liegen, statt bei 127.
Wo steckt denn hier mein Denkfehler?
EDIT: Ich habe eine andere Batterie mit aktuell 38,2V Spannung angeschlossen. Auch in diesem Fall liefert der Code 99,32V bzw. 127 als ADC Wert
Grüße Patrick
Zuletzt bearbeitet: