Home
Ausarbeitung - Institut für Betriebssysteme und Rechnerverbund
Contents
1. SUNISLWU9H SINdUI My SUTMoOY 4dN 1199UT O TOUN LUO 9 SUMNMJOAJS y BUSTI b 00 O O man xf ab ok 00 o O oo o xf ao GO E oo Q o oo oo GQ G 62 oo 62 c an c oi vi NN a MO 0 be o o O ri o GO bh WH 44 1eo1q qdniroquj u syogu INJ usJ omue 0 dowry 4184S T OHL 180 se 8 jjdinejop s ndiy se 3 0 se 3 2 0 1q Snq p 3 yt JJIIM JdANIJOJUT u urt 19porm g T 0 uoa U9JJ91INZ IY91IU 1Oq 19UIJ ssep JISPULJISA y nejop 18 91q 3un0970AHT S OAIOG INJ UdjiaMmue 0 JOU Y1e9g T ML HDIH LUOT LNO dOIS t q Bom 3qr lq jeus g zdoqsj JI cates yea q guno97o0A19Ss OAIOG INJ 0 IWILL 31638 il ML HOIH GSLHO LNO 10do9sj JI 3 nejop Z oseo 49 EO 69 EO TS og 67 Sr AY Dr up EE EE ey DE 6 45 A Listings ZY ur uinjod syoodxa 192 r Ar sd TIPO po uor un ZHN 11 OSOA Ss IppV HALA AON 914 LOOHNA oui wsepus euseid t 144 HOZ LON THXNV INV NJ AON HOJHAO TIVO CH TV AON H20O TU AON 1177 011 AON 2444 AON 94 TH AON HOZ AON use ewse d eyepAW 1ey9 pouStsun ssoippe yur pousisun oyAgqeyequieiZ01g sev pousisun juoru ysuos 00x0 Uanyer u l os rp usyeq eyepfu
2. C12 O 0 33uF o 02 100nF LED1 e 78505 o GORRIEN jo Gb 9000000 k a 10005 Q F GE oz ER 9000000 0000900 EI JP1 DDDDDE Ki 22 CONS CONG AKT V 5 las 8000008099 00000 Ports 120 58 lt C 5082 LN Be 186 ch SEUL EEE lt Je Abbildung B 2 L t und Bestiickungsseiten 49 B Board Fe C S882 LN Be 186 Ch 2cproger WOJORTCT oo T E TY SS885 Abbildung B 4 L tseite 50 T T n us 2Z 2G 9T SOOZ TT 9T 9ed inad qunN 1USUWNIOJ TATA010W GO pun u js issq rn g any INMSUL ZEZXUN ANBTTTI il OT 82 AN T BTI sn zminy TX39 s Td 0X32 8 Td 193 2 Td X3Z1 T Id Z1 8 Td JIN ZX32 9 Td 198 9 Td g s 2 Td 188 EIO yanng assu anar 627 OXL T Ed BINII Z d TINI E Ed EX3JALF Ed XIITLS Ed FHUZEGO TT DKCH TQ6 T 8A 209 06 8d BO sav s ed 909 9 04 209 2 8d don IN qu N3Sdi STu Z Zd VT S Zd Tu g Zd 012 B onas SINd Bd TdT OAJ8S sing 2402 Fed Z OAS 2 2 01838 190915 224 312 Teubrs san EEN ne Z orias aan Na Ged T 0 5
3. pousisun 1108 Uoqoliyoses rp ue ossoipv ssoippe yur p usisun rp ue qselqq u p ur eyepfAur 4q UTS 3qt iq s use 4 Usp ur 974g ule qr rq g eyepAU eyo pous sun ss rppe ur pousisun oyAgeyequieisoid 9 93Ageyequielgold z y Sunsri Y w b O GO 4 NN Y MO O be o oO ri o NOH 19 Jo19uo90AyIy 34qx I ur 3893 oremwag sdiq JNIJNV HIO suos HI8 oseigyomO poo suoryuniq JOMO INJ 0 WACO HN TI OSOA 314 JLOO8NH sep 22498 iii yp np JASHH USuta 2 Jap Iy uoryyung SUNIYNISNY UN 1 tisepua euseid t 144 TIVO H0008 4144 AON HIO TH AON TIF OY HOZ TUXNV AON use ewseid xid0 gasela proa T 19074 0000X0 A9019 0008X0 z 12014 000TX0 T 19074 000220 0 19014 0000x0 2014 SI siayotedg yse y s p YOOTG Up IUYISQT x x Sum OT uoryeoyddy uf sr zyner Jop PUVIURM sioyotedg yse y sop org u ur JUSQT po gasea o yooTgoseso y SunsrT AVI oD N AN N o a zi NN MO O be SO O O o cC ah 0 b 00 47 A Listings 48 B Board 26254 n
4. Herrn cand informations systemtechnik Christian Schr der Matr Nr 2691192 Email ch schroeder tu bs de Aufgabenstellung Im Mikroprozessorlabor des Institutes fiir Betriebssysteme und Rechnerverbund wird das Praktikum Ubiquitous Computing fiir den Studiengang Informations Systemtechnik durchgefiihrt Im Laufe des Praktikums wird auch ein Fahrmodul eingesetzt Fiir dieses Fahrmodul soll eine Motorsteuereinheit entwickelt und implementiert werden Die Motorsteuereinheit soll zwei f r diese Zwecke modifizierte Servomotoren ansteuern welche als R der f r den Antrieb des Fahrmoduls dienen Dabei m ssen sowohl Drehrichtung als auch Geschwindigkeit der Servomotoren einzeln steuerbar sein Zur Drehwinkelbestimmung werden von der modifizierten Elek tronik des Servomotors Pulse geliefert Es ist eine Schaltung zu entwickeln welche als Mikrocontroller den P89C664 der Firma Philips enth lt Desweiteren soll die Schaltung die Schnittstelle zu den Servomotoren enthalten eine serielle Schnittstelle f r Debug und Kontrollausgaben sowie einen I2C Bus zur bermittlung von Befehlen und zur Ausgabe von Status Meldungen Diese Schaltung ist als gedruckte Schaltung aufzubauen und in Betrieb zu nehmen Die f r die Motor steuereinheit zu entwickelnde Software muss die Servomotoren ansteuern und die Pulse zur Drehwinkel bestimmung auswerten F r die Kommunikation ber den I2C Bus ist ein Protokoll zu entwerfen und zu implementieren Hierdurch
5. weil er ber interne Pull ups verf gt und die Pins somit direkt als Ein oder Ausg nge verwendet werden k nnen An diesem Steckverbinder steht zus tzlich neben 0 V die Versorgungsspannung Vcc zur Verf gung Die Pin Belegung wird in Abbildung 10 ersichtlich Vier nicht angeschlossene Ausg nge erm g lichen das Anl ten von weiteren Dr hten die beispielsweise weitere Pins des Controllers oder andere Signale an dem Steckverbinder zur Verf gung stellen So ist es m glich an dem 10 poligen Steckverbinder acht Pins zur Verf gung zu stellen Diese Modifikationen bieten Erweiterungsm glichkeiten f r zuk nftige Verwendungen Die Motorsteuereinheit k nnte weitere Aufgaben bernehmen z B Motoren oder Sensoren steuern ohne ein neues Design der Platine not wendig zu machen Tnterner Reset Pull Down Widerstand vgl I S 76 11 2 Hardware L Masse OV P2 0 P2 1 P2 2 P2 3 nicht belegt nicht belegt nicht belegt nicht belegt SV Schwarz Pin 1 braun Pin 2 rot Pin 3 orange Pin 4 gelb Pin 5 gr n Pin 6 blau Pin 7 wei Pin 8 schwarz Pin 9 braun Pin 10 Abbildung 2 10 Anschluss Schema Port Steckverbinder 2 4 Mikrocontroller Bei dem verwendeten Controller handelt es sich um einen Mikrocontroller vom Typ P89C664 der Firma Philips I der einen 8051 Kern enth lt Dieser in der Aufgabenstellung vorgegebene Mikrocontroller hat verschiedene Vorteile fiir dieses Projekt Eine fiir die P
6. Byte Nr Funktion Datentyp Werte Beschreibung PARAMI unsigned 01112 Motor dessen Werte char angefordert werden 51 CALIBRATE_VALUES Riickantwort Slave gt Master Motorsteuerung gt Steuerung Liefert die von CALIBRATE_GET_VALUES angeforderten Kalibrierungswerte fiir den entsprechenden Motor zuriick Byte Nr Funktion Datentyp Werte Beschreibung PARAM unsigned 0 1 2 Motor dessen Werte char folgen PARAM2 HI Byte unsigned PPER Wert PARAM3 LOW Byte integer Ea er PARAM4 HI Byte unsigned MIDDLE Wert PARAM5 LOW Byte integer 0703299 PARAM6 HI Byte unsigned 0 65535 LOW Wert PARAM7 LOW Byte integer Hier kann das vorgegebene struct CALIBRATE_VALUES_MSG verwendet werden 26 3 7 Protokoll 18 CALIBRATE_ERASE L scht den Kalibrierungs Variablen Speicher des Flash damit neue Werte ge schrieben werden k nnen Achtung Nach Ausf hrung dieses Befehls bitte per Hand einen Reset durch f hren Achtung Nach Ausf hrung dieses Befehls m ssen die Kalibrierungs Variablen neu gesetzt CALIBRATE SET xxx und neu gespeichert CALIBRATE WRITE FLASH werden sonst werden die Default Werte ver wendet kein Parameter 19 CALIBRATE_WRITE_FLASH Schreibt die aktuell eingestellten Kalibrierungs Werte in den Flash Speicher so dass sie nach einem Neustart nicht verloren gehen Wenn alte Werte berschrieben werde
7. Da durch ist es nicht n tig eigene Steuer Elektronik auf der Motorsteuerplatine bereitzustellen Der originale Signal Eingang des Servos wird direkt an einen Mikrocontroller Port angeschlossen lediglich verst rkt durch einen Inverter Die Servo Elektronik muss folglich nicht entfernt werden Der Servo wird um eine Puls Elektronik erweitert siehe Abschnitt in Kapitel B Durch Ent fernen einer Blockierung im Servo wird ein Rundumdrehen erm glicht Neben der Motorsteuerung die Inhalt dieser Arbeit ist soll das Fahrmodul selbst neu konstruiert werden Die Studienarbeit dokumentiert die Entwicklung der Hard und Software die in dieser Motorsteuereinheit zum Einsatz kommt Sie erm glicht den Nachbau des Boards beschreibt die Software und beinhaltet ein separates Benutzerhand 1 Einleitung buch dessen Lektiire fiir die Verwendung der Motorsteuerung im Fahrmodul ausreicht Kapitel 2 beschreibt zun chst die umgebende Hardware mit der die Motor steuerung kommunizieren muss Das sind die Servos Abschnitt und das Fahrmodul Abschnitt selbst AnschlieBend behandelt das Kapitel die im Rahmen dieser Arbeit entwickelte Hardware In Kapitel 3 wird die Realisierung des Softwareteils der Aufgabe beschrieben Neben der Funktionsweise des Pro gramms ist das Protokoll aufgefiihrt mit dessen Hilfe die Motorsteuereinheit ber den J C Bus angesprochen wird Das Kapitel 4 zeigt Anwendungen auf die die Motorsteuerung erm glicht 2 Hardwar
8. Unter Verwendung der oben be rechneten Frequenz fma betr gt die Dauer eines Maschinen Zyklus TMA ed 13 as vm 542 5 ns Laut Spezifikatio 4 muss das Reset Signal zwei Maschinen Zyklen lang anliegen damit der Controller das Reset ausfiihrt das Reset Signal Dauer vgl I S 10 10 2 3 Board sind folglich 2x 542 5 ns 1 085 ms Zus tzlich muss dem Oszillator gen gend Zeit f r den Start Up gegeben werden Deswegen sind einige weitere Millise kunden zu berbr cken Diese Zeit muss der Kondensator beim Einschalten der Versorgungsspannung die Spannung Vcc an den Controller Eingang RST liefern Der interne Widerstand des RST Eingangs des Controllers liegt zwischen 40 kN und 225 kf Parallel dazu ist der Widerstand R1 mit 10 kQ geschaltet Zusammen ergibt die Parallelschaltung minimal das heifit bei einem Innenwi derstand von 40 kQ R 1 8 kN Der Kondensator ist mit 10 uF 10 kO 40 kQ so gew hlt dass er minimal die Dauer von T R C 8 kQ x 10 uF 80 ms berbr cken kann Die Bedingungen f r ein Reset sind somit gro z gig erf llt UCC ResetBuitch GES R1 10k zum Controller Pin RST Abbildung 2 9 Schaltbild der Reset Schaltung Die Schnittstelle CON3 ist f r die Motorsteuerung nicht notwendig Es han delt sich um eine zus tzliche Schnittstelle die die freien Pins 2 0 2 1 2 2 und 2 3 des Controller Ports 2 nach au en f hrt Die Wahl fiel auf diesen Port
9. verwendet Pin ECI P1 2 Mit dieser Timer Konfiguration ist es m glich eine bestimmte Puls Zahl fest zulegen nach der ein Interrupt auftreten soll Die Pulse werden auf diese Weise sehr Ressourcen schonend gez hlt Die beiden Interrupt Routinen onTimer2 interrupt 7 und onTimerPCA interrupt 6 funktionieren im Detail wie folgt Zuerst setzen sie das Overflow Flag zur ck um den Counter f r einen neuen Durchgang vorzubereiten An schlie end wird der Timer Counter deaktiviert und mit 0 vorbelegt Mit Hil fe der Funktion setSpeed wird der zugeh rige Servo gestoppt An die ser Stelle ist die Ausf hrung des vergangenen Befehls sauber beendet Falls beide Servos ihre Befehle abgearbeitet haben m ssen die nachfolgenden be arbeitet werden Deswegen wird am Ende der Interrupt Routine die Funktion startNewMove aufgerufen Die Funktion startNewMove berpr ft zun chst anhand der Counter Re gister TR2 und CR ob noch einer dieser Counter l uft also noch nicht beide Servos ihren Befehl zu Ende ausgef hrt haben Befindet sich einer der Coun ter noch in Ausf hrung beendet die Funktion startNewMove Somit ist die Interrupt Bearbeitung beendet Es wird auf den zweiten Servo gewartet der bei Beendigung seines Befehls ebenfalls seinen Interrupt ausl st und wieder in der startNewMove Funktion ankommt In dem Fall wird festgestellt dass beide Counter ausgeschaltet sind also beide Servo Befehle fertig bearbeitet sind D
10. C Bus Einheit verf gt gen gt es auf dem Board einen Stecker CON6 zu platzieren der direkt vom Controller angesprochen wird Die Pins 2 SDA und 3 SCL sind die Signalisierungs Leitungen des I C Busses Pin 1 OV f hrt die Masse An Pin 5 l sst sich per Jumper Voc zuschalten was in dieser Anwendung nicht notwendig ist Pin 4 INT ist eine zus tzliche Leitung die zum Interrupt Eingang INTO P3 2 f hrt Dieser Pin hat ebenfalls keine Funktion in dieser Anwendung erm glicht es aber zus tzliche Funktionen hinzuzuf gen Au erdem verf gt die Hauptpla tine des Praktikums ber einen entsprechend passenden Stecker der mit dieser Konfiguration nicht ver ndert werden muss schwarz Pin 1 Masse OV braun Pin 2 SDA rot Pin 3 2 SCI orange Pin 4 NT gelb Pin 5L JH Vcc 5V Abbildung 2 8 Anschluss Schema 1 C Steckverbinder Zum Takten des On Chip Oszillators des Controllers wird ein Quarz be n tigt Dieses ist der Baustein Q1 welcher mit der Frequenz Clock Zyklus fosc 11 0592 MHz schwingt Das f hrt zu einer Maschinen Takt Frequenz von fMA T Ls fosc 1 8432MHz da die Bearbeitung eines Maschinen Befehls sechs Clock Zyklen ben tigt 1 Der Reset Schalter JP6 ResetSwitch schaltet bei Bet tigung Vcc an den Controller Eingang RST durch und verursacht damit einen Reset Das Schalt bild in Abbildung 2 9 zeigt den Reset Taster SW2 samt Beschaltung Der Kon densator C3 bewirkt den Power On Reset
11. Warteschlange der sich aktuell in der Ausf hrung befindet und die vergangenen Ticks an Die Antwort ist die Nachricht STATUS Die Ausf hrung der Warteschlange wird nicht beeinflusst kein Parameter 28 3 7 Protokoll 52 STATUS Riickantwort Slave gt Master Motorsteuerung gt Steuerung Liefert den aktuellen Befehl der Warteschlange der sich in der Ausf hrung be findet Die Parameter 1 bis 6 liefern genau den Befehl wie er mit dem Befehl MOVE in Auftrag gegeben wurde Die folgenden Werte sind die aktuellen Z h lerst nde wie viele Ticks schon vergangen sind das hei t wie viele Entfernungs Schritte der Motor seit Beginn des Befehls schon zur ckgelegt hat Die Ausf h rung der Warteschlange wird nicht beeinflusst Wenn die Motoren mit dem Befehl STOP gestoppt wurden werden an dieser Stelle f r Geschwindigkeiten und Ticks Nullen zur ckgegeben Die vergangenen Ticks bleiben durch das STOP unbeeinflusst Byte Nr Funktion Datentyp Werte Beschreibung 1 signed char 128 127 Geschwindigkeit Motor 0 PARAM2 HI Byte unsigned PARAM3 LOW Byte integer EE EE PARAM4 signed char 1 128 127 Geschwindigkeit Motor 1 PARAM5 HI Byte unsigned PARAM6 LOW Byte integer PB PARAM7 HI Byte unsigned 0 65535 vergangene Ticks PARAMS LOW Byte integer Motor 0 PARAM9 HI Byte unsigned 0 65535 vergangene Ticks PARAM10 LOW
12. bergeben werden In der Parameter Kombination Integer Byte werden die Werte in den Registern R6 R7 und R5 bergeben Der Integer steht in R6 MSB und R7 LSB das Byte in R5 vel 2 S 164 Die Durchf hrung der Kalibrierung ist im Abschnitt 4 2 beschrieben 3 6 Puls Z hlung tickcounttiningTimer Im Modul tickcounttimingTimer werden die von den Fahr Servos Pulse ausgewertet Daf r werden die zwei Timer Counter 2 und PCA verwen det Beide Timer funktionieren als Counter und verf gen ber einen externen Eingang an dessen Pin jeweils ein Fahr Servo Puls Ausgang angeschlossen ist Die Timer z hlen bei jeder auftretenden negativen Puls Flanke um eins hoch Beim berlauf erzeugen auch sie einen Interrupt der jeweils die zugeh rige Interrupt Routine aufruft Die Priorit ten dieser Interrupts m ssen lt 3 be tragen damit sie nicht die Generierung der Steuer Impulse st ren Die Priori t ten werden deswegen in den Initialisierungs Funktionen initTickTimer2 und initTickTimerPCA auf 1 gesetzt Au erdem werden die Counter noch nicht gestartet um nicht ungewollte Interrupts zu erhalten Um den Eingang nutzbar zu machen muss der Eingangs Pin auf HIGH 1 gesetzt werden Wird der Pin nun extern vom Servo mit Masse 0V verbunden l sst die Flanke den 13Most Significant Byte Teast Significant Byte 21 3 Software Counter z hlen Counter 2 fiir Servo 0 z hlt an Pin T2 P1 0 Counter PCA fiir Servo 1
13. da diese sonst bei einem neuen Schreiben der Kalibrierungs Werte gel scht werden w rden Der von mir gew hlte Block ist Block 3 der sich im Adressraum von 0x8000 bis OxBFFF erstreckt Die 16 Bit Integer Kalibrierungs Variablen sind in der folgenden Reihenfolge ab der Adresse 0x8000 gespeichert CALIBRATION_O_UPPER CALIBRATION_O_MIDDLE CALIBRATION_O_LOWER CALIBRATION_1_UPPER CALIBRATION_1_MIDDLE CALIBRATION_1_LOWER CALIBRATION_2_UPPER CALIBRATION_2_MIDDLE CALIBRATION_2_LOWER Hier werden die zwei Module bzw Funktionen beschrieben die vom Modul servotiming aufgerufen werden wenn der Speicher gel scht und neu beschrie ben werden soll Das Modul eraseBlock l scht in der Funktion eraseBlock siehe Listing den dort voreingestellten Block 3 im Flash Speicher des Mikrocontrol lers Hier wird mit einem In Application Programming IAP Call die Funktion ERASE BLOCK ausgef hrt vgl I S 69 Der im User Guide vorgegebe ne Assembler Code wird mit Hilfe der pragma Richtlinie vgl 2 S 163ff eingebunden Der zu l schende Block ist fest eincompiliert Die Funktion ProgramDataBvte unsigned int address unsigned char mydata siehe Listing A 2 im Modul ProgramDataByte schreibt das bergebe ne Byte mydata an die Adresse address des Flash Speichers Auch hier wird der Assembler Code mit dem IAP Call der Funktion PROGRAM DATA BYTE mit der pragma Richtlinie eingebunden Im Gegensatz zur L sch Funktion m s sen hier Parameter
14. den Teilnehmern be grenzte Zeit zur Verf gung steht Die Motoren sind modifizierte Modellbau Servos und m ssen ber zeitlich sehr genaue Signale angesprochen werden Die se Signal Generierung ist die Hauptaufgabe der Motorsteuerung Das Fahrzeug kann ber verschieden gew hlte Geschwindigkeiten der Motoren oder durch gegenl ufig drehende Motoren gesteuert werden Zur Kontrolle der Bewegung liefert die Motorsteuereinheit Informationen ber die zur ckgelegte Strecke der beiden Motoren ber den I C Bus an die Hauptplatine zur ck Zus tzlich ist es m glich einen dritten auch nicht modifizierten Servo zu steuern der bei spielsweise einen Sensor bewegen kann Die Motorsteuereinheit ist eine Platine auf welcher als Hauptkomponente der Mikrocontroller P89C664 der Firma Philips eingesetzt wird Es sind Schnittstel len f r drei Servomotoren f r die serielle Ausgabe von Kontroll Daten und f r die F C Kommunikation mit der Hauptplatine zur bermittlung von Steuer Befehlen und Status Meldungen vorhanden Der Grund f r die Entwicklung einer neuen Motorsteuerung zu dem exis tierenden Fahrmodul ist eine andere Art die Servos anzusteuern Zuvor wur den die Servos als Gleichstrommotor betrieben Zu diesem Zweck musste die Servo Elektronik entfernt werden und auf der Motorsteuerplatine eine Treiber Elektronik aufgebaut werden In der hier entwickelten Motorsteuerung wer den die Servos direkt ber ihre eigene Servo Elektronik angesprochen
15. drei Servos nacheinander erzeugt werden muss die Interrupt Routine reihum die entsprechenden Pins auf HIGH setzen Bei der Initialisierung von Timer 0 wird die Priorit t des Interrupts auf die h chste Stufe 3 gesetzt Dadurch wird die Interrupt Routine sofort ausge f hrt wenn der Timer berl uft auch wenn der Mikrocontroller gerade eine andere Aufgabe ausf hrt Sogar andere Interrupt Bearbeitungen werden unter brochen Das sorgt fiir die geforderte h chste Genauigkeit und Zuverlassigkeit fiir die Impuls Generierung Bevor es nun um die detaillierte Beschreibung der Interrupt Routine geht folgt eine Beschreibung wie der Timer eingestellt wird um eine genaue Zeit spanne zu erzeugen Der Timer z hlt nachdem er aktiviert wurde automatisch alle sechs Takte um eins hoch Wie erw hnt ist der Ubergang von 0xFFFF nach 0x0000 Uberlauf der Zeitpunkt mit dessen Hilfe man eine Aktion durchfiihren kann weil der Interrupt die Interrupt Routine aufruft Um einen bestimmten Zeitraum zu erzeugen kann man den Timer mit einem Wert vorladen und dann aktivieren Je nach gew hltem Vorlade Wert vergeht jetzt eine genau bestimm te Zeit bis zum n chsten Timer Interrupt Gleichzeitig mit der Aktivierung des Timers wird falls es sich nicht um eine Pause handelt das Signal f r den ent sprechenden Servo auf HIGH gesetzt An dieser Stelle ist zu beachten dass im Modul MOTOR_DEFS H das Signal invertiert wird ein HIGH also OV entspricht Sobald
16. um die Spannungsregler herum stabilisieren die Spannung Die Elektrolytkondensatoren mit hoher Kapazit t C5 und C6 filtern Verbrauchs spitzen heraus die Kondensatoren C4 C7 C12 und C13 filtern hochfrequente St rungen EU EU EU Abbildung 2 7 Schaltbild der Spannungsversorgung Wie in Abschnitt beschrieben werden die Servos vom Mikrocontrol ler ber die Ports P2 4 P2 5 und P2 6 angesteuert Um die Servo Elektronik vom Controller zu entkoppeln werden Servo Treiber eingesetzt Das Signal wird mit Hilfe von drei der sechs Schmitt Trigger Invertern im Baustein IC1 IC 7414 verst rkt und dann den Servos zugefiihrt Die Genauigkeit des Si gnals wird dadurch erh ht dass es sich um Inverter handelt Ein Impuls der im Programm durch HIGH gekennzeichnet ist wird im Modul MOTOR_DEFS H durch eine 0 umgesetzt entspricht 0 V Die Controller Elektronik erzeugt die se 0 sauberer und schneller als eine 1 d h 5 V Im Inverter wird diese 0 wieder umgesetzt in einen sauberen positiven Impuls von 5 V Da der Ser vo 2 nicht modifiziert ist kann auch der herk mmliche Stecker auf das Board gesteckt werden CON2 Die Belegung ist in Abbildung dargestellt Die beiden modifizierten Fahr Servos dagegen besitzen modifizierte Steckverbinder CONO und CON 1 Mit Ausnahme des gerade beschriebenen Steckers f r Servo 2 besitzen alle auf dem Board herausgef hrten Steckverbinder am Pin 1 0 V und am h chsten Pin Vcc Der Stecker der Fahr Servos ist
17. Abbildung 2 6 den Anschluss der Motorsteuereinheit an das Fahr modul Die seriellen Anschliisse an den PC dienen jeweils zur Programmierung Befehls bermittlung und Ausgabe von Debug Informationen Je nach Anwen dung kommunizieren verschiedene Programme ber die Schnittstelle Die Pro grammierung beider Controller in den Sprachen C oder Assembler wird in Vision vorgenommen Das Hochladen des Programms f r die Hauptplati ne wird von Vision im Monitor Modus vorgenommen Dort ist auch die Ein gabe von Befehlen und das Ablesen von Ausgaben m glich Die Software der Motorsteuereinheit dagegen wird mit Flash Magid hochgeladen Anschlie end wird die Kommunikation ber ein beliebiges Terminal Programm z B das Hy perTerminal von MS Windows durchgef hrt Die einzustellenden Parameter finden sich im Benutzerhandbuch Abbildung 2 5 Fahrmodul dessen Motoren von der Motorsteuereinheit ge steuert werden In der Mitte ist die gro e Hauptplatine zu se hen Darunter befindet sich neben dem Akku die Motorsteuer Platine Dieses Fahrmodul ist zus tzlich mit einem WLAN Modul ausgestattet 2 3 Board Es folgt eine Beschreibung des entwickelten Boards f r die Motorsteuerung Es basiert auf dem bisherigen Board motor_v3 vom 02 10 2003 da dieses das von mir verwendete Experimentier Exemplar ist und die meisten Elemente schon enth lt und wenige weggelassen werden Abbildung B 5 im Anhang zeigt das uVision ist eine Entwicklungsu
18. Byte integer Motor 1 Die Parameter 1 bis 6 sind identisch mit denen des MOVE Befehls Hier kann das vorgegebene struct STATUS_MSG verwendet werden 23 STOP Pausiert die Ausf hrung der Befehle in der Warteschlange f r die Motoren 0 und 1 und verwirft den aktuell ausgef hrten Befehl Das Signal an den Motor ausg ngen 0 und 1 wird unterbrochen Der in diesem Zustand zur ckgegebene Status liefert f r die Geschwindigkeiten und Ticks Nullen die vergangenen Ticks bleiben unbeeinflusst Motor 2 bleibt unbeeinflusst kein Parameter 24 START F hrt die Ausf hrung der Warteschlange bei dem Befehl fort der dem mit STOP unterbrochenen folgt Motor 2 bleibt unbeeinflusst kein Parameter 29 3 Software 25 MOVE_2 Steuerbefehl fiir den Motor 2 Dieser Befehl wird sofort ausgefiihrt also nicht in der Warteschlange der Motoren 0 und 1 gef hrt Der aktuell vom Motor 2 ausgefiihrte Befehl wird unterbrochen Der aktuell ausgefiihrte Befehl kann durch GET_STATUS_2 abgefragt werden F r diesen Motor k nnen keine Entfernungs Schritte Ticks angegeben werden Die Position eines nicht modifizierten Servos kann kann nur ber die MOVE_2 Befehle gesetzt werden Byte Nr Funktion Datentyp Werte Beschreibung PARAMI signed char 128 127 Position Servo 2 26 GET_STATUS_2 Fordert von der Motorsteuerung den aktuellen von Motor 2 ausgef hrten Befehl a
19. Datentypen z B Integer umgerechnet werden Falls das Testprogramm eine empfangene Nachricht identifiziert wird diese zus tzlich fertig umgerechnet angezeigt Das Haupt Einsatzgebiet dieses Testprogramms ist die Kalibrierung S mtli che Kalibrierungs Befehle stehen zur Verf gung Die Status Meldungen k nnen falls ben tigt direkt im Debug Modus an der seriellen Schnittstelle der Mo torsteuereinheit oder im Motortest Programm nach Eingabe von receive ab gelesen werden F r eine komfortablere Kalibrierung ist im folgenden Abschnitt ein Ansatz beschrieben 33 4 Anwendung 4 2 Kalibrierung Jeder Servo verh lt sich geringfiigig bei verschiedenen Modellen und Herstel lern auch stark anders Deswegen ist es wichtig dass sich die Ansteuerung der verschiedenen Servos anpassen l sst damit die Maximalgeschwindigkeiten und Mittelpositionen der beiden Motoren rechts und links identisch sind Au erdem wird die Mittelstellung durch den Widerstandswert des arretierten Potentiome ters bestimmt welcher bei jedem Exemplar anders ist Die Motorsteuerung sieht zu diesem Zweck die Kalibrierung vor Die Kalibrierung ist der einzige Punkt bei dem sich die interne Darstellung der Impulse dem Anwender zeigt Wie in Abschnitt beschrieben wird f r jeden Servo die Impulsl nge durch eine Zahl zwischen 0 und 65535 dargestellt Zu beachten ist an dieser Stelle dass eine h here Zahl einen k rzeren Impuls bedeutet da der Timer bei h herem
20. ENABLE_DEBUG zuschaltbaren Ausgaben bleiben von dieser Konstante unbe r hrt Die Konstante SLAVE_ADDR bestimmt die 12C Bus Adresse auf die der Bau stein reagieren soll Standard ist 0x10 Die Konstanten HIGH und LOW bestimmen wie die Signale Impulse mit denen die Servos angesteuert werden ausgerichtet sind Bei HIGH 1 LOW 0 ist ein Impuls 5V umgekehrt ist ein Impuls OV Die Einstellung erm glicht das Einsetzen eines Inverters vor den Servos um diese vom Mikrocontroller zu entkoppeln In den folgenden Zeilen des Moduls werden die Befehle des Protokolls vgl auch Abschnitt definiert und Strukturen f r die Verarbeitung der Befehle zur Verf gung gestellt 3 2 Hauptprogramm main Das Modul main ist das Hauptprogramm der Motorsteuerung Zu Beginn wer den in der Funktion main s mtliche Module sowie die serielle Schnittstelle initialisiert Anschlie end wird in einer Endlos Schleife auf ankommende 12 Datagramme gewartet In der Funktion processCommand werden diese Data gramme wie im Protokoll vorgegeben verarbeitet Falls der Befehl eine Antwort erwartet wird diese mit Hilfe einer der send Funktionen ber den Bus gesen det Im laufenden Betrieb gibt die Motorsteuerung Ausgaben an der seriellen Schnittstelle COM Port aus Auf jeden Fall werden bei einem Reset einige Zeilen mit Identifikation und Version ausgegeben Wenn die Debug Option ak tiviert ist siehe dazu Befehl ENABLE DEBUG werden zus tzliche Ausgab
21. Entwicklung einer Motorsteuereinheit fiir ein Fahrmodul Christian Schr der 17 November 2005 Technische Universitat Braunschweig Institut f r Betriebssysteme und Rechnerverbund Studienarbeit Entwicklung einer Motorsteuereinheit fiir ein Fahrmodul von cand informations systemtechnik Christian Schr der Aufgabenstellung und Betreuung Prof Dr Lars Wolf und Dipl Ing Dieter Br kelmann Braunschweig den 17 November 2005 i Erkl rung Ich versichere die vorliegende Arbeit selbstst ndig und nur unter Benutzung der angegebenen Hilfsmittel angefertigt zu haben Braunschweig den 17 November 2005 Hi lv Kurzfassung Diese Studienarbeit behandelt die Entwicklung einer Motorsteuereinheit f r ein Fahrmodul welches am Institut fiir Betriebssysteme und Rechnerverbund IBR der TU Braunschweig fir ein Praktikum eingesetzt wird Das in dieser Arbeit entworfene Board ist als Kernelement mit einen P89C664 Mikrocontrol ler der Firma Philips best ckt Die Motorsteuereinheit steuert zwei modifizierte Modellbau Servos an die als Fahr Servos dienen Dabei erzeugt der Mikrocon troller exakte Steuer Impulse f r die Elektronik der Servos Au erdem ist es m glich einen weiteren nicht modifizierten Servo beispielsweise f r Sensor Bewegungen zu steuern Die modifizierten Fahr Servos liefern Pulse die dem Mikrocontroller die Messung der zuriickgelegten Strecke erlauben Die Befehle f r die Motorsteuerung werden ber
22. Fiir den Anschluss der zwei modifizierten Fahr Servos sind zus tzlich zu den drei Anschliissen eines unmodifizierten Servos vgl Unterabschnitt zwei weiterere Anschl sse f r den Puls Ausgang und die 5 V Spannungsversorgung f r die Pulserzeuger Platine notwendig Deswegen sind die Anschl sse f r die Fahr Servos ebenfalls modifiziert Es wird ein 5 poliger Platinen Steckverbinder verwendet welcher die folgende Belegung aufweist siehe auch Abbildung 2 4 2 Hardware Pin 1 Masse OV schwarz Pin 2 Puls vom Servo braun Pin 3 Impuls Signal zum Servo rot Pin 4 Ver Versorgungsspannung Servo 5V orange Pin 5 Voc Versorgungsspannung Puls Generator 5V gelb Die an diesem Stecker vorhandene Versorgungsspannung Voc wird von der Puls Elektronik ben tigt Die Spannung Mer mit der die drei Servos versorgt werden wird mit einem zus tzlichen Spannungsregler erzeugt damit von den Servo Motoren erzeugte St rungen die Puls Elektronik und den Mikrocontroller nicht beeinflussen An dieser Platine ist einheitlich an jedem Platinen Steckver binder an Pin 1 Masse und am h chsten Pin Voc angelegt Die Puls Signale die von den Servos 0 und 1 kommen werden in den Mikro controller an den Eingangs Pins der Timer Counter 2 und Timer Counter PCA eingespeist Das ist Mikrocontroller Pin P1 0 Timer Counter 2 fiir Servo 0 und Pin P1 2 Timer Counter PCA fiir Servo 1 vgl Schaltplan in Abbildung B 5 Die in diesem Abschnitt beschrieb
23. LUE Riickantwort Slave gt Master Motorsteuerung gt Steuerung Liefert den von CALIBRATE_GET_SPEED VALUE angeforderten Geschwindigkeits Wert fiir den entsprechenden Motor zuriick Byte Nr Funktion Datentyp Werte Beschreibung 1 unsigned 0 1 2 Motor dessen Wert char folgt PARAM2 HI Byte unsigned 0 65535 Geschwindigkeits PARAM3 LOW Byte integer j Wert Hier kann das vorgegebene struct CALIBRATE_SET_CMD verwendet werden Steuerbefehle f r die Motoren 21 MOVE Steuerbefehl fiir die Motoren 0 und 1 Diese Motoren k nnen nur gleichzeitig an gesprochen werden Diese Befehle werden in die Warteschlange eingereiht Die Geschwindigkeit ist ein Wert zwischen 128 und 127 der den kalibrierten Maxi malgeschwindigkeiten entspricht Die Mittelposition ist 0 der Motor steht Die Ticks sind die Anzahl der Bewegungsschritte die sich der Motor fortbewegen soll Byte Nr Funktion Datentyp Werte Beschreibung 1 signed char 128 127 Geschwindigkeit Motor 0 PARAM2 HI Byte unsigned Ticks Mot PARAM3 LOW Byte integer etz PARAM4 signed char 128 127 Geschwindigkeit Motor 1 PARAMS HI Byte unsigned A 35 Ticks Motor 1 PARAM6 LOW Byte integer 5 Hier kann das vorgegebene struct MOVE_CMD verwendet werden 22 GET_STATUS Fordert von der Motorsteuerung den Befehl der
24. OWER verwendet werden Achtung Der hier gesetzte Wert wirkt erst bei der n chsten Geschwindig keits nderung des Motors z B n chster Befehl der Warteschlange oder neues SET_SPEED Byte Nr Funktion Datentyp Werte Beschreibung PARAMI unsigned 01112 Motor der kalibriert char wird PARAM2 HI Byte unsigned t PARAM3 LOW Byte integer 0 65889 Mi Hier kann das vorgegebene struct CALIBRATE_SET_CMD verwendet werden 25 3 Software 14 CALIBRATE_ADD_UPPER 15 CALIBRATE_ADD_MIDDLE 16 CALIBRATE_ADD_LOWER Ver ndert den Wert f r den oberen mittleren unteren Wert maxima le Vorw rts Geschwindigkeit keine Bewegung maximale R ckw rts Geschwindigkeit um den angegeben Wert f r den angegebenen Motor Es sind Schritte in maximal 128 bzw 127 Spr ngen m glich Dieser Befehl kann zur Fein Justierung verwendet werden Achtung Der hier gesetzte Wert wirkt erst bei der n chsten Geschwindig keits nderung des Motors z B n chster Befehl der Warteschlange oder neues SET_SPEED Byte Nr Funktion Datentyp Werte Beschreibung PARAMI unsigned 01112 Motor der kalibriert char wird PARAM2 signed char 128 127 Wert um den der Kalibrierungs Wert ge ndert werden soll 17 CALIBRATE_GET_VALUES Fordert die aktuellen Kalibrierungswerte f r den angegebenen Motor an Die Antwort ist die Nachricht CALIBRATE_VALUES
25. Ports dienen der Ansteuerung der Servos sowie der Aufnah me der R ckmeldungen der Servos ber deren Drehbewegungen Die vier zur Verfiigung stehenden Timer werden alle ben tigt In dieser Motorsteuereinheit wird der Mikrocontroller mit einer Frequenz von 11 0592 MHz betrieben was einer Befehlsausfiihrung von etwa 1 8 MHZ ent spricht SKeil Software Inc Sechs Clocks pro Maschinen Operation d h 11 0592MHz 6 1 8432MHz 12 2 4 Mikrocontroller Flash Der Mikrocontroller besitzt 64 KB Flash Speicher in vier Bl cken Die in die ser Studienarbeit programmierte Software nutzt die Eigenschaft dass per In Application Programming ein Block gel scht werden kann und dann bytewei se adressiert wieder beschrieben werden kann Die Eigenschaften eines Flash Speichers lassen es nur zu einen gesamten Block zu l schen nicht weniger Ist nach dem L schen der gesamte Block mit Einsen HEX Wert 0xF berschrie ben kann die Applikation dann byteweise adressiert wahlweise einige Bits in Nullen umwandeln In Application Programming In der Entwicklungsumgebung Vision ist es m glich mit Assembler Code das L schen eines Flash Blockes sowie das oben beschriebene byteweise Schreiben durchzufiihren Da der Programmcode sich ebenfalls im Flash Speicher befindet ist bei der Programmierung darauf zu achten dass nicht ein Block gel scht wird in welchem sich noch auszuf hrender Programmcode befindet In Application Programming wir
26. RS 232 Driver Receiver 5V DIL 16 Polig Fassung mit Kondensator IC3 P89C664 Philips Mikrocontroller Plastic Leaded Chip Carrier 44 Fassung evtl mit Kondensator Jumper JP1 2 polig 2 polige Stiftleiste gerade 1 reihig Rasterma 2 54mm Steckverbinder CONO 5 polig Platinen Steckverbinder 5 polig 90 Grad gewinkelt CON1 5 polig Platinen Steckverbinder 5 polig 90 Grad gewinkelt CON2 3 polig 3 polige Stiftleiste gerade 1 reihig Rasterma 2 54mm CON3 10 polig Platinen Steckverbinder 10 polig 90 Grad gewinkelt CON4 2 polig gewinkelter Wannenstecker und Anschlussklemmensystem 2 pol Rasterma 5 08mm CON5 D SUB D SUB Stecker 9 polig gewinkelt 9 polig CON6 5 polig Platinen Steckverbinder 5 polig 90 Grad gewinkelt 54 Tabelle B 2 St ckliste Teil 2
27. Servo Innenansicht 5 o Ta la 6 2 0 Fahrmodull gt vU 2 eee s egg 7 8 2 7 Schaltbild der Spannungsversorgungj 22 9 ERT E 10 2 9 Schaltbild der Reset Schaltung 11 7777 7777 12 7 18 757 49 555 49 a a l 50 50 15 77777777777777 51 xi Abbildungsverzeichnis Tabellenverzeichnis 3 1 Protokoll Byteweiser Aufbau eines Befehls bzw einer Nachricht 23 3 2 Protokoll 7 C Befehle bzw Nachrichten mit D AAA 24 B 1 St ckliste Tel 53 B 2 St ckliste Teil 2 54 xiii Tabellenverzeichnis Listings servotiming c onTimer0 A 2 programDataByte c programDataByte eraseBlock c eraseBlock XV Listings xvl 1 Einleitung In dieser Studienarbeit wird eine Motorsteuereinheit beschrieben die in dem Fahrzeug Fahrmodul des Praktikums Ubiquitous Computing Informations Systemtechnik II am Institut f r Betriebssysteme und Rechnerverbund der TU Braunschweig eingesetzt werden soll Das Fahrzeug besitzt eine Hauptplatine deren Controller von den Prakti kanten programmiert wird Die Hauptplatine steuert ber einen I C Bus die hier entwickelte Motorsteuereinheit welche die Befehle in Signale f r die An triebsmotoren umwandelt Das Protokoll ist so entwickelt worden dass es leicht verst ndlich ist da f r die Durchf hrung des Praktikums
28. Servos sind drei Leitungen notwendig die auch in handels blichen Servos schon vorhanden sind Servo 2 besitzt diese Anschl sse unmodifiziert und kann mit dem original gelieferten Stecker J R Anschluss auf die Motorsteuereinheit aufgesteckt werden Die Anschl sse der Servos 0 und 1 werden im folgenden Unterabschnitt aufgef hrt Die drei Anschluss Leitungen f r Servo 2 siehe auch Abbildung 2 2 sind Pin 1 Impuls Signal hier gelb Pin 2 Versorgungsspannung Veg 5V hier rot Pin 3 Masse OV hier schwarz 2 1 Servos Vee 5V Pin 2 rot Masse OV 6 Pin 3 schwarz Signal TL Pin 1 gelb orange Abbildung 2 2 Anschluss Schema nicht modifizierter Servo Servo 2 2 1 2 Puls Generierung Die zwei Fahr Servos des Fahrmoduls sind zus tzlich zur oben beschriebenen Modifikation mit einer Puls Generierung erweitert Das bedeutet es steht ein zus tzliches Signal zur Verf gung das die Drehvinkelbestimmung erm glichen soll Ein Getriebezahnrad im Geh use des Servos ist mit Markierungen versehen Diese werden von einem Infrarot Sensor abgetastet und mit Hilfe eines Opera tionsverst rkers umgewandelt Die Platine ist in Abbildung 2 3 im Innern des Servos zu sehen Die Signalpegel die an der herausgef hrten Leitung Puls anliegen sind OV und 5V je nach abgetastetem Bereich des Zahnrades Der Counter der Motorsteuerung verarbeitet die negativen Flanken siehe Abschnitt Sa Abbildung 2 3 Modifizierter Servo Innenansicht
29. T 5 eg 2774 312 KZ B Des 9 2 01435 NSIS TEZ Schaltbild Diese Seite wird ersetzt durch faltbare DIN A3 Seite mit Schaltbild im Querformat Abbildung B 5 51 B Board 52 Kondensatoren Cl 33 pF Keramik Kondensator C2 33 pF Keramik Kondensator C3 10 uF Elko radial 10 uF 35V C4 100 nF Keramik Kondensator Vielschicht 10 C5 100 uF Elko radial 100 uF 16V C6 100 uF Elko radial 100 uF 16V C7 100 nF Keramik Kondensator Vielschicht 10 C8 10 uF Elko radial 10 uE 35V C9 10 uF Elko radial 10 uE 35V C10 10 uF Elko radial 10 uF 35V C11 10 uF Elko radial 10 uE 35V C12 0 33 uF Keramik Kondensator 0 33 uF oder Elko C13 100 nF Keramik Kondensator Vielschicht 10 C14 100 nF Keramik Kondensator Vielschicht 10 C15 100 nF Keramik Kondensator Vielschicht 10 Widerst nde R1 10 kO 1 4W 5 R2 560 Q 1 4W 5 Spannungsregler Ul 7805 1A positiv TO 220 U2 78505 2A positiv TO 220 Kiihlk rper Leuchtdiode LED1 3mm rot 2V 20mA Tabelle B 1 Stiickliste Teil 1 53 B Board Schalter SW1 2 polig Dip Schalter stehend SVV2 Taster Drucktaster SchlieBer gewinkelt Printanschluss Quarz QI 11 0592 Standardquarz Grundton Geh use MHz HC49 U S U ICs IC1 7414 Hex Schmitt Trigger Inverter DIL 14 polig Fassung evtl mit Kondensator 1C2 MAX232
30. Vorladewert weniger lange braucht um berzulaufen Es k nnen f r jeden Servo separat drei verschiedene Werte festgelegt werden e UPPER Wert f r die Maximalgeschwindigkeit in Vorw rts bzw R ck w rtsrichtung d h der l ngste bzw k rzeste Impuls je nach Einbaurich tung des Servos e MIDDLE Wert f r die Mittelstellung in der sich der Servo nicht bewegt e LOWER Wert f r die Maximalgeschwindigkeit in R ckw rts bzw Vor w rtsrichtung d h der k rzeste bzw l ngste Impuls je nach Einbaurich tung des Servos Wenn bisher keine Werte in den Flash Speicher geschrieben wurden bzw der Speicher gel scht wurde sind die oben genannten Werte nach einem Hardware Reset oder dem Software Befehl RESET_ALL f r jeden Servo auf Default Werte gesetzt Diese Werte erzeugen Impulse von der L nge 2 5 ms UPPER LOWER 60927 1 5 ms MIDDLE 62770 und 0 5 ms LOWER UPPER 64613 Fiir Servo 1 sind UPPER und LOWER vertauscht Die Default Werte sehen fiir die Servos 0 und 2 die gleiche Drehrichtung vor Bestimmt wird sie durch die Werte UPPER gt MIDDLE gt LOWER Durch die entgegengesetzte Einstellung LOWER gt MIDDLE gt UPPER fiir Servo 1 ist seine Drehrichtung umgekehrt Da die Servos spiegelverkehrt am Fahrmo dul angebracht sind ist diese Umkehrung notwendig damit vorw rts jeweils Geschwindigkeiten gr er Null und r ckw rts Geschwindigkeiten kleiner Null sind Bei der eigenen Kalibrierung kann die Drehrichtung d
31. a jetzt der n chste neue Befehl aus der Warteschlange ausgef hrt werden muss wird dieser von der Funktion popFifo angefordert Befindet sich ein Befehl in der Warteschlange werden die Counter erneut mit den Werten f r den folgen den Befehl vorgeladen und die Servos mit der entsprechenden Geschwindigkeit gestartet Befindet sich kein weiterer Befehl in der Warteschlange bleiben die Servos auf Geschwindigkeit 0 und die Counter bleiben gestoppt Die Funktion startNewMove wird dann erst beim n chsten ber den I C Bus kommenden Befehl von der Funktion pushFifo struct MOVE_CMD dat aufgerufen Durch Ausf hren der Funktion startNewMove nach jedem ausgef hrten Befehl und bei jedem Eintreffen eines neuen Befehls ist sichergestellt dass ein Befehl der sich in der Warteschlange befindet auch ausgef hrt wird 22 3 7 Protokoll 3 7 Protokoll Im Folgenden wird das Protokoll spezifiziert mit dem die Servomotoren ber den I C Bus gesteuert und die Statusinformationen abgerufen werden k nnen Die I C Adresse der Motorsteuerung Slave ist voreingestellt auf 0x10 Die verwendete I C Bus Datenrate ist 100 kbit s 3 7 1 Aufbau der Befehle Die Befehle setzen sich wie folgt byteweise zusammen ADRESSE BEFEHL PARAMO PARAMI PARAMn bzw ADRESSE NACHRICHT PARAMO PARAM PARAMn ADRESSE BEFEHL NACHRICHT PARAM I C Adresse der Motorsteuerung Slave Befehls ID ist hier d
32. d in der Motorsteuerung verwendet um Kalibrierungsdaten zu speichern Timer Der 664 Mikrocontroller verfiigt ber insgesamt vier Timer die durch die Mo torsteuerung optimal ausgenutzt werden Es handelt sich um die Timer mit den Bezeichnungen 0 1 2 PCA e Der Timer 1 wird von der seriellen Schnittstelle verwendet und ist somit nicht weiter verfiigbar e Der Timer 0 wird f r die Erzeugung der Servo Steuerimpulse verwendet Daf r wird der 16 Bit Modus verwendet um einen m glichst gro en Z hl bereich zu erreichen N heres zur Realisierung in Software siehe Abschnitt e Die Timer Counter 2 und PCA werden f r die Aufnahme der Pulse der beiden Fahr Servos verwendet Da beide Timer ber einen externen Z hl Eingang an den Ports des Controllers verf gen ist es m glich die Pulse auf diese Art zu z hlen Es handelt sich dabei um den Pin T2 P1 0 f r Timer 2 und den Pin ECI P1 2 f r Timer PCA jeweils am Port 1 N heres zur Software Realisierung befindet sich im Abschnitt 13 2 Hardware 14 3 Software In diesem Kapitel wird die Umsetzung der Aufgabenstellung der Software auf der im vorigen Kapitel beschriebenen Plattform beschrieben Die Program me fiir den P89C664 Mikrocontroller werden mit der Entwicklungsumgebung Vision der Firma Keil entwickelt Die dort verwendete Programmiersprache ist erweiterbar durch beispielsweise Assembler welches mit Hilfe der pragma Richtlinie eingebunden wird Die Software i
33. der Timer berl uft bergang von 0xFFFF 65535 zu 0x0000 0 wird der vorher aktivierte Impuls von der Interrupt Routine beendet d h das Signal auf LOW gesetzt Der Vorlade Wert errechnet sich aus Wert 65535 steps mit Impulsdauer steps 4 clock clock 11 0592MHz Impulsdauer Dauer des Impulses Der 16 Bit Timer kann also in Abst nden von 35 555 ms entspricht Vorladen mit 0 bis 0 ms entspricht Vorladen mit 65535 Interrupts erzeugen Bei der Initialisierung in der Funktion initTimer0 wird der Timer mit 0x0000 vorgeladen das bedeutet eine Pause von 35 555 ms vor dem ersten In terrupt In der Interrupt Routine onTimer0 O interrupt 1 siehe Listing A 1 werden die Impulse erzeugt Die Variable servo_count zeigt an welcher Ser vo zur Zeit angesteuert wird Der Wert 1 welcher auch bei der Initialisierung verwendet wird bedeutet kein aktivierter Servo also die Pause zwischen den Impuls Folgen Sobald ein Interrupt auftritt werden in jedem Fall s mtliche 19 3 Software Pins auf LOW gesetzt Dadurch wird sichergestellt dass das Auftreten des Interrupts sofort zum Ende des aktiven Impulses f hrt Die dann folgenden Be rechnungen sind also zeitunkritisch da sie keinen Einfluss auf die Lange eines m glicherweise zu generierenden Impulses haben In der Abbildung 3 1 sind sie gesondert markiert In den folgenden Zeilen der Funktion geschieht die Unterscheidung zwischen einer zu generierend
34. der umgekehrt und die Z hlerst nde ver gleichen Sobald sich der bisherige Trend umkehrt z B Wert wird zuerst kleiner dann wieder gr er die Schrittweite ver kleinern und zwischen den letzten beiden 1000er Schritten diesen Punkt mit kleineren Schritten wiederholen o Alternativ den Mittelwert zwischen LOWER und UPPER be rechnen oder Default Wert 62770 und als Ausgangspunkt ver wenden o Eventuell ist es sinnvoll zu beachten dass je nach Ann herung aus Richtung UPPER oder LOWER verschiedene aber nahe beieinander liegende Werte zum Stehen des Servos f hren In dem Fall kann der Mittelwert zwischen den beiden verwendet werden um sicher gegen ber kleinen Ver nderungen der Servos zu sein z B Temperaturschwankungen die zu einer Verschie bung der Mittelposition f hren o Das Ergebnis ist der Wert f r MIDDLE von Servo 0 Servo 1 o Die Mittelstellung wie bei Servo 0 ermitteln o Das Ergebnis ist der Wert fiir MIDDLE von Servo 1 e Vorw rts Kalibrierung o Servo 0 o Mit Default Wert 60927 beginnend in 1000er Schritten gr er werden o Sobald der Servo zwischen zwei Messungen langsamer wird in 100er Schritten vom kleineren Wert ausgehend erh hen o Sobald der Servo zwischen zwei Messungen langsamer wird den letzten Punkt mit immer kleineren Schritten wiederholen 5Default Wert 60927 falls n tig kleineren Wert verwenden d h falls der Servo die Maximal geschwindigkeit bei diesem Standart Wert
35. e In diesem Kapitel wird die Hardware beschrieben die in dieser Studienarbeit zur Realisierung der Motorsteuereinheit verwendet wird Das sind die Servos die als die anzusteuernden Motoren verwendet werden das der Mikrocon troller der Firma Philips mit seinen fiir dieses Projekt niitzlichen Figenschaften sowie das als Ganzes 2 1 Servos Die von der Motorsteuereinheit angesteuerten Servos erfiillen zwei Funktionen Sie drehen sich um als Motor oder herk mmlicher Servo zu agieren Zus tzlich liefern sie Pulse zur Drehwinkelbestimmung 2 1 1 Impuls Ansteuerung Die hier beschriebene Motorsteuereinheit soll bis zu drei Servos ansteuern Han delsiibliche Modellbau Servos sind dazu vorgesehen sich lediglich in einem Be reich von 120 Grad zu drehen Je nach Modell kann dies auch etwas mehr sein Um aber fiir das Praktikum von Nutzen zu sein miissen sie sich um 360 Grad fortlaufend drehen k nnen Aus diesem Grund werden sie modifiziert Die Na se im Getriebe des Servos die ein Herumdrehen verhindert wird entfernt Dadurch ist es mechanisch m glich den Servo Kopf rundum zu drehen Die Elektronik im Servo erkennt anhand eines Potentiometers die aktuelle Position des Kopfes Damit der Servo die Rundum Bewegung durchf hren kann wird zus tzlich das Potentiometer festgeklebt und vom drehenden Kopf entkoppelt Nun kann die Elektronik nicht mehr feststellen in welcher Position sich der Ser vo befindet F r die so modifizierten Ser
36. einen 12C Bus von der Hauptplatine des Fahrmoduls gesendet Diese Arbeit beinhaltet ein eigenes Protokoll welches die Steuer Befehle spezifiziert Abstract This paper deals with the development of an engine control unit embedded in a vehicle used for a lab at the IBR at the TU Braunschweig Technical University of Braunschweig The designed board contains as main unit a microcontroller P89C664 of Philips company The engine control unit controls two modified mo delbuilding servo which serve as driving engines The microcontroller produces exact control pulses for the servo electronics Furthermore one unmodified servo may be controlled for example to turn a sensor The modified driving servos produce pulses which allow the controller to detect the covered distance The commands for the engine control unit are sent over 12C bus and come from the main unit of the vehicle This paper contains an own protocol specifying these commands vi Technische Universit t Braunschweig Institut fiir Betriebssysteme und Rechnerverbund Prof Dr L Wolf TU Braunschweig Institut fiir Betriebssysteme und Rechnerverbund Postfach 3329 38023 Braunschweig M hlenpfordtstr 23 38106 Braunschweig Telefon 05 31 3 91 3283 Telefax 05 31 3 91 5936 WWW http www ibr cs tu bs de Prof Dr L Wolf Braunschweig 25 08 2005 Aufgabenstellung fiir die Studienarbeit Entwicklung einer Motorsteuereinheit fiir ein Fahrmodul vergeben an
37. en gemacht die die Fehlersuche erleichtern Diese zus tzlichen Ausgaben betreffen ber den 12 kommende Befeh le gesendete Nachrichten aufgetretene Fehler die Kalibrierung in die Warte schlange eingereihte sowie entfernte und ausgef hrte Befehle Der Aufruf der zu st ndigen Funktionen printf bzw puts wird durch eine Mutex hnliche Variabld 0 g_as Bit adressierbar Bit 1 von g_debug gesch tzt da mit keine gleichzeitigen Aufrufe erfolgen Gleichzeitige Aufrufe dieser Funktio nen auch einer dieser Funktionen miissen verhindert werden da sie sonst den selben Speicherbereich gleichzeitig fiir verschiedene Ausgaben verwenden wiir den Durch die Verwendung des Mutex ist es m glich dass verschiedene schnell aufeinander folgende Debug Ausgaben einfach nicht erfolgen Die angezeigten I C Bus Daten werden als unsigned char byte ausgegeben und miissen un ter Umst nden umgerechnet werden falls sie als Befehlsparameter interpretiert werden sollen Trotz des Schutzes durch g_as k nnen Seiteneffekte die den korrekten Programmablauf verhindern nicht ausgeschlossen werden Dies ist zu beachten 10Mutex mutual exclusion gegenseitiger Ausschluss 16 3 3 Warteschlange fifo 3 3 Warteschlange fifo Das sieht fiir die Steuerung der zwei Fahr Servos eine gemeinsame Ansteuerung vor d h mit einem Befehl werden fir beide Servos Steuerbefehle bermittelt Dieses ist der Befehl MOVE Er wird dargestellt i
38. en Pause und einem der drei Impulse Im Falle der Pause wird servo_count auf 1 gesetzt Uberlaufschutz kein Pin aktiviert der Timer mit dem Wert fiir die Pause DEFAULT_PAUSE vorgeladen und anschliefend gestartet Im Falle eines zu generierenden Impulses wird der Timer mit dem Wert f r den entsprechenden Impuls servo_position servo vorgeladen Bei den Servos 0 und 1 wird der Impuls unterdr ckt falls der Befehl STOP aktiviert ist Dadurch stellt der Servo jede Bewegung ein Das erlaubt den Servo mit der Hand zu bewegen was beim Anliegen eines Impulses nicht m glich ist da der Servo st ndig nachstellt Wichtig ist eine genaue Kalibrierung der Mittelposition da der Servo sonst m glicherweise langsam weiter l uft Um bei der Programmierung einer Anwendung sicher zu gehen kann nach Stoppen des Servos eine Anwendung des Befehls STOP daf r sorgen dass garantiert keine Bewegung mehr stattfindet Die Impulse f r Servo 2 werden wie bei den anderen Servos bei dem zugeh rigen STOP_2 Befehl unterdr ckt Anschlie end wird in der switch Anweisung der entsprechende Pin aktiviert falls nicht die Bedingung f r ein Unterdr cken erf llt ist Sofort im Anschluss wird der Timer aktiviert wodurch die Zeit f r einen genauen Impuls l uft Die kurze Funktion setServoSpeed unsigned char servo signed char speed rechnet die vom Anwender verwendeten Geschwindigkeits Werte zwi schen 128 und 127 in die intern verwendeten Werte zum Vorladen des Ti
39. enen modifizierten Servos wurden von mei nem Betreuer zur Verfiigung gestellt schwarz Pin 1 CU Masse OV gt braun Pin 2 1 Puls n rot Pin 3 Signal L orange Pin AUZA Vee 5V gelb Pin SIN Vec 5V Abbildung 2 4 Anschluss Schema modifizierter Servo Servo O oder Servo 1 2 2 Anschluss an das Fahrmodul Die in dieser Arbeit beschriebene Motorsteuereinheit befindet sich im Gesamt Kontext des Fahrmoduls fiir das Praktikum Dieses Fahrmodul verfiigt tiber die zwei erw hnten modifizierten Servomotoren die als Antrieb und Steuerung die nen Ein drittes nicht steuerbares Rad verhindert ein Kippen des Fahrzeugs Neben den Fahr Servos befindet sich ein dritter Servo zur Steuerung eines Abstands Sensors an der Front des Fahrmoduls Ein Display erm glicht das Darstellen von Informationen die folglich auch ohne seriellen Anschluss an den PC ablesbar sind Ein Akku 7 2 Volt bernimmt die Stromversorgung Die drei Servos werden durch die Motorsteuereinheit gesteuert Die Gesamtsteue rung des Moduls bernimmt die Hauptplatine mit einem P87C552 Controller welcher das Programm der Praktikums Teilnehmer enth lt Die Kommunikati on zwischen den beiden Platinen wird ber den I C Bus realisiert Au erdem verf gt das Fahrmodul an vielen Stellen ber Erweiterungsm g lichkeiten die individuell von den Praktikanten genutzt werden k nnen 2 3 Board Abbildung zeigt ein ausgestattetes Fahrmodul im Einsatz Schematisch verdeutlicht
40. entyp unsigned char entspricht dem Datentyp byte ID ist als Dezimal Wert angegeben 24 3 7 Protokoll Befehle Steuerung allgemein 1 RESET Setzt alle Werte in den Ursprungszustand Das beinhaltet L schen der Warte schlange Zur cksetzen aller Geschwindigkeiten und Ticks Stoppen der Timer Die Kalibrierung wird nicht zur ckgesetzt kein Parameter 2 RESET_ALL Wie RESET setzt zus tzlich die Kalibrierung zur ck auf die Standart Werte aus dem Flash kein Parameter 3 ENABLE DEBUG Aktiviert oder deaktiviert den Debug Modus Aktionen der Motorsteuerung werden ber die serielle Schnittstelle best tigt falls der Debug Modus aktiviert ist Bei deaktiviertem Debug Modus gibt die serielle Schnittstelle nur eine Be gr ung aus Byte Nr Funktion Datentyp Werte Beschreibung PARAM1 unsigned 110 1 aktivert char 0 deaktiviert default Befehle zum Kalibrieren 11 CALIBRATE_SET_UPPER 12 CALIBRATE_SET_MIDDLE 13 CALIBRATE_SET_LOWER Setzt den Wert fiir den oberen mittleren unteren Wert maximale Vorw rts Geschwindigkeit keine Bewegung maximale Riickw rts Geschwindigkeit fiir den angegebenen Motor Dieser Befehl kann verwendet werden um be reits bekannte Werte fiir die vorliegende Kombination Platine Motoren in der Initialisierungsphase zu setzen Zur Kalibrierung selbst k nnen die Befehle CALIBRATE_SET_UPPER MIDDLE L
41. eus g I OAT S T osea 1e91q guno27oAJ9Ss OAIOG INJ 0 IWI 31018 11 041 HDIH LUOT LNO 104033 JI 4016 194 som 141914 peusis 0 0A198 0 aseo y9y ms JUNSIIMUV UIJIMS 19P YORU 33 3s Uopal yoeu Y10Jos r y ineu S r z uspuniy sne U9J189S JSWIJ pun usoneysue 9104 uspuayos1dsgua uq U9JI189S 0 IWI USISIALJAR SueSsny yunod oagas HHOOXO 1 LL t 4400X0 9 8 lt lt ORL jjywwrgsoq odugj sindu rp parm ao y JUNOD OAIOS OAIOG INJ M JIU 0 dom sr pira 31qnjo8sne sidnii ul s p Suejuy we d urur ep uuey 1 rp 1105 qdnozio sindur ure uuem T L sneq Inj uoy e4s O JOU 3VYae3s HAOOXO 2 Asavd LINVHAG 011 41400 0 22 8 lt lt HSAVATINVAAQ OHL ASAVILIOVAHA JIU u pejioa 0 IU yosoy 11 FJUNOIOAJLOS 0 ydn1193U u ssu5 u ur q XVWOAHHS lt I JUN0970A108 JI nz 4st Sundonoysuy oasog Suesyoing um 0 OUL uoddoqs 0 dos 3Uun0970A 198 U9I9IALIARIP odugssnv 0A198 MOT OELHO LNO S LYOd LDO PALO LNO 1 qdnisoqur QISMILUO proA 0 dowry 4 any 9urgnogy 3dn1193u
42. ezimal angegeben Befehls ID lt 50 siehe Tabelle 3 2 Master gt Slave Steuerung gt Motorsteuerung Nachrichten ID ist hier dezimal angegeben Nachrichten ID gt 50 siehe Tabelle 3 2 Slave gt Master Motorsteuerung gt Steuerung d h Antwort Statusmeldung Parameter siehe JBefehl Spezifikation Tabelle 3 1 Protokoll Byteweiser Aufbau eines Befehls bzw einer Nachricht 23 3 Software Steuerung allgemein RESET 1 RESET_ALL 2 ENABLE_DEBUG 3 Kalibrieren CALIBRATE_SET_UPPER 11 CALIBRATE_SET_MIDDLE 12 CALIBRATE_SET_LOWER 13 CALIBRATE_ADD_UPPER 14 CALIBRATE_ADD_MIDDLE 15 CALIBRATE_ADD_LOWER 16 CALIBRATE_GET_VALUES 17 CALIBRATE_VALUES 51 CALIBRATE_ERASE 18 CALIBRATE_WRITE_FLASH 19 CALIBRATE_SET_SPEED 31 CALIBRATE_GET_SPEED_VALUE 30 CALIBRATE_SPEED_VALUE 55 Steuerbefehle fiir die Servos MOVE 21 GET_STATUS 22 STATUS 52 STOP 23 START 24 MOVE_2 25 GET_STATUS_2 26 STATUS_2 53 STOP_2 27 START_2 28 SET_SPEED 29 Fehler ERROR 54 Tabelle 3 2 Protokoll 12C Befehle bzw Nachrichten mit ID 3 7 2 Befehl Spezifikation Aufbau Befehl Spezifikation Im Folgenden wird fiir jeden Befehl bzw jede Nachricht der Tabelle der Aufbau und die Befehl Spezifikation erl utert ID NAME_DES_BEFEHLS_ODER_DER_NACHRICHT Beschreibung was dieser Befehl bewirkt bzw die Nachricht enth lt PARAMx Funktion Datentyp erlaubte Werte Beschreibung Der Dat
43. gkeit ermitteln Falls der Servo spiegelverkehrt angebracht ist also andersrum drehen soll wie bei der Vorwarts Maximalgeschwin digkeit von Servo 0 vorgehen Gemeinsame R ckw rts Maximalgeschwindigkeit o Identisch zur Vorgehensweise bei der Ermittlung der gemeinsa men Vorw rts Maximalgeschwindigkeit Nach dem Durchlaufen dieses Algorithmus sind die Kalibrierungswerte der Servos 0 und 1 bekannt Servo 2 besitzt keine Puls Z hlung und kann nicht automatisch kalibriert werden da die Software keinerlei Information ber die aktuelle Position des Servos erhalten kann 16 Default VVert 64613 falls n tig gr eren Wert verwenden 38 5 Zusammenfassung und Ausblick Die Studienarbeit behandelt die Entwicklung einer Motorsteuereinheit fiir das Fahrmodul vom Informations Systemtechnik Praktikum Bei den angesteuerten Motoren handelt es sich um drei Modellbau Servos Ein handelsiiblicher Servo ist zur Bewegung eines Sensors oder hnlichem vorgesehen Zwei modifizier te Servos stellen den Antrieb des Fahrmoduls dar Sie k nnen sich fortlaufend rundum drehen und sind durch eine Einheit Platine mit Messaufnehmer er weitert die Pulse liefert anhand derer die Motorsteuerung eine Drehwinkelbe stimmung des Servos machen kann Diese Puls Verarbeitung ist mittels zweier Counter realisiert die zum Z hlen der Impulse keine Rechenzeit des P89C664 Mikrocontrollers beanspruchen Die Generierung der Steuerimpulse fiir die Servos ist ei
44. in Abbildung dargestellt Die verst rkten Signale der Steuer Pins sind am Stecker Pin 3 bereitgestellt Die von den Servos generierten Pulse f r die Messung von Entfernungsschrit ten werden in der Puls Aufarbeitung f r die Mikrocontroller Eing nge vor bereitet Zu diesem Zweck gl tten Kondensatoren C14 und C15 das Signal so dass hochfrequente St rungen nicht als Puls gez hlt werden Die nachge 2 Hardware schalteten Schmitt Trigger Inverter im Baustein IC1 sorgen ebenfalls fiir ein ges ubertes Signal Die serielle Schnittstelle CON5 ist ber einen MAX232 IC2 an den Controller angeschlossen Der Controller verf gt ber eine interne full duplex serielle Schnittstelle die die ben tigten Signale RXD f r den Empfang recei ve und TXD f r das Senden transmit zur Verf gung stellt Die Schnittstelle wird im Mode 1 betrieben d h 8 Bit UART mit variabler Baud Rate Die Si gnale RXD und TXD des Controllers verwenden TTL Pegel 0 Volt und 5 Volt Die serielle RS 232 Schnittstelle eines Computers verwendet dagegen die Pe gel 12 Volt eine logische 0 wird dargestellt durch 12 V eine logische 1 durch 12 V Der integrierte Schaltkreis MAX232 wird ben tigt um die Pe gel anzupassen Er wandelt das vom Controller kommende Signal TXD in TX um welches an Pin 3 des 9 poligen D SUB Steckers CON5 herausgef hrt wird Das vom Computer kommende Signal RX Pin 2 von CON5 wird zu RXD gewandelt Da der Mikrocontroller ber eine I
45. it dem Befehl MOVE gef llt wird da er die Befehle dort berholt und deren Ausf hrung verhindert Der Befehl SET_SPEED 2 entspricht dem Befehl MOVE_2 Byte Nr Funktion Datentyp Werte Beschreibung 1 unsigned 0 1 2 Motor der gestartet char wird PARAM2 signed char 128 127 Geschwindigkeit Der leere Befehl fiir keine Aktion siehe Befehle MOVE STATUS MOVE 2 STATUS_2 ist durch die Parameter Geschwindigkeit 0 und Ticks 0 m glich Eine unendliche Bewegung der Motoren 0 oder bzw und 1 wird durch Setzen der Ticks 0 erreicht Diese Bewegung wird unterbrochen sobald der andere Motor seine Ticks abgearbeitet hat Wenn beide Motoren unendliche Befehle haben Ticks 0 wird die Ausfiihrung abgebrochen sobald ein nachfolgender Befehl in die Warteschlange eingereiht wird 54 ERROR Zeigt einen Fehler in der Motorsteuerung an Die Behandlung der Fehler ist im Benutzerhandbuch beschrieben Fehler Code 61 ERROR_WRITE_FLASH Fehler Code 62 ERROR_FLASH_IS_NOT_ERASED Fehler Code 63 ERROR_FIFO_FULL Byte Nr Funktion Datentyp Werte Beschreibung PARAMI unsigned 61 62 63 Fehler Code char Hier kann das vorgegebene struct ERROR_MSG verwendet werden 31 3 Software 32 4 Anwendung 4 1 Motortest Programm Um die entwickelte Motorsteuerung testen zu k nnen wurde das zur Verf gung gestellte Motortest Programm modifiziert und erweitert Das Pr
46. lsweise ein geordne tes Geradeausfahren nicht m glich Ein m gliches Verfahren zur automatischen Kalibrierung dient als Idee f r ei ne m gliche Anwendung und weitere Besch ftigung mit dieser Motorsteuerein heit Ein bisher nicht verwendeter 10 poliger Steckverbinder auf dem entwi ckelten Board erlaubt die Verwendung von vier dort angeschlossenen Pins des I O Ports 2 vom Mikrocontroller sowie die zus tzliche Verdrahtung von vier weiteren Signalen F r ein so erweitertes Board ist die Programmierung von zus tzlichen Modulen m glich mit denen die Motorsteuerung weitere Aufga ben bernehmen kann Durch die sparsame Ressourcen Nutzung der Impuls Generierung und Puls Z hlung ist weitere Rechenzeit verf gbar 39 5 Zusammenfassung und Ausblick 40 Literaturverzeichnis 1 Philips Semiconductors Data Sheet P89C660 P89C662 P89C664 P89C668 Oktober 2002 U S A 2 Keil Software Cx51 Compiler User s Guide September 2001 Hilfe Datei der Software Vision 31 Christian Schr der Benutzerhandbuch Motorsteuereinheit Institut f r Be triebssysteme und Rechnerverbund Technische Universit t Braunschweig 2005 http www ibr cs tu bs de theses broeke SA_ Motorsteuereinheit_Prakt Dokumente html 4 Brian W Kerninghan Dennis M Ritchie Programmieren in C Zweite Auf lange ANSI C Carl Hauser Verlag Miinchen Wien 1990 41 Literaturverzeichnis 42 A Listings 43 A Listings dOLs 19q Bam jqr q
47. mers um Dieser umgerechnete Wert wird in der Variable servo position servol gespeichert Dabei beachtet die Funktion die bei der Kalibrierung gespeicherten Maximal und Mittel Werte 3 5 Flash programDataByte und eraseBlock Zusammen mit der befindet sich die Kalibrierung im Mo dul servotiming Die dort eingestellten Kalibrierungs Werte vgl Abschnitt f r die Servo Motoren k nnen in den des Mikrocontrollers geschrieben werden Hier wird beschrieben wie das Speichern und L schen im Flash realisiert ist Im Flash kann nur blockweise gel scht und byteweise geschrieben werden Ein Byte kann aber im Allgemeinen nur einmal beschrieben werden und dann nicht wieder berschrieben werden Eine Ausnahme stellt der Fall dar in dem beim berschreiben die Bits so ge ndert werden dass nur zus tzliche Einsen in Nullen umgewandelt werden Eine einmal geschriebene Null kann nur durch L schen des gesamten Blockes wieder in eine Eins verwandelt werden Da die 12Ein ausbleibendes Signal f hrt tats chlich nicht sofort zum Stillstand sondern erst etwas zeitverz gert wenn n mlich die Servo Elektronik feststellt dass keine weiteren Impulse kommen Ein sofortiger Stopp kann durch Senden der Geschwindigkeit 0 erwirkt werden 20 3 6 Puls Z hlung tickcounttining Timer Kalibrierungs Daten von der Anwendung ge ndert bzw gel scht werden sollen sind sie in einem eigenen Block gespeichert Dieser Block darf keine Programm Daten enthalten
48. mgebung der Firma Keil Software 3Flash Magic ist eine kostenlose ISP Software f r Philips Flash Mikrocontroller Bezugsquelle http www esacademy com software flashmagic 2 Hardware Akku 7 2 V Abbildung 2 6 Schematischer Anschluss der Motorsteuereinheit an das Fahrmodul Schaltbild des von mir entwickelten Boards anhand dessen im Folgenden die Elemente beschrieben sind Ebenfalls im AnhangjBjbefinden sich einige Grafiken zum Aufbau der Platine auf die hier nicht n her eingegangen wird Das Motorsteuer Board hat die Elemente e Spannungsversorgung e Mikrocontroller P89C664 von Philips siehe Abschnitt e Servo Treiber e Puls Aufarbeitung e Serielle Schnittstelle e 12 Reset Schalter e Oszillator e zus tzliche Schnittstelle f r Erweiterungen Die auf dem Board integrierte Spannungsversorgung verteilt die ankom menden 7 2 Volt auf zwei unabh ngige 5 Volt auf Vez dient der Versorgung der Servo Motoren und wird mit dem Spannungsregler U2 78505 erzeugt welcher 2 Ampere liefert und mit einem K hlk rper gek hlt werden muss Der Spannungsregler U1 7805 erzeugt ebenfalls 5 Volt Vcc die der Elektro nik zugef hrt werden Aufgrund des geringeren Stromverbrauchs der Elektro nik liefert U1 lediglich 1 Ampere und braucht nicht gek hlt zu werden Die rote LED zeigt die Existenz der Versorgungsspannung an In der Abbildung ist der Spannungsversorgungs Teil des abgebildet Die 2 3 Board Kondensatoren
49. mpulse mit einem Timer zu erzeugen Hierf r wird der Timer 0 verwendet Um die drei Impulse mit nur einem Timer generieren zu k nnen werden sie nacheinander erzeugt Ihre L nge betr gt jeweils maximal 2 5 ms und zwischen den Impulsen f r einen Servo sollen etwa 20 ms liegen mehr ist nicht problema tisch Es bleibt gen gend Zeit die Impulse aneinander zu reihen Es entsteht wie in Abbildung 3 1 zu sehen dreimal ein Impuls von 0 5 ms bis 2 5 ms an ei nem jeweils verschiedenen Port gefolgt von einer konstanten Pause von 21 5 ms Die L nge der Pause ist nicht von grofer Bedeutung darf also schwanken In dieser Konfiguration schwankt die Pause zwischen 23 ms und 29 ms je nach Impulsl nge der drei Servos lli 23 bis 29 ms 1 i Ee senos ms Dauer der Bearbeitung der Interrupt Routine void onTimer0 interrupt 1 Ankommender Interrupt von Timer 0 t t t 0 5 bis 2 5 ms jeweils konstant Abbildung 3 1 Drei mit einem Timer erzeugte Impulse 18 3 4 Impulse generieren servotiming Dies ist wie folgt in Software umgesetzt Der Timer 0 erzeugt beim Uberlauf dem Wechsel von 0xFFFF nach 0x0000 einen Interrupt Sofort wird aufgrund dieses Interrupts die zugeh rige Interrupt Routine void onTimer0 interrupt 1 ausgef hrt Diese Funktion stellt das Hauptelement der Impuls Generierung dar Hier wird die L nge des n chsten Intervalls berechnet und die Pins angesteuert Da die drei Impulse fiir die
50. n Die Antwort ist die Nachricht STATUS_2 Die Ausf hrung der Warteschlange der Motoren 0 und 1 und des Befehls f r Motor 2 werden nicht beeinflusst kein Parameter 53 STATUS_2 Riickantwort Slave gt Master Motorsteuerung gt Steuerung Liefert den von GET_STATUS_2 angeforderten aktuellen von Motor 2 ausgefiihr ten Befehl Die Ausf hrung der Warteschlange der Motoren 0 und 1 und des Befehls f r Motor 2 werden nicht beeinflusst Falls sich der Motor im STOP Zustand befindet wird Geschwindigkeit Null zur ckgegeben Byte Nr Funktion Datentyp Werte Beschreibung PARAMI signed char 128 127 Geschwindigkeit Motor 2 Die Parameter sind identisch mit denen des MOVE_2 Befehls 27 STOP_2 Pausiert die Ausfiihrung des Befehls fiir Motor 2 Das Signal am Motorausgang 2 wird unterbrochen Die Motoren 0 und 1 bleiben unbeeinflusst Der in diesem Zustand zuriickgegebene Status liefert die Geschwindigkeit Null kein Parameter 28 START_2 Fiihrt die Ausfiihrung des aktuellen Befehls von Motor 2 fort Die Motoren 0 und 1 bleiben unbeeinflusst kein Parameter 30 3 7 Protokoll 29 SET_SPEED Aktiviert sofort den entsprechenden Motor mit der angegebenen Geschwindig keit und unendlicher Bewegung also ohne Z hlung von Entfernungs Schritten Achtung Dieser Befehl sollte nicht gleichzeitig mit der Warteschlange ver wendet werden die m
51. n der Struktur struct MOVE_COMMAND Da es dem Anwender m glich sein soll mehrere MOVE Befehle nacheinander abzusenden werden diese in eine Warteschlange nach dem Prinzip First in First out F iFo Hl organisiert Diese Aufgabe bernimmt das Modul fifo Die Funktionen pushFifo und popFifo erf llen die Aufgaben ein Element hinzuzuf gen bzw herauszuholen Fin Element besteht wie im Modul MOTOR_DEFS zu sehen aus zwei VVerten je Servo Die Geschwindigkeit mit der sich der Servo drehen soll und die Ticks die er sich fortbewegen soll Die Ticks sind die vom Servo gez hlten Pulse Ent fernungsschritte Durch Kombinationen der Werte lassen sich auch unendliche Bewegungen oder Bewegungen nur eines der Motoren erreichen siehe koll Die Gr e des FiFo Speichers l sst sich zu Beginn des Moduls in der Kon stante FIFO_SIZE festlegen und ist standardm ig auf 100 gesetzt Die Funktion signed char pushFifo struct MOVE_CMD dat f gt ein Ele ment der Warteschlange hinzu falls dort freier Speicherplatz zur Verf gung steht Ist die Warteschlange voll wird der Befehl verworfen und eine 0 zur ck gegeben woraufhin ber den J C Bus die Fehlernachricht ERROR_FIFO_FULL ge sendet wird Sobald der Befehl erfolgreich in die Warteschlange eingereiht wur de wird die Funktion startNewMove aufgerufen welche berpr ft ob der Befehl sofort ausgef hrt werden kann siehe dazu auch Abschnitt 3 6 Riickga bewert von pushFifo i
52. n sollen muss vorher unbedingt ein CALIBRATE_ERASE durchgef hrt werden da sonst die neuen Werte nicht kor rekt gespeichert werden die 0 Bits der alten Werte w rde erhalten bleiben kein Parameter 3l CALIBRATE_SET_SPEED Setzt die Geschwindigkeit f r den angegebenen Motor direkt auf den angege benen Wert Dieser Befehl umgeht die sonst angewendeten 1 128 127 die im normalen Betrieb innerhalb der Motorsteuerung in den hier direkt bermit telten Wert umgerechnet werden Dieser Befehl kann verwendet werden um Kalibrierungswerte auszuprobieren Achtung Mit diesem Befehl k nnen die Kalibrierungsgrenzen UPPER und LOWER bergangen werden 1 unsigned 0 1 2 Motor dessen Wert char gesetzt wird PARAM2 HI Byte unsigned t PARAM3 LOW Byte integer 105838 Hier kann das vorgegebene struct CALIBRATE SET CMD verwendet werden 30 CALIBRATE_GET_SPEED_VALUE Fordert den Wert vom Datentyp unsigned integer der aktuellen Geschwin digkeit vom angegebenen Motor an Dieser Wert kann fir die Kalibrierung niitzlich sein wenn die Geschwindigkeit beispielsweise mit SET_SPEED ge setzt wurde siehe auch CALIBRATE SET SPEED Die Antwort ist die Nachricht CALIBRATE_SPEED_VALUE Byte Nr Funktion Datentyp Werte Beschreibung 1 unsigned 0 1 2 Motor dessen Wert char angefordert wird 27 3 Software 55 CALIBRATE_SPEED_VA
53. ne wesentliche Aufgabe der Software Sie wird Ressourcen sparend mit Hilfe eines einzelnen Timers erfiillt Die im Abstand von etwa 20 ms zu erzeugenden 0 5 ms bis 2 5 ms langen Impulse fiir jeden Servo werden nacheinander mit dem gleichen Timer berechnet So verbleibt gen gend Rechenzeit f r weitere Aufgaben wie die Puls Verarbeitung und die Kommunikation Die Motorsteuerung verf gt ber zwei Schnittstellen zur Kommunikation mit anderen Elementen Die serielle RS 232 Schnittstelle wird verwendet um De bug Ausgaben an einem Terminal sichtbar zu machen und um das mit Vision erstellte Programm hochzuladen Die 77C Bus Sehnittstelle ist vorgesehen um Befehle von der Hauptplatine des Fahrmoduls zu empfangen Diese Befehle sind in einem Protokoll spezifiziert so dass sie von den Teilnehmern des Praktikums mit ihrem Programm erzeugt werden k nnen Die Befehle sehen eine unabh n gige Steuerung der drei Servos vor Es ist zudem st ndig m glich den Status der Servos und der Puls Z hlung abzufragen Ein wesentliches Merkmal der Software der Motorsteuerung ist die M glich keit die angeschlossenen Servos zu kalibrieren Da sich jeder Servo bez glich seiner Maximalausschl ge bzw erreichten Geschwindigkeiten und seiner Mit telposition unterschiedlich verh lt k nnen diese drei Werte f r jeden der drei angeschlossenen Servos separat festgelegt werden Erst ein korrekt kalibriertes Fahrmodul verh lt sich berechenbar Andernfalls ist beispie
54. noch nicht erreicht hat 37 4 Anwendung o Das Ergebnis ist die Vorw rts Maximalgeschwindigkeit UPPER bzw LOWER je nach Drehrichtung fiir Servo 0 Zus tzlich den Zahlerstand zwischenspeichern Servo 1 o Entsprechend Servo 0 die Vorw rts Maximalgeschwindigkeit er mitteln Falls der Servo spiegelverkehrt angebracht ist also an dersrum drehen soll wie bei der R ckw rts Maximalgeschwin digkeit von Servo 0 vorgehen Gemeinsame Vorw rts Maximalgeschwindigkeit o Die Z hlerst nde bei Maximalgeschwindigkeit der Servos 0 und 1 vergleichen Die Maximalgeschwindigkeit des Servo mit dem h heren niedrigeren Wert muss verringert vergr ert werden je nach Drehrichtung damit sich beide Servos in ihrer Maximal stellung gleich schnell bewegen o Zu diesem Zweck den Geschwindigkeitswert des schnelleren Ser vos Richtung Mittelposition MIDDLE schrittweise ver ndern bis der Z hlerstand gleich dem des langsameren Servos ist Hier bei kann sich wie bereits beschrieben in ver nderbaren Schritt weiten an den gewiinschten Wert herangetastet werden R ckw rts Kalibrierung Servo 0 o Die drei ersten Punkte der Vorw rts Kalibrierung mit dem De fault Wert 64613 wiederholen Dabei den Wert jedoch jeweils verkleinern o Das Ergebnis ist die R ckw rts Maximalgeschwindigkeit LOW ER bzw UPPER je nach Drehrichtung f r Servo 0 o Servo 1 o Entsprechend Servo O die R ckw rts Maximalgeschwindi
55. ogramm liegt im Quellcode f r Vision vor und kann auf einem P87C552 ausgef hrt werden wie er sich auf der Praktikums Platine befindet Anschluss Die Praktikums Platine wird wie zur normalen Steuerung der Motorsteuerein heit ber den 12C Bus an diese angeschlossen siehe Abbildung 2 6 Das Mo tortest Programm wird ber die serielle Schnittstelle geladen und gesteuert Im Target Setup muss eventuell der anzusprechende Port umgestellt werden da in diesem Projekt COM2 verwendet wurde Starten Um das Programm auszuf hren wird das Target Monitor gew hlt und dann der Debug Modus gestartet Dieser l dt das Programm automatisch in den Con troller und f hrt den Befehl g 0x2000 aus Dieser Sprungbefehl startet das Testprogramm Steuern l sst sich das Programm ber Eingaben an der seriel len Schnittstelle Diese werden umgesetzt in I C Bus Befehle entsprechend dem Motorsteuerungs Protokoll f r die Motorsteuerung Bedienen Das Programm sendet die im Protokoll spezifizierten 1 C Bus Befehle mit de ren Hilfe die Motorsteuerung getestet werden kann Eine bersicht der Befehle die das Programm senden kann wird nach Eingabe von h oder hilfe ange zeigt Reaktionen der Motorsteuerung k nnen mit Eingabe von receive lt bytes gt angezeigt werden Dieser Befehl zeigt lt bytes gt Bytes des C Bus Empfangs Puffers an Die als unsigned char 0 bis 255 dargestellten Bytes m ssen falls n tig selbst in andere
56. rogrammierung des Controllers geeignete Entwicklungsumge bung ist Vision von der Firma Keil Softward Diese wird bisher schon im Praktikum verwendet ist folglich vorhanden und muss nicht angeschafft wer den Des Weiteren ist es den Praktikums Teilnehmern m glich ohne lange Ein arbeitungszeit Ver nderungen an der Motorsteuerung vorzunehmen Durch die Bereitstellung eines universellen Protokolls siehe Abschnitt 3 7 soll dieses aber berfl ssig sein Ein weiterer Vorteil ist die genau passende Ausstattung des Controllers Er verf gt ber einen Flash Speicher der In System Programming ISP und In Application Programming IAP unterst tzt kann also ohne aus gebaut zu werden sogar von der Endbenutzer Applikation beschrieben werden siehe auch Abschnitt 3 5 Verschiedene Interrupts lassen sich vier Priorit ts Stufen zuweisen Dadurch wird es m glich die hoch priore Impuls Generierung sehr genau erfolgen zu lassen da die Interrupt Routine f r die Steuerung die ser Impulse nicht durch andere Interrupts niedrigerer Priorit t unterbrochen werden kann Die im Mikrocontroller vorhandenen Schnittstellen entlasten die Programmierung und die Best ckung der Platine erheblich So ist eine serielle Schnittstelle vorhanden die in diesem Projekt zur Programmierung und Feh lerkontrolle eingesetzt wird Die ebenfalls vorhandene serielle I C Schnittstelle wird f r die Steuerung der Motorsteuereinheit und Status Meldungen verwen det Die 8 Bit I O
57. sollen mittels einer Befehlsstruktur die Servomotoren kontrolliert steuerbar sein und jederzeit der Status der Motorsteuereinheit abgefragt werden k nnen Laufzeit 3 Monate Die Hinweise zur Durchf hrung von Studien und Diplomarbeiten am IBR sind zu beachten siehe http www ibr cs tu bs de lehre arbeiten howto Aufgabenstellung und Betreuung Prof Dr Lars Wolf Dipl Ing Dieter Br kelmann cand informations systemtechnik Christian Schr der vili Inhaltsverzeichnis 1 Einleitung Hardware A 0000777 2 1 1 Impuls Ansteuerung 2 1 2 Puls Generierung 22 Anschluss an das Fahrmodull 2 3 2 4 Maikrocontrollerl 3 Software 3 1 Definitionen MOTOR DEES HI 3 2 Hauptprogramm main 3 3 Warteschlange fifo 3 4 Impulse generieren servotiming 3 5 Flash programDataByte und eraseBlock 3 6 Puls Z hlung tickcounttining Timer 3 7 _ Protokoll 3 7 1 Aufbau der Befehlel 3 7 2 Befehl Spezifikationi 4 Anwendung 4 1 Motortest Programmj 4 2 Kalibrierung 4 2 1 Anwendungsvorschlag Kalibrierung Zusammenfassung und Ausblick Literaturverzeichnis A Listings B Board 15 15 16 17 17 20 21 23 23 24 33 33 34 36 39 41 43 49 1x Inhaltsverzeichnis Abbildungsverzeichnis 4 5277 5 2 3 Modifizierter
58. st im Erfolgsfall 1 Die Funktion struct MOVE_CMD popFifo gibt einen Pointer auf das l teste Element der Warteschlange zuriick Falls der Speicher leer ist erfolgt die Riickgabe von NULL 3 4 Impulse generieren servotiming Die wichtigste weil zeitkritische Funktion ist die Generierung der Impulse die die in Abschnitt 2 1 beschriebenen Servos steuern Diese Generierung wird im Modul servotiming vorgenommen In dieser Funktion ist es sehr wichtig die jeweilige Lange der Impulse konstant zu halten Au erdem soll die Ausf h rungsdauer des Codes nicht die anderen Aufgaben beeintr chtigen Aus diesem Grund fiel die Entscheidung auf die folgende Funktionsweise mit Hilfe von hoch prioren Interrupts Der Mikrocontroller verf gt neben dem f r die serielle Schnittstelle verwen deten ber drei verf gbare Timer die sich anbieten f r die Generierung der Impulse zu dienen da sie extrem genau sind und nicht viel Rechenzeit in An spruch nehmen Da aber die in Abschnitt beschriebene Puls Verarbeitung 1 FiFo Das erste ankommende Element wird auch als erstes wieder entfernt 17 3 Software ebenfalls optimal mit je einem Timer funktioniert verbleibt fiir die Generierung der drei Impulse nur ein Timer Um ein Zittern des Servos zu verhindern bzw eine ungest rte Bewegung zu erreichen muss jeweils die Lange jedes Impulses konstant bleiben allerdings nicht deren Abstand zueinander Dadurch ist es m glich alle drei I
59. st in verschiedene Module aufgeteilt die in Dateien gekapselt sind MOTOR_DEFS H enth lt globale Einstellungen main enth lt das Hauptprogramm fifo stellt eine Warteschlange zur Verwaltung der Motor Befehle zu Ver f gung e servotiming erzeugt die Impulse und stellt die Kalibrierung zu Verf gung e tickcounttimingTimer wertet die Pulse aus e programDataByte schreibt mit Hilfe von eingebundenem Assembler Code ein Byte in den Flash Speicher e eraseBlock l scht einen Block im Flash Speicher e i2c_slave ist ein mir zur Verf gung gestelltes Modul von Markus Rilk zum Empfang der I 2C Daten Die Module werden im Folgenden detailliert beschrieben 3 1 Definitionen MOTOR_DEFS H Das Modul MOTOR_DEFS H ist die zentrale Stelle an der das Verhalten der Mo torsteuerung geregelt ist und globale Datentypen und Variablen definiert sind Es folgt eine Beschreibung der wichtigen Einstellungs M glichkeiten Die Konstante DBG bestimmt ob die vielf ltigen Debug Ausgaben an der se riellen Schnittstelle ausgegeben werden sollen 1 oder nicht 0 Bei Aktivieren dieser Funktion ist zu bedenken dass die h ufige Ausf hrung des printf Befehls zu Fehlern in der Ausf hrung f hren kann Die per Protokoll Befehl Die verf gbaren Funktionen lassen sich in der C51 Library Reference nachlesen die als Hilfe Datei in uVision verf gbar ist Das Modul i2c_slave wird hier nicht n her beschrieben 15 3 Software
60. t dem Befehl CALIBRATE_GET_SPEED_VALUE angefor dert werden e CALIBRATE_ADD xxx Falls eine Anwendung es erfordert k nnen die Befehle CALIBRATE_ADD_UPPER CALIBRATE_ADD_MIDDLE und CALIBRATE_ADD_LOWER mit einem anschlie enden SET_SPEED verwendet werden Erst SET_SPEED macht die nderungen wirksam Welche Werte nach obigen Methoden ausprobiert werden sollten bleibt dem Anwender der die Kalibrierung durchf hrt berlassen Eine schnelle aber auch sehr ungenaue Methode ist beispielsweise die Ermitt lung der Maximalwerte nach Geh r In dem Fall wird der Wert f r UPPER oder LOWER erh ht oder verringert bis keine Ger usch nderung mehr stattfindet Eine sehr viel genauere Methode ist das Z hlen der zur ckgelegten Entfer nungsschritte Pulse Zu diesem Zweck sind die Befehle MOVE und GET_STATUS n tzlich Mit MOVE kann eine unendliche Bewegung einer bestimmten Ge schwindigkeit initiiert werden woraufhin nach einer festen Zeit mit Hilfe des 35 4 Anwendung Befehls GET_STATUS die zuriickgelegten Entfernungsschritte abgefragt werden Ein Vergleich zwischen den Servos liefert Informationen welcher Servo schneller oder langsamer ist und kalibriert werden muss Eine detailliertere Programmi dee ist in Abschnitt dargestellt Weitere praktische Informationen zur Anwendung speziell zum anschlie en den Speichern der Werte im Flash befinden sich im Benutzerhandbuch 4 2 1 Anwendungsvorschlag Kalibrierung In diesem Abschnit
61. t wird ein Vorschlag beschrieben wie ein Programm bei der Kalibrierung zweier Motoren vorgehen k nnte Besonderer Wert wird auf genaue Abstimmung der maximalen Geschwindigkeiten der zwei Fahr Servos gelegt damit das Fahrzeug nach der Kalibrierung bei gleichem angesteuerten Geschwindigkeitswert der zwei Motoren auch geradeaus f hrt Das Prinzip hinter dieser Idee ist die Verwendung der Puls Z hlung in Ver bindung mit einer genau festgelegten Messzeit dieser Entfernungsschritte Der Kern ist ein Algorithmus der Befehle in bestimmter Reihenfolge und exaktem Timing ber den I C Bus sendet Dabei m ssen folgende Schritte eingehalten werden e Kalibrierungsdaten setzen Die zu testenden Kalibrierungswerte f r die Servos sind zu setzen Daf r sind die Befehle CALIBRATE_ADD_xxx oder CALIBRATE_SET_xxx geeignet Hier ist darauf zu achten dass sich die Ser vos bei spiegelverkehrter Montage in die gleiche Richtung bewegen siehe Abschnitt 4 2 e Zeit nehmen Zun chst muss die Zeit genommen werden da die tats ch liche Geschwindigkeit der Servos von der Software nur ber die Kombina tion aus zuriickgelegter Strecke Entfernungsschritte bzw Pulse und der Zeit ermittelt werden kann e Servos starten Mit dem Befehl MOVE werden anschlie end beide Moto ren mit einer unendlichen oder hinreichend weiten Bewegung welche keinesfalls vor Ablauf der Zeit erreicht sein darf und maximaler Ge schwindigkeit gestartet Je nach zu testender Rich
62. ten Geschwindigkeit Ein Impuls nahe dem Mittelwert von 1 5 ms veranlasst die Servo Elektronik dazu eine kleine Winkel nderung durchzuf hren weswegen sich der Servo sehr langsam dreht Da diese Position nie erreicht wird dreht sich der Servo st ndig mit langsa mer Geschwindigkeit bis der Impuls wieder die Mittelstellung angibt Ein Im puls nahe dem Maximalausschlag l sst die Servo Elektronik eine gro e Winkel nderung durchf hren die zu einer h heren Geschwindigkeit f hrt Analog zur niedrigen Geschwindigkeit wird die Position nie erreicht folglich dreht der Servo st ndig mit hoher Geschwindigkeit Die Software der Motorsteuerung ist auf die Steuerung zweier modifizierter Servos und eines nicht modifizierten ausgelegt Die zwei modifizierten Servos sollen als Antrieb rechts links f r das im Praktikum verwendete Fahrzeug dienen Der nicht modifizierte kann frei verwendet werden beispielsweise zur Bewegung eines Sensors Da weder Soft noch Hardware erkennen k nnen ob ein Servo modifiziert ist oder nicht sind diese beliebig austauschbar wenn die Anwendung Sinn ergibt Die Antriebs Servos haben im Programm und der Do kumentation die Nummern 0 und 1 der zus tzliche Servo die Nummer 2 Die Steuerung der Servos geschieht ber den I O Port 2 des Mikrocontrollers Ser vo 0 wird ber den Ausgangs Pin P2 4 Servo 1 ber Pin P2 5 und Servo 2 ber Pin P2 6 angesteuert vgl Schaltplan in Abbildung B 5 F r die Ansteuerung der
63. tung ist das 127 f r vorw rts oder 128 f r r ckw rts e Zeit abgelaufen Sobald eine bestimmte Zeit abgelaufen ist z B 2 Se kunden wird mit dem Befehl GET_STATUS der Z hlerstand der beiden Servos abgefragt Die Servos laufen w hrend dieser Abfrage noch An schlie end k nnen sie gestoppt werden e Z hlerst nde auswerten Diese beiden Z hlerst nde sind auszuwerten Ziel ist es bei gleicher vorgegebener Geschwindigkeit an dieser Stelle glei che Werte f r beide Servos zu erhalten Dann bewegen sie sich gleich schnell Weiteres Ziel ist es hier m glichst hohe Werte f r die fortgeleg ten Entfernungsschritte zu erhalten weil das einer hohen Geschwindigkeit entspricht F r die Kalibrierung der Mittelstellung muss der Wert Null sein 36 4 2 Kalibrierung Mit dieser Methode k nnen beide Motoren gleichzeitig gestartet und ausgewer tet werden Das hat den Vorteil dass keine unterschiedlichen Be arbeitungszei ten der Befehle die Messung beeintr chtigen Ein Algorithmus um diesen gerade beschriebenen Kernalgorithmus herum muss die Kalibrierungswerte sinnvoll w hlen und die Auswertung der erhaltenen Z hlerst nde vornehmen Beispielsweise kann sich der Algorithmus von zwei Seiten mit immer kleineren Schritten an den Maximalwert herantasten Die Vorgehensweise kann wie folgt aussehen e Mittelposition Stand kalibrieren Servo 0 o Den Wert schrittweise z B 1000er Schritte von LOWER an UPPER ann hern o
64. urch nderung der Verh ltnisse LOWER gt lt UPPER eingestellt werden Die Kalibrierung l uft nun wie folgt ab 34 4 2 Kalibrierung Falls bereits Werte aus fr heren Versuchen fiir die Servos bekannt sind k n nen sie mit den Befehlen e CALIBRATE_SET_UPPER e CALIBRATE_SET_MIDDLE e CALIBRATE_SET_LOWER f r jeden Servo separat in den Speicher geschrieben werden Bis zum n chsten Reset bleiben sie erhalten Die Ermittlung der richtigen Kalibrierungswerte fiir UPPER MIDDLE und LOWER fiir jeden Servo kann auf verschiedene Weise vorgenommen werden Zuerst folgen M glichkeiten wie ein gew nschter Wert zur Probe bermittelt und zur Ausf hrung gebracht werden kann e CALIBRATE_SET_SPEED Die direkte Art und Weise einen Servo in der gew nschten Geschwindig keit Achtung 16 Bit Geschwindigkeit drehen zu lassen ist der Befehl CALIBRATE_SET_SPEED e SET_SPEED Ist eine grobe Kalibrierung bereits vorgenommen kann auch der Befehl SET_SPEED verwendet werden um eine Geschwindigkeit zu setzen Hier ist zu beachten dass keine Werte jenseits der aktuellen Werten f r UP PER und LOWER m glich sind Au erdem ist die Genauigkeit unter Umst nden sehr viel schlechter als bei Verwendung des oben genannten Befehls Sind die Werte UPPER und LOWER schon in den RAM ge schrieben bietet sich diese Methode zum Finden der Mittelposition an Ist die gew nschte Geschwindigkeit eingestellt kann der Kalibrierungs wert anschlie end mi
65. vos ist es m glich als Motor Rundum Drehungen auszuf hren Die modifizierten Servos wurden von meinem Betreuer zur Verf gung gestellt Nicht modifizierte Servos werden durch Impulse an ihrer Steuersignal Lei tung gesteuert Diese HIGH Impulse 5 Volt haben einen Abstand von etwa 20 ms Die Impulse sind zwischen 1 0 ms und 2 0 ms lang und stehen f r eine Position innerhalb der 120 Grad Die Mittelposition ist folglich bei etwa 1 5 ms Abbildung 1 zeigt eine Ansteuerung mit 2 ms Signalen Da die hier verwende ten Servos eine gr ere Drehbewegung beherrschen kann die Software Impulse zwischen 0 5 ms und 2 5 ms erzeugen was zu einer gr eren Drehbewegung f hrt gt 120 Grad Wichtig ist dass der Abstand zwischen den Impulsen nicht exakt 20 ms betragen muss Dieser Wert darf schwanken Werden die Servos nun wie oben beschrieben modifiziert f hren die Impul se verschiedener L nge nicht mehr zu einer absoluten Winkel Position die der Quelle Servotext bereitgestellt von Dieter Br kelmann Braunschweig 2004 2 Hardware 0 2 22 24 ms Abbildung 2 1 Impulse fiir die Servo Ansteuerung Servo einnimmt sondern bewirken verschiedene Geschwindigkeiten Durch die Arretierung des Potentiometers geht die Servo Elektronik davon aus st ndig in Mittelposition zu sein und steuert die angelegten Positionen dann mit ver schiedenen Geschwindigkeiten an Da die Position nie erreicht wird entsteht eine Drehbewegung mit einer bestimm
Download Pdf Manuals
Related Search
Related Contents
Vigo VGT018CHRND Instructions / Assembly Canyon CNL-CSEP01 headphone TDK J Series JBW User's Manual MedaPro Copyright © All rights reserved.
Failed to retrieve file