Bricht dir vllt die Versorgungsspannung zu weit ein mit dem Servo dran? Dann würde die brownout detection anspringen und einen kontrollierten Reset machen.
Das würd ich als erstes mal messen.
Werbung
hallo leute!
ich hab mich schon eine weile mit der welt der atmels beschäftigt und bisher alles hinbekommen was ich probieren wolte! bis auf eins: servos!![]()
hier das verwendete programm:
(komt aus dem Buch "roboter selber bauen" und wurde leicht modifiziert! habe aber auch diverse andere programme erfolglos versucht)
so es passiert volgendes:Code:$regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 Config Lcdpin = Pin , Rs = Portc.3 , E = Portc.2 , Db4 = Portc.5 , Db5 = Portc.1 , Db6 = Portc.4 , Db7 = Portc.0 Config Lcd = 16 * 2 Initlcd Cursor Off Cls Enable Interrupts Config Porta.7 = Output Declare Sub _servo() Dim Servo_pos As Word Dim Servo_pos_save As Word Dim Multiplikator_servo As Byte Dim Setup As Word Dim X As Byte multiplikator_servo = 15 Setup = 3900 Locate 1 , 1 Lcd "start" Waitms 500 Cls For X = 1 To 50 Servo_pos = X Call _servo() Locate 1 , 1 Lcd X Waitms 200 Next X End Sub _servo() Servo_pos_save = Servo_pos * Multiplikator_servo 'Pulseout berechnen Servo_pos_save = Setup + Servo_pos_save Pulseout Porta , 7 , Servo_pos_save Waitms 15 'kurze Pause (5 bis 20ms) End Sub
das lcd zeigt "start" und fängt an zu zählen und der servo bewegt sich auch so wie das display das anzeigt ABER: meistens zehlt er nicht weiter als bis 6 (ist jedesmal anders "rekord" liegt bei 21) und dan macht es den anschein alsob der chip nen reset macht und das display zeigt wieder start und begint von forne zu zählen... machmal zeigt er sogar auch 2 - 3 mal start hintereinander und fängt garnicht erst an zu zählen... achja und dan irgendwanma bleibt er komplett hängen. jetzt komt der klu: mach ich den servo ab läuft das programm einwandfrei!!!
befor ihr mir sagt der servo ist kaputt: ich hab es mit 2 verschiedenen (anderer hersteller) probiert ohne erfolg! und der chip ist auch in ordnung da alles andere ja damit läuft und es auch mit einem anderen getestet wurde...
tja nun hätt ich gern ne erklärung dazu... was meint ihr was kan das sein?
gruss predator32767
Bricht dir vllt die Versorgungsspannung zu weit ein mit dem Servo dran? Dann würde die brownout detection anspringen und einen kontrollierten Reset machen.
Das würd ich als erstes mal messen.
Nam et ipsa scientia potestas est..
öhhhh... wie testet man das am besten?
Einfach die Versorgungsspannung Vcc am uChip.
Du wirst ja für den Chip und Servo die selbe Spannungsquelle haben schätz ich mal?
Nam et ipsa scientia potestas est..
aso.. ja natürlich.. stand grad aufm schlauch... spannung ist konstant bei 4.86v
Die Spannung brauch nur ein paar µs einbrechen. Das kriegt ein Multimeter kaum mit. Testweise könnte man den Servo seperat mit Strom versorgen. Wenn es dann geht wars die Spannungsversorgung.
ok das werd ich gleich mal testen.. aber das kans ja wohl nicht sein das man die getrennt versorgen muss oder? es handelt sich ja nicht um batterien oder akkus.. die spannung komt aus einem netzteil mit stabilisierungs ic!
gruss predator32767
hm.. wieder eine interesante sache: jetzt bewegt er sich nicht aber das programm läuft einwandfrei... allerdings fellt mir was auf: ich hab ihn jetzt über ein zweites netzteil angeschlossen und so hält er seine position (soll heissen er läst sich nicht mit der hand drehen) was er voher nicht getan hat!
noch vorschläge?
gruss predator32767
Die Servos brauchenmanchmal kurzzeitig mehr als 1 A oder was die einfachen Spannungsregler liefern können.
Manchmal ist der Einfachste Weg für Servos und Controller getrennte Spannungsregler zu nehmen.
Eine andere alternative ist es in die Versorgung der Controllers eine Dioden zu schalten, und dem Controller einen relativ großen Elko (100-1000µF) hinter der diode zu spendieren. Das sollte reichen um den Controller für die kurzen Spannungseinbrüche vom Elko aus zu versorgen.
Hallo!
Im Code habe ich es skizziert.
MfGCode:Vcc + D | +--->|---+-----> µC |+ \-/ C | === GND
Lesezeichen