PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos werden heiß



5Volt-Junkie
09.07.2010, 19:39
Hallo Community

Ich möchte erst mal erwähnen, dass ich ein Bascom-Einsteiger bin.
Mein Problem ist folgendes: Ich habe versucht ein Servo mit dem Beispielcode von Bascom und mit dem Beispielcode aus dem Buch "Roboter selbst bauen" (Ulli Sommer) anzusteuern. In beiden fällen zuckt es zufällig hin und her oder dreht bis zum Anschlag und versucht weiter zu drehen. Dabei wird der Servo ganz heiß aber nicht der Motor sondern der Silizium-Chip.

Leider hatte ich bis jetzt nur diese 2 Beispiele, weil (noch) kein Internet in meiner Wohnung hab, und das Beispiel aus dem Wiki nicht anschauen konnte und die Beispielcodes auch nicht posten kann.

Aber ich habe schon haufen sachen ausprobiert. 2 Verschiedene Controllerboards, 2 verschiedene (analoge) Servos, mit und ohne externer Stromzufuhr. Am Ende kommt das gleiche raus - entweder zuckt der Servo oder steht still aber der Silizium-Chip wird immer heiß.

Ich kann mir schon denken dass der eine oder andere schreiben wird, dass ich das Beispiel ausm Wiki ausprobieren soll. Sollte es damit gehen, wieso wird es in den anderen zwei Fällen heiß?

Danke im Voraus

Thomas$
09.07.2010, 19:54
schick mal dein code und welche frequens der quarz hat vlt lässt sich da der fehler finden

das 2 verschiedene (analoge) Servos den selben fehler haben halt ich für unwahrscheinlich deswegen wird der fehler im programm liegen

5Volt-Junkie
09.07.2010, 20:07
Das ist ja das Problem, dass ich im Moment nur ganz zufällig ans Internet dran komme, natürlich kein USB-Stick mit Code o.ä. dabei.
Ich besitze dieses Board
http://shop.myavr.de/Baus%C3%A4tze%20und%20Platinen/myAVR%20Board%20MK2%20USB%20PLUS,%20Bausatz.htm?sp =article.sp.php&artID=47

Frequenz-3.6864 (wenn ich mich richtig erinnere)
bei einem anderen Board ATmega16 mit 10MHz Quarz.

Kampi
09.07.2010, 20:10
Weißt du den wie du die Servos ansteuerst? Also ob du dafür eine PWM benutzt?
Wenn ja kann es vielleicht sein das die Servos kein PWM vertragen und das die deswegen warm werden, weil die wie verrückt schalten oder so.....

5Volt-Junkie
09.07.2010, 20:37
Hab mal auf die Schnelle Bascom installiert.


'-----------------------------------------------------------------------------------------

'name : servos.bas

'copyright : (c) 1995-2005, MCS Electronics

'purpose : demonstrates the SERVO option

'micro : 90S2313

'suited for demo : yes

'commercial addon needed : no

'-----------------------------------------------------------------------------------------



$regfile = "2313def.dat" ' specify the used micro

$crystal = 4000000 ' used crystal frequency

$baud = 19200 ' use baud rate

$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space



'Servo's need a pulse in order to operate

'with the config statement CONFIG SERVOS we can specify how many servo's we

'will use and which port pins are used

'A maximum of 14 servos might be used

'The SERVO statements use one byte for an interrupt counter and the TIMER0

'This means that you can not use TIMER0 anymore

'The reload value specifies the interval of the timer in uS

'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10



Config Servos = 1 , Servo1 = Portb.0 , Reload = 10

'as an option you can use TIMER1

'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1



'we use 2 servos with 10 uS resolution(steps)



'we must configure the port pins used to act as output

Config Portb = Output



'finally we must turn on the global interrupt

Enable Interrupts



'the servo() array is created automatic. You can used it to set the

'time the servo must be on

Servo(1) = 10 '10 times 10 = 100 uS on

'Servo(2) = 20 '20 times 10 = 200 uS on

Do

Loop



Dim I As Byte

Do

For I = 0 To 100

Servo(1) = I

Waitms 1000

Next



For I = 100 To 0 Step -1

' Servo(1) = I

Waitms 1000

Next

Loop

End



Die Ausgänge habe ich auch andere ausprobiert.
In dem Code habe ich anderen Quarz und anderen µC eingetragen.

Bei dem zweiten Beispiel kann ich mich nur an "Pulseout , 2 , ... k.A." in den letzten Zeilen erinnern ](*,)

Razzorhead
09.07.2010, 21:31
Wie sieht denn die schaltung aus?
Bei mir war es so, das die soviel strom gezogen haben das der µC immer neu gestartet ist, und dadurch der servo immer auf ausgangsstellung und dann halt rumzucken, oder auch bis zum mechanischen anschlag bis der kaputt ging. Waren billige teile, aber konnte das ganze erst mit 6000µF C lösen, und ner diode damit die nichtmehr den µC strom klauen.

LG raz

5Volt-Junkie
09.07.2010, 21:49
Die Schaltung ist standart und die bevorzuge ich auch:
rote Leitung an 4,5V extern, braune leitung an die geminsame Masse von Spannungsregler des Boards und der externen Batterie. und die Signalleitung (orange) an den Signalport.
Aber wenn ich die rote Leitung an die Versorgungsspannung von µC anklemme, ändert sich nix bzw. Servo wird heiß.

Ich hab mir jetzt die Quelcodes aus dem Wiki auf ein DIN A4 Blatt abgeschrieben und werde die ausprobieren.


P.S. erst nächste Woche habe ich wieder Internet ](*,)

5Volt-Junkie
11.07.2010, 12:39
Irgendwie mache ich was falsch, egal bei welchem code. Das ausm Wiki hat bei mir auch nicht funktioniert.

Un hier ist der Code aus dem Buch von Ulli Sommer wobei die Servos heiß werden.




'Servo.bas
'Microcontroller
$regfile = "m32def.dat" 'hier habe ich m8def.dat eingetragen
$crystal = 16000000 'und hier 3686400

'Servo
Config Porta.2 = 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

'Servo Ansteuerung
For X = 1 To 50
Servo_pos = 128 'Servo in Mittelstellung fahren
Call _servo()
Next X

Sub _servo()

Servo_pos_save = Servo_pos * Multiplikator_servo 'Pulseout berechnen
Servo_pos_save = Setup + Servo_pos_save
Pulseout Porta , 2 , Servo_pos_save
Waitms 10 'kurze Pause (5 bis 20ms)

End Sub


Was mache ich dabei falsch?

Kampi
11.07.2010, 13:12
Ich bezweifel das das direkt an den Codes liegt, da die Codes im Wiki erprobt sind (geh ich ganz stark von aus!). Hast du mal den Stromkreis überprüft? Vielleicht liegt ja da der Hund begraben.....

5Volt-Junkie
11.07.2010, 14:32
Ich bin auch 100% sicher, dass die Codes funzen. Aber vielleicht passt es irgendwie mit der Quarzfrequenz nicht oder dem Prescaler usw.

Bin schon total verzweifelt. ](*,)

PICture
11.07.2010, 15:08
Hallo!

So wie der Kampi, vermute ich eher Montagefehler bzw. Störungen an VCC und GND. Da kann man eben nur mit dem Schaltplan nicht effizient helfen. :(

Ich würde die ganze Schaltung bei Inbetriebnahme mit geprüftem 5 V Netzteil betreiben und wenn es einwandfrei funktioniert erst mit dem USB "kämpfen". ;)

MfG

5Volt-Junkie
11.07.2010, 15:41
Danke für die Tipps :wink:

Ich hab es mehr oder weniger hingekriegt dass mein Servo hin und her dreht.
Leider ist mir dabei ein servo abgeraucht (keine Ahnung wie).

1.Ich habe nochmal die Fusebits eingelesen. Und da war interner Oscillator eingestellt, was ich auf ext. umgestellt habe.

2. Den 3.6864 Quarz habe ich rausgelötet und ein 10MHz eingelötet.

3. Siehe komentare im Code


'Servo.bas
'Microcontroller
$regfile = "m8def.dat"
$crystal = 10000000 'statt 16MHz

'Servo
Config Portc.5 = 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 = 2000 'hier stand 3900

'Servo Ansteuerung
For X = 1 To 50
Servo_pos = 5 'Da ich den Potis nicht wirklich traue, fange ich mit wert "5" statt "0" an
Call _servo()
Next X

For X = 1 To 50
Servo_pos = 250 'genau so wie bei wert"5"
Call _servo()
Next X

Sub _servo()

Servo_pos_save = Servo_pos * Multiplikator_servo 'Pulseout berechnen
Servo_pos_save = Setup + Servo_pos_save
Pulseout Portc , 5 , Servo_pos_save
Waitms 10 'kurze Pause (5 bis 20ms)

End Sub


Mein Servo dreht jetzt hin und her so wie ich für mein Roboter brauche (später wird ein SRF05 draufsitzen und Umgebung abscanen).
Aber das Problem mit der Temperatur besteht immer noch. Wird zwar nicht heiß aber so lau warm.

Ich werde noch die "Angst-Elkos" einbauen.
Was mich noch gewundert hat, dass ich auf meinem Board kein 100nF Kondensator för mein ATmega8 habe. Ich mache eigentlich bei jedem IC ein 100nF KerKo rein, AVR hielt es nicht für nötig
:-k

PICture
11.07.2010, 16:07
Gratulation ! :)

Ich habe bisher kein eiskalten drehenden Motor gehabt und lauwarm finde ich deswegen ganz normal.

Anscheinend sind deine Montagekapazitäten ausreichend um mögliche Oszillationen zu dämpfen.

MfG

5Volt-Junkie
11.07.2010, 16:11
Nicht der Motore wird warm, sondern der Silizium-Chip

PICture
11.07.2010, 16:37
Na ja, wenn er noch lebt (Strom nimmt), dann lässt ihn sich ein bißchen erwärmen damit ihm nicht zu kalt wird. :)

Sonst kannst du ein Stück z.B Kupferblech draugbefestigen (kleben ?).

MfG

5Volt-Junkie
11.07.2010, 16:42
PICture :cheesy:

ich bin total begeistert von deinem Optimismus =D>

Ich werde noch etwas mit dem Code rumspielen und meine Bücher durchblättern. Zum Glcük habe ich noch paar Billigservos zum spielen und das Miniservo noch ganz ist, was ich einsetzen werde.

Ansosnten wenn gar nix mehr läuft, mache ich ein Dauertest mit dem Servo und vielleicht wirklcih ein kupfer/alu-plättchen drauf kleben werde.
:-k

PICture
11.07.2010, 17:08
Sorry, aber trotz mehrfachen Versuchen konnte ich mich von optimistischen Praktiker zum pesimistischen Theoretiker nicht verändern ... :)

Deine Zukunftpläne fide ich optimal ...

MfG

oberallgeier
11.07.2010, 19:30
Nicht der Motore wird warm, sondern der Silizium-ChipDen Temperaturverlauf der Motoren bei Billigser vos im Leerlauf und unter Last hatte ich über eine gewisse Zeit schon gemessen (klick hier) - (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=332283#332283) einfach weil mir mal zwei "durchgebrannt" waren und ich etliche Berichte gelesen hatte, dass diese Billigser vos nix taugen würden. Die Temperatur am Chip hatte ich nie gemessen.

Diese Ser vos brauchen zum ordentlichen Anlaufen ordentlich Strom, meine funktionieren an meinem Ser votester bei Strombegrenzung unter 400 mA recht ruckelig und unter 200 mA fast garnicht mehr richtig. Ein Anzeichen für ihren Bärenhunger. Im Leerlauf, d.h. ohne Last an der Antriebswelle kommen sie mit 10 mA bis 20 mA aus. Mit Last an der Antriebswelle oder beim Verstellvorgang, dann auch ohne Last, kann der Strom auf 200 mA ansteigen. Nun weiß ich nicht, was davon im Chip verbraten wird. Insgesamt rechne ich aber mal milchmädchenhaft: Versorgung 6V und 200 mA gibt 1,2W. Das macht ein neckisches Taschenlampenbirnchen ja auch . . . und wird dabei ganz schön warm.

Es wäre also z.B. auch mal zu fragen/prüfen, ob Du Deine Ser vos nicht durch Deine Ansteuerung an die Anschläge schickst - und sie dort Deinem Hitzetest aussetzt . . . . . Es wäre natürlich recht interessant, mal ein Bildchen von dem Signal (PW M) zu sehen, das Du an Deine Ser vos schickst. Denn solche Codebeispiele . . . einmal kann ich kein Ba scom - und zweitens glaub ich nicht jedem Code, was er verspricht . . . .

MeckPommER
13.07.2010, 13:29
Hallo :-)

So ein wenig sträuben sich mir die Haare =:-)

Einfach irgendwelche (auch funktionierende) Listings abtippen ist im Umgang mit Servos vielleicht ein etwas riskanter Weg. Man sollte sich so ein Listing anschauen und verstehen, was für Signale ein Servo braucht und wie das Programm diese erzeugt. Hier sollte man dann auch verstehen, welchen Einfluß der Quarz auf die Erzeugung hat. Hier lieber zu Testzwecken erstmal mit einer LED experimentieren.

Kommen einige Servo an ihre mechanische Begrenzung, heizt sich deren Elektronik bis zum *peng* auf. Servo ohne Last = 20mA, mit normaler Last 500mA, gegen den Anschlag = 1,5A = *peng* oder *bröckel* ;-)
Die Werte sind natürlich nur beispielhaft.

Erster und wichtigster Punkt: Programm begreifen und nachvollziehen, ob da wirklich auch alle 20ms ein Impuls rauskommt, der 1 bis 2 ms lang ist.

Gruß und erfolgreiches Verstehen, MeckPommER

5Volt-Junkie
15.07.2010, 09:44
Hallo,

ich habe genau die selben Servo mal mit Arduino angesteuert, da wurde keins von den heiß. Hab mir auch schon überlegt ob ich als Board das Arduino einbaue wo die befehle C ähnlich sind und die Bibliotheken reichen auch vollkommen aus, sodass mein Bot ordentlich läuft.

Mein Problem ist dass ich nicht stundenlang sitzen kann und mir dabei die Quellcodes anschauen. Ich muss alles sofort ausprobieren.

:oops: