Hallo,
ich habe schon einige Threads gelesen und bin mir unschlüssig, ob die SERVO Funktion in Bascom die beste Möglichkeit zur Ansteuerung eines Servos darstellt.
Grundsätzlich sollte die Steuerung der Servos auch über PWM funktionieren, jedoch habe ich noch eine Unwissenheitslücke:
Wie kann ich in PWM Mode den Zähler einschränken, damit ich genau auf meine gewünschte Trägerfrequenz komme.
Quarz 3686400 Hz, Prescale 64, 10bit, Zielfrequenz=50Hz bekomme ich nach 575 Zähler (Formel: fziel=fclk/(2*prescaler*(1+Zähler))
Den Timer allein kann ich zb.: mit einem Interrupt vorstellen, damit ich die Frequenz erhalte.
Wie macht man das jedoch bei PWM? Kann ich hier auch einen Interrupt festlegen und den Timer vorstellen?
Beiliegend findet ihr meinen unvollständigen Code, bitte gebt mir eine Empfehlung, was besser ist und ob man es eventuell so programmieren könnte.
Lg
Code:' 0 sind Eingänge; 1 sind Ausgänge ' digitaler EIngang Pullup Widerstand ergibt 0 wenn Spannung anliegt ' PortB3 Endschalter Schloss-Servo nicht verriegelt ' PortB4 Endschalter Sperrelemt offen ' PortB5 Endschalter Sperrelemt geschlossen ' PortC0 Antriebsmotor ein/aus Relais ' PortC1 Ansteuerung Relais Umschalter für Antriebsmotor ' (dreht sich links..schließen bei 0 und rechts..öffnen bei 1) ' PortC2 Relais Schalten für Servo Antrieb 0..aus/ 1..ein ' PortC3 Analoger Eingang Messung Spannungsabfall, ob Servo dreht oder nicht ' PortB1 PWM Signal für Servowinkelsollsignal $regfile = "m8def.dat" $crystal = 3686400 'externer Quarz Config Adc = Single , Prescaler = Auto 'Analoger Eingang eingeschalten Start Adc Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1 On Timer1 Timerroutine: Enable Timer1 Start Timer1 Enable Interrupts Pwm1a = 741 '7 Zähler entspricht ca. 40° Servobewegung Dim X As Bit Ddrb = &B00000111 'Alle unbenützten Eingänge auf Pullup Widerstand gesetzt Portb = &B11111000 Ddrc = &B00000111 Portc = &B11111000 Do 'HAuptprogramm Loop Timerroutine: Timer1 = 735 '50HZ entspricht 575 Schritte, Start TIMER1 bei 1023-(575+1)/2=735 Return End







Zitieren
Lesezeichen