Lehre.IW_P11 (Struktur)


Informatikwerkstatt - Gruppe MR, Interaktive Übungen zu Foliensatz 11

Drehzahlsteuerung (P11\F11-test_pwm\test_pwm)

Hardware-Konfiguration:
  • Motoren über zwei H-Brücken PModHB5 und Y-Kabel an JL
  • PModUSBUSART an JH und über USB-Kabel mit PC verbinden.
  • JHX und JLX gekreuzt.

Programmdateien: pwm.c , pwm.h , test_pwm.c + Treiberdateien comir_tmr.h/c und comir_pc.h/c

Das Projekt umfasst als neue Dateien den Motortreiber (pwm.c/h) und den Testrahmen test_pwm.c für diesen. Der Motortreiber nutzt Timer 5 zur PWM-Erzeugung und stellt folgende Funktionen bereit:
  • Initialisierung (pwm_init())
  • Start (pwm_start())
  • Stopp (pwm_stop())
  • Einstellen der Geschwindigkeit (pwm_set_A()/pwm_set_B())
Test:
  • In "comir_pc.h" für die Länge der Empfangs- und Sendenachrichten 6 bzw. 0 einzustellen:
    	 #define COM_PC_RMSG_LEN 6
    	 #define COM_PC_SMSG_LEN 0
    	
  • Übersetzen und Starten.
  • HTerm öffnen. 8N1, 9600 Baud einstellen. Verbinden.
  • 6-Byte Nachrichten an den Mikrorechner senden:
    • Byte 1+2: Pulsbreite relativ zu 0x2000 für Motor A
    • Byte 3+4: Pulsbreite relativ zu 0x2000 für Motor b
    • Byte 5+6: Bewegungsdauer in Zehntel Sekunden.
    Sinnvolle Werte für die Pulsbereite sind 0, 0x200 bis 0x2000 und -0x2000 bis 0x200 und für die Bewegungsdauer mindestens 5 (>0,4s). Bei betragsmäßig zu kleinen Werten bleiben die Motoren stehen und bei zu kurzen Zeiten starten sie nicht.
.

Messung der Umdrehungsgeschwindigkeit (P11\F11-rotmess\rotmess)

Hardware-Konfiguration:
  • Motoren über zwei H-Brücken PModHB5 und Y-Kabel an JL
  • PModUSBUSART an JH und über USB-Kabel mit PC verbinden.
  • JHX und JLX gekreuzt.

Programmdateien: rotmess.c , rotmess.h , test_rotmess.c + Treiberdateien comir_lcd.h/c, comir_pc.h/c und comir_pwm.h/c

Der Treiber rotmess.c misst die Drehwinkel bzw. -winkelgeschwindigkeiten. Er nutzt Timer 0 und stellt dem Anwenderprogramm eine Funktion zum Auslesen der Inkrementschritte für eine in "rotmess.h" definierten Anzahl von Abtastschritten sowie eine Funktion zur Abfrage, ob innerhalb des Treibers Fehler, z.B. Unterabtastungsfehler, aufgetreten sind, bereit.

Das Testprogramm "test_rotmess" Wartet auf eine 6-Byte-Nachricht: zwei mal 16-Bit-vorzeichenbehaftete Vergleich-(OCR-)-Werte und einen 16-Bit-vorzeichenfreien Periodenwert. Die relative Pulsbreite ist jeweils der Betrag des Verhältnisses aus OCR- und Periodenwert. Zurückgegeben werden die empfangenen OCR-Werte und die Zählwerte der Winkelschritte als vorzeichenbehaftete 16-Bit-Zahlen. Vor jeder Messung laufen die Motoren schon mindestens eine Sekunde mit den vorgegebenen OCR- und Periodenwerten.

Test:
  • Die Länge der Empfangs- und Sendenachrichten in "comir_pc.h" eingestellt auf:
    	 #define COM_PC_RMSG_LEN 6
    	 #define COM_PC_SMSG_LEN 8
    	
    und die Anzahl der Abtastschritte je Messung ist in "rotmess.h" eingestellen auf:
    	 #define ABTASTSCHRITTE 2000 // 2000*0,5 ms = Messzeit 1s
    	
  • Mikrorechnerprogramm übersetzen und starten
  • HTerm Starten. 8N1, 9600 Baud. Verbinden.
  • 0xD3.00.38.00.80.00 senden, Motorbewegung und Empfang kontrollieren. Die gesendeten Daten bedeuten im Beispiel:
    • 0xD3.00: relative Pulsbreite Motor A 0xD3.00-0x1.00.00)/0x80.00=-35%
    • 0x38.00: relative Pulsbreite Motor A 0x38.00/0x80.00=+44%
    • 0x80.00: absolute Pulsbreite 0x80.00 / 8MHz = 4,1ms
    Typischer Empfangswert für die Beispieleingabe ist 0xD3.00.FD.A3.38.00.02.CA. Die darin codierten Werte bedeuten:
    • 0xD3.00: gesendeter OCR-Wert für Motor A
    • 0xFD.A3: Motor A -605 Winkelschritte pro s (Wert streut von Versuch zu Versuch)
    • 0x38.00: gesendeter OCR-Wert für Motor B
    • 0x02.CA: Motor B -714 Winkelschritte pro s (Wert streut von Versuch zu Versuch)


Autor: gkemnitz, Letzte Änderung: 21.03.2024 19:29:56


 TU Clausthal 2020  Impressum