Archiv verlassen und diese Seite im Standarddesign anzeigen : c-PWM Problem
Martinius11
08.12.2010, 19:57
Liebes Forum,
ich hab mir mal zeit genommen meinem Pro-Bot 128 in C zu programmieren
ich versuche mich grade an der Motorsteuerung aber irgentwie funkts nicht.
ich kann zwar die Geschwindigkeiten regeln aber die Motoren drehen in
gegengesetzte Richtungen! Ich habe den Timer1 auf Fast PWM 8-Bit
eigestellt. Kann mir jemand helfen. Danke.
Hier ist mal mein Code:
void MoveAtSpeed(uint8_t Speed_Left, uint8_t Speed_Right) {
DDRB |= (1<<PB6);
DDRB |= (1<<PB5);
TCCR1A = (1<<COM1A1) | (1<<WGM10) ;
TCCR1B = (CS10)| (WGM12) ;
ICR1 = 0x00FF;
OCR1A = Speed_Left;
OCR1B = Speed_Right;
Motor_Enable();
}
void Motor_Enable (void) {
DDRB |= (1<<PB7);
PORTB |= (1<<PB7);
}
Hallo,
fehlt hier nicht zweimal 1<< ?
TCCR1B = (CS10)| (WGM12) ;
würde CS12 auch noch setzen, dann ist das die niedrigst mögliche Frequenz fürs PWM (Prescaler -> fosc/1024).
Ansonsten hab ich das für einen Atmega128 auch ziemlich genau so programmiert. ICR1 habe ich überhaupt nicht verwendet.
...aber die Motoren drehen in
gegengesetzte Richtungen!
Elektrisch richtig rum angeschlossen?
Grüße,
Bernhard
Martinius11
08.12.2010, 21:04
Also ich hab den Code geändert :
void MoveAtSpeed(uint8_t Speed_Left, uint8_t Speed_Right) {
DDRB |= (1<<PB6);
DDRB |= (1<<PB5);
TCCR1A = (1<<COM1A1) | (1<<WGM10) ;
TCCR1B = (1<<CS10)| (1<<CS12) | (1<<WGM12) ;
ICR1 = 0x00FF;
OCR1A = Speed_Left;
OCR1B = Speed_Right;
Motor_Enable();
}
aber die Motoren drehen immer noch in unterschiedliche Richtungen
muss für OCR1B auch eine Richtung eingestellt werden.
Ich kenn den Probot zwar nicht, aber bei vielen Motortreibern ist es so, dass man die Drehrichtung durch setzen zweier Pins bestimmt und mit dem PWM Signal nur die Geschwindigkeit regelt.
Martinius11
08.12.2010, 21:29
Der Pro-Bot ist da eine ausnahme der wird nur über 3 Pins gesteuert und
die PWM von einem IC aufgeteilt <128 ist rückwärts, 128 stop, und > 128 forwärts.
radbruch
08.12.2010, 21:33
Hallo
Wie schon öfters erwähnt finde ich die Motoransteuerung des probot eher mangelhaft. Das Problem (aus meiner Sicht): Das PWM-Signal steuert nicht nur die Leistung sondern auch die Drehrichtung. Nur wenn das Puls-/Pauseverhältniss genau 50:50 ist, steht der Motor (und saugt volle Leistung aus den Akkus). Bei 100:0 oder 0:100 dreht er mit Vollgas in die jeweilige Richtung. Ich hab's hier mal genauer beschrieben (und im Laufe des Threads auch eine Lösung für das CCPro vorgeschlagen):
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=455722#455722
Gruß
mic
Martinius11
08.12.2010, 21:40
Aber warum klappts dann mit Bascom problemlos ?
Martinius11
08.12.2010, 21:53
Ich hab beim durchsehn von Radbruchs Programmen den Fehler gefunden
ich musste noch "(1<<COM1B1)" einfügen. jetzt funkts. Danke an alle.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.