Zitat von
Relaxed
... denke aber, dass die PWM-Ausgabe in Ordnung ... 5V und einen 24V Motor. Bei beiden besteht das gleiche Problem ...
Das klingt ja eher so, als sei die PWM eben nicht in Ordnung. Keine Ahnung wie Du den L293 am arduino angeschlossen hast. Aber ich habe hier (m)einen Schaltplan und dazu gibts auch den Code für die Ansteuerung von zwei Motoren. Im Schaltplan ist eine funktionierende Anbindung des L293D, der Controller ist ein m328 (mitunter ein m168er), im Code die dazugehörige Software. Möglicherweise hilft es Dir, wenn Du diesen Code mit Deinem vergleichst. . . . .
Code:
/* >>
. . . . .
===================================================================================
Target MCU : siehe main
Target Hardware : MiniD0
Target cpu-frequ. : In der Quelle wählbar
===================================================================================
Enthaltene Routinen: Alle Motorroutinen
. . .
void TC0PWM_init(void) //Init Timer/Counter0 für Erzeugung des PWM-Signals
void setPWMrechts(uint8_t speed) //Geschwindigkeit rechter Motor
void setPWMlinks(uint8_t speed) //Geschwindigkeit linker Motor
void Mrechtsvor(void) //Motor dreht im mathematischer Drehsinn
void Mrechtszur(void) //Motor 1,2 dreht im Uhrzeigersinn
void Mrechtsstop(void) //Motor aus
void Mlinksvor(void) //Motor dreht im mathematischer Drehsinn
void Mlinkszur(void) //Motor 3,4 dreht im Uhrzeigersinn
void Mlinksstop(void) //Motor aus
===================================================================================
*** Versionsgeschichte:
====================
x32 11Okt10 1730 In ~tst~/RC5t_17: Bitanalyse "just in time" - LÄUFT gut
Ausgabe nur als dezimale Darstellung von Adress- und Befehlsbyte
x00 01Nov09 1910 Übernahme des Originals, aus dem Directory
. . .
===================================================================================
*** Aufgabenstellung : Software für R3D01
Original: . . . .
===================================================================================
================================================================================ */
// =================================================================================
// =================================================================================
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
(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
(E9) _|-- 3,4 Guz,PB0 14 15 PB1 */
// -----------------------
// Drehrichtungsbefehle für Motor 1,2 = "rechter" Motor
void M12pos (void) // Mot12 dreht im Uhrzeigersinn = neg. math.
{ PORTB |= (1<<PB4); PORTD &= ~(1<<PD4); mdir12 = 1; }
// r r r r r r r Motor 1,2 = rechter Motor r r r r r r
void M12neg (void) // Mot12 dreht im mathematisch positiven Drehsinn
{ PORTB &= ~(1<<PB4); PORTD |= (1<<PD4); mdir12 = -1; }
// r r r r r r r Motor 1,2 = rechter Motor r r r r r r
void M12stp (void) // Motor 12 aus
{ PORTB &= ~(1<<PB4); PORTD &= ~(1<<PD4); }
// -----------------------
// Drehrichtungsbefehle für Motor 3,4 = "linker" Motor
void M34neg (void) // Mot3,4 dreht im Uhrzeigersinn = neg. math.
{ PORTB |= (1<<PB0); PORTD &= ~(1<<PD7); mdir34 = 1; }
// l l l l l l l Motor 3,4 = linker Motor l l l l l l
void M34pos (void) // Mot3,4 dreht im mathematisch positiven Drehsinn
{ PORTB &= ~(1<<PB0); PORTD |= (1<<PD7); mdir34 = -1; }
// l l l l l l l Motor 3,4 = linker Motor l l l l l l
void M34stp (void) // Motor 12 aus
{ PORTB &= ~(1<<PB0); PORTD &= ~(1<<PD7); }
//
// - - - - - - - Übersetzungstabelle für "alten" Code
void Mrechtsvor (void)
{ M12pos (); return; }
void Mrechtszur (void)
{ M12neg (); return; }
void Mrechtsstop (void)
{ M12stp (); return; }
void Mlinksvor (void)
{ M34neg (); return; }
void Mlinkszur (void)
{ M34pos (); return; }
void Mlinksstop (void)
{ M34stp (); return; }
// =================================================================================
// =================================================================================
// ===== ENDE Subroutinen =====================================================
// =================================================================================
Immerhin: dieser Antrieb in meine beiden autonomen Dosen R2D03 und R3D01/MiniD0 läuft und läuft und läu...
Lesezeichen