next up previous contents
Next: Steuerung durch einen normalen Up: Regelung des Pendelsystems Previous: Echtzeitsteuerung unter Multitasking-Systemen

Ansteuerung des Pendels

 

Für die Steuerung des Pendels müssen dem Motor fortwährend neue Befehle gegeben werden. Da die Berechnung der Befehle auch einige Zeit in Anspruch nimmt, verwendet man normalerweise eine getaktete Ansteuerung. Bei der Steuerung über das neuronale Netz und vor allem beim Lernen des Netzes ist eine sehr genaue Einhaltung dieses Steuertaktes nötig.

Dazu ist auf der Schnittstellenkarte ein Timer eingebaut, der in einem bestimmten Takt, einstellbar sind 100 Hz bis 10 kHz, Interrupts auslösen kann. Diese Interrupts bewirken im Gerätetreiber das Aufrufen der Interruptfunktion pendel_interrupt(), welche bei jedem Takt einen Steuerbefehl an den Motor abliefert und die aktuellen Werte des Pendelsystems von der Hardware einliest. Hiermit ist sichergestellt, daß die Steuerung genau getaktet abläuft.

Der Gerätetreiber muß außerdem die Parameter der Hardware umrechnen, da das Programm ein anderes Format verwendet. Die Hardware liefert Winkel im Bereich von -2000 bis 2000, wobei der Winkel des Pendels relativ zum Antriebsarm gemessen wird. Das Programm bekommt die Winkel über das Device im Bereich von tex2html_wrap_inline3484 bis tex2html_wrap_inline3486 bezüglich der Vertikalen. Die vom Steuerprozeß benötigte Winkelgeschwindigkeit wird auch von der Interruptfunktion berechnet:

eqnarray508

Die Variable VCOUNTER wird in der Headerdatei pendulum.h definiert.

Die Steuerimpulse, die vom Interrupt an die Hardware gegeben werden, müssen vorher vom Programm berechnet werden und rechtzeitig zum Interrupt bereitstehen. Falls nicht rechtzeitig ein neuer Steuerbefehl an den Gerätetreiber übergeben wurde, wird nichts gesteuert. Falls mehrere Interrupts hintereinander ohne Steuerung auftreten, bewegt sich das Pendel in dieser Zeit ohne Steuerung, Totzeit genannt, als freischwingendes Pendelsystem. Wenn die Totzeit einen von der Stellung des Antriebsarms und der Kraft des Motors abhängigen Grenzwert übersteigt, wird das Pendel instabil und fällt um. Aus diesem Grund synchronisiert der Gerätetreiber das Programm, was so funktioniert:

Bei einem Lesezugriff auf das Device wird das Programm mit der sleep() Funktion schlafen gelegt, bis neue Werte der Parameter durch die Interruptfunktion gelesen wurden. Diese weckt mit wakeup() das Programm wieder auf. Das Programm berechnet nun aus den gerade gelesen Werten den neuen Steuerimpuls und übergibt ihn an den Gerätetreiber. Danach versucht es wieder neue Werte zu lesen. Hier wird es nun wieder schlafen gelegt usw.. Die Interruptfunktion schickt den vom Programm übergebenen Steuerimpuls an die Hardware, bevor es das Programm wieder weckt. Während das Programm schläft, können im System andere Prozesse laufen. Das Zusammenspiel der einzelnen Teile ist in Abbildung gif dargestellt. Im oberen Bereich ist das Pendelsystem mit seinen Hardwareparametern dargestellt. Der von der Schnittstellenkarte erzeugte Takt bewirkt jeweils einen Interruptaufruf im Gerätetreiber, welcher die Parameter des Pendelsystems für das Programm umrechnet, die vom Programm berechneten Steuerparameter an den Motor übergibt und den Programmzugriff über das Device synchronisiert. Das ganze Verfahren kann nur dann in der beschriebenen Weise ablaufen, wenn das Programm bis zum nächsten Interrupt mit der Berechnung fertig ist. Andernfalls würde es nicht mehr mit den Steuerimpulsen nachkommen, und es würden regelmäßig Interrupts ohne Steuerung auftreten.

   figure522
Abbildung: Zusammenspiel der einzelnen Teile bei der Steuerung


next up previous contents
Next: Steuerung durch einen normalen Up: Regelung des Pendelsystems Previous: Echtzeitsteuerung unter Multitasking-Systemen

Marius Heuler
Tue Jan 7 12:11:50 MET 1997