Hallo!
Ich habe mir RN-Stepp297 zugelegt. Da ich meinen µC in C Programmiere, musste ich die Ansteuerung für RN-Stepp auch mit C schreiben. Aber da ich kein Beispielprogramm dafür gefunden habe, habe ich mir gedacht, ich bastel mal eines Zusammen. Hier ist das ergebnis:
(Dateien als Anhang zum Dowload)
Habt ihr Verbesserungsvorschläge?Code:/* ################################################### Profanter Stefan - 12.09.07 - RN-Stepp.c --------------------------------------------------- Schrittmotoransteuerung mit RN-Control und Ansteuerungsboard RN-Stepp297 RN-Stepp297 ist die bekannte Standardschaltung mit L297 und L298 (Bausatz) Achtung: Als Grundlage für dieses Demo wurde der Bascom-Code von Frank und einige Teile sowie die Header-Datei des RN-Control Beispiels von Georg Richter verwendet (zu finden auf Robotikhardware-CD oder auf http://www.Roboternetz.de) Diese Demo ist mit WinAVR Compiler 20070525 getestet RN-Stepp297 wird wie folgt angeschlossen Bezeichnung RN-Stepp -> RN-Control ---------------------------------------------- U+ JP1 (1) -> 5V+ U- JP1 (2) -> GND Enable JP1 (3) -> PA0 Richtung JP1 (4) -> PA1 Takt JP1 (5) -> PA2 Aufgabe: Dieses Testprogramm zeigt wie man RN-Stepp297 über Takt- und Richtungsleitung ansteuert Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet Taste 1: Schaltet Motorstrom ein (Stellung wird gehalten) Taste 2: Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren) Taste 3: Bewegt Motor schneller genau 400 Halbschritte Taste 4: Ändert die Drehrichtung Taste 5: Schaltet Motor aus Autor: Profanter Stefan Weitere Beispiele und Beschreibung der Hardware in der Anleitung zu RN-Stepp297 Anleitung findet man unter http://www.Roboternetz.de im Download Bereich oder www.robotikhardware.de Weitere Beispiele sind im Roboternetz gerne willkommen! ############################################################## */ // -------------- RN-Control übliche _____________________ #include <stdlib.h> #include <avr/io.h> #include <rncontrol.h> // Schaltet den Motostrom ein void stepperEnable(void) { setportaon(0); //PA0 auf 1 setzten } // Schaltet den Motostrom aus void stepperDisable(void) { setportaoff(0); //PA0 auf 0 setzten } // Ändert die Drehrichtung void changeDirection(void) { if (bit_is_set (PINA,PA1)) //überprüfung, ob PA1 gesetzt setportaoff(1); //PA1 auf 0 setzten else setportaon(1); //PA1 auf 1 setzten waitms(1000); //Um ungewolltes ändern zu verhindern, da längeres Drücken der Taste die Funktion immer erneut aufruft } // Bewegt den Motor um steps Schritte mit einer Wartezeit zwischen den Schritten von waitTime Millisekunden void stepping(uint16_t steps, uint16_t waitTime){ for (uint16_t i=0; i<steps; i++) { setportaoff(2); //PA2 auf 0 setzten waitms(1); setportaon(2); //PA2 auf 1 setzten waitms(waitTime); } } /*### Hauptschleife ###*/ int main(void) { /*###Initialisierungsphase###*/ //Pins bzw. Ports als Ein-/Ausgänge konfigurieren DDRA |= 0x07; //00000111 -> PORTA.0 bis PORTA.2 als Ausgänge DDRC |= 0xFF; //11111111 -> Ports für Led //Initialisierungen setportcon(0); setportcon(1); setportcon(2); setportcon(3); setportcon(4); setportcon(5); //LEDs ausschalten setportdoff(7); //Speaker aus /*###Hauptschleife###*/ // Endlosschleife zum Abfragen der Tasten while(1) { switch(button()) { case 1: stepperEnable(); break; //Motorstrom einschalten case 2: stepping(400, 30); break; //Bewegt Motor langsam genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren) case 3: stepping(400, 1); break; //Bewegt Motor schneller 400 Halbschritte case 4: changeDirection(); break; //Ändert Drehrichtung case 5: stepperDisable(); break; //Motorstrom ausschalten default: break; } } return 0; }
Danke!
Lesezeichen