PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : servoprobleme! chip mach eigenständig reset!



PREDATOR32
18.07.2008, 20:36
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! :-s

hier das verwendete programm:
(komt aus dem buch "roboter selber bauen" und wurde leicht modifiziert! habe aber auch diverse andere programme erfolglos versucht)




$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


so es passiert volgendes:

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 O:) ) 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

BastelWastel
18.07.2008, 20:48
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.

PREDATOR32
18.07.2008, 20:52
öhhhh... wie testet man das am besten?

BastelWastel
18.07.2008, 21:07
Einfach die Versorgungsspannung Vcc am uChip.
Du wirst ja für den Chip und Servo die selbe Spannungsquelle haben schätz ich mal?

PREDATOR32
18.07.2008, 21:19
aso.. ja natürlich.. stand grad aufm schlauch... spannung ist konstant bei 4.86v

Besserwessi
18.07.2008, 21:29
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.

PREDATOR32
18.07.2008, 21:34
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

PREDATOR32
18.07.2008, 21:46
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

Besserwessi
18.07.2008, 21:54
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.

PICture
18.07.2008, 22:09
Hallo!

Im Code habe ich es skizziert.

MfG

Vcc
+ D
|
+--->|---+-----> µC
|+
\-/ C
|
===
GND

PREDATOR32
18.07.2008, 22:17
is das hier der richtige? den könt ich da auslöten...

http://s5.directupload.net/images/080718/x9bq3nlk.jpg

das hier ist der spannungsregler:

http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=A211;GROUPID=2908;ARTICLE=23 481;START=0;SORT=artnr;OFFSET=16;SID=31uqiQuawQAR8 AACuq5DIe12410b81d2b29502ae4bdba0d8a43b3

da steht ja bis 2a!!

diode? was muss ich da nehmen? ich glaub da geht auch ne led oder? kan das sein?

aber für heute reichts erstmal... bis morgen jungs!

gruss predator32767

nietzsche
18.07.2008, 22:28
1. Ja, das ist ein Elko... Wenn du Netzteile benutzt, würde ich immer einen Elko nehmen, um die Spannung zu glätten...

2. Ja, das ist der Spannungsregler... Was steht genau auf deinem drauf? Der 75S05 verträgt in der Tat 2A, der 7805 jedoch nur 1A...

2. eine normale Z Diode... Die LED würde vom Prinzip her ähnlich arbeiten, jedoch würde sie ihre Dienste nicht länger als ein paar Sec. tun ;)


Hast du einen kleinen Kerko (Standartgröße, z.B. 100nF) am uC?
Zeig uns doch mal deine Schaltung, wie du den Servo an den uC angeschlossen hast...

Besserwessi
18.07.2008, 23:18
In der Versorgung zum Controller wird eine LED problematisch. Weniger wegen dem Strom, das sollte meistens noch reichen. LEDs haben einfach zu viel Spannungsabfall.
Der Elko siehr gut aus, zumindestens für einen Test. Für eine Endgültige Lösung ist der mechanisch wohl etwas groß wegen der 63 V. Ein 6,3 V Typ würde da schon reichen.

PICture
18.07.2008, 23:37
LEDS haben auch geringe Sperrspannung um 5V, was nicht ausreichen würde, wenn der Servo noch negative Impulse erzeugen würde.

Wegen Spannungsabfall am besten wäre germanium- oder Schottky-Diode.

MfG

BastelWastel
19.07.2008, 00:24
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!

Hast du die Ground's von uC und Servo nicht verbunden?
Wenn die Spannung floating ist hat der Servo keine Referenz zum PWM Signal,
wird sich also auch nicht bewegen.
Dass dein Programm jetzt nicht mehr resetet ist schon mal ein gutes Zeichen dafür dass es wirklich kurze Einbrüche der Versorgungsspannung waren.

Wenn du wie beschrieben dem uC ne Shottky und nen Elko gönnst, oder einfach zum Test die Grounds verbindest, sollte dein Aufbau funktionieren.

PREDATOR32
19.07.2008, 07:38
guten morgen leute!


2. Ja, das ist der Spannungsregler... Was steht genau auf deinem drauf? Der 75S05 verträgt in der Tat 2A, der 7805 jedoch nur 1A...

das ist exackt der wo ich bestellt hab! und es steht auch 78S05 druaf!


Hast du einen kleinen Kerko (Standartgröße, z.B. 100nF) am uC?
Zeig uns doch mal deine Schaltung, wie du den Servo an den uC angeschlossen hast...

meine schaltung ist nach diesem schaltbild ausm buch aufgebaut und beim servo hängt das signal kabel an port a7 und plus an plus und minus an minus.. (wie auch sonnst?)

http://s6.directupload.net/images/080719/g6og3lhw.jpg



