Forum: Mikrocontroller und Digitale Elektronik Warum Hallsensoren per InputCapture/OutputCompare einlesen?


von XSt E. (xstefx)


Lesenswert?

Hallo zusammen,

ich habe mal eine Frage die mir nicht so ganz klar wird.
Ich verwende momentan den uC Freescale S12ZVM und lesen mit einem 
dementsprechenden Evalboard die Signale der Hallsensoren über die ICOC 
Eingänge ein.

Ich hab das Signal mit dem Oszi gemesen und festgestellt dass es keine 
idealen Rechteck Impulse sind (was ich mir schon dachte) aber ich hätte 
eher eine Sinusähnliche Funktion erwartet. Ein Auswertung mittels DIO 
erfolgte nur dann wenn das Magnetfeld den Sensor direkt belegte.

Bei meinem BLDC handelt es sich um einen 8-poligen Motor und nach 6 
Kommutierung beträgt die mechanische Umdrehung 1/4 (90°9 und die 
elektrische demnach 1 ganze. Somit schließe ich darauf dass die drei 
Hallsensoren im Winkel von 30° zueinander angeordnet sind...sehe ich das 
richtig?

Weiterhin besteht für mich die Frage warum TIMER die Hallsensoren 
auslesen die zeitmessung des HIGH Impuls müsste doch mit dem DIO genauso 
funtkionieren. Das Problem was bei mir besteht ich kann nur auf 3/4 
Timer zugreifen und ich müsste es irgendwie schaffen einen Timer von den 
Hallsensoren zu entkoppeln um ein Scheduling mit diesem freien Timer zu 
entwerfen.


Hat jemand eine Idee bzw. kann mich ein bisschen anschlauen 
diesbezüglich?

Schonmal danke im vorraus.

von Bernd K. (prof7bit)


Lesenswert?

XSt Efx schrieb:
> Weiterhin besteht für mich die Frage warum TIMER die Hallsensoren
> auslesen

Vielleicht (nur mal so ins Blaue hinein geraten) weil Du das genau so 
und nicht anders entworfen und programmiert hast?

von XSt E. (xstefx)


Lesenswert?

Ich orientiere mich daran an dem vorgegebenen Anschluss der Hallsensoren 
sowie einen Referenzprojekt in dem es so gemacht wurde. Die von mir 
durchgeführten Änderungen auf einen digitalen Eingang brachten ja nicht 
den gewünschten Erfolg also muss es einen entsprechenden unterschied 
geben.

Die Programmierung findet in Simulink statt mit der zugehörigen Toolbox 
also im Rahmen des Model Based Design.

von Schaulus Tiger (Gast)


Lesenswert?

Kann man nicht den Timer Overflow Interrupt TOF für den Scheduler 
benutzen? Aber man kann auch unbenutzte SCI- oder SPI-Sender als Timer 
missbrauchen.

von XSt E. (xstefx)


Lesenswert?

Schaulus Tiger schrieb:
> Kann man nicht den Timer Overflow Interrupt TOF für den Scheduler
> benutzen? Aber man kann auch unbenutzte SCI- oder SPI-Sender als Timer
> missbrauchen.

Das klingt interessant. Lösen die denn auch ein Interrupt aus?
Kannst du evtl. das etwas genauer beschreiben?

Ich bin halt sehr auf die Toolbox angewiesen....das bedeutet ich kann 
den Code nicht viel beeinflussen.

Ich hätte noch die Möglichkeit mittels einer PTU ein Interrupt zu nutzen 
aber wenn ich das richtig verstanden habe mach diese das nur in 
Verbindung mit dem PWM Signal und das variiert ja je nach 
Geschwindigkeit.

Hat den zufällig jemand Erfahrung mit dem Freescale Motor Control 
Development Toolbox?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

XSt Efx schrieb:

> Weiterhin besteht für mich die Frage warum TIMER die Hallsensoren
> auslesen

Weil sie es können und weil das die CPU erst mal nicht weiter belastet.
Die CPU kann in der Zwischenzeit andere Dinge machen.

So ein BLDC Controller besteht ja nicht nur daraus, dass er Hallsensoren 
überwacht.

Ganz abgesehen davon ist es mit den Timern eine simple Sache die 
größtmögliche Genauigkeit in den ermittelten Zeiten zu erhalten.

> Hallsensoren zu entkoppeln um ein Scheduling mit diesem freien Timer zu
> entwerfen.

Die Kommutierung ist wichtiger als ein Scheduling.
Arbeite in der Hauptschleife reihum deine anstehenden Jobs ab. Wenn von 
denen mal einer ein paar µs länger braucht, dann wird das kein Beinbruch 
sein. Wenn aber deine Zeiten nicht stimmen und auf Grund dessen die 
Kommutierung versagt, dann verschluckt sich der Motor. Und das ist 
praktisch immer ein Beinbruch.

von Schaulus Tiger (Gast)


Lesenswert?

XSt Efx schrieb:

> Das klingt interessant. Lösen die denn auch ein Interrupt aus?

Ja. Sobald der Free Running Counter überläuft, wird das TOF im 
TFLG2-Register gesetzt. Das löst einen Interrupt aus, wenn du das 
Interrupt Enable TOI im TSCR2 gesetzt hast. In der Interrupt-Routine 
musst du das TFLG2 lesen und direkt wieder zurückschreiben um das Flag 
zu löschen.

Zur Not kannst du den Zählerstand TCNT auslesen und damit genaue 
Verzögerungen in der Hauptschleife erzeugen.

> Ich bin halt sehr auf die Toolbox angewiesen....das bedeutet ich kann
> den Code nicht viel beeinflussen.

Das dachte ich bei meinem aktuellen Programm anfangs auch. Inzwischen 
habe ich alles selbst neu programmiert.

von XSt E. (xstefx)


Lesenswert?

Erst einmal vielen vielen Dank für die kompetente Hilfe. Ich hoffe ihr 
steht mir weiter mit Rat und Tat zur Seite. Der Hintergrund dieses 
Projekts ist meine Bachelorthesis ich habe jedoch Studiumsmässig einen 
anderen Schwerpunkt gewählt deswegen ist die uC Ebene für mich relativ 
neu.

Und der Thesiszeitraum beträgt leider nur 8 Wochen.

Ich hoffe ich kann weiter auf eure Hilfe hoffen.

In der Thesis geht es nun grundlegen darum die Toolbox zu evaluieren 
bzw. den daraus entstehenden Code.

Ein Scheduling in Echtzeitform sollte auf jeden Fall mit drin sein. Ich 
habe den auch Scheduler soweit auch schon implementiert nur ist mir 
später dann aufgefallen dass einer der Hallsensoren aufgrund des 
verwendeten Timer nicht mehr funktionierte.

Der Scheduler sowie die die Motorfunktion hat Grundlegend funktioniert 
jedoch fehlten halt 3 Kommutierungen. Die jeweilige Phasenansteuerung 
geschieht jedoch in deren Abhängigkeit.

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.