По плану, почео сам са интеграцијом нове верзије микроконтролера. Arduino Nano Every је требало заменити садашњи Arduino Nano због већег мемориског капацитета који би омогућио више функција контролера.
Кажем раније "требало" зато што сам на крају опет завршио са старим Arduino Nano микроконтролером. Наиме, Nano Every јесте pin-compatible, и код за раније верзије се компајлира без пуно компликација, али разлика у хардверским захтевима pullup-a довела до тога да аутоматска регулација брзине не ради.
У пракси, у стандардно очекиваним околностима, то значи промена вредности отпорника повезана на тих 4 пина. Али како нисмо у стандардно очекиваним околностима, оставио сам старе отпорнике и рефакторирао цели код за повећану ефикасност истог, и тиме, бољег управљања постојећим ресурсима.
Резултат тога је да се нова могућност, мерење wow (отступања брзине) као интегрална компонента W&F параметра, сада налази у последњој верзији кода, који је, као и увек, објављен у свом GitHub репоу (функционалност активна од commit-a 02f96de па надаље).
Очекивања
Раније сам напоменуо да сам радио посредна мерења који указују на то да је W&F погона мог грамофона око (или нешто мањи од) 0.1%.
Али које су релевантне вредности? Истражујући спецификације транспорта (и то оних који су довољно храбри да их објаве) нашао сам малу количину података, или подаци без икаквог контекста. Због тога, вратио сам се назад и прегледао NAB спецификацију, и то верзију "NAB audio recording and reproducing standards for disk recording and reproducing" датирану фебруар 1964, која специфично каже (преносим без превода):
1.05 Turntable Speed (RPM) - It shall be standard that the mean speed of the recording turntable be either 33-95 or 45 RPM ± 0.1%, and the mean speed of the reproducing turntable be either 33-95 or 45 RPM ± 0.3%;
1.20 Wow and Flutter Factor (Reproducing) - It shall be standard that the average (*) deviation from the mean speed of the reproducing turntable when reproducing shall not exceed 0.1% of the mean speed.
(*) Овде постаје интересантно. Просек је дефиниран, у фуснотама, као "карактеристику мерног склопа уместо укупног периода обзервације". Вратићемо се на ову ствар мало касније (**).
Модерни грамофони често иду и изнад 0.1%, док старији (нарочито кварцно контролирани грамофони) су се хвалили вредностима од 0.05% (вредности за Technics SL-Q2 су <0.012%).
Како овде меримо само wow компоненту (flutter је сасвим друга прича), рецимо да бих био задовољан вредностима мањим од 0.1%.
Резултати
Након 5 минута ротације, вредност за брзину 33.(3) окретаја у минути је 0.006%.
Боље од очекивања за ~17 пута (17x).
Након 5 минута ротације, вредност за брзину 45.0 окретаја у минути је 0.005%.
Боље од очекивања за ~20 пута (20x).
Како су ово просеци након пар стотина ротација, а на просеке утичу екстреми, подједнако важно је видети колика су отступања. Не бих да неко помисли како је ово ултра кратак временски сегмент - методологија би била, у најмањој руци, непотпуна.
Ово је поларни плот варијација брзине током 40 пуних ротација, укупно 160 мерних тачака, за сваку брзину посебно.
Нисам сигуран да може боље са овим погоном.
(**) Пар речи око просека, да не би опет прекршио обећања. Фини људи из NAB-а су били веома јасни у спецификацију просека. Због тога, имплементација ове функционалности узима у вид само задња 16 мерења (4 пуних ротација). Због тога, постоји могућност да бројка варира током репродукције, али оно што је сигурно е да ће показати најближу вредност параметара на тај специфичан регион плоче.
Иначе, скоро сва функционалност за прерачун W&F је постојала у коду, због мог релативно интензивног OCD-а, и детаљно сторнираних варијабли и процеса.
Мало кода није на одмети:
if (averageCompleted)
{
float averageSum = 0; totalWF = 0; float SB = 33.3333;
if (spinSpeed == 1) { SB = 45.0000; }
for (int a = 0; a < averageTotal; a++)
{
averageSum += averageValues[a];
totalWF += abs((averageValues[a] / SB) - 1);
}
currentRPM = averageSum / averageTotal;
totalWF = totalWF / averageTotal * 100;
}
Задња функционалност је сад пропраћена са детаљним упутством како (и шта) раде тастери.