Puls breedte hangt voor een groot deel van het fabricaat af. Varieert iets dus per fabricaat. Ik zal het eens precies meten maar ik dacht ergens tussen de 10 en 20 ms.
Puls breedte hangt voor een groot deel van het fabricaat af. Varieert iets dus per fabricaat. Ik zal het eens precies meten maar ik dacht ergens tussen de 10 en 20 ms.
http://www.ebay.nl/itm/multi-Servo-tester-3CH-ECS-speed-controler-Powe…
Zit een sweepstand op, start echter op in de "manual" stand.
Heb hem even opengemaakt, er staat helaas geen typenummer op het ic.
Op 11 mei 2014 10:55:52 schreef xxxPietxxx:
Puls breedte hangt voor een groot deel van het fabricaat af. Varieert iets dus per fabricaat. Ik zal het eens precies meten maar ik dacht ergens tussen de 10 en 20 ms.
Dat is helemaal fout. De herhaling ligt op 50Hz (=20ms), de pulsbreedte op nominaal 1-2ms, maar sommige servos slikken een wat ruimere range (b.v. 0.6-2.4ms). Maar ik vroeg wat JIJ wil voor jou pop. Hoe lang moet ie over een sweep doen?
Met 555 wordt het al vrij ingewikkeld.
Je hebt er 2 nodig. 1 die de herhaalfrequentie bepaalt op 50 Hz.
En een tweede die een variabele pulsbreedte genereert.
Wordt dus zoiets:
T3 is hier een stroombron die een steeds grotere stroom geeft naarmate de basis meer spanning krijgt. T1 en T2 vormen een stroomspiegel die de laadstroom en dus de pulsbreedte van de tweede timer bepaalt.
Met Opampjes gaat het nog iets gemakkelijker:
Hier is A1 een oscillator op 50Hz. Op de uitgang staat ongeveer een driehoeksignaal. de tweede opamp is een comparator die tgv toenemende spanning op de + ingang een steeds groter stuk van de zaagtand mee pakt.
Zo te horen heb je al genoeg ervaring op hardware gebied. dus de waarde van de componenten kun je zelf wel uitrekenen?
En zelf zou ik het ook doen met een AVR processor, zoals de AtTiny13 die al eerder is genoemd. Dan kun je volstaan met een 8-pin dipje zonder verdere externe componenten.
2 x 555 is toch een 556? Ik heb het kastje van Graupner opengemaakt en ga daar nu eerst eens het schema van maken. Daar zitten in ieder geval in >>> C358 en een C393 en een D40538BC. jemig Als ik het zo zie moet ik toch weer aan de nieuwe programmeer studie:-)
Er was nog een vraag wat ik met de pop wil. Welnu haar rechterarm en hoofd zitten op één servo met haakse tandwieltjes. Hoofd gaat dus draaien en gelijktijdig zwaait ze met haar rechterarm. Vandaar dat dat heen en weer moet gaan.
[Bericht gewijzigd door Henry S. op donderdag 19 juni 2014 19:39:15 (31%)
Klopt, 556 kan ook. Of of beter een 7556.
Maar ik wil wel helpen om het met een Tiny13 te doen.
Als je de volgende gegevens doorstuurt:
- Herhaal frequentie : 50 Hz?
- Puls breedte na opstarten : 1 ms ?
- Puls breedte na einde beweging : 2 ms ?
- Tijdsduur voor overgang : 2 seconden?
- Verloop lineair met de tijd ?
Dan wil ik wel een AtTiny13 op de post doen.
Hee Kees... dat is een mooi aanbod. Maar als een goede ""jonge onderzoeker"" wil natuurlijk dan alles ook ervan weten. Ik zal in ieder geval met de scoop even meten wat de tijden zijn. Blijft de vraag of ik daarna nog wat aanpassingen eraan kan doen, zo dat nodig blijkt. En...wat is er nodig omdat dan zelf te gaan doen? Jouw kosten? Ik heb hier op het forum al het nodige zien staan maar of dit zo effe te doen is? Maar brengt me wel op nieuwe ideeën. Kan je dan met zo'n Tiny13 ook een (servo) schakelfunctie maken? Dus bv. middenstand van een schakelaar op de zender is alles uit en naar boven schakelfunctie 1 en naar beneden schakelfunctie 2? En zo mogelijk, en gewenst, ook met latch functie? Ik gebruik dat oa. voor het inschakelen van lichten, dropluiken en flitsers (gemaakt van flitsers uit wegwerp fototoestellen) op de modellen. Zie bv. foto's.
Hallo Piet.
Mooie foto's. En vooral ook mooie machines.
Tja wat heb je nodig voor AVR:
- Een PC
- Ontwikkel-Software. In dit geval Atmel Studio, gratis te downloaden van de Website van Atmel : www.atmel.com
- Een AVR-ISP programmer. Overal te koop. Vanaf E 3.50.
- En verder heel veel tijd en doorzettingsvermogen.
Zo een Servo schakel functie ken ik niet. Maar ik vermoed dat je dan een servo signaal vanaf de ontvanger in het vliegtuig naar de processor stuurt en dat die dan daarop reageert met 3 verschillende uitgangen? Lijkt me wel mogelijk ja.
Golden Member
Op 11 mei 2014 17:04:08 schreef xxxPietxxx:
2 x 555 is toch een 556? Ik heb het kastje van Graupner opengemaakt en ga daar nu eerst eens het schema van maken. Daar zitten in ieder geval in >>> C358 en een C393 en een D40538BC. jemig Als ik het zo zie moet ik toch weer aan de nieuwe programmeer studie:-)
Ik gok equivalent aan resp. LM358, LM393 en CD4538B/HCF4538B.
Overigens mijn complimenten, niet alleen voor de mooie machines, maar ook voor het reverse-engineeren. Hele volksstammen zien het nut niet van het optekenen van een schema.
[Bericht gewijzigd door maartenbakker op zondag 11 mei 2014 23:35:10 (17%)
Ik heb even wat geprobeerd met een PIC10F206, en dat viel mee. Binnen een uurtje had ik een servo die vrolijk stond te zwaaien.
Ongeveer ieder 20ms geeft de PIC een puls van 1ms, na 32 pulsen van 1ms volgen er 32 van 2ms. Iedere 0.6s (32 pulsen) verandert de servo van positie. De traagheid van de servo zorgt voor een redelijk soepele beweging.
De afmetingen zijn minimaal, een sot23-6 en een ontkoppel c-tje.
Zonder controller moet het volgens mij ook te doen zijn met een 4093. Dit even gebaseerd op de Typical applications in de datasheet van de CD4093BC van Fairchild. Een poort als 50Hz oscillator die een gated one-shot aanstuurt. Er zijn nu nog twee poorten over waarmee het mogelijk moet zijn om om de halve seconde de pulslengte van de one-shot te veranderen.
Zo dat duurde dus ff lang. Eerst eens weer uitzoeken hoe foto's en schema's toegevoegd kunnen worden.
Kon het experimenteren toch weer niet laten en dus....
Hierbij het schema van mijn 1e prototype van een servo automaat. En een plaatje van de ""spin"". Aangezien ik nu eenmaal (nog) beter ben in hardware componenten nu gemaakt met een 556 en wat discrete componenten:-)De servo draait nu automatisch van links naar rechts. De weerstanden zijn experimenteel vastgesteld om de servo uitslag te beperken voor de pop. Want als het hoofd ca. 180gr. kan draaien en het armpje ook zo iets naar achteren is dat wat pijnlijk voor de pop:-( De BC547 sluit de 4k7 dus min of meer kort).
Eigenlijk heb je dus een automatische variabele weerstand nodig, in dit geval over de 4k7 weerstand. Tja.... en een zaagtand aan die transistor toevoegen lost dat niet op denk ik. Ik sta dus open voor (simpele) suggesties!
Overigens zijn de meeste van deze onderdelen ook nog van ca. 1970. Daar heb ik nog heel wat van en werken nog perfect. Zelf mijn experimenteer board is nog uit die periode:-) Voor het overige heb ik nog wel wat sloopprints liggen van oa. beeldschermen waar ik dan voor experimenten wat onderdelen uithaal. Hoef ik niet voor elk onderdeel 30 - 40 km te rijden. Overigens door het zelf wat experimenteren worden de schema's die jullie gestuurd hebben ook weer duidelijker en ga ik er anders naar kijken. Waarvoor dank!
Dit is een schema met een PIC'je wat zeer klein van formaat is.
Als je het schema opstart met een gesloten "sweep" gaat de servo gelijk in sweepstand.
Geen idee waar je woont, maar er is vast wel iemand in de buurt die een PIC'je voor je kan programmeren.
Wederom bedankt voor de informatie. Ik woon in Hellendoorn.
Met de potmeter is tevens de snelheid van de sweep in te stellen.
De hex en de layout is aanwezig, dus je hoeft niet zelf (of een ander) wat te gaan tekenen of programmeren.
Hallo Generaal,
Bedankt voor de informatie maar wat is de uitgangbelasting? Een beetje servo, zeker de digitale én vooral de kleine, trekt al gauw een paar honderd milli's.
De puls geeft in geen enkele servo schakeling zoveel stroom af.
De puls moet je zien als dat hele kleine schakelaartje wat die hele grote elektromotor inschakelt dmv relais oid.
Zo ook in de servo zitten FET's oid die de motor aansturen, dat doet in ieder geval niet de puls.
De batterij die je gebruikt bepaalt de stroom welke de motor van de servo doet draaien.
Zelf gebruik ik deze schakeling op zeer grote servo's (60Nm) welke ik in bigboats (speedboten) heb zitten die ruim 130cm groot zijn.
Je moet deze schakeling zien als je ontvanger, daar kan je ook 2 of meer servo's op aansluiten zonder dat je een knoepert van een ontvanger nodig hebt.
Je moet alleen meer of grotere accu's gebruiken als je meer servo's op je ontvanger aansluit.
Sorry, Je hebt helemaal gelijk. Foutje bedankt! Ik kan achter één ontvanger kanaal tenminste 3 a 4 Servo's hangen. Voor wat betreft de puls belasting. Dus dat is inderdaad geen probleem. Moet dus ook wel een 10Mc kristal bij komen zie ik.
Die dingen kosten inderdaad bijna niets. Ook zo'n 10Mc kristal dubbeltjes werk.. bij Conrad.
Uh.... vraagje... kan jij dat niet voor me programmeren? En als je dat toevallig ook hebt...samen met dat kristal opsturen? Kosten hoor ik wel. Of nog anders... ik weet niet waar je woont maar 28 en 29 juni hebben we hier in Nijverdal een grote internationale modelvliegshow. Zie je ook het nieuwste van het nieuwste op dat gebied. Zorg ik voor gratis toegang en drankje:-)Kijk voor gegevens even op onze site http://www.modelvliegclubnijverdal.nl/
[Bericht gewijzigd door Henry S. op donderdag 19 juni 2014 19:39:44 (54%)
Een PIC12F675 heeft helemaal geen kristal nodig, zeker niet in dit geval, gezien de nauwkeurigheid van de servo. De interne oscillator is met 1% nauwkeurig genoeg.
Doe je best zou ik zeggen
BTW, het kristal kan ook een resonator van 10MHz zijn.
pic asm code:
;Servo test routine, serv675C
;Author EdwardM
__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _HS_OSC
#define __12F675
#include <12f675.inc>
;====================================
; Pin Defs
;====================================
; Pin1......Vdd
; Pin2......GP5
; Pin3......CLKOUT............TEST.......OUT
; Pin4......GP3/MCLR/Vpp......CENTRE.....IN
; Pin5......AN2...............POT........Analog
; Pin6......GP1/ICPCLK........SWEEP......IN
; Pin7......GP0/ICPDTA........PWM........OUT
; Pin8......VSS
;====================================
; RAM 0x20 to 0x5F
;====================================
CounterA equ 0x20
CounterB equ 0x21
CounterC equ 0x22
CounterD equ 0x23
Timer_rtn equ 0x24
temp_loops equ 0x25
us_loops equ 0x26
tempf equ 0x27
set_centre equ 0x28
old_ADC equ 0x29
ADC_low equ 0x2A
ADC_high equ 0x2B
mode_state equ 0x2C
LOW_count equ 0x2D
HIGH_count equ 0x2E
last_low equ 0x2F
last_high equ 0x30
max_low equ 0x31
max_high equ 0x32
min_low equ 0x33
min_high equ 0x34
inc_high equ 0x35
inc_low equ 0x36
inc_up equ 0x37
init_inc equ 0x38
last_pos_high equ 0x39
last_pos_low equ 0x3A
Org 0x00
goto main
table addwf PCL,f
retlw D'254'
retlw D'205'
retlw D'153'
retlw D'102'
retlw D'77'
retlw D'62'
retlw D'48'
retlw D'34'
retlw D'26'
retlw D'19'
retlw D'13'
retlw D'9'
retlw D'6'
retlw D'4'
retlw D'2'
retlw D'1'
;================================
; 16 bit Comparison MAX
;================================
compMAX
movf max_high,w
subwf ADC_high,w
btfss STATUS,Z
goto res16A
movf max_low,w
subwf ADC_low,w
res16A
return
;================================
; 16 bit Comparison MIN
;================================
compMIN
movf ADC_high,w
subwf min_high,w
btfss STATUS,Z
goto res16B
movf ADC_low,w
subwf min_low,w
res16B
return
main
call initial_setup
main_loop
call set_20ms_frame
call set_position ;Position set from previous loop
call check_pbuttons ;Check pushbuttons for mode change
call check_mode ;Get current test mode
call wait_end20ms
goto main_loop
;================================
; Wait for end of 20ms frame
;================================
wait_end20ms
btfss PIR1,0
goto wait_end20ms
return
;================================
; Which mode are we in?
;================================
check_mode
clrf inc_high
clrf inc_low
iorlw 0x00 ;w=0xFF if change
btfsc STATUS,Z ;
goto nochange ;If no jump, status has changed
btfsc mode_state,0 ;Centre?
goto do_centre
btfsc mode_state,1
goto do_sweep ;must be sweep
goto changetopot
do_centre
call get_ADC
call set_ADC_limits
dc1
movlw 0xFF ;1.5ms
movwf LOW_count
movlw 0x01
movwf HIGH_count
clrf mode_state
bsf mode_state,0
return
nochange
clrf inc_low
clrf inc_high
btfsc mode_state,0 ;Centre
goto check_centre
btfsc mode_state,1 ;Sweep
goto check_sweep ;else set by pot position
changetopot
call get_ADC
movf ADC_high,w
movwf HIGH_count
movf ADC_low,w
movwf LOW_count
clrf mode_state
bsf mode_state,2
return
check_centre
call get_ADC
call compMAX
btfsc STATUS,C ;Carry set then out of range, set posn to pot
goto changetopot
call compMIN
btfsc STATUS,C
goto changetopot
goto dc1
return
check_sweep
call get_ADC
call div64
call SetCountper20ms
btfss inc_up,0
goto cs1
call add_inc
return
cs1
call sub_inc
return
do_sweep
call get_ADC
call div64
call SetCountper20ms
bsf inc_up,0
call add_inc
return
add_inc
movfw inc_low
addwf last_pos_low,f
btfsc STATUS,C
incf last_pos_high,f
btfss last_pos_high,2
goto ai1
movlw 0x03
movwf HIGH_count
movlw 0xFF
movwf LOW_count
bcf inc_up,0
return
ai1
movfw last_pos_high
movwf HIGH_count
movfw last_pos_low
movwf LOW_count
return
sub_inc
movfw inc_low ;last_pos_low
subwf last_pos_low,w ;inc_low,w
movwf LOW_count
movfw last_pos_high
btfss STATUS,C
addlw 0xFF
movwf HIGH_count
btfss HIGH_count,7
return
movlw 0x00
movwf HIGH_count
movwf LOW_count
bsf inc_up,0
return
div64
rrf ADC_low,f
rrf ADC_low,f
rrf ADC_low,f
rrf ADC_low,f
rrf ADC_low,f
rrf ADC_low,f
movlw 0x03
andwf ADC_low,f
rlf ADC_high,f
rlf ADC_high,f
movlw 0x0C
andwf ADC_high,w
iorwf ADC_low,w
return
SetCountper20ms
call table
movwf inc_low
clrf inc_high
return
;================================
; Check ADC
;================================
get_ADC
movlw 0x8B ;Start ADC
movwf ADCON0
sp2
btfsc ADCON0,1 ;check go/done bit for end of conversion
goto sp2
bsf STATUS,RP0 ;set bank 1
movf ADRESL,w
bcf STATUS,RP0 ;set bank 0
movwf ADC_low ;LOW_count
movwf LOW_count
movf ADRESH,w
movwf ADC_high ;HIGH_count
movwf HIGH_count
return
;========================================
; Set ADC limits
;========================================
set_ADC_limits
clrw
movwf max_low
movwf max_high
movwf min_low
movwf min_high
movf ADC_low,w
addlw D'10'
movwf max_low
movf ADC_high,w
btfsc STATUS,C
addlw 0x01
movwf max_high
movlw D'10'
subwf ADC_low,w
movwf min_low
movf ADC_high,w
btfss STATUS,C
addlw 0xFF
movwf min_high
movlw 0x00
subwf min_high,f
return
;========================================
; Check pushbutton state for mode change
;========================================
check_pbuttons
btfss GPIO,GPIO3 ;Centre?
goto mode_centre
btfss GPIO,GPIO1 ;Sweep?
goto mode_sweep
retlw 0x00 ;No change
mode_centre
clrf mode_state
bsf mode_state,0
retlw 0xFF
clrf inc_low
clrf inc_high
mode_sweep
clrf mode_state
bsf mode_state,1
retlw 0xFF
;================================
; Set PWM output on
;================================
set_20ms_frame
bsf GPIO,0 ;Output on
movlw 0x3B ;Set timer to 20ms-setup time @10MHz
movwf TMR1H
movlw 0xBB
movwf TMR1L
movlw 0x01
movwf T1CON ;Timer enable
bcf PIR1,0 ;Clear timer overflow flag
return
;================================
; Set position
;================================
set_position
call init_delay ;Nominal 1ms delay
movfw HIGH_count
movwf last_pos_high
movfw LOW_count
movwf last_pos_low
clrw
iorwf LOW_count,f
btfsc STATUS,Z
goto low_zero
low_nonzero
decfsz LOW_count,f
goto low_nonzero
low_zero
clrw
iorwf HIGH_count,f
btfsc STATUS,Z
goto high_zero
do_loops
decfsz LOW_count,f
goto do_loops
decf HIGH_count,f
goto low_zero
high_zero
bcf GPIO,0 ;Output off
return
init_delay
movlw D'3'
movwf CounterB
movlw D'210'
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
return
us_delay
movlw D'4'
movwf CounterA
loopus decfsz CounterA,1
goto loopus
nop
nop
nop
nop
nop
return
;================================
; Initial setup
;================================
initial_setup
bcf STATUS,RP0 ;set bank 0
clrf GPIO ;set GPIO 's to 0
movlw 07H ;
movwf CMCON ;Comparator control - off
bsf STATUS,RP0 ;set bank 1
movlw 0x24
movwf ANSEL
movlw 0x3E ;GP2/AN2 input only
movwf TRISIO ;all others output, bank 1
bcf STATUS,RP0 ;set bank 0
movlw 0x89 ;Initialise adc
movwf ADCON0 ;bank 0
bcf mode_state,0 ;Centre
bcf mode_state,1 ;Sweep
bsf mode_state,2 ;Pot
call get_ADC
clrf inc_low
clrf inc_high
movlw 0x01
movwf init_inc
return
end
Om een signaal te krijgen waarmee een servo heen en weer beweegt heb je niet zoveel code nodig.
Uh.... vraagje... kan jij dat niet voor me programmeren?
Ik kan nergens een e-mailadres van je vinden en hier op het forum ga ik er niet op in.
https://www.youtube.com/watch?v=dG_wxdWVmAo
https://www.youtube.com/watch?v=hoy1v1UaXAQ
https://www.youtube.com/watch?v=dXaGCjuDFKI
Je ziet hierop ook de print, er zit nu wel een grote potmeter op, maar die kan vervangen worden door een klein instelpotje.
Deze laatste versie is met een Pic.
Dat zal ook wel gaan, maar dan heb je wel heel andere tools nodig dan het lijstje dat ik eerder heb doorgegeven:
- Andere ontwikkelSoftware.
- Andere programmer.
Op 15 mei 2014 11:14:57 schreef Generaal:
Zo ook in de servo zitten FET's oid die de motor aansturen, dat doet in ieder geval....
FYI, ik heb eens een servo opgengemaakt en het circuit wat zitten bestuderen. Er blijkt een "single chip solution" te zijn, waabij de chip ingebouwde transistoren heeft. Gewone bipolaire jongens. En best wel rotte ook. VCEsat van iets van 1V of zo bij de nominale stroom van de motor....
Ik heb hier servo's in gebruik van ~6mm tot ~45mm dik, waar een behoorlijke motor in zit.
De dikke jongens trekken ruim 1 Ampere bij volle belasting.
Op haast alle printen voor normale servo's zit een standaard chip waar de puls in verwerkt wordt en een H-brug om de motor aan te sturen.
De grote jongens hebben nog een paar extra Dpack FET's op de print zitten. De stroom die de motor trekt kan niet door de H-bridge in het chipje geleverd worden. Bij middelmaat servo's zit nog wel eens een gewone H-bridge chip op de print ipv losse FET's.
Mijn e-mailadres staat toch in mijn gebruikers status?
[Bericht gewijzigd door xxxPietxxx op zaterdag 17 mei 2014 11:55:29 (32%)