kramann.info
© Guido Kramann

Login: Passwort:










4.2 Servoansteuerung über Timer 1 als objektorientiertes Programm

4.2 Servo control via timer 1 as object-oriented program (EN google-translate)

4.2 Sterowanie serwomotorem za pomocą timera 1 jako program obiektowy (PL google-translate)

Der nachfolgende Quelltext ist ein Beispiel dafür, wie die Ansteuerung zweier Servos mittels des Timers 1 erfolgen kann.

The following source text is an example of how the control of two servos can be done by means of the timer 1.

Poniższy tekst źródłowy jest przykładem tego, jak można sterować dwoma serwami za pomocą licznika czasu 1.

Im Verlauf der Vorlesung soll der Antrieb als Klasse definiert werden, um zu zeigen, wie sich Mikrocontrollerprojekte modularisieren lassen.

In the course of the lecture, the drive will be defined as a class to show how microcontroller projects can be modularized.

W trakcie wykładu napęd zostanie zdefiniowany jako klasa pokazująca, w jaki sposób projekty mikrokontrolerów mogą być modularyzowane.

#define WMIN 1000
#define WMITTE 1500
#define WMAX 2000
#define SCHRITTE 1000

//Mode 8
//Phasen- und Frequenz-korrekt
//WGM1   3 2 1 0
//       1 0 0 0
//ICR1=..... TOP
//fpwm = fclk/(2*N*TOP)
//Vorteilung
//N=8
//80Hz = 16000000/(2*8*TOP)
//TOP = 16000000/(2*8*80Hz)=12500

//dt==1000ms*(1/80Hz)/12500 == 0,001ms (1 Schritt == 0,001ms)
//=>
//1ms == 1000 Schritte
//1,5ms == 1500 Schritte
//2ms == 2000 Schritte
void setup() 
{
       TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
       TCCR1B = (0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10); //Vort. 256, s.S. 125
       
       ICR1=12500;
       
       DDRB |= (1<<PB5); //OCR1A
       DDRB |= (1<<PB6); //OCR1B
       OCR1A = WMITTE; //PWM-Breite auf Mitte setzen.  
       OCR1B = WMITTE; //PWM-Breite auf Mitte setzen.  
}

void loop() 
{
       OCR1A = WMAX; //PWM-Breite auf Null setzen.  
       OCR1B = WMAX; //PWM-Breite auf Null setzen.  
       
       delay(3000);
    
       OCR1A = WMITTE; //PWM-Breite auf Null setzen.  
       OCR1B = WMITTE; //PWM-Breite auf Null setzen.  
       
       delay(3000);
    
       OCR1A = WMIN; //PWM-Breite auf Null setzen.  
       OCR1B = WMIN; //PWM-Breite auf Null setzen.  
       
       delay(3000);
    
}

Code 4.2-1: Datei servofein.ino