Hallo, eigentlich wollte ich nur einen Motor testen und brauchte ein Kanalimpuls. Da ich aber keinen Servotester hab und einen Sender nicht extra anwerfen wollte hab ich mir einen arduino genommen und ein Servotestprogramm darauf geschrieben. Da ich in der Vergangenheit immer das problem hatt verschiedene Anzeigen gleichzeitig abzulesen und zu notieren hab ich die erst mal fotografiert und dann in eine Tabelle eingetragen.
Und wo ich nun schon einmal dabei war (Forest Gump)habe ich mir überlegt daß es do eigentlich möglich ist daß der arduino gleich für mich alles misst und auswertet.
Schubkraft kann ich mitz einem Drucksensor messen
Spannung wird über eine Spannungsteiler gemessen
Strom über einen Shunt ? Ne lieber über einen Hallwandler
Vibration - Dann kann man auch gleich die Motoren und Propeller wuchten mit einem Gyro nee lieber mit einem Acc ,
Drehzahl optisch ? kann doch auch gleich der acc mit machen
Temperatur analog einfach von hinten in den Motor und auf den Regler
Vorgestellt habe ich mir verschiedene Betriebsmodi
Voreinstellung Strombegrenzung je nach Regler und Motor
Servotester einfach per Poti Motor hochfahren und werte anzeigen lassen.
Schubmessung Programm vergrößert langsam den kanalimpuls bis der gewünschte schub erreicht ist (500g Schritte) vereilt dort kurz und misst mehrfach und mittelt die Werte. Impuls wird weiter hochgefahren.... runterfahren fertig .
Die Werte werden dann im LCD angezeigt und(oder) auf dem PC Terminal ausgegeben. Von da aus wird dann eine Exel Tabelle erstellt. Eventuell kann man die werte auch auf eine Speicherkarte schreiben lassen.
Vibrationsmessung Drehzahl wird langsam erhöht und dabei die Vibration gemessen. Nachdem Vollgas erreicht ist steht auch die Max. Schwingung und die dazugehörige Drehzahl(Resonanz) fest und kann wie vor ausgegeben werden.
Auswuchten - dazu wird der Motor mit einer LED durch einen Schlitz angeblitzt . Voraussetztung ist eine Umlaufende Beschriftung des Motors da wird nur ein Buchstabe hell .Alternativ kann man ja eine diagonale Linie auf den Motor zeichenn und sieht dann wo die Unwucht ist. Als High-Endlösung kann man mit einem Tintenstrahldruckkopf den Motor bedrucken zum auswuchten.
Beschleunigungstest Hier wird schlagartig gasgegeben(verschiedene Stufen) und gemessen wie lange es dauert bis die Drehzahl stabil ist. Dies wird mehrfach gemacht um einen gescheiten Wert zu erhalten. Ausgabe LCD +Terminal
Hiermit kann man auch vergleichen wie sich unterschiedliche Ansteuerfrequenzen dewr regler bemerkbar machen.
Servotest i2C - die Ansteuerung der Regler erfolgt parallel über Kanalimpuls und I2C was bei der Beschleunigungsmessung dann zeigen wird wie groß die vorteile sind.
Den Ständer habe ich schon mal gefräst und den Sketsch hab ich schon mal angefangen. Momentan fehlt mir noch der Stromsensor.
Bei der Programmierung wäre ich über hilfe dankbar , da ich m´noch nicht so recht weis wie ich da systematisch ran gehen soll.
Auch möchte ich über ein 2.Poti die Impulswiederholfrequenz eintellen können um mal zu sehen wie sich das beim Beschleunigungstest bemerkbar macht. Simonk Firmware..
Und wo ich nun schon einmal dabei war (Forest Gump)habe ich mir überlegt daß es do eigentlich möglich ist daß der arduino gleich für mich alles misst und auswertet.
Schubkraft kann ich mitz einem Drucksensor messen
Spannung wird über eine Spannungsteiler gemessen
Strom über einen Shunt ? Ne lieber über einen Hallwandler
Vibration - Dann kann man auch gleich die Motoren und Propeller wuchten mit einem Gyro nee lieber mit einem Acc ,
Drehzahl optisch ? kann doch auch gleich der acc mit machen
Temperatur analog einfach von hinten in den Motor und auf den Regler
Vorgestellt habe ich mir verschiedene Betriebsmodi
Voreinstellung Strombegrenzung je nach Regler und Motor
Servotester einfach per Poti Motor hochfahren und werte anzeigen lassen.
Schubmessung Programm vergrößert langsam den kanalimpuls bis der gewünschte schub erreicht ist (500g Schritte) vereilt dort kurz und misst mehrfach und mittelt die Werte. Impuls wird weiter hochgefahren.... runterfahren fertig .
Die Werte werden dann im LCD angezeigt und(oder) auf dem PC Terminal ausgegeben. Von da aus wird dann eine Exel Tabelle erstellt. Eventuell kann man die werte auch auf eine Speicherkarte schreiben lassen.
Vibrationsmessung Drehzahl wird langsam erhöht und dabei die Vibration gemessen. Nachdem Vollgas erreicht ist steht auch die Max. Schwingung und die dazugehörige Drehzahl(Resonanz) fest und kann wie vor ausgegeben werden.
Auswuchten - dazu wird der Motor mit einer LED durch einen Schlitz angeblitzt . Voraussetztung ist eine Umlaufende Beschriftung des Motors da wird nur ein Buchstabe hell .Alternativ kann man ja eine diagonale Linie auf den Motor zeichenn und sieht dann wo die Unwucht ist. Als High-Endlösung kann man mit einem Tintenstrahldruckkopf den Motor bedrucken zum auswuchten.
Beschleunigungstest Hier wird schlagartig gasgegeben(verschiedene Stufen) und gemessen wie lange es dauert bis die Drehzahl stabil ist. Dies wird mehrfach gemacht um einen gescheiten Wert zu erhalten. Ausgabe LCD +Terminal
Hiermit kann man auch vergleichen wie sich unterschiedliche Ansteuerfrequenzen dewr regler bemerkbar machen.
Servotest i2C - die Ansteuerung der Regler erfolgt parallel über Kanalimpuls und I2C was bei der Beschleunigungsmessung dann zeigen wird wie groß die vorteile sind.
Den Ständer habe ich schon mal gefräst und den Sketsch hab ich schon mal angefangen. Momentan fehlt mir noch der Stromsensor.
Bei der Programmierung wäre ich über hilfe dankbar , da ich m´noch nicht so recht weis wie ich da systematisch ran gehen soll.
Auch möchte ich über ein 2.Poti die Impulswiederholfrequenz eintellen können um mal zu sehen wie sich das beim Beschleunigungstest bemerkbar macht. Simonk Firmware..
Code:
//Motor , Regler und Luftschraubentest
//http://www.airspektive.de
//Motortester mit einem Poti wird ein Servoimpuls erzeugt der einen Bruschlessregler ansteuert
//Auf dem Prüfstand ist der Moter auf einer wippe gelagert die auf einen Drucksensor drückt. Dieser wird ausgelesen und der Druck ausgegeben
//Die Ausgabe erfolgt auf einem LCD Display und auf dem Serial monitor im Arduino über serielle Verbindung
//Der Drucksensor hat leider keine gerade kennlinie und eine recht große Serienstreuung daher müssen mit einer Digitalwage
//Referenzwerte ermittelt werden. Beim drücken des Tasters werden dann Automatisch die Referenzwerte angefahren , gahalten und dabei die Druckdaten gemittelt
//nach Beendigung der Automatk werden die gemittelten Werte einmal an das Terminal gesendet woraus man diese in eine EXEL tabelle kopieren und weiterverarbeiten kann.
//http://www.conrad.de/ce/ProductDetail.html?hk=WW1&insert=WD&utm_source=affilinet&utm_medium=deeplink&utm_content=article&utm_campaign=affiliate&WT.mc_id=affiliate_affilinet_produktdaten&productcode=503368
//http://www.produktinfo.conrad.com/datenblaetter/500000-524999/503369-da-01-en-DRUCKSENSOR_FSR_402.pdf
//http://www.produktinfo.conrad.com/datenblaetter/500000-524999/503369-in-01-en-DRUCKSENSOR_FSR_402.pdf
//http://www.produktinfo.conrad.com/datenblaetter/500000-524999/503369-in-01-de-DRUCKSENSOR_FSR_402.pdf
//gleichzeitig wird die Spannung und der Strom gemessen so daß es eine Kennlinie gibt.http://www.produktinfo.conrad.com/datenblaetter/500000-524999/505261-da-01-en-LINEARER_STROMSENSOR_CSLA1CH.pdf
//Die Drehzahl wird entweder über eine Lichtschranke (je nach Blattzahl der Propeller) oder über den ACC (Vibrationen )gemessen.
#include <Wire.h>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int strom ;
int spannungn ;
int potpin = 2; // analog pin potentiometer mitte potiende +5V PotiendeGND
int Poti; // variable to read the Poti from the analog pin
int DruckSensorwert = 0;
int Druckausgabe = 0;
const int Spannungsteiler = A0; // Analog input pin Spannungssensor Spannungsteiler
const int Drucksensor = A1; // Analog input pin potentiometer Drucksensor
const int Gaspoti = A2; // Analog input pin potentiometer Gas
const int Stromsensor = A3; // Analog input pin Stromsensor
const int Refreshsensor = A4; // Poti für refreshrate Servoimpuls
//LCD ANZEIGE *************************************************************************
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//Anschlüsse für das LCD Display
void setup()
{
Serial.begin(115200);
///i2c
Wire.begin();
#define TWI_BLCTRL_BASEADDR 0x52
lcd.begin(16, 2);// setzt LCD Zahl der Spalten und Zeilen , erstes Feld ist 0 !
lcd.print("* Motortester *");
lcd.setCursor(0, 1);// stzt den Kursor an die 8.Stelle in die 1.Zeile(0)
lcd.print("Version 1");
delay(3000);
lcd.clear();
lcd.print("!Achtung Gefahr!");
lcd.setCursor(0, 1);// stzt den Kursor an die 8.Stelle in die 1.Zeile(0)
lcd.print("rotierender Prop");
delay(3000);
lcd.clear();
lcd.setCursor(0, 0);// stzt den Kursor an die 8.Stelle in die 1.Zeile(0)
lcd.print("I2C");
lcd.setCursor(6, 0);// stzt den Kursor an die 8.Stelle in die 1.Zeile(0)
lcd.print("Druck");
lcd.setCursor(12, 0);// stzt den Kursor an die 8.Stelle in die 1.Zeile(0)
lcd.print("ms Imp");
myservo.attach(13); // Servo an pin 13
}
//####################################################################################////
void loop()
{
//Servoausgabe***************************************************************************
Poti = analogRead(potpin); // liest das Poti aus von 0 bis 1023)
Poti = map(Poti, 0, 1023, 40, 140); // scaliert den Potiwert
myservo.write(Poti); // Setzt die Servoposition
delay(15); // waits for the servo to get there
//I2C***********************************
int motor = 0; // 0 -> Motor1, 1 -> Motor2 etc...
int speed = 10;
speed = map(Poti, 40,140,0,255);
Wire.beginTransmission((TWI_BLCTRL_BASEADDR + (motor << 1)) >> 1);
Wire.write(speed);
Wire.endTransmission();
delay(50);
//Drucksensor****************************************************************************
DruckSensorwert = analogRead(Drucksensor); //liest den drucksensor aus
Druckausgabe = map(DruckSensorwert, 0, 1023, 1000, 0); //skaliert den drucksensor
//Ausgabe Serial für Serial Monitor im Arduino*******************************************
Serial.print(" Drucksensorwert = " );
Serial.print(DruckSensorwert);
Serial.print(" Druckausgabe = ");
Serial.print(Druckausgabe);
Serial.print(" Servowert = ");
Serial.print(Poti*10+600); //Ausgabeimpuls in milisekunden
Serial.println (" * ");
delay(2); //kleine wartezeit
//LCD Displayausgabe*********************************************************************
lcd.setCursor(0, 1);
lcd.print(" ");//leert die Anzeige
lcd.setCursor(0, 1);
lcd.print(speed);
lcd.setCursor(6, 1);
lcd.print(" ");//leert die Anzeige
lcd.setCursor(6, 1);
lcd.print(DruckSensorwert);
lcd.setCursor(12, 1);
lcd.print(" ");//leert die Anzeige
lcd.setCursor(12, 1);
lcd.print(Poti*10+600); //Ausgabeimpuls in milisekunden
delay(100);
//****************************************************************************************
}
//Was fehlt :
//Auswertung Bosch BMA 020 der vibrationen registriert und mit dessen Hilfe der Prop und Motor gewuchtet werden kann.
//durch vibrationen Ansteuerung einer LED die den Motor Über einen Spalt anblitzt (Motor muß umlaufend beschriftet sein oder eine diagonale linie haben
//da nur ein Teil der Schrift oder linie erhellt ist weis man wo der Motor erleichtert werden muß.
//Jetzt kann man prüfen ob der Wert der Vibrationen gesunken ist.
//Beschleunigungsmesser misst wie schnell der Propeller eine neue Derhzahl erreicht hierdurch kann geprüft werden ob :
//unterschiedliche Reger, Regleransteuerungen ppm oder I2C, Unterschiedliche Software Simoink oder Heli meßbare Besserung der Beschleunigung bringt.
// Einstellbare Impulsfolge um zu testen wie schnell die Regler angesteuert werden können.
//Gleichzeitig kann man sehen ob eine schnellere Ansteuerung wirklich eine schnellere Beschleunigung zur Folge hat.