Forum: Mikrocontroller und Digitale Elektronik Hall Sensorsignal für Motorsteuergerät simulieren


von Patrick (Gast)


Lesenswert?

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;


}
}

von Tom E. (Gast)


Lesenswert?

Patrick schrieb:
> 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?

Dann solltest du auch mal einen anderen Thread lesen, in dem beschrieben 
ist, wie du unter Arduino ein Port-Bit auf einem µC direkt setzen kann, 
ohne den ganzen Zirkus zu aktivieren, den digitalWrite() noch so 
veranstaltet. Das macht die Sache deutlich performanter.

von Anja (Gast)


Lesenswert?

Hallo,

zu 1.

es gibt schnelle Optokoppler (6N137) die das problemlos schaffen.
Ein normaler Optokoppler kann unter Umständen das Signal zu stark 
verfälschen.
Insbesonders wenn für Start-Stopp Systeme ein vorwärts/rückwärts 
Drehzahlsensor simuliert werden soll. (45/90 us Impulsbreite).

Die schnellen Optokoppler brauchen eine zusätzliche Versorgung. Das 
Steuergerät sollte aber irgendwo auch eine 5V Sensorversorgung haben.

Aber eigentlich braucht man keinen Optokoppler sondern "nur" eine 
(kurzschlußfeste) Open Drain Endstufe.

Normalerweise würde man die CCP Units für die Impulserzeugung verwenden, 
und die nächsten Pulse dann per Interrupt nachladen.
Aber mit Deinem Ansatz bist Du davon noch sehr weit entfernt.

Es gibt für das Problem "Drehzahlmühle" auch Fertiglösungen:
http://www.smart-testsolutions.de/Sondersimulationstechnik.html

Früher hat man einfach ein Eprom mit der Drehzahlspur programmiert und 
dann mit einem einfachen Zähler und einem VCO ausgelesen.

Gruß Anja

von Patrick (Gast)


Lesenswert?

Vielen Dank für die Rückmeldungen.
Ist mir klar, dass es das auch fertig gibt, aber ich will ja auch was 
lernen! ;-)
Ein Link zu einer Open Drain Endstufe wäre super! Vielen dank!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Denkbar wäre auch eine Hardware PWM als Pulsgeber und aktiviertem OVF 
Interrupt. Die OVF ISR erzeugt dabei nach 59 Durchläufen das 
Indexsignal, bzw. unterdrückt die PWM für den fehlenden Zahn und zählt 
nebenbei auch noch den Zähler hoch, der alle 2 Runden das Signal des 
2ten Sensors erzeugt.

Über den Timer kann man dann auch verschiedene Drehzahlen des Motors 
simulieren, wenn man ihn im CTC Mode oder mit ICR als TOP einsetzt - 
vorausgesetzt, der MSP430 kann sowas. Würde mich aber wundern, wenn TI 
so etwas nicht vorgesehen hat.

: Bearbeitet durch User
von Thomas F. (igel)


Lesenswert?

Über Jahrzehnte wurden analoge Hall-Sensoren an Motorsteuergeräte 
angeschlossen. Evtl. werden diese in manchen Autos immer noch verwendet.
Diese geben ein analoges Sinussignal aus dessen Amplitude sich noch mit 
der Drehzahl verändert.

http://old.fh-kaernten.at/fileadmin/media/systems/iscd/hall_sensor_ic_2.jpg

Leider schreibt der TE nichts über sein Steuergerät, so weiß man nicht 
welche Signalform eigentlich gefordert ist.

von Patrick (Gast)


Lesenswert?

Ein HALL-Geber erzeugt ein Rechtecksignal.
Induktivgeber erzeugen ein Sinuskurve.
Ich muss aber wie bereits erwähnt einen Hall-Sensor simulieren.

Ich bin auf jeden Fall schon einmal von der großen Anzahl an Antworten 
überrascht, vielen DAnk dafür.

Was mir leider noch fehlt ist eine konkrete Hardware Empfehlung um das 
Signal aus dem IC auf das Steuergerät zu übertragen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Patrick schrieb:
> Was mir leider noch fehlt ist eine konkrete Hardware Empfehlung um das
> Signal aus dem IC auf das Steuergerät zu übertragen.

Wenn du die originalen Hallgeber zur Verfügung hast, könntest du sie mit 
E-Magneten ansteuern, die der MSP430 steuert. Dann hast du die 
Originalsensoren auch gleich im Testaufbau und eine Änderung des 
Steuergerätes bzw. Eingriff in die Verkabelung wäre nicht notwendig. 
Lediglich der MSP braucht dann kräftige Endstufen wie Steppertreiber 
oder ULN Typen.

Ansonsten gehen natürlich Optokoppler wie ein PC900 oder 6N137, sofern 
sie nur ein wenig schneller als ein CNY17 sind.
Die LED sollte mit jedem MC anzusteuern sein. Ein Low Power MC wie der 
MSP430 braucht evtl. einen Treibertransistor, aber das weisst du besser 
als ich.

: Bearbeitet durch User
von Patrick (Gast)


Lesenswert?

Ich hab leider immer noch keine konkrete Lösung für mein Hardware 
Problem.
Wer kann mir da helfen?
Vielen Dank im Voraus!

Beitrag #6364870 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.