Positionierungssystem fr motorbetriebene Tafeln Andreas Glausch Andreas Kerlin
Positionierungssystem für motorbetriebene Tafeln Andreas Glausch, Andreas Kerlin, David Weese
Produktidee Problem - optimale Positionierung von Tafeln in Mehr-Tafel-Anlagen - vollständige Nutzung der Tafelflächen Ziel - vereinfachendes Kontrollsystem für automatische Positionierung der Tafeln konkret - Nutzung vorhandener Tafelsysteme - Design eines Eingabepanels - Möglichkeit der voll- und halbautomatischen Tafelpositionierung - optionale Verwendung von Reinigungssystemen - zyklisches Bereitstellen der Tafeln
Externe Schnittstellen Tafel-Schnittstelle - max. 4 x 4 Tafeln mit Schrittmotorik und jeweils einem Eingang für Richtung MRi und Takt MTi - je Tafel zwei Sensoren SOi und SUi, die genau dann 1 liefern, wenn Tafel i den oberen bzw. unteren Rand erreicht hat - Nummerierung von hinten nach vorn, dann von links nach rechts, hinterste 0 4 8 Tafelposition durch 4 teilbar, 1 5 9 2 6 10 ( Beispiel nebenstehend ) Anforderungen ans externe Tafellöschsystem (TLS) - 4 Eingänge für maximal 16 Tafeln - 1 Eingang zum Starten der Löschaktion - 1 Ausgang, der Abschluss der Aktion signalisiert
Control-Panel Line. A Line. B Line. C Line. D A 1 A 2 A 3 A 4 B 1 B 2 B 3 B 4 C 1 C 2 C 3 C 4 D 1 D 2 D 3 D 4 Col 2 Col 3 Col 1 Up Down Tafel Col 4 Holen Get Weiter Löschen Auto Eingänge des Prozessors Clear
Anschlüsse Eingänge: • vom Control Panel 13 Signale: - 8 Tafelbits (Line. A, . . . , Line. D, Col 1, . . . , Col 4) - 5 Aktionsbits (Auto, Up, Down, Get, Clear) • vom Tafellöschsystem: 1 Fertig-Signal • Reset • Stromversorgung 5 V Ausgänge: • 16 LEDs: L 0, . . . , L 15 • 16 mal MRi und MTi ( i = 0. . . 15) • zum Tafellöschsystem: - 4 Tafelbits - 1 Löschbit
Der Prozessor Speicheraufbau ROM (32 kb) (Programm) (EPROM) 0 x 0000 RAM (16 kb) (Daten) 0 x 8000 Ein-/Ausgabe 0 x 7 FFF 0 x. BFFF 0 x. C 000 0 x. FFFF Adresse Lesezugriff Schreibzugriff 0 x. C 000. . . 0 x. C 00 F (i = 0. . . 15) Bit 0 = SUi , Bit 1 = SOi , Bit 2 -Bit 7 = 0 Bit 0 = MTi , Bit 1 = MRi , Bit 2 -7 unbenutzt 0 x. C 010 Bit 0. . . 3 = Line. A. . . D, Bit 4. . . 7 = Col 1. . . 4 Bit[i] = Li 0 x. C 011 Bit 0 = Down, Bit 1 = Up, Bit 2 = Get, Bit 3 = Clear, Bit 4 = Auto, Bit 5, 6, 7 = 0 Bit[i] = Li+8 0 x. C 020 (TLS) Bit 0 = Fertig Bit 1 -Bit 7 = 0 Bit 0. . 3 = Tafel i, Bit 4 = Löschbit, Bit 5 -Bit 7 unbenutzt 0 x. C 030 Anzahl Tafelzeilen unbenutzt 0 x. C 031 Anzahl Tafelspalten unbenutzt sonst unbenutzt
Befehlsformat 16 Bit-Ein-Adressmaschine Befehlsaufbau (1 Byte) 5 Bit 1 Bit 2 Bit Opcode Mode Operand Mode Beschreibung 0 direkt (Register oder Immediate) 1 indirekt (registerindirekt oder absolut) Operand Beschreibung Befehlslänge 00 Register A 01 Register B 1 Byte 10 Register C 11 Immediate Beispiele: add B Operand = 01 jmp 0123 h 11 sub [C] 10 3 Byte Mode = 0, Operand = Mode = 1, Operand =
Befehlssatz Opcode Befehl Beschreibung 0 ADD A = A + <Operand> 1 SUB A = A - <Operand> 8 OR A = A | <Operand> 9 AND A = A & <Operand> 10 NOT A = ~A 11 SHL A = A << 1 12 SHR A = A >> 1 16 LD A = <Operand> 17 ST <Operand> = A 24 JMP PC = <Operand> 25 JZ IF (Z = 1) PC = <Operand> 26 JC IF (C = 1) PC = <Operand> 27 JNZ IF (Z = 0) PC = <Operand> 28 JNC IF (C = 0) PC = <Operand> 31 NOP No Operation nicht vorkommende Opcodes entsprechen NOP
CPU - Layout ALSU B CF ZF C 20 Steuerleitungen austauschbar IR PC PC- Inkrement ROM RAM Memory Controller (nullterminiert) Mikrosteuerwerk INTERNER BUS Flag s: Akku MAR MDR I/O R W Leitungen mit werden vom Mikrosteuerwerk ein- oder ausgeschaltet Registergrößen: A, B, C, PC, MAR, MDR - 16 Bit IR - 8 Bit (oberen 8 Bits des Busses werden ignoriert)
ALSU (Arithmetic. Logic. Shift. Unit) Bus s 3 a b c s 2 ALSUDecoder s 1 s 0 ALU al BA al rs rs RSU (Right Shifter) ALSU-Decoder: Befehl Akku. Flags a b c s 3 NOP 0 0 0 x x x 0 0 ADD 0 0 1 1 0 0 1 0 SUB 0 1 0 AND 0 1 1 1 0 0 0 1 1 0 OR 1 0 0 1 1 1 0 NOT 1 0 0 1 1 0 LSHIFT 1 1 0 1 0 RSHIF T 1 x x x 0 1 1 1 s 2 s 1 s 0 BA al rs - ALU benutzt parametrischen Carry-Skip. Adder aus vier 4 -Bit-Carry-Lookahead-Addern (c 0 = 0)
Mikrosteuerwerk IR Dekodierschaltung Flags K decode PC Resetleitung Inkr. (/decode) Steuerspeicher (512 x 20) Steuerleitungen Dekodierschaltung K setzt PC entsprechend IR und Flags. (Bsp. : JNZ führt mit gesetztem ZF NOP aus, JNZ mit gelöschtem ZF JMP. ) Am Ende jeder Instruktion wird ein Fetch und ein Decode ausgeführt (siehe Microcode)
Memory Controller austauschbar 15 Bit Adresse ROM 16 Bit Adresse MAR 16 Bit Daten MDR 16 Bit Daten R Memory 14 Bit Adresse RAM R 16 Bit Daten Controller W 6 Bit Adresse I/O R 8 Bit Daten W Read Write MAR-Bits 15 und 14 Speicherbereic h Adressbits 0 x ROM 14. . . 0 10 RAM 13. . . 0 11 I/O 5. . . 0 - R = 1 bedeutet Lese- und W = 1 Schreibzugriff (R W)
Microcode Reset Schritt Aktion 1. Ain, Bin, Cin, PCin 2. ALU: OR (löscht CF, setzt ZF) 3. PCout, MARin 4. MDRout, IRin, PCinc, decode LD [B] Schritt Aktion 1. Bout, MARin, R 2. MDRout, Ain 3. PCout, MARin 4. MDRout, IRin, PCinc, decode, ADD 0042 h Schritt Aktion 1. PCout, MARin, R 2. MDRout, ALU: ADD, PCinc 3. PCinc 4. PCout, MARin 5. MDRout, IRin, PCinc, decode
NOP und unerfüllter bedingter Sprung Jxx Reg Schritt Aktion 1. PCout, MARin 2. MDRout, IRin, PCinc, decode JMP 0123 h und erfüllter bed. Sprung Jxx Imm Schritt Aktion 1. PCout, MARin, R 2. MDRout, PCin 3. PCout, MARin 4. MDRout, IRin, PCinc, decode ST [1234 h] Schritt Aktion 1. PCout, MARin, R 2. MDRout, MARin, PCinc 3. Aout, MDRin, W, PCinc 4. PCout, MARin 5. MDRout, IRin, PCinc, decode
Assemblercode Definitionen (TASM Syntax) motor sensor hoch runter aus zeilen spalten #DEFINE #DEFINE . EQU 0 c 000 h 3 1 0 (0 c 021 h) (0 c 022 h) MOV(x, y) ADD(x, y) SUB(x, y) INC(x) DEC(x) LD LD LD ; () entspricht indirekt xST y xADD yST xSUB yST xADD 1ST xSUB 1ST x x Initialisierungsphase (Auszug) LD tafel ADD sensor ST C downloop: LD (C) AND 1 JNZ downend MOV (runter, (C)) JMP downloop downend: MOV (0, B) ; Tafelnummer nach A laden ; A enthält Tafelsensoradr. ; A->C ; Tafel ganz runter fahren ; teste Bit 0 = SUTafel ; stoppe, wenn gesetzt ; Motoradr. gleich ; Sensoradr. ; Zähler auf Null setzen
uploop: LD AND JNZ MOV INC ; Tafel ganz hoch fahren (C) 2 upend (hoch, (C)) (B) JMP uploop upnend: MOV (B, zaehler) ; teste Bit 1 = SOTafel ; stoppe, wenn gesetzt ; Motoradr. gleich ; Makro. Nicht mit indirekt ; verwechseln! ; Sensoradr. ; enthält Anzahl der ; Schrittmotorsteps einer ; Tafel(von oben nach unten) In der Initialisierungsphase werden alle Tafeln herunter gefahren, und beim Wiederhochfahren die Einzelschritte jeder Tafel gezählt (für spätere Berechnungen notwendig).
Initialisierung: Programmablauf Alle Tafeln nach unten fahren und Istwerte auf 0 setzen n – Anzahl der Tafeln n Sollwerte (Zielpositionen) n Istwerte – (aktuelle Positionen) n Maxwerte – (maximale Positionen) n Positionen (Tafelreihenfolge) aktuelle Tafel Alle Tafeln nach oben fahren Dabei Istwerte erhöhen Maxwerte auf Istwerte setzen Sollwerte berechnen Istwerte anpassen (evtl. Motoren bewegen) Tafeltaste gedrückt? ja neue aktuelle Tafel nein Panel-Eingabe abfragen „Weiter“ gedrückt? aktuelle Spalte rotieren Sollwerte neu berechnen Sollwert für aktuelle Tafel dekrementieren ja nein „Runter“ gedrückt? ja nein „Hoch“ gedrückt? Sollwert für aktuelle Tafel inkrementieren ja nein „Holen“ gedrückt? Sollwert für aktuelle Tafel auf 0 setzen ja nein „Löschen“ gedrückt? Löschvorgang für aktuelle Tafel starten ja nein
Rotation am Beispiel einer 3 x 2 -Tafelmatrix 1. Kapitel 1. Kap. . . 2. Kap. . . 1. Kapitel 2. Kapitel 3. Kapitel 4. Kap. . . 3. Kap. . . Das 7. Kapitel überschreibt das 1. Kapitel.
- Slides: 18