Motortester

Neues Thema Antwort

Seite: 1

Autor Neuer Beitrag
Mitglied
Registriert seit: Feb 2008
Beiträge: 2226
Ort: Apolda ( Weimar Jena )
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..


Zitat
//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 <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);

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("Kraft");
lcd.setCursor(6, 0);// stzt den Kursor an die 8.Stelle in die 1.Zeile(0)
lcd.print("Senso");
lcd.setCursor(12, 0);// stzt den Kursor an die 8.Stelle in die 1.Zeile(0)
lcd.print("Poti");

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

//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(Druckausgabe);
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 :
//Motoransteuerung über i2C
//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.



Für die Steuerung der Motore ist ja hier schon mal was angefangen:
http://mikrokopter.de/ucwiki/en/BL-Ctrl_V1.2


User image

User image

User image
Mitglied
Registriert seit: Feb 2008
Beiträge: 2226
Ort: Apolda ( Weimar Jena )
Hier mal mit I2C Motorsteuerung :D Scheint nun möglich alle Motore anzusteuern. :mrgreen: :mrgreen: :mrgreen:
/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.
Mitglied
Registriert seit: Mar 2008
Beiträge: 1083
Ort: Apolda
Hi Falko,

interessantes Projekt.

Kann zwar nichts konkretes beitragen, aber hier mal 2 Links zum Thema "Wuchten". Vielleicht können sie ja weiterhelfen.

http://www.harald-sattler.de/html/auswuchtmaschine.htm
http://forum.mikrokopter.de/topic-post381180.html

Die Refreshrate des Servoimpulses solltest Du vielleicht, anstatt mit Poti, per Taster und Menü realisieren. Der von Dir angedachte Pin A4 wird vom I2C, als SDA, benutzt.
Strom- und Spannungsmessung liessen sich ja eventuell beim EPI-Strom abguggn http://www.mk-epi.de/images/Strom8-schalt.jpg


Jürgen


 


 


 
Mitglied
Registriert seit: Mar 2007
Beiträge: 4485
Ort: MVP
übrigends,
hat es mal vor Zeiten als I2C noch bei Multikopter üblich war,
QUAX auch einen Tester gebaut.

externer Link:
User image
- http://home.versanet.de/~b-konze/m8_tester/m8_tester.htm


Forum
- http://forum.x-3d.de/bb/viewtopic.php?t=7436

ein Strommodul verwendet übrigend auch der ArduPilot

externer Link:
User image


- http://www.lipoly.de/index.php?main_page=product_info&cPath=880_1912_1913&products_id=240958
.
« Bearbeitet von JUERGEN_ am 16.12.2012 16:34. »
Mitglied
Registriert seit: Feb 2008
Beiträge: 2226
Ort: Apolda ( Weimar Jena )
Heidi wegen der Pinbelegung hatte es nicht dazugeschrieben hab das hier am Mega dran.
Inzwischen musste ich feststellen daß der sensor nur als Taster taugt. :evil:
Die Ausgegebenen Werte sind nicht reproduzierbar . Er aht so eine Starke drift daß er nicht zu gebrauchen ist.

Hat jemand eine Idee ? Womit ich am besten die Kraft messen kann? Hab schon überlegt eine Digitalwage auszulesen eventuell das LCD anzapfen aber das ist mir zu aufwendig.
Mitglied
Registriert seit: Mar 2008
Beiträge: 1083
Ort: Apolda
Anschluss einer Wägezelle an Arduino
http://cerulean.dk/words/?page_id=42
Mitglied
Registriert seit: Feb 2008
Beiträge: 2226
Ort: Apolda ( Weimar Jena )
Interessanter link, so ähnlich habe ich mir das auch gedacht, hab mir allerdings ein LM 324N betsllet den ich dafür verwenden wollte. Jedoch ist villeicht durch die interne Spannungsreferenz der INA 125 die bessere Wahl. mal sehn wie die ergebnisse mit dem 324 werden.
Momentan klappt die Ansteuerung des Motors , Ausgabe auf LCD und über Seriell, auch ein Programm für den PC hab ich schonon mal angefangen, welches die Daten seriell einliest , darstellt, mit dem ich auch den Testlauf starten kann und daß mir am ende eine Datei fürs Exel ausgeben soll. externer Link:
User image

Hab mir einen Hallsensor zur Strommessung geholt jedoch schwanken dabei je nach Ausrichtung die Werte -Erdmagnetfeld :'( aber ich werden den Trotzdem nehmen. http://www.pololu.com/file/download/ACS715.pdf?file_id=0J197
Bei der Waage überlege ich noch ob ich die schalchte. da sind 4 recht große Sensoren drin . daher hab ich überlegt ob ich mir eine kleine Kofferwaage zulege und auf Zug arbeite.

Eigentlich wollte ich noch messen wann der IR impuls kommt die millis merken und wenn der vibrationmax kommt die Zeitdifferenz messen. dies kann ich mir ja dann mit der Zeit für eine Umdrehung skalieren und weis wo die unwucht ist und wie groß diese ist. Zur Darstellung der Vibrationen nutze ich momentan einen OSZI von der Soundkarte rot ist die Reflexlichtschranke und grün der ACC Sensor letztere werte weisen eine permanente leichte Schwingung auf die vermutlich vom Kugellager oder von der Ansteuerung des Motors kommt. Ich überlege ich dies mit einem C oder RC zu glätten. Werte ? Denn so komme ich nicht wirklich zu einer auswertbaren amplitude pro Umdrehung.
Die beiden Roten "LOW" sind die Markierung am Motor das dazwischenliegende obere gezappel ist die Schrift vom Motor die zwar mit schwarzem Edding geschwärzt habe die aber anscheinend doch noch etwas reflektiert.

So weit ist es bis jetzt:
http://www.youtube.com/watch?v=185huvxlzeo

http://www.controlweigh.com/loadcell_colors.htm
Mitglied
Registriert seit: Feb 2008
Beiträge: 2226
Ort: Apolda ( Weimar Jena )
Bin ein wenig weiter gekommen.
Ich mach da so einen Stufentest bei dem ich die Impulslänge von 1000 auf 2000 in 50 ms Schritten erhöhe. Dabei wird jedesmal ein Satz gemittelter Daten an den PC gesendet. Der stellt dies in Balkenform dar. Nur die Datenübergabe an EXEL ist noch nicht drin. Hat da jemand eine Lösung ?
http://www.youtube.com/watch?v=xSZ2Ubt1B2o&feature=youtu.be
« Bearbeitet von fdietsch am 13.03.2013 00:37. »
Mitglied
Registriert seit: Feb 2008
Beiträge: 2226
Ort: Apolda ( Weimar Jena )
Nachdem ich für mein 3Dcopterprojekt auf der Suche nach Propellern mit gutem reverse Schub bin hab ich mal wieder am Motortester weitergemacht. Eigentlich habe ich im netz nur gefunden wie man mit EXEL den Comport auslesen kann. Das ist dabei rausgekommen:
externer Link:
User image

externer Link:
User image

Hier die alte Version https://images1-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http://i2.ytimg.com/vi/xSZ2Ubt1B2o/hqdefault.jpg&container=focus&gadget=a&rewriteMime=image/*&refresh=31536000&resize_w=497

Und die neue mit EXEL http://youtu.be/lJYMy3XCLKw

Wie man sieht stehen bei den EPP nur 30% Schub für den Rückenflug zur Verfügung. Wie man hier sieht:

http://www.youtube.com/watch?v=7cpu69-nb6s

Neues Thema Antwort

Seite: 1

MikroKopter - Forum » Subversion - Projekte » Motortester