Jump to content

InSides

Član
  • Broj sadržaja

    962
  • Na DiyAudio.rs od

  • Poslednja poseta

  • Broj dana (pobeda)

    21

Postovi objavljeno od InSides

  1. On 3/23/2018 at 5:18 PM, guja011 said:

    imaš malecki previd , cenim da je desni deo slike u pitanju , curenje kroz zaštitnu diodu.

    kada je čip na napajanju dioda je u kontri pa ne curi.

     

    mali previd.jpg

    @guja011 имајући ово у виду, као и шему из прве поруке, дали мислиш да бих могао да решим "проблем" са неком мањом корекцијом на шеми? 

  2. 6 minutes ago, Zen Mod said:

    malo mi srce zadrhtalo pred kraj ...... :)

    Ма само страшно изгледа. :) Ипак имам да имплементирам пар твикова.

    Али мени важно зато што је задњи важни механизам пре финиширања ручице (елоксажа алуминиума, лакирање бронзе).

  3. Унапређење #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 служи за имплементацију максималне вредности којефицијента. (***)

    (***) Грешка у калкулацији, или вањски узроци могу да доведе до енормно (за овај систем) велике вредности којефицијента. Имплементација ове константе се осигурава да прерачунати којефицијент никад не пређе задану вредност.

    Процедура је релативно једноставна:

    1. Активира се само ако се уради корекција, и ако та корекција укључује бар 2 корака;
    2. При активацији, fixRPM добија тренутну вредност ротација, а fixSteps тренутну вредност калкулираних корака (stepsX);
    3. Након истека времена хлађења (correctionSpinCount) калкулира се нови којефицијент (разлика између старе и нове вредност ротација се дели бројем корака);
    4. fixRPM и fixSteps се ресетирају како би били спремни за нову корекцију (ако до те корекције дође);
    5. У случају промене брзине (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

     

  4. 27 minutes ago, vladd said:

    Ti u stvari zelis da izmerenu brzinu jednostavno implementiras u korekciju eksternog kontrolera...sto ubija smisao tastera za up-down, zadas arduinu zeljenu brzinu(sa jednim dva ili vise tastera), a on sam neka je odrzava. MAda je to verovatno sledeca faza. :) 

    Крајна фаза је потпуна елиминација екстерног контролера - разгледам разне DDS чипове које могу директно контролирати преко I2C протокола - тако да ми симулација тастера ни не треба.

    Циљ је имати само два физичка тастера - први за укључивање/искључивање, и други за пребацивање брзине 33/45. Ардуино би радио све.

    У основи, Ардуино и сада ради скоро све - само мора симулирати те тастере зато што екстерни контролер не дозвољава упад у микроконтролер.

  5. 17 hours ago, guja011 said:

    mada opet nije jasno kad već tastuješ samo ka masi, što nisi turio obične diskretne fetiće?

    Не бих знао како. Видео сам ово:

    http://www.instructables.com/id/ArduinoMicrocontroller-MOSFET/

    И ово:

    http://bildr.org/2012/03/rfp30n06le-arduino/

    Ценио бих показну вежбу. :)

    17 hours ago, vladd said:

    Koliko vidim, kako je povezano, tebi arduino preko 4066 kratkospaja(ima otpornost stotinak oma) tastere, preko control pinova multipleksera. Cemu sluzi prespajanje tastera koji sluze za prespajanje?

    Ako to je rad tastera ukljucenje prema masi(a nema na semi) 4066 mozes zameniti sa  ULN2003. Ne razumem vezu tastera i 4066...

    Екстерни контролер који користим је генератор синусних сигнала за погон мотора. Генерира варијабилну фрекфенцију - фрекфентна вредност се контролира физичким тастерима (Up, Down, StandBy и 33/45). Мој код имплементира затворену петљу тако што контролира фрекфентну вредност симулирајући "кликове" тих тастера.

    Ти тастери на шеми екстерног контролера преспајају пинове његовог микроконтролера ка маси.

    На слици које сам ја поставио, само сам нацртао екстерне тастере које Ардуино "клика" - па разумем да није баш најјасније.

    У основи, треба ми начин да логички "кликам" те тастере са Ардуина, и да је основно стање увек "отворено" осим када их кликам - чак и када напајање није присутно.

    До сада сам пуно пута користио 4066, али никада у оваквој комбинацији где ми ствара проблеме. 

  6. 14 hours ago, ZZZ said:

    Mislio sam pored hardverskih modula i na vec napisane module kodova. (izuzev biblioteka recimo za displej itd)...

    Користим две екстерне библиотеке:

    1. u8g2 библиотека за контролу дисплеја;
    2. OneButton библиотека за програмирање тастера - ова библиотека креира директне интерфејсе за корисничке догађаје (events), и то SingleClick(), DoubleClick(), LongPress() итд.

    Осим тога, код је писан из почетка (from scratch :)).

  7. 37 minutes ago, vladd said:

    Zasto se 4066 ne ponasa kao u datasheet-u?

    Да будем прецизнији - не понаша се како ја читам у datasheet-у да треба да се понаша.

    4066 користим да би "кликао" тастере на екстерном контролеру. На том контролеру, тастери на притисак повезују пинове микроконтролера на масу (pin-to-ground).

    Мој проблем је, када повежем 4066 као да шеми коју сам показао, у случају када 4066 није под напоном, његови излази су спојени, тако да "кликају" тастере и када не желим да то раде. Све док Ардуино добије напон бар 1 секунду пре екстерног контролера, 4066 се понаша како треба.

  8. 2 hours ago, guja011 said:

    ostani ti kod magnetne verzije.

     

    1 hour ago, Srecko said:

    Ništa ne menjajte kad očito funkcioniše. Pogotovo ne menjajte kad niste utvrdili ni da objektivno taj problem postoji!

    Свакако прво је на плану за завршим унапређења #3 и #4.

    On 2/25/2018 at 11:38 PM, InSides said:

    Будућност

    Тек смо почели. У плану је бар следеће:

    1. Имплементација Timer2_Counter библиотеке за повећање прецизности система;
    2. Рутине за приказ разних просека;
    3. Аутоматскo штимање PI/PID параметара;
    4. Рутине за чување укупног времена свирања (не само ротација).

    Па онда би да ревидирам употребу CD4066B зато што не понаша се баш како пише у datasheet-у. :)

  9. 26 minutes ago, vladd said:

    i refleksivni, lakse je zalepiti neku metu na disk nego magnet.

    Требао бих то мало боље испитати. Бојим се да та мета не тражи високу прецизност израде (у фазону форме/ширине рефлективних лента - код не мари за прецизну локацију позиционирања све док активира сензор).

  10. 13 minutes ago, ZZZ said:

    Insides, jesi sam postavljao hardware oko arduina i pisao kod ili si krenu od gotovih modula, pa prilagodio za tu namenu?

    BTW mozda bi bilo preciznije uraditi isto ali pomocu svetlosti? neki gotov opticki modul koji reaguje na prisustvo i odsustvo svetlosti. Zaklanjaju ga neke prepreke za svetlost koje se nalaze na mestima recimo gde su sada magneti. Izvor svetlosti recimo led koji konstantno svetli a preko puta njega opticki prjemnik kao staticni elementi. neko parce tamne folije ili plastike prolazi izmedju njih i prekida dotok svetlosti na prijemnik, kada prodje ponovo svetlost dolazi? Samo je potrebno videt sta brze raguje opto dioda ili magnet

    Нема потребе од готових модула (ако се Ардуино не рачуна за готов модул). Систем користи:

    1. Ардуино Нано;
    2. Allegro A3144 сензор (*);
    3. CD4066B прекидач (quad bilateral switch) - ово задње је опционо и користим га само за екстерну контролу постојећег контролера мотора.

    (*) Уместо голог сензора, узео сам Keyes KY-003 склоп који осим сензора има још и ЛЕД диоду која показује активацију сензора - лакше за дебаговање - али идентично се везује и "голи" сензор. Такође, A3144 је discontinued, замена је A1104.

    Нисам сигуран дали сам раније поменуо, али тестирао сам још и светлосни сензор (IR + рефлективна фолија) и то се није показало поуздано како магнет + hall effect сензор. IR сензори које сам тестирао не раде добро кад је температура собе виша од 20 степени, или у присуству сунчаних зрака (што је често код мене).

    Хтео бих да пробам ласерски сензор (то јесам поменуо овде) али не жури ми се (непотребно скупо + компликује инсталацију).

  11. 14 minutes ago, ninja said:

     

    @InSides, ima li ovaj album na vinylu? 

     

     

    1 minute ago, Doktor said:

    Интересантно - постоји нека најава - видео човека синоћ (гледали концерт Tony Levin-ових Stick Men-а). Ако има нешто конкретно, јавим.

  12. 15 hours ago, ManicP said:

    Imao bik ja jednu primedbu u vezi neodimium magneta koji prolaze na par cm od gramofonske glave. Jel provereno indukuje li to šta na izlazu, kolko ja računjam nekih 2,2Hz je učestanost prolaska magneta u odnosu na neku fiksnu tačku?

    Ako ne onda ništa :)

    Учесталост је, у ствари - 0.45Hz за 33.33rpm и 0.33Hz за 45rpm. Тренутно користим 4 магнета.

    Магнети су минијатурни, 6мм х 3мм, и у најгорем случају су (код мене) бар 10 центиметара. У најбољем, више од 12 центиметара. Тањир који користим је укупне "дебљине" од 100 милиметара (70мм алуминијум, 15мм ваздух, 15мм полиоксиметилен).

    Сличан метод се користи код грамофона са тањим тањирима, и нисам видео да је ико пријавио проблем (што не значи да га нема).

    Да одговорим питање - нисам мерио / проверивао дали магнет има утицај на квалитет излаза.

  13. Баг #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

  14. 5ab24b15bf8ba_viberimage.thumb.jpg.28ee4f73d6123d6b7fc51e9c4c0cbe57.jpg

    3D принтани део за механизам за корекцију азимута. Ручица сада користи делове на (1) стругу, (2) глодалици, (3) waterjet-у и (4) 3D принтеру.

    Зашто 3D принтер? Зато што је (1) најјефтинији, (2) најбржи и (3) најпоузданији метод за овај конкретан део.

    (*) На слици су два комада, за сваки случај - ручица користи само један. Такођe, највећи део онога горе се одбацује, зато што је само платформа за штампање. Активни део је само онај танак гребен.

  15. Спроведене жице ради провере канала за рутирање тих жица, и успут неколико тестова резонанце. У међувремену тестирани:

    1. Механизам за VTA-on-the-fly;
    2. Механизам за Azimuth-on-the-fly;
    3. Комбинације тегова;
    4. Механизам за фино подешавање VTF.

    Чини ми се задњи сет тестова пре него залемим конекторе и увидим како се ово чује.

  16. 3 hours ago, Doktor said:

    @Woland

    To je TO. Zato sam i otvorio temu da vidimo ima l' neka kombinacija.

    No, "sve je na net-u" . . .  :)

    Cekam ja @InSides-a sa vestima od drugara. Ako nema nista, bar smo razmenili misljenja oko ovoga, a mi idemo dalje da pustamo ploce.

    Jbga, sta cemo. Takva nam je nafaka

    ОК, добио одговор.

    Не могу бити сигурни, до сада их нико није питао овако нешто. Али... наводно ово би требало радити:

    https://www.amazon.co.uk/Panasonic-UJ-240-External-Blu-ray-Writer/dp/B004ITSFP6

    У најгорем случају, ово се да уштекати у лаптоп па онда за "cast". (*)

    (*) Поддржавам cast. :)

×
×
  • Kreiraj novo...