2. eine normale Z Diode...

da hätt ich gern eine genauere bezeichnung! unter z-diode find ich ne menge bei reichelt!

http://www.reichelt.de/index.html?;ACTION=4;SEARCH=z+diode;WHOLE=0;TYPE=A ND;SID=28NVWA9awQARwAABrwXogef92e7093bf78ecec5b34d 0c387c320e



Der Elko siehr gut aus, zumindestens für einen Test. Für eine Endgültige Lösung ist der mechanisch wohl etwas groß wegen der 63 V. Ein 6,3 V Typ würde da schon reichen.

alles klar dan werd ich den erstmal nehmen und damit testen sobald ich noch so eine besagte diode irgendwo finde... wen der elko zu klein sein solte hätte ich auchnoch die im angebot: O:)

http://s3.directupload.net/images/080719/rhnc9h9e.jpg
kleiner scherz am rande...


Hast du die Ground's von uC und Servo nicht verbunden?
Wenn die Spannung floating ist hat der Servo keine Referenz zum PWM Signal,wird sich also auch nicht bewegen.

aso! ja das wuste ich nicht das das notwenidig ist... ok werd ich gleich mal testen!


Wenn du wie beschrieben dem uC ne Shottky und nen Elko gönnst, oder einfach zum Test die Grounds verbindest, sollte dein Aufbau funktionieren.

ja sobald ich genauer weiss was ich da verwenden soll werd ich das sofort besorgen...

danke erstmal an alle für eure ausführliche hilfe!!

gruss predator32767

PICture
19.07.2008, 09:18
Hallo PREDATOR32!

Du brauchst eine ganz normale Diode die du zur Hand hast z.B. 1N4148 oder 1N400X und KEINE Zener-Diode. Der Besserwessi hat sich sicher verschrieben! :)

Wenn du was beim Reichelt bestellen würdest, kannst du eine beliebige Schottky-Diode bestellen (BATXXX), weil sie kleineren Spannungsabfall in Durchflussrichtung hat, ist aber NICHT nötig.

MfG

PREDATOR32
19.07.2008, 11:41
leute ich könnt euch knutschen!

es läuft! keine resets mehr!

hier das programm:


$regfile = "m32def.dat" 'Controller Regfile
$crystal = 16000000 '16Mhz Quarz
$baud = 9600 'UART auf 9600 Baud einstellen


Config Servos = 1 , Servo1 = Porta.7 , Reload = 10

Config Porta.7 = Output
Dim X As Integer

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 'Type des LCD´s 16 Char und 4 Zeilen
Config Pinb.1 = Input
Config Pinb.0 = Input
Initlcd 'LCD high level Initzialisierung
Cursor Off 'Cursor ausschalten
Cls

Enable Interrupts

Lcd "start"
Wait 1
X = 43 ' 43 - 196

Start1:


Waitms 50
Cls

Servo(1) = X


X = X + 5

Locate 1 , 1
Lcd X

If Pinb.0 = 0 Then
Servo(1) = 196
X = 43
Cls
Lcd "ende"
Wait 1
End If

If Pinb.1 = 0 Then
Servo(1) = 43
X = 43
Cls
Lcd "anfang"
Wait 1
End If



If X > 196 Then
Servo(1) = 43
X = 43
Waitms 200
End If

Goto Start1

allerdings läuft es nicht über den rns1

benutztes programm:


$regfile = "m32def.dat"
Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Dim I As Byte
Dim Pos As Byte
$crystal = 16000000 'Quarzfrequenz
$baud = 9600


Wiederhole:

For I = 1 To 255
Call Rnb_servo(1 , I)
Waitms 50
Next I

For I = 1 To 4
Pos = 1
Call Rnb_servo(1 , Pos)
Wait 2 'Warte 2 Sekundne
Pos = 255
Call Rnb_servo(1 , Pos)
Wait 2
Next I

Goto Wiederhole
Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Print "#S" ; Chr(servonummer) ; Chr(position)
End Sub
End

wen wir das noch hinbekommen bin ich glücklich...

nochma zu den elko! kan ich auch einen mit 6,3v und 3900µf verwenden? davon hab ich nämlich noch 4 stück rumliegen!die sind ja kleiner...

gruss predator 32767

PICture
19.07.2008, 12:31
Natürlich! Je grösser um so besser (in dem Fall). :)

Bei der software kann ich dir leider nicht helfen, weil ich PICs in ASM programmiere.

MfG

PREDATOR32
19.07.2008, 18:45
hallo!

keiner erfahrungen mit dem rns1??

gruss predator32767

PICture
20.07.2008, 11:19
Hallo PREDATOR32

Für Softwareprobleme würde ich dir empfehlen einen neuen Beitrag in geeignetem Forum starten. O:)

MfG