Die asurolib ist ja schon mal ne gute Vorlage für eigene Ansätze. WENN Du etwas mehr Gehirnschmalz (zur Erleuchtung oder Verwirrung - beides ist möglich) möchtest, dann lies Dir vielleicht meinen Code durch. Der ist für nen mega168/328/20MHz geschrieben und bedient einen L263D. Da ist auch - denke ich - die Pindefinition und -funktion einigermassen deutlich. Aber die eigenen Töchter sind ja auch immer die schönsten.... bin aber immer auf das asurowiki gekommen, wo def teil mit dem pwm signal ausgelassen wurde.
Daher - nicht zum Lesen gedacht:Ach so - kleine Erklärung:Code:/* >> Sicherung 14Aug12 1704 ..C2\D01_41\D041_mot60.c =================================================================================== Target MCU : siehe main Target Hardware : MiniD0 Target cpu-frequ. : In der Quelle wählbar ================================================================================ */ // ============================================================================== = // == PWM-Routinen zur Motoransteuerung void TC0PWM_init(void) //Init Timer/Counter0 für Erzeugung des PWM-Signals { TCCR0A |= (1<<COM0A1)|(1<<COM0B1); //Clear/set OC0A/OC0B on Compare Match, // doc S102 , OC0A/OC0B ist Port PD6/D5 TCCR0A |= (1<<WGM01)|(1<<WGM00); // Fast PWM, TOP=0xFF=dez255, doc S104 // das ergibt aus 20 MHz mit Prescaler 1/64 1220 Hz TCCR0B |= (1<<CS01)|(1<<CS00); // Prescaler ist clk/64 doc S106 TIMSK0 &= ~(1<<OCIE0A)|(1<<OCIE0B); // Tmr/Cntr0 Oput CompB Match intrrpt dsabld TIMSK0 &= ~(1<<TOIE0); // Tmr/Cntr0 Overflow interrupt disabled OCR0A = 0; // PWM auf Null setzen OCR0B = 0; // PWM auf Null setzen } // ============================================================================== = void setPWMrechts(uint8_t speed) //Geschwindigkeit Motor 12 (rechter) {OCR0B = speed;} // PWM auf PD5/OC0B, korrig. 24mrz09 // ============================================================================== = void setPWMlinks(uint8_t speed) //Geschwindigkeit Motor 34 (linker) {OCR0A = speed;} // PWM auf PD6/OC0A, korrig. 24mrz09 // ============================================================================== = // ============================================================================== = // Motoransteuerung mit dem L293D, hier werden die Drehrichtungen gesetzt // Anschlüsse M168 für R3D01 für die Motoransteuerung (Stand 24mrz09 1410) : // Motor 12 ist in Fahrtrichtung rechts (Kennzeichen 1 Punkt) // Motor 34 ist in Fahrtrichtung links (Kennzeichen 2 Punkte) // // (E7) _|-- 1,2 Guz, PD4___6 23___PC0, SFH 5110, IN irDME 1-2 // . . . . . . . . . . . . // XTAL1 PB6___9 20___VCC // XTAL2 PB7 10 19 PB5, SCK, Taster2 // (E6) PWM 1,2 uz+Guz,PD5 11 18 PB4, MISO, _|-- 1,2 uz, Taster1 // (E5) PWM 3,4 uz+Guz,PD6__12 17___PB3, MOSI, Reserve 2 // (E8) _|-- 3,4 uz,PD7 13 16 PB2, Servo // (E9) _|-- 3,4 Guz,PB0 14 15 PB1, OC1A = SFH 415, OUT (irDME) // - - - - - - - - - - - - - - - - - - - - - - - - - - // vgl. Erklärung von Hubert.G (zu L293D) // https://www.roboternetz.de/community/threads/59146 //-Wieso-benötigt-RN-Control-(1-4-)-für //-integrierten-Motortreiber-gleich-3-freie-Ports?p=558716&viewfull=1#post558716 // Zitat Mit setzten von Kanal 1 und 2 auf 0 ist der Motor im Freilauf, // werden beide Kanäle auf 1 gesetzt wird der Motor gebremst // - - - - - - - - - - - - - - - - - - - - - - - - - - // ----------------------- // Drehrichtungsbefehle für Motor 1,2 = "rechter" Motor // r r r r r r r Motor 1,2 = rechter Motor r r r r r r // ============================================================================== = void Mrechtsvor (void) // Mot12 dreht im Uhrzeigersinn = neg. math. { // .. dann fährt rechtes Rad "vorwärts" // TCCR0A |= (1<<COM0B1); // Enable clear/set OC0B on Compare Match PORTD &= ~(1<<PD4); // Setze 1A low PORTB |= (1<<PB4); // Setze 2A high mdir12 = 1; } // // ============================================================================== = void Mrechtszur (void) // Mot12 dreht im mathematisch positiven Drehsinn { // .. dann fährt rechtes Rad "rückwärts" // TCCR0A |= (1<<COM0B1); // Enable clear/set OC0B on Compare Match PORTD |= (1<<PD4); // Setze 1A high PORTB &= ~(1<<PB4); // Setze 2A low mdir12 = -1; // } // // ============================================================================== = void Mrechtsstop (void) // Motor 12 aus { // // TCCR0A &= ~(1<<COM0B1); // Disable clear/set OC0B on Compare Match PORTD &= ~(1<<PD4); // Setze 1A low PORTB &= ~(1<<PB4); // Setze 2A low } // // ----------------------- // Drehrichtungsbefehle für Motor 3,4 = "linker" Motor // l l l l l l l Motor 3,4 = linker Motor l l l l l l // ============================================================================== = void Mlinksvor (void) // Mot3,4 dreht im mathematisch positiven Drehsinn { // .. dann fährt linkes Rad "vorwärts" // TCCR0A |= (1<<COM0A1); // Enable clear/set OC0A on Compare Match PORTB |= (1<<PB0); // Setze 3A high PORTD &= ~(1<<PD7); // Setze 4A low mdir34 = 1; } // ============================================================================== = void Mlinkszur (void) // Mot3,4 dreht im Uhrzeigersinn = neg. math. { // .. dann fährt linkes Rad "rückwärts" // TCCR0A |= (1<<COM0A1); // Enable clear/set OC0A on Compare Match PORTB &= ~(1<<PB0); // Setze 3A low PORTD |= (1<<PD7); // Setze 4A high mdir34 = -1; // } // // ============================================================================== = void Mlinksstop (void) // Motor 34 aus { // // TCCR0A &= ~(1<<COM0A1); // Disable clear/set OC0A on Compare Match OCR0A = 0; // PWM-Wert Mot34 auf Null setzen PORTB &= ~(1<<PB0); // Setze 3A low PORTD &= ~(1<<PD7); // Setze 4A low } // // ============================================================================== =
uz ... Uhrzeigersinn - auf Motor-Abtriebswelle gesehen
Guz ... Gegenuhrzeigersinn = math. positiver Drehsinn
1,2 ... Motor eins, Anschlüsse 1,2
3,4 ... Motor "zwei", Anschlüsse 3,4





Zitieren


Lesezeichen