Kde přesně je problém u toho projektu na GitHubu nevím. Někdo pod přezdívkou giacomolorenzo tam psal 22.1.2025 v otevřeném problému k tomu projektu, že mu to taky nefunguje. Autor tam jen zmiňuje, že jemu to funguje a je těžké odhadnout proč to nefunguje giacomolorenzo a poukazuje na to, že je nutné provést kalibraci, ale řešení problému co měl giacomolorenzo tam uvedeno není a problém zůstal otevřený.
Kalibrační postup
Odpojte pravé rameno od serva. Poté se z Arduino IDE připojte k zařízení. Pomocí sériového monitoru Arduino IDE zadejte
COMMAND:COVER:CALIBRATE
Tím se spustí kalibrační procedura pro analogovou zpětnou vazbu serva. Po dokončení kalibrace znovu připojte pravé rameno k servu. Zařízení je nyní připraveno k použití.
Pokud kalibrace nepomáhá pak bude u tohoto projektu asi těžké najít skutečnou příčinu problému a je otázkou jestli to třeba nesouvisí s nějakým rozdílem v parametrech některé použité HW součásti.
Jasné kalibraci jsem dělal, bez ní na pinech nevychází vůbec nic.
Objednal jsem to správné servo. Až příjde tak se pro tu prču schválně podívám dovnitř a porovnám chvání s tím co mám teď. Maximálně si zatleskám jaký jsem vocas, že mám vlastně znova uplně to stejný
"pdp7" v úvodu píšete že jste koupil servo DSS-M15S s tím že se dělají dva typy jaký máte 0 - 270°, nebo 0 - 180° tomu musíte přizpůsobit program, z jakého důvodu potřebujete načítat zpětnou polohu tu využíváte pro kontrolu otevření nebo zavření krytu dalekohledu. Pokud ano tak to je lepší to řešit jinak k tomu programu tak jak píše Valdano před načtením polohy musíte mít časovou prodlevu jinak načitate bludy. Druhá někdy podstatná věc je napájecí napětí při napájení ze zdroje tedy stabilizátoru co je na desce Arduina tak tam je pokles napětí při začátku pohybu serva proudový krátkodobý odběr a tím i úbytek napětí. To zjistíte když si to změříte DMM to nezachytí tedy pokles napětí, je na to pomalý v případě že servo je připojeno k záklopce dalekohledu tak si změřte proud jaký to bere při pohybu proud ze stabilizátoru Arduina je maximálně 0.5A a když se začne servo pohybovat tak bude ten odběr vyšší než pak při pohybu. Kam přesně jste připojil ten další vývod v servu na to měření napětí, napište kde to máte připojené ono jde o to že to není jen tak něco někam přiletovat u toho servo zesilovače je dost velké rušení, ten program když provedete nahrání do Arduina tak je funkční a servem pohybuje dle zadané polohy z počítače a nefunguje jenom to načítání a výpočet polohy z napětí. V případě že potřebujete vědět zda je servo v koncové poloze a jinou nepotřebujete znát tak si tam osaďte snímače koncové polohy pokud to konstrukce dalekohledu umožňuje. A pokud požadujete snímání polohy v celém rozsahu pohybu serva osaďte si tam obyčejný potenciometr nebo lineární Hallovu sondu a pak snímat hodnoty. Pište že jste si objednal správný typ serva můžete uvést typ serva, serva používám běžně jak s Arduino tak i s Picaxe a popsané snímání polohy v několika případech používám také funguje to v pohodě.
Dělají se 2 typy 270° s a bez feedbacku. To načtení A0 hodnoty až po dokončení pohybu serva chápu. Můj 4 drát jsem připojil přímo na potenciometr (na střed tzn. běžec)
Zrovnatak mě napadl velký proudový odběr serva a tak jsem na zkoušku připojil napájení serva externím zdrojem a z USB napájel jen seeeduino... výsledek stejný, servo si poťukává, ale nehýbe se.
Přikládám zdroják z projektu. Je tam taky hýbání o 180°, podle mě je šumák jestli řeknu 180 nebo 270 pro najetí do druhé polohy, výsledkem by měla být max. změna hodnoty na A0 (0 - 1023) nebo to chápu špatně? Protože jsou i serva 180° které mají taky rozsah 0.5 - 2.5ms jako tohle moje 270°.
Kdybych rozumněl všem řádkům ve zdrojáku bylo by to dobrý, ale špatně jsem se učil.
To připojení vodiče k běžci potenciometru to Vám fungovat nebude to je špatně. K tomu napájení ze dvou zdrojů to je v pohodě pouze musíte propojit pouze GND Arduina s GND napájení serva a pouze výstup z pinu co posílá hodnotu do serva a výstup z potenciometru na PIN A0 kladené póly obou zdrojů SE NESMI SPOJIT na to se hodně často zapomíná pak to nefunguje a někdy se zničí i ARUINO. To rozpětí naměřeného napětí v rozsahu 0 - 5V na rozsah výstupního surového napětí Arduina v rozsahu 0 - 1023 chápete dobře. Upravte si nebo napište nový program pouze tak aby jste zadával hodnoty z počítače bez zbytečných opičáren tak aby se servo dle příkazů z PC pohybovalo v tom rozsahu 0 - 180°, ten čtvrtý vývod co jste naletoval nikam nepřipojujte, konektor serva nepřipojujte k Arduino ale k tomu externimu zdroji pouze kladný a záporný pól nyní vezměte DMM zapněte napájení serva na napájení a změřte si na krajních vývodech potenciometru jaké tam je napětí. Nyní propojte póly GND Arduina a externího zdroje společně s vývodem pro zadávání polohy serva z PC, pak si připojte DMM jedním pólem na GND napájení serva a druhý pól DMM připojte na ten běžec potenciometru nyní zadejte na počítači pokud je servo v poloze 0° hodnotu 180 a odešlete do Arduina při tom sledujte hodnotu napětí na DMM. V případě že by se servo pohybovalo rychle tak si jej programově zpomalte něco jako mám v programech pro robotické rameno konkrétně v programu pro automatický pohyb v článku na webu. Pak bych ještě když to budte mít takto propojené změřil proud serva při pohybu a pak v nějaké poloze a při tom zkusil pohnout pákou na servu a zjistil jak se mění tento proud. Ale určitě to napájení serva bude muset být řešeno externím napájením a měření polohy bude muset být řešeno jinak, nejlépe jiným potenciometrem určitě to napětí na potenciometru nebude mít hodnotu napájecího napětí. Hodnoty potenciometrů nejsou nijak velké aby změna na napětí běžce potenciometru byla co nejcitlivější. V příloze je dokumentace k tomu servu. Napište co jste naměřil za ta napětí i ohmickou hodnotu toho potenciometru. Na program co jste dál se podívám až budu doma zatím si změřte to o čem jsem psal,
Jsem sice blb, ale kladné póly jsem nepropojoval, nejen, že nemám zájem si odpravit arduino ale ani USB porty v PC.
Program od Valdana na čtení hodnoty takhle funguje (byť s mým bastleným drátem). Odběr serva bez zátěže je cca 0.5A (za pohybu), tedy aspoň tak mi to ukazoval displej na lab. zdroji, proudovou sondu k oscilo. nemám a pořizovat jí kvůli tomu nechci.
To napětí feedbacku odpovídá poloze na DMM i v programu od Valdana, všechno tohle jde.
Na příkaz 180 servo najede na konec a na konci poťáku je 3.3V.
Víceméně se teda shodneme na tom, že moje úprava serva není uplně OK a pro mě je teďka podstatný jak se to chová v obvodu a programu pro ten kryt.
Sice si tím nejsem uplně jistý, ale program s tím feedbackem prostě počítá už jenom z logiky věci: aby se třeba nesnažil zavírat zavřený kryt. Ale vyčíst ty konkrétní řádky v tom nedovedu.
Počkám až servo dorazí a pak napíšu.
pdp7 píše:Na pinu PWM na osciloskopu vidím pulsy od 500-2500us, mosfet spíná studený konec napájení serva, ale funguje to divně, tak že gate budí jen při kliknutí na zavřít dekl.
Tak to v tom programu je, zapíná servo, jen když je požadován pohyb, jinak je vypnuté, aby nerušilo. Ukazuje to v tom programu pro ovládání observatoře stav toho krytu a mění se? Program k servu zná 4 stavy, otvírá se, otevřen, zavírá se, zavřen.
Ano ukazuje. Jen podle toho v jaké poloze (0.5 či 2.5ms) udělám COMMAND:COVER:CALIBRATE tak servo povrkává při kliknutí na open či close, ale že by se otáčelo to ani prd. Stav krytu se po klikntí po chvíli změní ale to je asi tak všechno.
Mosfet mám A06N03, snad je nízkonapěťový (logic-level).
"pdp7" děkuji za informace nikde jsem nenapsal že jste blb to bych si nedovolil napsal jsem to proto protože s tím mám špatné zkušenosti, někteří jedinci propojují zdroje to je holá zkušenost. Ten změřený odběr serva 0.5A bez zátěže tak to bude lepší použít ten externí zdroj a ohledně sondy to máte pravdu na takový jednoduchý problém bych ji také nekupoval. K tomu napětí že je na konci potenciometru napětí 3.3V když servo najede na hodnotu 180° ale jaké napětí máte na potenciometru na jeho krajních vývodech to je důležité pokud není potenciometr zapojen tak že je použit pouze vývod z běžce a jeden krajní vývod. Protože běžec potenciometru snímá neustále napětí v určité poloze tak že když bude běžec v krajní poloze odpovídající pozici 0° tak je na běžci minimální kladné napětí a A/D převodník a program jej nemusí měřit přesně tedy pokud je napětí na krajních vodičích těch 3.3V tak načtená hodnota A/D bude ovlivněna úbytkem napětí na potenciometru toto ovlivní Ohmická hodnota potenciometru ta hodnota 3.3V zhruba odpovídá načtené surové hodnotě A/D převodníku 675 - 676. JAKÉ TAM MÁ BÝT POUŽITÝ SPRÁVNÝ TYP SERVA?.
pdp7 píše:Jasné kalibraci jsem dělal, bez ní na pinech nevychází vůbec nic.
A jak se to chovalo při té kalibraci, udělalo to postupně 18 kroků od jednoho konce dráhy po druhý konec? Máš nastavený správně SERVO_FEEDBACK_PIN = 8? Tj. máš zpětnou vazbu na pinu 8 nebo jsi to změnil, pokud ji máš jinde?
Edit: A jaké hodnoty to vrátí na příkaz COMMAND:COVER:GETCALIBRATION?
Pdp7 nikdo nemůže o sobě říkat že je kapacita to asi není nikdo. K tomu odkazu pokud máte servo co má těch 0° - 270° tak Vám nepřijde nic jiného než to co jste si vyrobil tím že jste na vývod běžce naletoval vodič a vyvedl ze serva. K tomu co tam píší k parametrům serva tak ono to asi bude tak že ten A/D převodník v Arduinu pokud bude běžec potenciometru blízko 0° tak to výstupní napětí na běžci bude tak malé že to převodník nedetekuje. Protože i Vy jste naměřil to samé napětí když byl běžec v poloze 180° a to je 3.3V což tam uvádějí v tom popisu že je dáno 0V - 3.3V. pokud můžete a chcete nastavte si na servu pozici 0° a změřte pomocí DMM proti zápornému pólu výstupní kladné napětí na běžci potenciometru. Pokud bude hodně malé několik mV tedy pod 4mV tak to nebude fungovat to načítání napětí tedy surové hodnoty protože ten A/D převodník je 10-bitový a jeho rozlišení je 5 : 1024 = 0.004882812V což je zhruba necelých 5mV. Tak že pokud bude výstupní napětí na běžci v 0° například 0.003V tak A/D v Arduinu nic nenaměřií, je škoda že nemůžete změřit čistý ohmický odpor toho potenciometru (odpojené vývody od elektroniky) to by Vám hodně pomohlo a bylo by pak po hledání závady která je zjevně v tomto zádrhelu. No mám tady několik serv co to mají za sebou vymlácené převody tak zítra změřím odpor toho potenciometru.
Jestli se ti to s tím programem od Valdana hýbe a s tím dalekohledovým ne, tak tam máš nějakou botu nesouvisející se zpětnou vazbou, protože při kalibraci to postupně nastavuje pozici 0 až 180° po 10° a zpětnou vazbu to jen čte.
bum píše:tedy pod 4mV tak to nebude fungovat to načítání napětí tedy surové hodnoty protože ten A/D převodník je 10-bitový a jeho rozlišení je 5 : 1024 = 0.004882812V což je zhruba necelých 5mV. Tak že pokud bude výstupní napětí na běžci v 0° například 0.003V tak A/D v Arduinu nic nenaměřií
Jak nebude fungovat? Normálně naměří 0, co jiného by měl naměřit? Nepiš tu nesmysly, už takhle je to zašmodrchaný dost.