Motor , Regler, Luftschrauben tester und Auswuchtmaschine Kanalimpuls und I2C Ansteu

Status
Nicht offen für weitere Antworten.

fdietsch

Erfahrener Benutzer
#1
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..

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.




 

Nabazul

Erfahrener Benutzer
#2
wow coole sache! Wie funktioniert denn das mit dem stromsensor ? Einfach stromkabel durch das loch oder muss man das da noch irgendwie rumwickeln ?
 

fdietsch

Erfahrener Benutzer
#3
wow coole sache! Wie funktioniert denn das mit dem stromsensor ? Einfach stromkabel durch das loch oder muss man das da noch irgendwie rumwickeln ?
Eigentlich nur durchstecken wenn ich es richtig verstanden habe verdopelt sich bei 2 fachen durchstecken der ausgegebene Wert.
 

fdietsch

Erfahrener Benutzer
#4
Hab hier lange nix mehr geschrieben. Inzwischen Kann der Tester Daten Messen, an den Pc senden , dort ins Exel schreiben und eine Tabelle erstellen.


[video=youtube;xSZ2Ubt1B2o]https://www.youtube.com/watch?v=xSZ2Ubt1B2o[/video]

Das Processing im Video habe ich inzwischen verworfen ich starte den test jetzt aus dem Exel.
 

zerosight

Erfahrener Benutzer
#5
Schick :)

Für den Wägesensor muss keine unschuldige Waage ihr Leben aushauchen, das gibts auch direkt in China: http://www.goodluckbuy.com/3kg-electronic-scale-weight-sensor-module-0-1g-w-lcd-display-module.html

Dein Klebestreifen zur Messung der Drehzahl erinert mich verdächtig an meine Auswuchtversuche. Umgekehrt bedeutet so ein Klebestreifen auch schon meist eine Unwucht, wenn er wahllos aufgeklebt wird. Alternativ dürfte ein Spannungsteiler an einem der Motorkabel funktionieren oder ein LDR, der in einem Röhrchen, recht dicht hinter dem Propeller platziert wird.
 

fdietsch

Erfahrener Benutzer
#6
Für den Wägesensor muss keine unschuldige Waage ihr Leben aushauchen, das gibts auch direkt in China:http://www.goodluckbuy.com/3kg-elect...ay-module.html
Viel zu teuer das war eine waage Ebay 10€

Dein Klebestreifen zur Messung der Drehzahl erinert mich verdächtig an meine Auswuchtversuche. Umgekehrt bedeutet so ein Klebestreifen auch schon meist eine Unwucht, wenn er wahllos aufgeklebt wird.
Ist nur weißer und schwarzer Edding. Aber das mit den Auswuchten funktioniert bei nicht . Da bekomme ich kein deutliches signal daß ich dies zuordnen könnte. Daher benutze ich wieder die Finger an den Ausleger halte Methode. Ist mit einem speziellen Meßfinger kein Problem.

Alternativ dürfte ein Spannungsteiler an einem der Motorkabel funktionieren oder ein LDR, der in einem Röhrchen, recht dicht hinter dem Propeller platziert wird.
Manchmal bin ich doch Blind. Den Lichtstrahl durch den Propellerkreis zu schicken darauf bin ich nicht gekommen.

Die Motorkabel Variante ist natürlich auch eine gute Idee , Man muß nur die Polzahl der Motoren beachten .
Stört da das PWM der Pahsen ?
 

zerosight

Erfahrener Benutzer
#7
Cool, haste mal den Link zu der entsprechenden Waage? Und wie steuerst Du die Waage an bzw. bekommst die Informationen zum Schub?

Die beiden alternativen Varianten für die Drehzahl habe ich selber noch nicht realisiert, sondern sind Bestandteil entsprechender Geräte bei mir. Hier das Teil mit einem LDR: http://www.giantshark.co.uk/product/171033/gtpower-rc-tachometer-no33a und die Sache mit dem Fühler an einer Phase hat mein Eagle Tree eLogger (http://www.eagletreesystems.com/index.php?route=product/category&path=62&limit=100). Ich nehme an, dass das Ganze einfach nur möglichst hochohmig sein muss um die Messvorgänge bei manchen ESCs nicht zu beeinflussen. Um das eigentliche PWM-Signal mache ich mir weniger Sorgen. Die Polzahl muss sicher beachtet werden. Desswegen finde ich die Sache mit einem dünnen Röhrchen und einem LDR etwas neckischer. Auch wenn ich vermute, dass das nicht in jeder Situation gut funktioniert. Die Auswertung des LDR sollte auf jeden Fall adaptiv funktionieren, also konkret die Helligkeitsunterschiede während der Messung berücksichtigen und nicht von statischen Unterschieden ausgehen. Bei sehr dünnen und lichtdurchlässigen Plastiklöffeln und sehr viel Licht dürfte das ggf. in die Hose gehen.

Zum Auswuchten dürfte Dein Prüfstand ziemlich ungeeignet sein, da ein Prüfstand eher so steif wie möglich sein sollte.

Einen möglichen Aufbau für einen Auswuchtstand würde ich mir etwa so vorstellen: Als Basis eine 50x50 cm große MDF-(Küchenarbeits-)Platte . Darauf der möglichst steife und Massearme Teststand, gelagert auf Gelwürfeln. Das könnte ein 10x10 cm Sperrholzplättchen sein, auf dem in der Mitte, zur Verlängerung des Hebels, ein ca. 10 cm hoher Arm (20 mm Alurohr mit aufgesetzter Motorbefestigungsplatte) steht. Der ACC und der LDR ist dann fest mit dem Motorträger verbunden, Der Motor bläst nach oben. Das sollte keine Vibrationen unterdrücken und ordentliche Messgrößen ermöglichen - dazu noch ein Meßfühler auf einer Phasenleitung, ergibt: Drehzahl (LDR+RPM-Fühler), Lage des Propellers (LDR), Stärke und Lage der Unwucht (ACC x/y), Polzahl (Parameter). Irgendein findiger Kopf könnte daraus vermutlich die Lage der Unwucht und auch möglicherweise das notwendige Gewicht (+/-) ermitteln und entsprechend anzeigen. Z.B. mittels I²C LED-Ring wie diesem hier: http://www.adafruit.com/products/1586.
 

fdietsch

Erfahrener Benutzer
#8
Waage war der sehr ähnlich eine gleiche finde ich im Moment nicht.
http://www.ebay.de/itm/Kuchenwaage-..._Heimwerker_Dampfreiniger&hash=item2ecbe89ef7

Erst mal schlachten drinnen ist die Wägezelle (aluteil) mit 4 kabeln . Eigentlich ändert die Waage die Wiederstände einer wird größer und einer kleiner bei belastung. Diese wiedertandsänderungen sind sehr klein . Daher hatte ich mir schon einen OPvertärker bestellt. Aber als ich die Wage geschlachtet habe war auf der Platine schon ein OPV drauf da brauchte ich nur noch das Ausgangssignal auf einen Analogeingang des Arduino legen ;)

Mit dem Auswuchten auf dem Prüfstand habe ich abgeschrieben. Ich mache es jetzt am Copter mit dem Motor und Propeller als Kombination . Warum - so kann man den Prop noch mal drehen und die Unwucht des Motors und des Prop sich gegenseitig zumindest ein wenig ausgleichen lassen. Den rest dann abschleifen oder mit Tesa.

Die Drehzahl kann man sicher auch mit einem Fototransistor abnehemen man darf dann aber keine Netzlampen betreiben.
 

Ori0n

Back again
#9
Cooles Projekt, gefällt mir.

Habe auch schon seit geraumer Zeit vor, mir einen Prüfstand zu bauen. Die Ansteuerung über ein Poti ist eine gute Idee, ich denke das werd ich übernehmen :D
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten