Aufhören bitte, galt auch für Dich, Holger.
Könnt ihr den privaten Mist nicht aus dieser Diskussion rauslassen?
Naja, ich bin hier jetzt raus, bringt ja nichts...
// neue Steuerung (c) eifeljeti , based on Holle
// Board: SparkFun Pro Micro
// CPU: AtMega 32u4 (5v,16 MHz)
// Boardverwalter:
// https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json
// Software: Arduino IDE 1.6.8
// PinOut fuer SparkFun Pro Micro
// Pin D5 --- Eingang kommend vom RX "Gaskanal" (PWM-Leitung)
// Pin D9 --- Ausgang gehend zum Regler (PWM-Leitung)
// Pin A0 --- + von Solarpanel ueber Spannungsteiler fuer Leerlaufspannung 2,4 - 2,56V am diesem Pin <<<RAW-105K-A0-25K-GND>>
// Pin GND --- - Minus von Solarpanel, und Masse von Rx
// Pin RAW --- + von Solarpanel 6 bis 12V
// Folgende Werte koennenn zur Optimierung an das verwendete Modell angepasst werden:
// Speed: quasi die Geschwindigkeit der Regelung, ist der Wert zu hoch, ist reagiert der Motor traege im Anlauf, ist der Wert zu niedrig, beginnt das System zu schwingen.
// Speeddifferenz: schnellerer Sprungwert zum Runterregeln des Motors bei Abfall der Solarspannung
int Speed = 200; // verzoegerungswert der Loop-Schleife (sinvolle Werte von 100 bis 1500)
int Speeddifferenz = 20; // differenzsprung nach unten (sinvolle Werte von 5 bis 50)
#include <Servo.h>
Servo Reglerpin;
int ReglerWert = 1089; // wir initialisieren mit Gaswert und damit Hebel auf NULL
int SolarPin = A0; // Solarpanel wird per Spannungsteiler an Pin A0 angeschlossen
int Solarspannung; // enthaelt spaeter den Wert 0-1023 bezogen auf 0 bis 12v
int EmpfaengerPin = 5; // Empfaenger Gaskanal wird an Pin 5 angeschlossen
int Empfaengerimpuls;
int Realimpulsein ;
int Reglerimpuls ;
int OrigSOLAR ;
double Realspannung; // DEBUG Ausgabevariable fuer Umrechnung
int VorherigeSolarspannung = 600; // und wir kamen von 7 volt ...
void setup()
{
analogReference(3); // setzen der Referenzspannugn auf internal 2.56v
pinMode(EmpfaengerPin, INPUT); // Schaltet den Empfaenger-Pin auf Eingang
Reglerpin.attach(9); // Regler wird an Pin D9 angeschlossen
Reglerpin.writeMicroseconds(1089); // Reglerinitialisierung
delay(3000); // Reglerinitialisierung
Serial.begin(57600); // Serielle Schnittstelle auf 57600 Baud festlegen // NUR DEBUG
}
void loop()
{
Empfaengerimpuls = pulseIn(EmpfaengerPin, HIGH, 40000); // Empfaengerimpuls einlesen 1089-1880
if (Empfaengerimpuls > 1870) // und Ausreisser in der Uebertragung eleminieren durch harte Grenzen
{
Empfaengerimpuls = 1870 ;
}
if (Empfaengerimpuls < 1090)
{
Empfaengerimpuls = 1090 ;
}
Realimpulsein = Empfaengerimpuls;
Empfaengerimpuls = map(Empfaengerimpuls, 1090, 1870, 0, 1023); // Empfaengerimpuls umbauen auf 0-1023 und invertiert
Reglerimpuls = map(ReglerWert, 1090, 1870, 0, 1023); // Frame in uSek. umsetzten auf 10 Bit Dig. Wert
// Serial.print (" OrigSOLAR: "); // DEBUG BLOCK AUSGABE
// Serial.print (OrigSOLAR); //Ausgabe der Werte der Solarspannung
Serial.print (" Solarspannung: "); // DEBUG BLOCK AUSGABE
Serial.print (Solarspannung); //Ausgabe der Werte der Solarspannung
// Serial.print (" Reale Spannung: ");
// Serial.print (Realspannung);
// Serial.print (" Frame-us: ");
// Serial.print (Realimpulsein); //Ausgabe des Wertes fuer den Empfaengerimpuls
Serial.print (" Empfaengerimpuls: ");
Serial.print (Empfaengerimpuls); //Ausgabe des Wertes fuer den Empfaengerimpuls
Serial.print (" Reglerwert: ");
Serial.print (ReglerWert); //Ausgabe des Wertes fuerr den Reglerwert
Serial.println("");
delay(100); // NUR DEBUG verzögerte Ausgabe fuer serielle Darstellung am PC
Solarspannung = analogRead(SolarPin); // Solarspannung einlesen 0-1023
OrigSOLAR = Solarspannung;
Solarspannung += 66; // Anpassungsfaktor auf Spannungsteiler bei 12V am Teiler = max. Eingangsspg.
if (Solarspannung >= 460 && Solarspannung < 616) // Bereichskorrektur zwischen 5 und 7 v
{
Solarspannung -= 24;
}
if (Solarspannung >= 616 && Solarspannung < 698) // Bereichskorrektur zwischen 7 und 8 v
{
Solarspannung -= 20;
}
if (Solarspannung >= 698 && Solarspannung <= 890) // Bereichskorrektur zwischen 8 und 10 v
{
Solarspannung -= 18;
}
Realspannung = Solarspannung / 85.3; // NUR DEBUG
// #################### Beginn Motoregelung #####################
if (VorherigeSolarspannung < Solarspannung && Solarspannung > 600 && ReglerWert < Empfaengerimpuls && Empfaengerimpuls > 3) {
ReglerWert += 1; //Hochlaufzeit
//Serial.print ("mehr gas auf motor");
}
if (VorherigeSolarspannung > Solarspannung && Solarspannung > 600 && ReglerWert > Empfaengerimpuls && Empfaengerimpuls > 3) {
ReglerWert = ReglerWert - Speeddifferenz; //Runterlaufzeit
//Serial.print ("weniger gas auf motor");
}
if (Empfaengerimpuls < 3 || Solarspannung <= 600) // Gashebelposition ist NULL ODER Solarspannung
{ // bei ca. 7V angelangt, also MotorSTOPP einleiten und halten !
ReglerWert = 1090 ;
}
VorherigeSolarspannung = Solarspannung ;
Reglerpin.writeMicroseconds(ReglerWert);
delayMicroseconds(Speed);
}
Nicht ueberraschend. Die war an Rudi.Julian, ich verstehe die Frage nicht wirklich.
Julian, ich verstehe die Frage nicht wirklich.
Essentiell zum Propeller-vermessen ist das die exakte Wellenleistung bekannt ist. ,
Dafür nehme ich entweder das Drehmoment mit auf (Motor auf einer Wippe mit zweitem Wägesensor), dann ist es egal ob Teillast oder Vollast, das Unitest liest es über das Kern440 Protokoll mit ein, und zeigt direkt den Motor/Regler Wirkungsgrad und in Folge die Wellenleistung gebrauchsfertig an und loggt es mit. (Unitest2 ist schon was feines )