» »

6 pospeškometrov pri 1 kHz, kateri mikrokrmilnik?

6 pospeškometrov pri 1 kHz, kateri mikrokrmilnik?

stalker ::

Dobil sem nalogo, da sestavim merilni sistem, ki mora ustrezati naslednjim pogojem:
- 6 pospeškometrov (na voljo imam ogromno teh: BMI088, komunikacija preko I2C, resolucija, merilno območje, vse ustreza),
- zajem podatkov z 1 kHz,
- shranjevanje podatkov na SD kartico,
- računanje določenih parametrov v realnem času,
- sistem bo pritrjen na človeka (tekača), zato mora biti čim manjši, lahek in mobilen.

Od mikrokrmilnikov imam trenutno na voljo Arduino (Uno, Megam, Due) in RPi4.

Vprašanji sta 2: kaj lahko naredim s stvarmi, ki jih imam na voljo oziroma kaj potrebujem (koliko €€€), da bom zadovoljil vse zgoraj naštete pogoje?
Če nisem bil dovolj jasen, povejte :)

d4vid ::

Ne mojega odgovora jemat za 100%, ampak jaz bi vzel due. Je od arduinov najzmogljivejsi. Nekak mi rpi ne zgleda vredu za kaj takega, ker mora met svoj OS, medtem ko za arduino ti spišeš cel firmware.
Main PC: Asus PN50 | AMD Ryzen 5 4500U | 16 GB RAM | 256 GB SSD
PC2: HP Z400 | Intel Xeon L5630 | 6 GB RAM | 120 GB SSD
Laptop: HP Elitebook 840G1 | Intel i5 | 8 GB RAM | 256 GB SSD

TEDY ::

Samo opomnik: Arduino due ima le 2 I2C periferiji, to pomeni, da lahko nanj priklopiš samo 4 pospeškometre. Ostala 2 pospeškometra lahko rešiš s softwaresko implementacijo I2C, ali pa dodatno kupiš I2C multiplexer in pospeškometre priklopiš nanj.

stalker ::

Vem, da ima Due samo 2 I2C. Kako hitra pa je softwerska implementacija?
Sedaj poizkušam z RPi in podatke iz vseh šestih senzorjev dobivam pri okoli 150 Hz, kar ni dovolj.
Ali so multiplexerji dovolj hitri za moj primer? Na internetu nisem uspel najti nobenega primera podobnega mojemu, vsi so samo ali z enim senzorjem ali pa berejo podatke z zelo nizko frekvenco.

pegasus ::

En talk sem gledal zadnjič, kako to počnejo na hitrostnih drsalcih ...

Mogoče iz videa razbereš, kako merijo, ali pa kontaktiraš to teto ...

   -S\/\/-   ::

Sicer za kaj takega še nisem uporabljal, a poglej kakšno izpeljanko ESP32. Ima precej hitrejši procesor od arduina, tudi ploščice so dovolj majhne.

AndrejO ::

TEDY je izjavil:

Samo opomnik: Arduino due ima le 2 I2C periferiji, to pomeni, da lahko nanj priklopiš samo 4 pospeškometre. Ostala 2 pospeškometra lahko rešiš s softwaresko implementacijo I2C, ali pa dodatno kupiš I2C multiplexer in pospeškometre priklopiš nanj.

Večina I2C naprav ima možnost, da za njih izbereš najmanj pomembne 3 bite naslova. To pomeni, da lahko na enem vodilu upravljaš do 8 istovrstnih naprav, plus naprave, ki imajo drugačne visoke bite naslova. Za šest pospeškometrov zato ni treba bluziti z več I2C vodili, če izbereš prave modele.

AndrejO ::

stalker je izjavil:


- 6 pospeškometrov (na voljo imam ogromno teh: BMI088, komunikacija preko I2C, resolucija, merilno območje, vse ustreza),

Eeemmm, si prepričan, da potrebuješ 6 pospeškometrov in ne zgolj rešitev, ki zajame vseh 6 prostih parametrov (tri translacije in tri rotacije)?

Vseh 6 parametrov lahko zajameš tudi z enim dobro izbranim čipom. Da bi pa imel kar 6 čipov nekje na dolžini enega I2C vodila je pa IMO malo nenavadna naloga.

blay44 ::

Ah. Problem ima v prepočasnem čipu.
Zajemanje z več kot 250Hz bo nesmiselno.
Razen, če bo delal kake matematične interpretacije.
Z navadnim Cjem ali zbirnikom bo dober vsak moderni mikrokontrolerček.

AndrejO ::

Morda bo zajemanje z vec kot 250Hz res nesmiselno, vendar ce naloga pravi 1kHz, potem pac mora biti 1kHz ... obmocje uporabnosti za upravljanje dronov.

Bolj me pri tej nalogi zuli "magicna stevilka" 6, ker si ne morem predstavljati kje bi rabil na enem fizicno majhnem objektu (ker si vezan na I2C "domet") kar 6 pospeskometrov in stevilka je neverjetno skladna s stevilom prostih parametrov.

blay44 ::

Najbrž je mislil posamezne enote za x,y,z os.
Tri ta pospešek in 3 za žiroskop. Vsaj mislim tako.

stalker ::

Magic number 6 je zato, ker se bo dalo na vsako nogo človeka po en pospeškometer na stopalo, pri kolenu in na kolk (6 krat 3 osi). Projekt (in ne naloga) zahteva 1 kHz, tukaj ne morem nič. Kot sem napisal, trenutno imam v prvem postu omenjene pospeškometre in mikrokrmilnike, nisem pa omejen z njimi, lahko grem v nabavo in kupim kaj primernejšega.
Potrebujem samo podatke iz pospeškometrov, žiroskop se ne bo uporabljal.

AndrejO ::

Ugh, 1kHz sampling iz 6x pospeskometer.

Ena konverzacija za en register ima 2w + 7r besed po 10 bitov + stop bit. Za sest senzorjev se krat sest. Torej bo cikel zajema vseh podatkov trajal najmanj (9 * 10 + 1) * 6 bitov = 546600 bitov. Kar bodo vodilo in senzorji zmogli b.p.

Ce si ne izberes senzorja, ki bi ti omogocal 3 bite za naslov, to pomeni, da bos res moral carati z dodatnimi I2C vodili ali pa z multipleksorjem. Osebno bi raje sel v smeri multipleksorja, ker je multipleksiranje I2C v HW trivialno, pisanje I2C protokola pa ti bo kradlo cikle na MC. Glede na to, da bi rad izvajal neka preracunavanja, ti bodo ti cikli na MCU morda bolj kriticni, kot pa nekaj dodatne logike v vezju.

Kako kompleksno bo preracunavanje v realnem casu? Cela stevila ali plavajoca vejica? So priblizki z fiksno vejico tudi OK? Bos na SD pisal preko SPI ali kako drugace? Bo MC potreboval se kaksno drugo komunikacijo, glede na to, da bo nekaj preracunaval v realnem casu?

Zgodovina sprememb…

  • spremenil: AndrejO ()

TEDY ::

Če ne najdeš modulov, ki jih je omenjal AndrejO, vsaj jaz jih nisem, obstaja Teensy 4, ki ima 3 I2C periferije, tudi računske moči ima več kot dovolj.

Še ena opcija je, da izbereš module na SPI vodilu in jih bereš z izbiro CS pinov.

TEDY ::

Podobno kot s CS pini lahko delaš z address biti na I2C vodilu:
https://arduino.stackexchange.com/a/330...

AndrejO ::

TEDY je izjavil:

Podobno kot s CS pini lahko delaš z address biti na I2C vodilu:
https://arduino.stackexchange.com/a/330...

Ja, to je en potencialno delujoč način multipleksiranja. Vendar bo deloval samo za tiste podrejene naprave na vodilu, ki svoj naslov preverjajo sprotno, med branjem naslova, ne pa tudi za naprave, ki naslov "zajamejo" pri zagonu, nato pa več ne. Za MPU6050 bo predlagana rešitev očitno delovala, za BMI088 v dokumentaciji ne piše nič na temo in bi bilo prav najprej narediti test, da takšen pristop deluje.

Še ena enostavna metoda multipleksiranja I2C pri nizkih frekvencah je tudi ta, da multipleksiraš samo SCLK in ga pošlješ samo na ustrezen pin, drugje ga pa držiš gor. Ker ostali čipi ne bodo prišli do CLK signala, tudi ničesar ne bodo dekodirali.

blay44 ::

Ja, s tem MPU6050jem bi pa šlo 1k vzorcev.
Vsak sensor naj ima svoj kontrolerček. Vsi skupaj pa povezani s "serverjem" preko rs485 linije, da ne bo stvar podobna kitajcem.

srus ::

stalker je izjavil:

Magic number 6 je zato, ker se bo dalo na vsako nogo človeka po en pospeškometer na stopalo, pri kolenu in na kolk (6 krat 3 osi). Projekt (in ne naloga) zahteva 1 kHz, tukaj ne morem nič. Kot sem napisal, trenutno imam v prvem postu omenjene pospeškometre in mikrokrmilnike, nisem pa omejen z njimi, lahko grem v nabavo in kupim kaj primernejšega.
Potrebujem samo podatke iz pospeškometrov, žiroskop se ne bo uporabljal.


Pred leti sem za podoben projekt (human activity recognition) uporabil TI Sensortage. Povezava je bila BLE, obdelava podatkov pa na Intlovem NUC.

Sicer je 1 kHz sempliranja malo preveč glede na datasheet za omenjeni senzor. Omenjenih je max. 280 Hz za pospoeškomer.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

I2C komunikcija

Oddelek: Elektrotehnika in elektronika
61301 (537) r-a-m
»

Protidronski motilci si utirajo pot v večje vojske

Oddelek: Novice / Znanost in tehnologija
358149 (6213) jonzie777
»

Arduino Uno - kako do več GPIO

Oddelek: Elektrotehnika in elektronika
152276 (1854) DOOM_er
»

Intel se podaja v vode Arduina

Oddelek: Novice / Procesorji
2612713 (8149) PrimozR
»

kde in resolucija

Oddelek: Operacijski sistemi
101513 (1381) moj_nick

Več podobnih tem