Електроника и Електротехника | Electronics and Electrical Engineering > Аналогово управление | Analog Control
Arduino за стрелки
pavel75:
--- Цитат на: pach link=topic=4987.msg109398#msg109398 date=1509618493 ---Няма да мръдне!
То е изравнило и подава показания че Е на 90 градуса.
--- Край на цитат ---
Това означава ли, че по този начин решаваме въпроса поставен по-горе от Митко
--- Цитат на: mitko0888 link=topic=4987.msg108508#msg108508 date=1501158605 ---.....
Сериозният проблем е че при изключване на управлението (захранването) стрелките остават в положението, в което са в този момент. При ново включване с тези програмки се приема че сервото е в положение 0, или 90 или колкото сте му написали, но не и колкото е в действителност (а то може и да е 180). На теория това не може да се реши, освен ако няма "крайни изключватели", които да се четат преди въобще да се атачне порта на сервото. Трябва да са направени и да се четат така, че да се разпознават не само двете крайни положения, но и това че стрелката не е преместена докрай (случва се доста често). С първия пример може да си натискате бутона на порт 3 за да "нулирате" стрелката, ама тя хич няма да мръдне, защото ардуиното си знае че е в положение 0. Така че "реалната" програмка за стрелки ще изглежда доста различно.
--- Край на цитат ---
pach:
Значи горе се изразих грешно...
НЕ " подава" а всъщност сравнява.
От ардуиното получава правоъгълен сигнал с честотата му,
която съответства за 90 градуса.
Когато сравни този сигнал
със настоящият си вътрешен който е за 90 градуса, " вижда"
че няма къде да "ходи". Тук има една тънкост - зависи колко финно е настроен сигнала от вън и сервото с какво качество е.
Ако има минимална разлика то ще я изравни чрез помръдвване,
което може и да не се отрази на управляевото разклонение.
За това се предвиждат винаги пружинни елементи в "трансмисията" които обикновенно са пружинна тел която компенсира такива потрепване и наместване.
Тоест тук няма значение какво иска ардуиното в новото си пускане, а какво може да изпълни сервото. Ако то се окаже
на други градуси , ще има други данни в себе си и ще се движи докато не ги изравни с тези подавани му отвън.
Пример:
Начално включване.
Ардуиното подава сигнал "дай на 90 градуса" което е с една честота от 1.5 ms.
Сервото получава захранване и понеже датчика му е на 90 градуса само си генерира вътрешния сигнал също от 1.5 ms
Сравнява двата сигнала и мръдва само ако се различават.
Това се отнася за цифровите серво. Аналоговите са по грубички и сравняват не честота, а напрежение ( май), но всъщност вече едва ли някой ползва аналоговите някъде
mitko0888:
--- Цитат на: pavel75 link=topic=4987.msg109399#msg109399 date=1509618758 ---Това означава ли, че по този начин решаваме въпроса поставен по-горе от Митко
--- Край на цитат ---
Нещата са малко по-дебели.
Има кодове в нета, при които след всяка команда към сервото положението му се записва във флеша. А при стартиране се чете от там последното записано положение. Така при включване на тока всичко тръгва от там където си е било.
Обаче, като включиш захранването на сервото и ардуиното, не е ясно какъв сигнал ще даде ардуиното на управляващата жица. Най-често там сигналът се появява по-късно, поради което при включване на тока най-често всичките сервА се зачукват в една крайна позиция, а ако си напарвил онази хитрост с флеш паметта след това хукват в предишното си положение. Още по шибано е ако механически не си предвидил сервото да се върти от край до край, а ако разчиташ само на управлението му за да го ограничиш до даден ъгъл на завъртане. Тогава при включване може спокойно да потрошиш или изкривиш нещо.
Тука хитринката се прави с едно РЕЛЕ, управлявано от ардуиното, което да включва захранването на серво машинките само по команда от програмата. Така можеш да инициализираш всичко, вкл. управляващия пин на сервото, и чак тогава да му щракнеш захранването. Също така захранването можеш и да го изключиш след завъртане на сервото, т.е. след изпълнение на командата и завъртането му докъдето трябва. Така сервото няма да жужи около зададенто му положение.
Пак остава неприятен момент, че някои от серво машинките при включване на захранването им се разхождат открай до край, независимо какви хитрини правиш и какво им подаваш на третата жица. Но обикновено такива се случват рядко. Като пробваш с един модел машинки и видиш че работят както трябва (с тези неща, написани по-горе), и като си ги харесаш и по цена и по доставка, работиш с този модел, и постваш тук барабар със снимките. Като не става с един модел - пак пишеш тук и т.н. докато стане.
pach:
Мдааааа ...ето още един тънък момент - куплирането му със ардуиното. Интересно другите как са решили тази тънкост?
Митко дава една доста интересна и лесна реализация!
:hi:
...и е прав - трябва на живо да се експериментира до задоволителен резултат.
mitko0888:
--- Цитат на: pach link=topic=4987.msg109398#msg109398 date=1509618493 ---Няма да мръдне!
То си е изравнило исканите показания и подава
обратно, че Е на 90 градуса.
--- Край на цитат ---
Никой нищо не подава обратно. Сервото не може да се чете къде е останало. Ардуиното помни положението от последната команда. Т.е. функцията read() връща положението от последната write() команда, а не къде е сервото в действителност. Ако сервото е било на 90 гр. и му подадеш команда да отиде на 90 гр, то няма да мръдне, а след командата ардуиното ще запомни че вече е на 90 гр.
Навигация
[0] Списък на темите
Премини на пълна версия