ATmega8 a modeláøské servo

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
svetr petr

#31 Příspěvek od svetr petr »

tyto rady už jsou mnohem více k vìci, už se dokážu alespoò orientovat ,,,peèení holubi by mì normálnì rozesnáli, te¡když se v problému topím, spíše bych je postøílel,,chápete :o) pøesto Vás prosím ještì o další postøehy...k bascomu a øízení serva pomocí nìj....každá rada a ukázka potìší a pomùže...už to bude 3 den, co se s tím trápím a nic.....

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

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#32 Příspěvek od nekmil »

Aha, tak servo se hýbe, tak signál na něj přichází.
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)

Uživatelský avatar
Ragnol
Příspěvky: 232
Registrován: 09 lis 2005, 01:00
Kontaktovat uživatele:

#33 Příspěvek od Ragnol »

Možná by nebylo naškodu jsem umístit ten program s kterým to doopravdy zkoušíš.

Uživatelský avatar
honza_jan
Příspěvky: 425
Registrován: 22 lis 2007, 01:00
Bydliště: Doma

#34 Příspěvek od honza_jan »

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.

Uživatelský avatar
Ragnol
Příspěvky: 232
Registrován: 09 lis 2005, 01:00
Kontaktovat uživatele:

#35 Příspěvek od Ragnol »

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.

Uživatelský avatar
honza_jan
Příspěvky: 425
Registrován: 22 lis 2007, 01:00
Bydliště: Doma

#36 Příspěvek od honza_jan »

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.

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#37 Příspěvek od nekmil »

Přikaz je jednoduchý
Servo(1) = 10 REM 10 = šířka impulsu 100 uS
Skutečně se bude motor točit když nemá odezvu od potenciometru ?
Stálo by to za vyzkoušení.

Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 02:00
Bydliště: Kladno

#38 Příspěvek od Mendor »

Teoreticky je to možné, elektronika v servu bude dostávat třeba kratší impulzy než 1.5 ms.
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.
Naposledy upravil(a) Mendor dne 16 pro 2008, 17:50, celkem upraveno 1 x.

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#39 Příspěvek od nekmil »

Ano tak by to logicky mělo fungovat.
http://vlastikd.webz.cz/bastl/serva.htm

Uživatelský avatar
honza_jan
Příspěvky: 425
Registrován: 22 lis 2007, 01:00
Bydliště: Doma

#40 Příspěvek od honza_jan »

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.

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#41 Příspěvek od nekmil »

Děkuji :D zase 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ě ?

Uživatelský avatar
honza_jan
Příspěvky: 425
Registrován: 22 lis 2007, 01:00
Bydliště: Doma

#42 Příspěvek od honza_jan »

nekmil píše:Děkuji :D zase 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.

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#43 Příspěvek od nekmil »

Tady jsem něco našel pro inspiraci
www.rotta.cz/PDF/tat201.pdf

Uživatelský avatar
honza_jan
Příspěvky: 425
Registrován: 22 lis 2007, 01:00
Bydliště: Doma

#44 Příspěvek od honza_jan »

To je využití doběhové rychlosti při návratu serva do klidové polohy. Tento kumšt ale nemusí umět všechna serva. Zvlášť levná. Záleží na výrobci. někdo to řešil třeba jenom rozšířenim mrtvého pásma o nějaké us okolo klidové polohy s tím, že servo si někam +- ke klidové poloze doběhne i za cenu vyššího příčného proudu. Dávat ale 500 a víc peněz za kvalitní servo a prakticky jej učinit nepouřitelné pro původní účel je na můj vkus poněkud velký luxus.

Uživatelský avatar
yakl
Příspěvky: 436
Registrován: 14 dub 2005, 02:00

#45 Příspěvek od yakl »

V adresári SAMPLES programu BASCOM-AVR 1.11.7.3 som našiel tento demonštračný program:

'-----------------------------------------------------------------------
' (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

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“