PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : servo tester



RobbyMartin
14.01.2011, 22:02
hallo

ich habe diesen fertigen programm text ( ich kann kein assambler nur bascom doch ich möchte das rad nicht neu erfinden) wie kann ich hier den ad bereich auswählen zum beispiel ad zwischen 10 - 100 ansatt von 0 - 1024


; ==========================================
; Servotester für den Modellbau mit ATtiny13
; ==========================================
;
; Version 1.00 (23.05.2008)
;
; Fuse-Bits: BODLEVEL1=0 \ BrownOut-Spannung
; BODLEVEL0=0 / =4,3V
; CKSEL1=1 \ Interner Oszillator
; CKSEL0=0 / =9,6MHz
; CKDIV8=1 - Vorteiler /8 aus
; SUT1=1 \ Maximale
; SUT0=0 / Startverzögerung
;
; Ports: PB0 - Eingang (Pull-up) nicht genutzt
; PB1 - Eingang (Pull-up) nicht genutzt
; PB2 - Eingang (Pull-up) nicht genutzt
; PB3 - Eingang (analog) Potentiometer
; PB4 - Ausgang (H-aktiv) Impuls-Ausgang zum Servo
; PB5 - Eingang (Pull-up) Reset
;
; Timer: Timer0, wird mit Vorteiler 64 betrieben, Taktfrequenz=
; 150kHz, Interrupt bei Overflow und Zählung eines H-Byte
;
.nolist
.include "tn13def.inc"
.list
;
; Register-Definitionen
;
.def timerh= r2 ;High-Byte für Timer0, wird bei jedem
;Timer0 Overflow Interrupt um 1 erhöht
.def backup= r3 ;SREG-Zwischenspeicher für Interrupts
.def servol= r4 ;berechneter Servo-Zählerstand Low
.def servoh= r5 ;berechneter Servo-Zählerstand High
.def flags= r25 ;Bit0: Impuls-Ende wurde bearbeitet
;
.cseg
.org 0
;
reset: rjmp start ;Programm-Beginn
int0ad: reti ;External Int 0 (nicht genutzt)
pci0ad: reti ;Pin Change Interrupt (nicht genutzt)
ovf0ad: rjmp timer0 ;Timer0 Overflow Interrupt - 585,9Hz
;bzw. alle 1,707ms
erdyad: reti ;EEPROM Ready (nicht genutzt)
aciadd: reti ;Analog Comparator (nicht genutzt)
oc0aad: reti ;Timer0 Compare Match A (nicht genutzt)
oc0bad: reti ;Timer0 Compare Match B (nicht genutzt)
wdtadd: reti ;Watchdog Time-out (nicht genutzt)
adccad: reti ;ADC Conversion Complete (nicht gen.)
;
; Initialisierung ---------------------
;
start: ldi r16,0b010000
out ddrb,r16 ;PB4 auf Ausgang setzen
ldi r16,0b100111 ;PB4 auf Low und Pull-up an den
out portb,r16 ;Eingängen PB0-PB2 aktivieren
;
; ldi r16,neuer-wert ;hier lässt sich der Oszillator
; out osccal,r16 ;anpassen, falls das Ausgangs-
; ;signal stark von 20ms abweicht
;
clr r16
out tcnt0,r16 ;Timer0 Zähler löschen
out tccr0a,r16 ;Timer0 im Normal-Modus
ldi r16,0b11<<cs00
out tccr0b,r16 ;Timer0, Vorteiler=64 setzen
ldi r16,1<<toie0 ;Overflow Interrupt aktivieren
out timsk0,r16 ;Interrupt einschalten
;
ldi r16,(1<<adlar)+(0b11<<mux0);Vcc als Referenz und PB3
out admux,r16 ;als Eingang, Wert linksbündig
ldi r16,(1<<aden)+(1<<adsc)+(0b111<<adps0);ADC ein, Start,
out adcsra,r16 ;Vorteiler=128
ldi r16,1<<adc3d ;Digital Input Disable PB3
out didr0,r16 ;setzen
;
clr timerh ;Timer H-Byte löschen
sei ;Interrupt aktivieren
wdr ;Watchdog-Timer zurücksetzen
ldi r16,1<<wde ;Watchdog ein, 2k (16ms)
out wdtcr,r16 ;Watchdog aktivieren
;
; Hauptprogramm -----------------------
;
main: wdr ;Watchdog-Timer zurücksetzen
;
; Impuls-Ende ermitteln und bearbeiten
;
bst flags,0 ;Impuls-Ende-Flag gesetzt?
brts main10 ;ja -> Bearbeitung überspringen
in r16,tcnt0 ;sonst Timer0 Zählerstand holen
mov r17,timerh ;Timer H-Byte holen
sub r16,servol
sbc r17,servoh ;Zählerstand erreicht?
brmi main10 ;nein -> überspringen
;
sbr flags,0b00000001 ;Ende-Flag setzen
cbi portb,4 ;Ausgang PB4 auf Low setzen
;
; Zyklus-Ende / Impuls-Start ermitteln und bearbeiten
;
main10: in r16,tcnt0 ;Timer0 Zählerstand holen
mov r17,timerh ;Timer H-Byte holen
ldi r18,low(3000)
ldi r19,high(3000) ;Zählerwert für 20ms laden
sub r16,r18
sbc r17,r19 ;Zählerstand erreicht?
brmi main ;nein -> Hauptschleife
;
; Timer zurücksetzen, ADC lesen
;
clr r16 ;sonst
out tcnt0,r16 ;Timer0 auf 0 setzen
clr timerh ;H-Byte auf 0 setzen
sbi portb,4 ;Ausgang PB4 auf High setzen
clr flags ;Flags löschen
;
in r16,adch ;ADC-Wert lesen (0-255)
ldi r17,181 ;Multiplikator für Poti-Bereich
;1,2ms laden (Zählerstand 181)
;
; Multiplikation ADC-Wert mit 181 zur Ermittlung des Timer-Zählerstan-
; des, 8Bit * 8Bit Multiplikation nach Atmel Application Note AVR200
;
clr r18 ;Ergebnis H-Byte löschen
ldi r19,8 ;Schleifenzähler setzen
lsr r17 ;Multiplikator rotieren
main20: brcc main30 ;LSB=0? ja -> weiter, sonst
add r18,r16 ;Multiplikand zum H-Byte add.
main30: ror r18 ;Ergebnis H-Byte rotieren
ror r17 ;Ergebnis L-Byte rotieren
dec r19 ;alle Schleifen durchlaufen
brne main20 ;nein -> Schleife
;
; Zählerstand für Servo-Position ermitteln, ADC neu starten
;
ldi r16,low(135)
ldi r17,high(135) ;Zählerwert für 0,9ms laden
clr r19 ;H-Byte des Multiplikations-
add r16,r18 ;Ergebnisses addieren
adc r17,r19 ;Übertrag addieren
mov servol,r16 ;berechneten Zählerwert
mov servoh,r17 ;speichern
sbi adcsra,adsc ;ADC neu starten
rjmp main
;
; Timer0 Overflow Interrupt -----------
;
timer0: in backup,sreg ;SREG sichern
inc timerh ;Timer0 H-Byte erhöhen
out sreg,backup ;SREG wiederherstellen
reti
;


danke schon mal
gruß
martin

HeSt
18.01.2011, 21:23
Hallo Martin,
Antwort kann ich dir leider auch keine geben, nehme aber die Gelegenheit beim Schopf, mich an deinen Tread anzuhängen, weil ich ebenfalls dabei bin, mir einen Servotester mit einem Atmel Tiny13 zu bauen (Assembler codiert).

Bin mitten drin, habe aber ein Problem:
Bei Einschalten wird der Wert des ADC-Wandlers einwandfrei abgefragt, aber im weiteren Programmverlauf scheint dies nicht mehr zu sein. Jedenfalls wird ein geänderter ADC-Wert (mit Poti) nicht in den Timer übernommen.
Ich finde bei aller Mühe meinen Gedankenfehler nicht!

Code ist angehängt (nicht ganz vollständig für den Servotester, sondern abgespeckt auf das Problem).

Kann mir und Martin da jemand helfen?

LG Heinz

oberallgeier
18.01.2011, 23:05
Hallo ihr Beiden,

vor etlicher Zeit habe ich verschiedene Servotester gebaut. Tiny13 und ein Poti zum Verstellen. Hier ein Bild vom Aufbau (klick). (https://www.roboternetz.de/phpBB2/viewtopic.php?p=466370#466370)

................https://dl.dropbox.com/s/aeenxojt07613hv/servotester_1663.jpg?dl=0http://oberallgeier.ob.funpic.de/servotester_1663.jpg

Dazu gabs eine Programmierung in Assembler (klick) (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=321824#321824) die ziemlich holprig war. Beachte: im Code ist die Schaltung skizziert - bitte darauf achten, dass die Servoversorgung nicht über den Spannungsregler läuft und als Zuleitung max. 6 V nehmen. Mittlerweile ist der ähnliche Aufbau in C programmiert (klick) (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=401093#401093) und bei mir immer wieder in Betrieb. Der Aufbau ist nochmal hier gezeigt (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=401021#401021), Schaltung, Bestückung und Quellcode in C sind in diesem Link (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=401093#401093) zu finden.

Ergänzungen: Im hier gezeigten Bild ist rechts neben dem SigOut-Pin ein Kontaktstift zu sehen - der dient beim Testen manchmal zum Anschluss des Oskars. Oberhalb vom Poti ist eine zweipolige Buchse mit Brücke. Hier kann man zur Messung der Stromaufnahme des Servos ein Amperemeter einschleifen. Diese Ergänzungen sind immer wieder mal äusserst nützlich.

Vielleicht hilft euch dies weiter.

Viel Erfolg.

HeSt
19.01.2011, 13:42
Hi,

muss mich erst mal bei Martin entschuldigen, dass ich seinen tread "missbraucht" habe. Aber er hat sich angeboten, um nicht einen neuen aufzumachen.

Hatte gestern eine "loop" in meinem Hirn ...
Kam heute raus und nun funktioniert alles bestens - in Assembler.
Ich muss dazu sagen, dass ich kein Profi auf dem Gebiet bin, sondern gelegentlich mal zu AVR's greife, wenn ich eine Problemstellung habe und mir eine Lösung mit einem µC als geeignet erscheint.
"Gelernt" habe ich keine der Programmiersprachen. Ich wurschtle mich halt so durch - in Assembler.

Anbei mein fertiger Code.

@ Martin
Falls du Fragen dazu hast, keine Scheu.

Danke und LG Heinz

HeSt
20.01.2011, 12:17
Hallo Joe,
hab mir nun deinen code angesehen und versucht ihn zu "lesen" (zu verstehen).
Leider reichen meine Kenntnisse nicht aus, um nachvollziehen zu können, was und wie da alles programmiert ist.
Ist für mich "high sofisticated"!
Und ich stecke programmtechnisch noch in den Kinderschuhen!
Daran wird sich wahrscheinlich auch so schnell nichts ändern, denn dazu baue ich viel zu wenig oft etwas mit AVR's.
Und wenn, dann sind das auch nur ganz simple Sachen ...

lg Heinz

oberallgeier
20.01.2011, 13:34
... code angesehen und versucht ihn zu ... verstehen ... Leider ... "high sofisticated" ...UUUuuups. Sorry, das trifft mich jetzt wirklich. Ich dachte immer, ich hätte zwar lausig schlecht dokumentiert, aber immer noch genug, um so etwas nachvollziehen zu können. Ist dieser hier (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=321824#321824) in ASM, Version x81 vom 18.Okt. 07, unverständlich? Hat noch keinen Ti mer in Gebrauch, aber man kann durch eine Warteschleife hübsch mit dem Se rvo spielen. Allerdings ist die Routine (in an sich zulässiger Weise) stark vereinfacht. Es wird kein konstanter 20-ms-Zyklus ausgegeben, sondern eine aktive Rampe mit einer wählbaren Länge zwischen 1 bis 2 ms wird durch ein 18,5-ms-Pause auf UNGEFÄHR die gewünschten 20 ms ergänzt.

Zur Servoansteuerung kennst Du vermutlich diese Erläuterungen über die Ansteuerung von Se rvos (http://www.rn-wissen.de/index.php/Servo#Ansteuerung) ! ?

Diese Quelle (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=401093#401093) ist natürlich komplizierter. Liest über den ADC (adc_hol) den aktuellen Wert des Potiwiderstandes - aber nur als ADC-Wert und braut daraus die Ansteuerung für den Se rvo.

Kann ich vielleicht helfen? Was genau verstehst Du nicht? Vielleicht könnten wir es klären?

HeSt
20.01.2011, 17:37
Keine Kritik an deiner Doku !!!!
Da ich noch schlecht programmiere, habe ich noch Verständnisprobleme mit einigen Befehlen! Weiß also nicht wofür sie gut sind und wie sie arbeiten.
Habe noch nie mit "word" gearbeitet, geschweige denn mit EEPROM oder SRAM (was bei dir eh nicht vorkommt). Deine defines (ms185,msvar) sind mir unbekannt. Kann man da Breiche angeben? Was bedeuten word lsb/msb?
Du siehst, bei mir haperts schon am Basiswissen. Also kann ich dein Programm nicht richtig lesen, weil mir das Wissen dazu fehlt!
Liegt nicht an deiner Doku !!!

Wie gesagt, ich hab weder einen Kurs gemacht noch ein Fachbuch gelesen, weil es bislang für meine Anwendungen nicht notwendig war.
Aber offensichtlich sollte ich mir da was zulegen.

Die Ansteuerung der Servos ist mir sehr wohl bekannt. Habe ja früher 27MHZ Sender, Empfänger und Servoelektronik selber gebaut. Alles ohne µC's. Auch einen Servotester mit 555er. Der lässt aber starke Servos zucken. Deshalb versuche ich es nun mit dem Tiny13. Allerdings hab ich festgestellt, dass der interne Oszillator nicht ganz stabil läuft. Mal sehen, wie sich das auf die Servos auswirkt. Die HW-Realisierung muss noch ein wenig warten ...

oberallgeier
20.01.2011, 23:28
Keine Kritik an deiner Doku ...Warum nicht. Dokumentation kann nie gut genug sein!


... Verständnisprobleme mit einigen Befehlen! Weiß also nicht wofür sie gut sind und wie sie arbeiten ...Na dann wärs doch gut, irgendwelche ASM-Schnippsel zu nehmen und damit zu spielen - meinetwegen auch meine Schnippsel. Den kompletten Befehlsatz zum tiny13 gibts im Kapitel 21 der aktuellen Dokumentation (zum download) (http://www.atmel.com/dyn/resources/prod_documents/doc2535.pdf) "Instruction Set Summary". Am besten runterladen und in die directory ..\Datenblätter\µController+Verwandtes abspeichern. Und im Namen immer gleich die Versionsnummer dazu.

Vielleicht liest Du Dir mal dieses tutorial (http://www.rn-wissen.de/index.php/AVR_Assembler_Einführung) durch, das ist schon mal ne vernünftige Einführung - noch keine vollständige Schulung! Dazu könntest Du Dir auch AVRStudio installieren. Das hat einen Assembler - und der bringt Dir eine tolle Hilfe für die einzelnen Befehle!


... Aber offensichtlich sollte ich mir da was zulegen ...Genau. Ein ziemlich tiefschürfendes Assemblertutorial findest Du hier. (http://www.avr-asm-tutorial.net/index.html) Da sind solche krytischen Dinge wie SRAM und mehr gut erklärt (klick). (http://www.avr-asm-tutorial.net/avr_de/beginner/index.html)

Word, MSB, LSB: lies das hier durch. (http://www.mikrocontroller.net/articles/Digitaltechnik) Und sei nicht ungehalten, dass ich Dir Links nenne und das nicht selbst schreibe. Ich bin halt faul *ggg*. Ausserdem - bis ich die Geschichte der Groß- und Kleinender (little endian und so) erklärt hätte . . . .


... dass der interne Oszillator nicht ganz stabil läuft. Mal sehen, wie sich das auf die Servos auswirkt ...Meine Erfahrungen mit Se rvos sind eher spärlich, aber Probleme mit dem internen Oszillator kann ich mir bei der Servosteuerung kaum vorstellen. WENN dieser Oszillator wegdriftet, dann wirkt sich das ja auf Highpegel und Lowpegel der Ansteuerung gleichmässig aus (ausser die Schwankungen wären schneller als 50 Hz *ggg*).


... Die HW-Realisierung muss noch ein wenig warten ...Schade! Denn Du kannst natürlich im AVRStudio im Simulator die Auswirkungen des Codes sehen - aber im Realen ist das immer viel hübscher. Eben anschaulicher.

Viel Erfolg.

HeSt
21.01.2011, 08:48
Es ist richtig, dass eine Doku nie gut und ausreichend genug sein kann. ;-)
Aber Kritik gibt's nur dann, wenn sie mies ist!
Was ich bislang noch nicht rausgefunden hab ist, wie du die Impulszeit von extern (Poti, Taste) beeinflusst - oder ist das noch nicht in deinem code?

Zum Lernen hab ich mir das Franzis-Paket zugelegt. Da ist das AVR-Studio dabei - damit hab ich mir die bisherigen Kenntnisse erworben. Aber hier sind halt nur ganz einfache Beispiele drin. Es geht ja eh noch weiter ... ;-)
Allerdings kann man die Programme im AVR-Studio nur bedingt ablaufen lassen um deren Ablauf und Wirkung zu testen. Zumindest geht's mir so.
In der Realität sieht's oft anders aus.

Mit "Schnippsel" hab ich eigentlich noch nie gearbeitet, da ich aufgrund meiner minderen Kenntnisse andere Programme schwer bis kaum zu lesen (verstehen) vermag. Darum suche ich auch kaum in/nach anderen Programmen.

Auf jeden Fall danke ich dir für die vielen Links!! Ist in Ordnung es so zu machen - ich würde es auch! Warum das Rad neu beschreiben, wenn es schon was sinnvolles gibt!

Den Oszillatordrift kannst du am Scope schön sehen. Er bewegt sich durch die angewandte Programmiertechnik beim Impuls in einem Bereich von ca. 0,02mS. Nachdem das ein gehöriger %-Satz von 0,7mS ist ...!?
Ist ein schönes, gleichmäßiges "Pumpen", denn ein Zittern.
Mal sehen, ob das nur am Scope so aussieht ....
Bei der Pause ist das völlig egal - die kann um einige mS abdriften.

Mit der HW-Realisierung meinte ich den Bau auf geätzter Platine.
Ich hab einen Versuchsaufbau gemacht, um mit dem Scope die Zeiten zu messen. Hab aber noch kein Servo angeschlossen. Vielleicht mach ich das noch vor dem endgültigen Aufbau.

Nochmals vielen Dank für die Hinweise und Links!!!!!

ps:
Hab meinen code durch "Umstellen" noch etwas effektiver/kürzer gebracht.
Zuerst Poti lesen, dann Impuls ausgeben, danach die Pause. Dadurch braucht der Timer nur 1x gestartet werden, kann durchlaufen und nur wieder vor der ADC-Wandlung gestoppt werden.

LGH

oberallgeier
21.01.2011, 09:41
Siehe kurzer Hinweis zum Code im PN. Ergänzung dazu: in C mit nem mega168/20MHz hatte ich auch mal einen Servotester gebaut. DER war gut - fünftausend Digits für den gesamten Verstellbereich und ein LCD zur Werteanzeige. War zum Experimentieren natürlich Spitze. Leider zerlegt - und der Code ist grottenschlecht.

Find ich prima, dass Du die Oszillatordrift anschaust. Gibts dazu bitte mal ein Oskarbildchen? Und ein paar weitere Daten? Das ist ja mal was interessantes - würde ich gerne nachvollziehen.

HeSt
21.01.2011, 14:32
Ja, der mega168 ist was feines - aber für einen Servotester doch ein wenig zu überkanditelt - finde ich ;-)

Danke für deinen Code!
Aber ich schaff ihn einfach nicht! Einerseits schreibst du von ADC 10-Bit-Messung, hast dann aber nur 8 Bit (adlar). Wozu die Wandlung in der adc_init, wenn du dann nix machst damit - zumindest erkenne ich nichts ...
So gibts einiges ...
Ich kann deine Gedankengänge einfach nicht nachvollziehen.
Egal, keine langen Fragen und Erklärungen - jeder hat seine Art, seine Gehirnwindungen einzusetzen ;-)

Wie krieg ich einen Code und/oder Bilder direkt in den tread?
Hab dazu auch nichts in den FAQ'S gefunden ...

Die Drift ist schwer bildlich festzuhalten - es geht zu schnell und ist auch in einem kleinen Bereich. Ich hab ein etwa 40 Jahre altes Scope! Funktioniert immer noch. Damit kann man aber leider nicht speichern. Für meine Belange reicht es jedoch.

@ Robby,
meinst du mit ad-Bereich den Wandlungsbereich des ADC-Wandlers?
Mit 10-Bit-Messung ist der bis 1023, bei 8 Bit-Messung bis 255.
Einschränken kannst du nur, indem du es rein rechnerisch machst oder wie ich, mit einem vorgeschalteten Spannungsteiler (siehe code). Somit steht auch nur einen kleinerer Spannungsbereich für die Auswertung zur Verfügung.

RobbyMartin
30.01.2011, 09:36
Hallo,

ich glaube ich muss mich entschuldigen das ich so lange nicht geantwortet habe, denn ich habe nach 2 wochen keine Antwort bekommen und dachte es wird auch nichts mehr ;)

Naja anscheinend wurde doch was drauß.
Ich muss mal alle infos durchkauen und mal schaun was ich drauß machen kann.


Gruß
Martin

HeSt
30.01.2011, 11:50
Servus Martin,

ich denke, dass du - so wie ich - eine Menge Informationen aus den Links von Joe holen kannst. An dieser Stelle nochmals danke an Joe.
Hat mir einiges gebracht.

Mein Servotester funktioniert nach ein paar Erweiterungen tadellos mit folgenden Funktionen über einen 3-Stufen-Schalter wählbar:
1- Normal über Poti (0,6 - 2,4mS) - bewusst so weiter Bereich
2- Automatik (0,8 - 2,2mS = ca. ±120%) langsam hin und her
3- Servomitte (exakt 1,5mS) zum Einstellen der Servohebel auf Mitte.
Mit dem Poti schafft man kaum ganz exakt die 1,5mS.

Gruß Heinz

[edit]
@ Joe,
Tester ist fix-fertig :)
Die Drift des internen Oscillators ist so gering, dass sie in meiner Programmvariante keine Auswirkung auf das Servo hat. Ist nur am Oscilloskop feststellbar.

HeSt
30.01.2011, 12:02
Servus Martin,

ich denke, dass du - so wie ich - eine Menge Informationen aus den Links von Joe holen kannst. An dieser Stelle nochmals danke an Joe.
Hat mir einiges gebracht.

Mein Servotester funktioniert nach ein paar Erweiterungen tadellos mit folgenden Funktionen über einen 3-Stufen-Schalter wählbar:
1- Normal über Poti (0,6 - 2,4mS) - bewusst so weiter Bereich
2- Automatik (0,8 - 2,2mS = ca. ±120%) langsam hin und her
3- Servomitte (exakt 1,5mS) zum Einstellen der Servohebel auf Mitte.
Mit dem Poti schafft man kaum ganz exakt die 1,5mS.

Gruß Heinz

oberallgeier
30.01.2011, 13:01
Hallo Heinz,


... Links ... einiges gebracht ... Mein Servotester funktioniert nach ein paar Erweiterungen tadellos ...schön, dass die Hilfe was gebracht hat und natürlich Glückwunsch zu Deinem Ergebnis. Die Funktionen klingen wirklich sehr praktisch, besonders die definierte Mittelstellung=1,5 ms ist ne gute Idee. Das alles auf einem tiny13 ist schon eine feine Sache; macht sicher den Speicher ziemlich voll!

Du hast recht, dass der 168er für einen Servotester überzogen ist. ABER die fein unterteilte Genauigkeit des Servosignals ist eben mit dem 16-bittigen Ti mer unübertroffen. Ausserdem wollte ich damals noch eine LCD-Anzeige des aktuellen Stellwertes einbauen. Ziel war es, die unterschiedlichen Parameter der einzelnen Billigservos besser in den Griff zu kriegen - ist nur irgendwie auf der Strecke geblieben. Der 168er ist auch mein Standardcontroller, da lagen einige Stücke rum und ich hatte einige fertige Routinen.

Weiter viel Erfolg,

radbruch
30.01.2011, 16:03
...ist nur irgendwie auf der Strecke geblieben.Tja, wer kennt das nicht. Deshalb finde ich das so gut:

"Hoffentlich liegt das Ziel auch am Weg"

:)

Zum Topic: Ich würd`s auch mit einem Tiny13 umsetzen. Der kann mit internen 9,6MHz takten, das reicht auch mit einem 8-Bit-Timer für eine ausreichend hohe Auflösung. Und mit seinen, dann noch freien, vier ADC-Kanälen kann er auch die "3-Stufen-Schalter"-Version des Servotesters.

oberallgeier
30.01.2011, 17:11
... Ich würd`s auch ... Tiny13 umsetzen ... internen 9,6MHz ... vier ADC-Kanälen ...Ja, dieses hier und andere "auf der Strecke geblieben ..." haben mir viele interessante Nebenstrecken beschert.

Meine Lösung (siehe Bild), (https://dl.dropbox.com/s/muciqb0kzmt32k0/servotester_1663.jpg?dl=0) ein fester Bestandteil meiner Platinenausrüstung, läuft ja auch so. Und für die drei Taster blieben in meinem Schaltplan (https://dl.dropbox.com/s/orx884ec5x4gaba/s-test-2.jpg?dl=0) noch MOSI, MISO und SCK übrig. SCK sogar als ADC. Ach ja, den ADC0 würde ICH nicht nehmen, dann ist nämlich der /RES futsch - und da ich beim Posten und beim Programmieren immer mehrfach nachbessere wäre das für mich ein GAU. Ich überlege seit dem Posting von Heinz, ob ich nicht auf meinen Wannenstecker eine tastenbestückte Buchse montiere *ggg*.

HeSt
30.01.2011, 17:41
Es tun's auch 1,2MHz bei T13 ... zumindest für mich.
Und da ich einige in meinem Fundus habe, nehme ich sie halt ...
Ich hab mir mal einen Schwung bestellt, weil ich sie u.a. für meine LiPo-Saver verwende. Bin ja auch (oder hauptsächlich) Modellbauer/-flieger.
Und da mir anfangs einige LiPo-Akkus eingegangen sind, weil die Regler nur die Gesamtspannung überwachen und dann abschalten, aber nicht jede einzelne Zelle, hab ich mit dem Tiny13 einen LiPo-Saver entwickelt, der jede Zelle einzeln überwacht und bei einer vordefinierten Spannung (3,1V) den Motor abschaltet (durch Ausgabe des kürzest empfangenen Impulses). Da sich dann die Zelle sofort wieder erholt (>3,1V), kann man durch Rücknahme des Gasknüppels auf 0 (Gas aus) den Motor dann wieder laufen lassen. Nach 3x-igem Abschalten verringere ich das Spannungslimit auf 2,95V (absolute Entladeschlussspannung). Das garantiert mir ein sicheres "Heimkommen".
Anfangs hatte ich diese Funktion nicht. Aber nachdem ich mit einem meiner Modelle eine Landung am Wasser (war ja ok, mit Schwimmern - aber zu weit weg) machen musste, und der LiPo-Saver den Motor immer wieder sofort abschaltete, blieb mir nichts anderes übrig als das Modell "abholen" - schwimmend - war GsD im Sommer. Seit ich die Reduzierung der Abschaltspannung (Ausnutzung der Reserve, die ich ja anfangs lasse), programmiert habe, hab ich dieses Problem nicht mehr. :-)

Also dann, viel Erfolg bei euren Projekten!
Man liest sicher wieder mal was von einander !! ;-)

@ Joe,
das Servoprogrämmchen ist 726Bytes groß - es bleibt also noch was übrig, für Erweiterungen ... ;-)

Bis zum nächsten Mal
Gruß Heinz

HeSt
01.02.2011, 13:14
So, nach einigen Tests mit verschiedenen Servos stelle ich fest, dass die Oszillator-Drift (zumindest bei meiner Lösung) bei sehr stellgenauen Servos doch merkbar ist. :-(
Sehen tut man meist nichts, da die Abweichung zu gering ist.
Aber man hört das Servo arbeiten ... (manche nur, wenn man es ans Ohr hält).
Bei "günstigeren" Servos ist das kaum der Fall. Da muss die Differenz größer sein, damit die Servoelektronik sich veranlasst fühlt, nachzufahren.
Einstweilen genügt es mir.
Und irgendwie kann man damit ja auch die Stellgenauigkeit eines Servos ermitteln.
So hat die Drift ja auch ihr Gutes ;-)

LG Heinz

oberallgeier
01.02.2011, 18:04
... nach einigen Tests mit verschiedenen Servos stelle ich fest ...Manchmal bin ich dokumentationshungrig. Aber ich serviere ja auch Informationen,
z.B. über den Stromhunger (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=519166#519166) zwei verschiedener Se rvos, wenn man das Signal abschaltet. Im dortigen Fall (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=518880#518880) brauche ich nur zwei wenig kraftraubende Stellungen anzufahren. Da zeigen zwei unterschiedliche Typen sehr markante Unterschiede. Langer Rede kurzer Sinn:

Würdest Du bitte zu solchen interessanten Tests auch gleich den Servotyp nennen? Also mich jedenfalls interessierts schon - weil ja ein Servotester nicht unbedingt bequarzt wird und oft für das (genaue) Ausmessen von Ausschlägen bzw. für quantifizierberes Anfahren von Positionen dient.
... Und irgendwie kann man damit ja auch die Stellgenauigkeit eines Servos ermitteln ...Eben, genau deswegen.

HeSt
02.02.2011, 08:57
Hi,
hab die Servos gemessen, die mE größenmäßig für dich in Frage kommen (MiniDO).
Gemessen wurde die Stromaufnahme ohne Impuls bzw. mit Impuls bei keiner Driftnachstellung.
1) Multiplex Nano-S: 5,64mA
2) Reely ES-01 ("C"): 6,2mA
3) Expert ECO+Micro 12 Pro: 4,82mA
Driftverhalten (Nachstellen/Stellgenauigkeit):
1 fährt immer nach, 2 manchmal, 3 nie
Somit kannst du auch eine Benotung in dieser Reihenfolge für die Stellgenauigkeit der Servos vergeben.

Ich hoffe, dir damit gedient zu haben.
Zusätzlich anbei eine alte Schaltung (Ende der 70er Jahre, in der ich noch Sender und Empfänger selbst gebaut habe) mit Abschaltelektronik, wenn der Impuls fehlt.
Der angezeigte Ausgang zum Servo ist hier invertiert, da die Graupner-Servos früher mit Minus-Impuls gearbeitet haben. Es genügen also T6 + C, D, R.
Vielleicht hilft dir das auch noch.

oberallgeier
02.02.2011, 09:10
... Somit kannst du auch eine Benotung in dieser Reihenfolge ... vergeben ...Danke für die Arbeit, danke für das Entgegenkommen.


... anbei eine alte Schaltung (... 70er Jahre ... Sender und Empfänger selbst gebaut habe) mit Abschaltelektronik, wenn der Impuls fehlt ...DANKE. Genau das hatte ich ja vor einige Zeit überlegt, hatte es aber vorerst gelassen wegen Platzmangels am Oberdeck (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=515169#515169) (sprich Trägheit der Werkstattbesatzung); das Oberdeck wird demnächst noch niedriger, weil der Deckel abgesenkt werden muss.

Sender und Empfänger im Selbstbau - Kompliment, man ahnt ja kaum, welche Sachkenntnisse bei manchem Forumsmitglied liegt. Danke für die Schaltung - die kann ich derzeit nicht sehen/finden/öffnen.

Danke, weiter viel Erfolg

HeSt
02.02.2011, 09:51
Danke für die Arbeit, danke für das Entgegenkommen.Bitte, gern geschehen!


Sender und Empfänger im Selbstbau - Kompliment, man ahnt ja kaum, welche Sachkenntnisse bei manchem Forumsmitglied liegt.Danke, da werd ich ja direkt rot !!


Danke für die Schaltung - die kann ich derzeit nicht sehen/finden/öffnen.Bitte. Kannst sie auch nicht finden, ist nicht rauf gegangen - war zu groß - hab ich leider übersehen :-(
Ist jetzt in verkleinerter Form aber dran > oben.