WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Home Cockpit - Das Forum für die "Bastler" (http://www.wcm.at/forum/forumdisplay.php?f=55)
-   -   Servos ansteuern (ja, mit AVR-nC ;) ) (http://www.wcm.at/forum/showthread.php?t=215269)

philharmony 07.05.2007 14:01

Servos ansteuern (ja, mit AVR-nC ;) )
 
Moin, ich habe mich jetzt mal an die Möglichkeiten des PWM-Generators der Atmels gemacht.
Dabei gibts natürlich mal wieder Probleme.
Und zwar kann ich nen Servo anhängen (habe mal vorsichtshalber nen ganz billigen genommen, aber der S8051BB reagiert genauso).
Wenn ich den Servo anschliesse, dann summt er die ganze Zeit ziemlich laut, verstellt zwar seine Position, aber kommt einfach nicht zur ruhe, der Motor wird dabei auch recht schnell ziemlich heiss).
Ich hole mir die 5V vom VTG-Pin des PortB, Gnd ebenso und das PWM-Signal vom OC0 pin (PinB3) und zwar vom STK500-Board.

Hier mal der C-Code des Programms

Zitat:


#include <avr/io.h>



int main(void)
{

int seta, setb;

DDRB=0xff;
DDRA=0x00;
PORTA=0xff;
OCR0=128;
TCCR0 = (1<<WGM00) | (1<<COM01) | (1<<CS00); // Timer Register auf Phasenrichtigen PWM-Mode setzen, die Art der High- und Low-Zeit bestimmen, kein Prescaling verwenden (mit 1024 wars aber genauso)

for(;;)

{

if (bit_is_set(PINA, PINA0))
{
if (seta==0)
{
OCR0 = OCR0+10;
seta = 1;
}
}

if (bit_is_clear(PINA, PINA0)) seta=0;

if (bit_is_set(PINA, PINA1))
{
if (setb==0)
{
OCR0 = OCR0-10;
setb=1;
}
}
if (bit_is_clear(PINA, PINA1)) setb=0;
} //Mit PINA0 und PINA1 kann ich den Soll-Wert um 10 hoch- bzw runtersetzen. Das drumrum dient dazu, dass Pro Tastendruck nur je einmal gezählt wird und nicht bei jedem Taktdurchgang...

}


Gibt es Maximalwerte/-frequenzen... die die Servos verstragen? Oder wo könnte noch der Fehler liegen?

philharmony 08.05.2007 17:07

Ich habe mir das ganze mal auf einer Oscilloskop-Software (Messung über Mic-Eingang der Soundkarte) angeschaut.
Es entsteht auhc wirklich ein recht guter PWM-Verlauf, die weite ändert sich durch tastendruck etc.
Allerdings "flackert" das ganze. Wenn ich einfach eine LED anschlisse und ihn recht langsam laufen lasse (Prescaler 1024 oder 256) dann Blink diese aber total gleichmässig.
Ich habe jetzt mal ein bisschen rumgesucht und was gefunden, wonach die Pulsweite bei Servos zw 1 und 2 Millisekunden liegen soll.
Ist damit jetzt einfach nur die "High-Time" gemeint oder die Frequenz des Signals?
Wie stelle ich das denn nun am besten ein?
Die angeschlossenen Servos fahren zwar wie schon beschrieben ihre Position an, stellen dort aber nicht ab sondern summen weiter.
In manchen Stellungen kann ich den Arm des Servos ein kleines bisschen von hand weiterschieben und dann ist ruhe, in der nächsten Position klappt das dann schon wieder nicht mehr.
Ich verstehe das ganze nicht, vielleciht weiss da jemand Rat.
Gruß
Phil

philharmony 10.05.2007 12:52

Ich brichte einfach mal weiter, vielleicht hilft es dem einen oder anderen, oder jmd fällt was auf was ich falsch mache.

Überlegung:
Servo will ein 20ms PWM-Signal, dabei zw 1 und 2 ms High-Time.
Mein Atmega läuft bei 3,6864mHz.
Das sind 3686,4 Clocks pro ms.
Ich stelle einen Vorzähler von 256 ein, also dauert ein Zälen von 0-256 (8bit-Counter, ein kompletter Durchlauf) ca 17ms.
Dann sind 15 Zählerschritte eta eine ms, 30 dann entsprechend 2ms.
Also muss mein Compare Match zwischen 15 und 30 liegen und dort von High auf Low wechseln. (Klar, 16bit counter is später besser, momentan reichen mir aber die 8bit)
Multimeter sollte eine Mittlere Spannung von (5V/256*15 bzw *30)=0,29V bis 0,58V messen, tut es auch.
Der Servo zittert aber beim anschliessen (als Betriebspannung nehme ich die 5V VTG vom STK500) und stellt mit sehr wenig Kraft (kann den 8051BB locker mit dem kleinen Finger verstellen während er stellt).

AlTonno 13.05.2007 00:56

Für Servos würd ich auf jeden Fall einen externen Treiber-Baustein nehmen, könnt mir vorstellen, dass die Ströme die da auftreten nix fürs STK sind... schau in die Richtung mal genauer in die Datenblätter...


kann hier leider nicht konkret helfen, hab mit der Konstellation (Mega+STK+Servo) noch keine wirkliche Erfahrung... :rolleyes:

Mit Schrittmotoren ja, Servos leider net ;)

lg

philharmony 13.05.2007 10:20

Problem is, ich finde keine vernünftigen Datenblätter zu den Servos, aber das mit dem Treiberbaustein klingt gut.
Würdet Ihr eigentlich eher TTL- oder CMOS-Bausteine in verbindung mit AVR-Controllern verwenden?

kefali 13.05.2007 11:47

Wenn deine Endstufen MOSFETs sind,
dann käme CMOS in Frage.
Im anderen Fall, also herkömmliche Transistoren, könnten es auch TTL-Treiber tun/ausreichen.

philharmony 13.05.2007 12:45

Äääähm...??? Was haben denn nC´s für Ausgangsarten? Also cmos-Bausteine habe ich bereits in Betrieb und sie Funktionieren auch...

philharmony 13.05.2007 14:08

Könnt Ihr mir nen Treiber-Baustein empfehlen? Finde da nix gescheides.
Am besten wäre einer mit nem kleinen Speicher drin, andernfalls müsste man halt eine Reihe D-Flipflops davor packen um dann mit nem Multiplexer auf einen Port des AVR 16 Servos zu legen.
Desweiteren suche ich noch ne schöne Liste mit mäglichst allen CMOS-Bausteinen, finde immer nur einezelne Baureihen, aber keine Gesamtübersicht, nach Themen sortiert zb.

kefali 13.05.2007 16:35

Den Servo, bzw. dessen Regelkreis über einen PIC zu "steuern", halte ich für eine sehr ungünstige Lösung. Der PIC sollte nur die Verbindung zwischen USB und dem Regelkreis als SOLLWERT-Geber dienen, damit die Regelung immer aufrechterhalten, d.h. der Regelkreis immer geschlossen bleibt.
Durch die Digitalen Signale des PIC und seine Sequenzen entstehen Totzeiten, bzw.
entsprechende Verzögerungsglieder 1. und 2. Ordnung (im Sinne der Regeltechnik).
Den PIC in den Regelkreis einzubeziehen, das würde ich nie machen.

philharmony 13.05.2007 22:38

Ja, soweit bin ich jetzt auch, eben die AVRs alle via 2-wire-serial mit einem Master verbinden der am USB hängt.
Die ganzen Slaves sollten dann eben verschiedene Controller/Treiber-ICs mit Digital-werten füttern welche dann genau das tun wofür sie entwickelt wurden und zwar von Leuten die davon viel mehr Ahnung haben als ich ;)
Daher eben die Frage welche günstigen Servo-Treiber-Bausteine es da so gibt...


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag