-
servo ansteuern
hallo,
ich verwende die rn-control mit atmega 32 mit bootloader.
jetzt möchte ich einen servo anschließen. dazu müsste ich eigentlich nur die stromversorgung anschließen und eben das "PWM kabel" an einen freien pin an port A? muss ich da noch einen widerstand dazwischenschalten oder eher nicht? (bzgl. strombegrenzung)
lg
ikarus_177
-
Hi!
Nein, du kannst das einfach so direkt anschließen.
Viele Grüße,
William
-
Soweit ich weis brauchst du nur + und masse an das Servo anzuschliessen und den (meistens gelben Draht) an den Pin wo du die PWM ausgiebst, ohne Widerstand https://www.roboternetz.de/wissen/index.php/Servo
-
Was das "ohne Widerstand" angeht ... also ich würde je nach Servo doch so 500-1000 Ohm dazwischenhängen am Signalpin. Habe schon einige Servos erlebt, die dort erstaunlich niederohmig waren. Geht 100 Mal ohne Widerstand gut ...
-
hallo,
erst mal danke für die antworten...
habe mich dazu "durchgerungen" doch einen widerstand dazwischenzuschalten, da ich nicht gleich meine neuen servos schrotten möchte.
also danke sehr
lg
ikarus_177
-
Nicht so sehr die Servos sind durch den fehlenden Widerstand unter Umständen gefährdet, sondern der µC, da einige Servos dort Strom ziehen, wenn deren Versorgungsspannung abgeklemmt ist. So jedenfalls meine negativen Erfahrungen.
Gruß MeckPommER
-
mal ne frage zu den PWM. lann mir mal einer nen link schicken, der über ein software-pwm an nem atmega geht???
-
ich fass es mal kurz zusammen, nen link hab ich grad nicht, du nimmst en timer, stellst ihn dir so ein das er nützlich wird (10tel ms takt ein überlauf z.B.) aktivierst den timer-overflow interrupt, und schreibst in deiner interrupt routine mit hilfe einer zählvariable und einer sollwert variable in das portregister und schaltest je nach wunsch den pin zur richtigen zeit an und aus
EDIT: Beispiel
10tel ms takt
Code:
ISR {
count_vaiable inkrementieren;
wenn (pin high && count_variable == sollvar+10) pin low; count_variable = 0;
//wenn pin high dann 1-2mS high halten und dann wieder low schalten taktlänge ist 1.5ms +- 0.5ms
wenn (pin low && count_variable > rund(20ms*10)) pin high; Count_variable = 0;
//wenn pin auf low geht ne pause von 20-50ms einlegen damit der servo sich einstellen kann sonst ruckelt er
-
ok, aber was ich net verstehe, wie kriege ich den takt,nach dem die count_variable erhöht wird?
-
Die primitivste Möglichkeit ein PWM Signal zu erzeigen ist über die bereits vorliegenden Sleep Funktionen.
Also so in der Art, in diesem Fall kann man die PWM Zahl zwischen 0 und 10 einstellen(je höher die Auflösung desto besser), mit pwm_zahl=5 hat man ein Tastverhältnis von 50:50.
Pseudocode:
Code:
#define PWM_ZAHL_MAX 10
pwm_zahl=5;
while(bedingung)
{
Ausgang_auf_5V;
for(n=0;n<pwm_zahl;n++) Sleep(zeit);
Ausgang_auf_0V;
for(n=0;n<(PWM_ZAHL_MAX-pwm_zahl);n++) Sleep(zeit);
}
Es gibt natürlich viel elegantere Wege das zu lösen.