Gast
#4416703
Hallo, ich möchte ein Motorsteuergerät ohne Motor betreiben um die Auswirkungen gewisser Einstellungen überprüfen zuz können. Ich habe ein Texas Instruments LaunchPad mit einem MSP430G2 Mikrocontroller und habe auch schon ein paar einfache Programme geschrieben. Ich möchte nun die Motordrehzahl simulieren, die am echten Motor von einem Hallsensor erzeugt wird. Um auch den OT des Motors zu erkennen hat das Geberrad des Motors 60-2 Zähne, also eig 60 Zähen, es fehlen aber zwei. Außerdem gibt ein zweiter Hallsensor alle 2 Motorumdrehungen noch ein Signal ab. Ich habe die entsprechende Programmierung auch schon in Energia hinbekommen. Habe es langsam laufen lassen und LED's blinken lassen. Das sieht soweit gut aus. Für mich ergeben sich 2 Fragen: 1. Ich benötige etwas Relais-ähnliches um die Impulse des IC's auf das Steuergerät übertragen zu können. Am Steuergerät ist eine 12V Versorgungsspannung und ein Signaleingang. Das IC kann ja nur 3V. Mein Problem ist die Anzahl der Schaltung. Ich habe 60 Schaltungen pro Umdrehung. Bei einer Motordrehzahl von 8000 U/min also 8000 Schaltungen/s. Kann das mit einem Optokoppler umgesetzt werden? 2. Ich habe hier in einem Thread gelesen, dass Arduino-Programme da auch schon an die Grenze kommen, da der Befehl digitalWrite wohle sehr langsam ist. Wir kann ich das umgehen? Sorry für die hemdsärmlige Fragestellung, aber ich bin Maschinenbauer und so langsam mit meinem Latein am Ende! Schon mal vielen Dank vorab für die Hilfe! So lautet aktuell mein Sektch: const int SIGNAL = GREEN_LED; const int SIGNALHALL = RED_LED; int count = 0; int counthall = 0; int schritt = 1; int zaehne = 58; int luecke = 2; int zaehne_ges = zaehne + luecke; // drehzahl in U/min int drehzahl = 2000; int inkrement = 1000/(2*drehzahl/60*zaehne_ges); void setup() { // put your setup code here, to run once: pinMode (SIGNAL, OUTPUT); pinMode (SIGNALHALL, OUTPUT); } void loop() { // put your main code here, to run repeatedly: digitalWrite(SIGNALHALL, LOW); if (count < zaehne) { digitalWrite(SIGNAL, HIGH); delay(inkrement); digitalWrite(SIGNAL, LOW); delay(inkrement); count += schritt; } if (count == zaehne) { if (counthall == 2) { digitalWrite(SIGNALHALL, HIGH); counthall = 0; } delay (2*luecke*inkrement); count = 0; counthall += schritt; } }