Hallo,
da ich im Vorstellungs-Thread auf meinen Hybriden angesprochen wurde, wollte ich diesen euch mal genauer vorstellen.
Die Technik im Überblick:
Kopter : Holybro Pixhawk Flugsteuerung, Holybro NEO M8N GPS, 3DR Data Radio Telemetrie, Garmin LIDAR Lite V3 Laserentfernungsmesser für die Höhenregelung, DJi E1200 Antriebsset und FrSky L9R Empfänger.
Generator: Zenoah G240RC 2Takt Motor, Turnigy G160 290Kv BL-Motor als Generator, Arduino Nano Steuerung. A123 ANR22650 7S LiFePo Stützakku.
Der Generator:
ich fang mal mit dem Interessantesten Bauteil an.
Die Regelung der Ausgansspannung erfolgt rein per Spannungsmessung am Arduino und wird durch einen PID regler der über einen Servo am Motor gas gibt eingestellt. Also arbeitet die Steuerung ohne konkrete Drehzahlerfassung. Konstante Drehzahl bringt nix da die Spannung Lastabhängig stark einbricht (7200 Rpm am Generator bei 0 A und ca 9200Rpm bei 40A um 24,3 Volt zu liefern).
Entsprechend träge ist das Regelverhalten da ich mit einem 2/20 K Ohm Spannungsteiler Spannungen bis 55V Messen kann aber nur in 55V/1024 Schritten also nur auf 53,x mV genau auflösen kann. Funktioniert trotzdem ganz gut.
Ein 7S2500mAh A123 LIFE Stützakku übernimmt die Aufgabe eines Glättungskondensators (wird im PKW auch so Praktiziert da gibt´s auch keine Kondensatorbänke). Da an einem Vollen LiFe die Lade Spannung bei 100% Sprunghaft ansteigt würde ein voller LiFe seine Stütz und Glättungswirkung verlieren aus dem Grund wird er nur 3,47 Volt pro Zelle also zu ca.80% geladen (kein Scherz, ich musste schon wegen einem Vollen Akku notlanden weil ich die Ausgangsspannung zu hoch eingestellt habe). Eine Überspannungserkennung lässt eine 1 Ohm Last per FET bei 25,8 Volt zuschalten und schaltet bei 25,6 Volt wieder ab . Die 1 Ohm Last hat ihren eigenen Brückengleichrichter damit beim auslösen nur der Generator und nicht der Akku belastet wird. Sie dient um bei einem Plötzlichen einsetzendem Stromabfall einem Spannungsanstieg entgegen zu wirken zb. beim sinken oder Aufsetzen auf dem Boden : Kopter fliegt-> Hohe Last am Generator->Regler gibt Vollgas->Kopter Sinkt->geringere Last am Generator->Regler gibt immer noch Vollgas->Drehzahl steigt->Spannung steigt->ESC brennen durch->Pilot weint
Hier der Arduino Sketch zur Regelung. Weitere Details zum Kopter folgen
/********************************************************
* Generator Governor basierend auf PID Basic Example
* Spannung über 20/2 kOHM Spannungsteiler am analog input 0 zu Servo Ansteuerung PWM output 9 oder 3
* einstellung der Sollspannung über Poti an Analog 1
* Überspannungserkennung ab 27 Volt über LED Pin 13 und MOSFET der im Überspannungsfall eine 1 Ohm Last zuschaltet
********************************************************/
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <PID_v1.h>
#define PIN_INPUT 0
#define PIN_OUTPUT 3
#define PIN_CONTROL 1
#define LED_PIN 13 // Überspannungswarnung und Lastschaltung
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Define Variables we'll be connecting to
Servo myservo;
int val;
double Setpoint, Input, Output;
//Specify the links and initial tuning parameters
double Kp=0.4, Ki=0.9 , Kd=0.01; // Kp=0.17, Ki=0.2 , Kd=0.01; sind gute werte am Betrieb ohne Stützakku
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup()
{
lcd.begin();
lcd.backlight();
pinMode (LED_PIN, OUTPUT);
myservo.attach(9);
Input = analogRead(PIN_INPUT);
Setpoint = analogRead (PIN_CONTROL);
//turn the PID on
myPID.SetMode(AUTOMATIC);
}
void loop()
{
Input = analogRead(PIN_INPUT);
Setpoint = analogRead (PIN_CONTROL);
myPID.Compute();
analogWrite(PIN_OUTPUT, Output);
val = Output;
val = map(val, 0, 255, 98, 170); // min/max werte am Drosselklappenservo
myservo.write(val); // sets the servo position according to the scaled value
lcd.setCursor(0, 0);
lcd.print("Generator: ");
lcd.print(Input*0.054); // Gemessene Spannung am Eingang vom Regler
lcd.setCursor(0, 1);
lcd.print("Setpoint: ");
lcd.print(Setpoint*0.054); // Sollwert Ausgangsspannung vom Generator
delay(15);
if (Input >= 480){ // 500 ist Spannung über 27 Volt
digitalWrite(LED_PIN, HIGH ); // LED geht an und 1 Ohm Last wird zugeschalten
}
if (Input < 478){ // 498 ist Spannung unter 27 Volt
digitalWrite(LED_PIN,LOW);
}
}