PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motoransteuerung mit PWM @ RN-Control



tdomega
31.08.2006, 12:33
Hiho,

Endlich hab ich mal wieder etwas Zeit zum rumbasteln :)
Allerdings scheitere ich grade daran meine Motoren anzusteuern.

Folgenden Code hab ich mir aus verschiedenen Tutorials und Foreneinträgen zusammengestückelt, allerdings klappt es nicht...


//10Bit FastPWM
TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<WGM10);
TCCR1B = (1<<CS11);

//Pins als Ausgang
DDRB = _BV(DDB0) | _BV(DDB1);
DDRC = _BV(DDC6) | _BV(DDC7);

PORTC = _BV(PC6); //Richtung Motor I
PORTB = _BV(PB0); //Richtung Motor II

//Set Speed (0-1023)
OCR1A = 512;
OCR1B = OCR1A;


Das Multimeter zeigt am Motorausgang des Boards ~10,5 V an, egal wie ich OCR1A/B setze. Wen ich nen Motor anschließe bewegt sich allerdings garnichts. ](*,)
Das Beispielprogramm mit Bascom(von der CD) funktioniert.

Wahrscheinlich ist es irgend ein dummer Anfängerfehler :(
Bin für jede Hilfe dankbar :)

SprinterSB
31.08.2006, 14:14
Du hast Mode #1 für Timer 1 und OCR1x ist größer als TOP?

tdomega
31.08.2006, 17:05
Oh, das war anscheinend ein Kopierfehler... :-\
Eigentlich nutze ich Mode #7:
TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<WGM10)| (1<<WGM11)| (1<<WGM12);

So stehts auch im Quellcode...

Ich habe WGM10/11/12 gesetzt also sollte TOP doch 0x03FF(1023) sein oder?

Inges
31.08.2006, 18:39
Servus, beim atmega16 muss WGM12 nicht bei TCCR1A sondern bei TCCR1B gesetzt werden:

TCCR1B |= (1<<WGM12);

tdomega
31.08.2006, 19:51
Servus ^^
Ich hab nen Mega32 (Das instant-Board von Robotikhardware)
Die Bits sind alle streng nach Handbuch gesetzt. Ich habs trotzdem mal ausprobiert, allerdings hat sich nichts geändert...

Wenn ich den Fehler wenigstens eingrenzen könnte, aber ich mache nichts anderes, das oben ist im Endeffekt meine main()...
Oder muss ich da noch was machen?

linux_80
31.08.2006, 20:36
Hallo,

mir sind die Pins zuwenig, die Du auf Ausgang stellst,
das sollten 6 Stück sein, nicht 4 wie oben !

Im Bascom-Beispiel sind das diese Ports:

'Ports für linken Motor
Config Pinc.6 = Output 'Linker Motor Kanal 1
Config Pinc.7 = Output 'Linker Motor Kanal 2
Config Pind.4 = Output 'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output 'Rechter Motor Kanal 1
Config Pinb.1 = Output 'Rechter Motor Kanal 2
Config Pind.5 = Output 'Rechter Motor PWM
Es müssen nicht nur die Richtungs-Pins auf Ausgang, sondern auch die PWM Ausgänge nochmal extra als Ausgang definiert werden.

PS:
Mega 16 und Mega 32 sind vom Prinzip intern gleich, alle Register usw.

tdomega
31.08.2006, 22:57
Hiho,
Danke das wars anscheinend. Ich setze jetzt
DDRD = _BV(DDD4) | _BV(DDD5);
und es klappt.

Allerdings bekomme ich keine 12V (=Eingangspannung am Board) sondern nur 10,7; Aber ich denke das kann ich kompensieren wenn ich die Eingangsspannung auf 14V anhebe. Wichtig ist erstmal das ich jetzt Räder dranpappen kann :)

Danke!

linux_80
01.09.2006, 09:50
Das mit dem Spannungsabfall ist normal, kommt von den Transistoren im L293.
Wenn Du die Eingangsspannung anhebst, musst Du aber evtl. einen Kühlkörper an den 7805 pappen, da der sehr warm werden kann, da der Spannungsunterschied schon sehr gross ist, 14 - 5V.