ano, ta smyčka for.....next serva rozjede...tedy spíše rozcuká,ale to je vše, žádný plynulý pohyb...potenciometr mám ze serva venku, neovlivňuje otáčení serva, teď myslím mechanicky....jinak je stále k obvodu serva připojen...a stále nic...prosím Vás or adu
ATmega8 a modelářské servo
Moderátor: Moderátoři
-
svetr petr
ano, ta smyčka for.....next serva rozjede...tedy spíše rozcuká,ale to je vše, žádný plynulý pohyb...potenciometr mám ze serva venku, neovlivňuje otáčení serva, teď myslím mechanicky....jinak je stále k obvodu serva připojen...a stále nic...prosím Vás or adu
A nebude příčinou toho cukání že elektronika serva nemá zpětnou vazbu od toho potenciometru ?
Pokud chceš to servo jen jako pohon tak by asi (určitě) bylo lepší použít PWM.
Zkus ten pot. vrátit zpět, co to bude dělat.
Ještě k tomu taktování - Mega8 bez krystalu běží na 1MHz (pokud jsi neměnil Fuse)
svetr petr píše:... ano, ta smyčka for.....next serva rozjede...tedy spíše rozcuká,ale to je vše, žádný plynulý pohyb...potenciometr mám ze serva venku, neovlivňuje otáčení serva, teď myslím mechanicky....jinak je stále k obvodu serva připojen...a stále nic...prosím Vás or adu
Program ti vygeneruje jenom jeden prodloužený / zkrácený impuls po stisku některého tlačítka. Změněná délka impulsu musí být generována po celou dobu stisku tlačítka.
honza_jan píše:svetr petr píše:... ano, ta smyčka for.....next serva rozjede...tedy spíše rozcuká,ale to je vše, žádný plynulý pohyb...potenciometr mám ze serva venku, neovlivňuje otáčení serva, teď myslím mechanicky....jinak je stále k obvodu serva připojen...a stále nic...prosím Vás or adu
Program ti vygeneruje jenom jeden prodloužený / zkrácený impuls po stisku některého tlačítka. Změněná délka impulsu musí být generována po celou dobu stisku tlačítka.
možná bych pro začátek vynechal tlačítko a jen zkoušel ovládat to servo.
Ragnol píše:možná bych pro začátek vynechal tlačítko a jen zkoušel ovládat to servo.
Program ti musí generovat celkem 3 délky impulsů. 1,5 ms = servo v klidu, např 1,8 ms chod vlevo a 1,2 ms = chod vpravo. pro zjednodušení lze vynechat tlačítka a v nějakém časovém intervalu nechat cykly generování jednotlivých délek impulsů běhat dokola, aby viděl, že se servo točí. Lze naprogramovat jenom generování impulsů pro klidovou polohu serva, t.j. trvalé generování impulsů 1,5 ms dlouhých a s opakovací periodou 20 ms a potenciometrem si testnout pootočením na jednu, nebo na druhou stranu, jestli se bude měnit směr točení. Při nedostatečné znalosti principu funkce elektroniky serva to je nutné brát jako fakt a stvořit program tak, aby fungoval tak, jak jsem popsal dřív. Neznám Bascom s jeho vestavěnými funkcemi, takže nemohu posloužit přesným zněním příkazu. Znám ale funlci elektroniky serva a z toho vychází definování dovedností obslužného programu tak, jak jsem už popsal.
V tom případě elektronika roztočí motor na nějakou stranu a bude čekat až se přesune potenciometr na správné místo. Jelikož se tak nestane bude točit motorem tak dlouho než se impulzy vrátí zpět na 1.5 ms.
http://vlastikd.webz.cz/bastl/serva.htm
nekmil píše:Skutečně se bude motor točit když nemá odezvu od potenciometru ?
Stálo by to za vyzkoušení.
To je totiž princip elektroniky servozesilovače. při příchodu impulsů < 1,5 ms > se přepne potřebným směrem směr točení motoru a potenciometr se natáčí tak dlouho, až je délka interního impulsu MKO vykompenzovaná s příchozím impulsem na 0. Tehdy se motor zastaví. Nová klidová poloha bude trvat tak dlouho, dokud se znovu nezmění délka příchozího impulsu. Opakovací rámec 20 ms je prostor pro cca 8 dalších přenosových kanálů. Takže pokud se nebude potenciometr otáčet, tak se motor bude točit příslušným směrem až do změny šířky řídících impulsů zpět na 1,5 ms, kdy se motor zastaví, protože tam je potenciometrem nastaven klidový stav. Nebo se ihned začne motor točit opačně, když se změní šířka řídících impulsů na opačný směr. Takto koncipovaný pohon má při zhruba stejné složitosti programu výhodu hlavně v tom, že elektronika spínacího můstku pro motor je už spolehlivě vyřešená, funkční a řídí se jenom "jedním" drátem. Kdežto pro klasický můstek jich bude zapotřebí poněkud víc, pokud nechce při špatném programu, nebo přetížení pohonu vyměňovat hrst tranzistorů a všechny silové dráty.
nekmil píše:Děkujizase jsem chytřejší.
Jen mě tak napadlo, takové řízení pohonu má vlastně 3 stavy.
1 - motor stojí
2 - plný výkon vlevo
3 - plný výkon vpravo
Tak nastává problém s řízením otáček.
Uvažuju správně ?
Ano. Rychlost otáčení tato koncepce neřeší. Pouze start-stop a směr. Pro řízení rychlosti by byl nutný zásah do elektroniky serva, což může být pro řadu mladých baslířů zatím neřešítelný problém, protože servozesilovače se dnes většinou dělají jako zákaznické obvody a rozdělení řídící a výkonové části je problematické, ne-li nemožné. Navíc ani nejsou běžně dostupné ani datasheety.
www.rotta.cz/PDF/tat201.pdf
'-----------------------------------------------------------------------
' (c) 2001-2005 MCS Electronics
' servo.bas demonstrates the SERVO option
'-----------------------------------------------------------------------
'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 16 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
$regfile = "2313def.dat"
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