Jump to content

InSides

Član
  • Broj sadržaja

    962
  • Na DiyAudio.rs od

  • Poslednja poseta

  • Broj dana (pobeda)

    21

Sve objavljeno od InSides

  1. @guja011 имајући ово у виду, као и шему из прве поруке, дали мислиш да бих могао да решим "проблем" са неком мањом корекцијом на шеми?
  2. Има ли нека лепа песма о Кини? Да се коначно ово скутија:
  3. Ма само страшно изгледа. Ипак имам да имплементирам пар твикова. Али мени важно зато што је задњи важни механизам пре финиширања ручице (елоксажа алуминиума, лакирање бронзе).
  4. Корекција азимута on-the-fly. (*) (*) Плоча се не окреће како бих могао снимити јасни видео. Свакако, одвртео сам механизам баш насилнички, али шта ћеш - једна рука држи камеру а друга оперира механизам.
  5. Купио са Купујем Продајем. Хвала свима.
  6. Унапређење #3 Аутоматско штимање PI/PID параметара. Позадина Примарна функција тахометра је увек била да буде основа за констуирање бољег погона за грамофон. Закључио сам да се то (боље, стабилније) може постићи једино имплементацијом затворене петље - зато што погон каишом је подложан drift-у, т.ј. флуктуацији (*) без оглед на степен стабилности који пружа идеални мотор, идеални лежај, идеални каиш (а ништа од ових није идеално). (*) Бар три параметара коју имају утицај овде су (1) вањска температура собе, (2) комплијанса и затезање каиша, (3) унутрашња температура мотора и лежаја. Екстерни контролер који користим је синусни генератор који генерира три фазе и има распон од 1Hz до 80Hz, са најмањим кораком од 0.01Hz. Имајући то у виду, ограничење са којим радим је (1) прецизност контролера и (2) немогућност да Ардуино прочита тренутну вредност фрекфенције. Компромис Ардуино "клика" тастере на екстерном контролеру и тако мења фрекфенцију синусоиде. Једина непозната вредност је "величина промене" коју један "клик" Ардуина ефектуира. Та вредност се води у променљивој derivedQ: float derivedQ = 0.01; // Indicates the correction in RPM derived from a single 0.01Hz step (single "click"). Што би значило да један "клик" Ардуина, који означује промену од 0.01Hz у фрекфенцији, једнако је промени од 0.01 ротацију у минути на стране грамофонског тањира. Ова вредност је била, благо речено одокативна (**) да би код прорадио. (**) Одокативно је можда строго. Вредност је резултат мерења, споредби и прерачуна - па узета средња вредност. Како се подвижни систем мења у зависности екстерних параметара, логично је да којефицијент промене (derivedQ) би требало да флуктуира да би увећао прецизност целог склопа. Решење Код већ укључује доста услова за имплементацију аутоматске калкулације овог параметра. Калкулација се почиње радити тек након регулација прође пар циклуса. Приступ се онда своди на прерачун разлике броја ротације пре и након корекције, као и броја корака који су довели до те корекције. derivedQ = abs(currentRPM - fixRPM) / fixSteps; Код Сва логика око калкулација просека се налази унутар процедури showRPM(): if (fixSteps > 1) { derivedQ = abs(currentRPM - fixRPM) / fixSteps; if (derivedQ > setQ) { derivedQ = setQ; } fixSteps = 0; fixRPM = 0; } А регулира се уз помоћ пар променљива: float fixRPM = 0, fixSteps = 0; // Variables for programmatic calculation of derivedQ. const float setQ = 0.01; Прве две променљиве садрже (1) стару вредност ротација и (2) број корака у том циклусу корекције. Константа setQ служи за имплементацију максималне вредности којефицијента. (***) (***) Грешка у калкулацији, или вањски узроци могу да доведе до енормно (за овај систем) велике вредности којефицијента. Имплементација ове константе се осигурава да прерачунати којефицијент никад не пређе задану вредност. Процедура је релативно једноставна: Активира се само ако се уради корекција, и ако та корекција укључује бар 2 корака; При активацији, fixRPM добија тренутну вредност ротација, а fixSteps тренутну вредност калкулираних корака (stepsX); Након истека времена хлађења (correctionSpinCount) калкулира се нови којефицијент (разлика између старе и нове вредност ротација се дели бројем корака); fixRPM и fixSteps се ресетирају како би били спремни за нову корекцију (ако до те корекције дође); У случају промене брзине (33.3 према 45 и обратно) све вредности се ресетирају, и почињу се калкулирати тек након истека времена хлађења. Такође сам допунио рутину за дебагирање да сада штампа (1) тренутну вредност ротације, (2) просечну вредност ротације, (3) тренутну вредност којефицијента корекције и (4) број слота у пољу за просеке (од 1 до averageTotal): if (debugSerial) { Serial.print(currentX, 4); Serial.print(" "); Serial.print(currentRPM, 4); Serial.print(" "); Serial.print(derivedQ, 4); Serial.print(" "); Serial.print(averageCount); Serial.println(); } Резултати Циљ је био увећавање прецизности регулације, т.ј. финија регулација: RPM (true) RPM (average) derivedQ averageSlot 33.1941 33.1722 0.0100 9 33.1943 33.1746 0.0100 10 33.1984 33.1774 0.0100 11 33.1962 33.1799 0.0077 12 33.2046 33.1829 0.0077 13 33.2162 33.1864 0.0077 14 33.2255 33.1905 0.0077 15 33.2304 33.1952 0.0077 0 33.2343 33.1999 0.0077 1 33.2340 33.2041 0.0077 2 33.2361 33.2079 0.0077 3 33.2322 33.2110 0.0077 4 33.2328 33.2136 0.0077 5 33.2364 33.2160 0.0077 6 33.2395 33.2186 0.0087 7 33.2428 33.2217 0.0087 8 33.2520 33.2254 0.0087 9 Кључна је вредност derivedQ, као и брзина промене. У овом примерку, derivedQ је добила прецизнију вредност од константе, а тиме и прецизнију регулацију. Број окидања игра велику улогу и брзини промене - тачно 12 окидања, односно укупно 3 пуне ротације тањира, било је довољно за две пуне калкулације derivedQ параметра. Закључак Циљ постигнут, сада се погон може користити са било којој комбинацији каиша и каишница без претходних мерења за фиксне параметре. Код је, као и увек (108755f), овде: https://github.com/stojnev/dwr-controller
  7. Крајна фаза је потпуна елиминација екстерног контролера - разгледам разне DDS чипове које могу директно контролирати преко I2C протокола - тако да ми симулација тастера ни не треба. Циљ је имати само два физичка тастера - први за укључивање/искључивање, и други за пребацивање брзине 33/45. Ардуино би радио све. У основи, Ардуино и сада ради скоро све - само мора симулирати те тастере зато што екстерни контролер не дозвољава упад у микроконтролер.
  8. Не бих знао како. Видео сам ово: http://www.instructables.com/id/ArduinoMicrocontroller-MOSFET/ И ово: http://bildr.org/2012/03/rfp30n06le-arduino/ Ценио бих показну вежбу. Екстерни контролер који користим је генератор синусних сигнала за погон мотора. Генерира варијабилну фрекфенцију - фрекфентна вредност се контролира физичким тастерима (Up, Down, StandBy и 33/45). Мој код имплементира затворену петљу тако што контролира фрекфентну вредност симулирајући "кликове" тих тастера. Ти тастери на шеми екстерног контролера преспајају пинове његовог микроконтролера ка маси. На слици које сам ја поставио, само сам нацртао екстерне тастере које Ардуино "клика" - па разумем да није баш најјасније. У основи, треба ми начин да логички "кликам" те тастере са Ардуина, и да је основно стање увек "отворено" осим када их кликам - чак и када напајање није присутно. До сада сам пуно пута користио 4066, али никада у оваквој комбинацији где ми ствара проблеме.
  9. Користим две екстерне библиотеке: u8g2 библиотека за контролу дисплеја; OneButton библиотека за програмирање тастера - ова библиотека креира директне интерфејсе за корисничке догађаје (events), и то SingleClick(), DoubleClick(), LongPress() итд. Осим тога, код је писан из почетка (from scratch :)).
  10. Да будем прецизнији - не понаша се како ја читам у datasheet-у да треба да се понаша. 4066 користим да би "кликао" тастере на екстерном контролеру. На том контролеру, тастери на притисак повезују пинове микроконтролера на масу (pin-to-ground). Мој проблем је, када повежем 4066 као да шеми коју сам показао, у случају када 4066 није под напоном, његови излази су спојени, тако да "кликају" тастере и када не желим да то раде. Све док Ардуино добије напон бар 1 секунду пре екстерног контролера, 4066 се понаша како треба.
  11. Свакако прво је на плану за завршим унапређења #3 и #4. Па онда би да ревидирам употребу CD4066B зато што не понаша се баш како пише у datasheet-у.
  12. Требао бих то мало боље испитати. Бојим се да та мета не тражи високу прецизност израде (у фазону форме/ширине рефлективних лента - код не мари за прецизну локацију позиционирања све док активира сензор).
  13. Нема потребе од готових модула (ако се Ардуино не рачуна за готов модул). Систем користи: Ардуино Нано; Allegro A3144 сензор (*); CD4066B прекидач (quad bilateral switch) - ово задње је опционо и користим га само за екстерну контролу постојећег контролера мотора. (*) Уместо голог сензора, узео сам Keyes KY-003 склоп који осим сензора има још и ЛЕД диоду која показује активацију сензора - лакше за дебаговање - али идентично се везује и "голи" сензор. Такође, A3144 је discontinued, замена је A1104. Нисам сигуран дали сам раније поменуо, али тестирао сам још и светлосни сензор (IR + рефлективна фолија) и то се није показало поуздано како магнет + hall effect сензор. IR сензори које сам тестирао не раде добро кад је температура собе виша од 20 степени, или у присуству сунчаних зрака (што је често код мене). Хтео бих да пробам ласерски сензор (то јесам поменуо овде) али не жури ми се (непотребно скупо + компликује инсталацију).
  14. Интересантно - постоји нека најава - видео човека синоћ (гледали концерт Tony Levin-ових Stick Men-а). Ако има нешто конкретно, јавим.
  15. Учесталост је, у ствари - 0.45Hz за 33.33rpm и 0.33Hz за 45rpm. Тренутно користим 4 магнета. Магнети су минијатурни, 6мм х 3мм, и у најгорем случају су (код мене) бар 10 центиметара. У најбољем, више од 12 центиметара. Тањир који користим је укупне "дебљине" од 100 милиметара (70мм алуминијум, 15мм ваздух, 15мм полиоксиметилен). Сличан метод се користи код грамофона са тањим тањирима, и нисам видео да је ико пријавио проблем (што не значи да га нема). Да одговорим питање - нисам мерио / проверивао дали магнет има утицај на квалитет излаза.
  16. Баг #4 (*) Блок програма ради прекорачења вредности у рутини за приказ просека. (*) Багови #1, #2 и #3 искорењени пре официјалног release-а. Позадина Након имплементације рутине за просек (види овде) повремено је долазило до блокаде Ардуина, али се нисам пуно замарао јер је било спорадично, а хардвер и софтвер је још увек у флуксу. Пре пар дана, теста ради, ресетирао сам контролер и оставио да се регулира брзина са око 38.00rpm на 33.33. То је дало очекиване резултате, и онда прешао на регулацију 45.00 са отприлике 51.00rpm. Ту је запело након пар минута - блокиран дисплеј и престала регулација. Ардуино IDE је мало проблематичан за дебаговање за разлику од стандардних околина где постоје debug субрутине, брејк поинти итд, тако да морају се, у основи, програмирати брејкови, па се онда елиминира рутина по рутини. Зато сам проширио испис на сериском порту да штампа скоро све променљиве које имају утицај. Баг Проблем је лоциран у субрутини за приказ просека, и то у бројачу поља који се континуирано ресетира како би се могли увек добијати задњи број просека: const int averageTotal = 16; int averageCount = 0; Тачније, averageCount се није ресетирао. Али не увек, него само када се пребаци мод са 33 1/3 на 45 окретаја у минути. Како скоро 95% плоча које имам су резане на 33 1/3, нисам до сада приметио проблем. Ево конкретне рутине где се проблем јавио: if (averageCount == averageTotal) { if (!averageFlip) { averageCount = 0; averageCompleted = true; } else { averageFlip = false; } } Решење За сваки случај - (1) ресетирати averageCount увек, и (2) ухватити промену averageCount параметра још и раније: if (averageCount >= averageTotal) { averageCount = 0; if (!averageFlip) { averageCompleted = true; } else { averageFlip = false; } } И још, рутина за штампање на сериску порту сада приказује (1) просечни RPM, (2) тренутачни RPM и (3) број слота у пољу за просеке (од 1 до averageTotal): if (debugSerial) { Serial.print(currentX, 4); Serial.print(" "); Serial.print(currentRPM, 4); Serial.print(" "); Serial.print(averageCount); Serial.println(); } Код Код је, као и увек (d217886), овде: https://github.com/stojnev/dwr-controller
  17. Оплакао сам ја тог Ортофона.
  18. Ево још мало. Ако отварам тему како би ја хтео, треба ми пар дана да сакупим текст за прву поруку.
  19. 3D принтани део за механизам за корекцију азимута. Ручица сада користи делове на (1) стругу, (2) глодалици, (3) waterjet-у и (4) 3D принтеру. Зашто 3D принтер? Зато што је (1) најјефтинији, (2) најбржи и (3) најпоузданији метод за овај конкретан део. (*) На слици су два комада, за сваки случај - ручица користи само један. Такођe, највећи део онога горе се одбацује, зато што је само платформа за штампање. Активни део је само онај танак гребен.
  20. Спроведене жице ради провере канала за рутирање тих жица, и успут неколико тестова резонанце. У међувремену тестирани: Механизам за VTA-on-the-fly; Механизам за Azimuth-on-the-fly; Комбинације тегова; Механизам за фино подешавање VTF. Чини ми се задњи сет тестова пре него залемим конекторе и увидим како се ово чује.
  21. ОК, добио одговор. Не могу бити сигурни, до сада их нико није питао овако нешто. Али... наводно ово би требало радити: https://www.amazon.co.uk/Panasonic-UJ-240-External-Blu-ray-Writer/dp/B004ITSFP6 У најгорем случају, ово се да уштекати у лаптоп па онда за "cast". (*) (*) Поддржавам cast.
×
×
  • Kreiraj novo...