Fórum témák
» Több friss téma |
Rosszul kalkulálsz! Mert az ADC1 és ADC2 bemenetei közösek, ezért csak 2*8-al számolhatsz.
Plusz az ADC3, 8 bemenete. Szerintem: 2.4 * 8 / 3 = 6.4 Ha ezt DMA-val olvasód be egy tömbbe, akkor már csak a kiértékeléssel kel foglalkoznod. A hozzászólás módosítva: Márc 17, 2021
De itt talán érthetőbben el mutogatja: Bővebben: Link
Hozzá fűznem, hogy akár 8 csatornát is be állíthatsz egy ADC-re. És mind a három ADC mehet egyszerre.
Lehet, hogy szűklátókörű vagyok, de én nem látom értelmét 10ksample/sec-nél nagyobb mintavételezést használni. A belinkelt képeden egy kocka (vagy inkább négyzet) 1msec időtartamot jelent (ha jól tippelek). A 10ksample/sec az kockánként 10 mintát jelent. kizárt, hogy ez kevés legyen (szerintem semennyit nem javulna a pontosság, ha ennél magasabb mintavételi frekvenciát használsz). Ehhez meg bőven elegendő lenne az SPI ADC (szerintem létezik az 12, vagy akár még 16 bitesben is). Ezzel a módszerrel teljesen külön lehetne választani a kontrollertől a mérő részt tartalmazó műveleti erősítőket, AD átalakítókat és az egyéb ahhoz tartozó dolgokat.
Szerintem előbb a feladathoz szükséges paramétereket kellene specifikálnod. Az iparban legfeljebb a 20. felharmonikusig (1kHz) szokás foglalkozni az áram felharmonikusokkal, azaz teljesen fölösleges 10ksmp-nél nagyobbal mintavételezni. Ha túlmintavételezni szeretnél a felbontás javítás/zajelnyomás miatt, akkor esetleg lehet nagyobb.
Szerintem fontold meg amit Benjamin javasolt. Én biztosan azt a megoldást választanám, hogy a hálózati feszültség szinten lenne az ADC, vagy inkább több kisebb ADC-s mikrovezérlőt használnék, amiben az egyes méréseknek az offszetelést elvégezném, az esetleges túlmintavételezést kiértékelném, és valamilyen soros felületen átküldeném az aktuális mintát.
Köszönöm a sok hasznos hozzászólást!
Itt van egy project, ami az eredeti EmonTx megoldásban használt 4 csatornát bővíti fel 12 csatornásra, gyorsabb proceszorral (Ardiuno Due): Bővebben: Link Itt a 3 fázisból kettő feszültségét csak becsüli, én azt is mérném. Van kb. 40 áramköröm a házban. Aliexpressen nem találok releváns SPI/I2C sok csatornás ADC modult Az OpenEnergyMonitor oldalon azt írja, hogy 2,5 KSPS-vel tud egyszerre feszültséget és áramot mérni, sima Arduinoval (ATmega328). Ha csatornánként tudok 10 KPSP-vel mérni (ahogy javasoljátok), az elég lesz (100 mérés/fél hullám). Tehát egy STM32F407VET6 procinak van 3 darab 12-bites ADC-je, összesen 16 csatorna (láb). Az ADC1 és ADC2 16 csatornás, az ADC3 8, csatolt képen a közösítések. Ezzel mekkora sebességet tudok elérni, csatornánként, DMA segítséggel, ha mind a 16 csatornán folyamatosan mérek? kapu48 számítását jól látom, hogy 6,4 MSPS? És akkor a csatorna bővítés vagy külső ADC modullal (amit még nem találtam, csak MCP3008-at, külön IC-ként), vagy multiplexer, vagy több lábú STM32 (drágák), vagy több darab STM32-vel lenne megvalósítható...
Szerintem félreérted. A kontrollerben 3 db ADC van. Ezek egyenként max. 2.4 millió konverzióra képesek másodpercenként. Egy ADC-hez több bemenetet tudsz felhasználni, de ha több bemenetet használsz, akkor a konverzió egymás után fog végrehajtódni, úgy mintha egy multiplexerrel egyesével kapcsolnád a bemeneteket az ADC elé. Természetesen ekkor az első és az utolsó mintavételezés között idő telik el, fázishiba keletkezik.
Sajnos az STM ADC-je igen összetett, jól át kell olvasni hozzá az adatlapot, meg kell érteni a különböző módokat, beállításokat. Az arduino analogRead STM függvénye nem megfelelő a feladathoz.
Ha szétszórton több helyen és lehetőleg pontosan akarsz mérni?
Akkor inkább több kisseb kártyára szavazok, szétszórva lehetőleg minél közelebb elhelyezni őket a mérendő helyhez. Hogy minél kevesebb zajt vegyenek fel a mérő vezetékek. Például: ST STM32G4 Nucleo-32 Bővebben: Link Aránylag olcsók, és mégis gyorsak a 170MHz A hozzászólás módosítva: Márc 18, 2021
Blue pill.
Itt azt írják, hogy Idézet: ezt a 300mA-t hogy kell érteni? Ennyit tudnak kiadni a digital output lábak? Egyenként? Összesen? „Output +3.3V @ 300mA”
Az a regulator szekcióban szerepel. Tehát az 5V->3V3 IC tud ennyit.
A mikrokontroller terhelhetőségéhez nyisd meg az adatlapját, az Absolut maximum ratings fejezetben megtalálod, amit keresel. A hozzászólás módosítva: Márc 19, 2021
Frekvenciafüggő a végeredmény.
16 MHz 14.9mA 72 MHz 50.3mA
Szerintem ez az áramfogyasztása. Az valóban frekvenciafüggő.
Az a CPU mag fogyasztása GPIO terhelés nélkül.
Téged a 37. oldal érdekel.
Sziasztok,
Nekem is lenne egy kérdésem az ADC-vel kapcsolatban. NUCLEO-072RB panel GND és PA0 pinek közé bekötöttem egy ellenállásosztó kimenetét amivel tápfeszültséget szeretnék mérni. A gond az hogy nagyon pontatlanul mér a 12 bites ADC. Ha a port kap 130mV-ot olyankor az ADC értéke (0-4095 skálán) 0 és 170 között ugrál. Oszcillószkópom nincs, de szerintem nem a jellel van a baj mivel a feszültségosztó direkt a 470µF-os szűrőkondenzátor közé van bekötve és a feszültségosztó kimenetén (a port/GND között) is van egy 10nF-os kondenzátor, de így is ugrál a mért érték. Ha letestelem vagy 3.3v-ra kötöm a PA0 lábat olyankor fix 0 / 4095 értéket ad vissza az ADC. Az ADC-t polling módban használom. Szerintetek hogyan lehetne az ADC pontosságán javítani? A választ előre is köszönöm. A hozzászólás módosítva: Márc 22, 2021
Két lehetőség van. Az első a hardveres probléma, kontakthiba, forrasztási hiba, ezt mi kiszűrni távolról nem tudjuk. A másik, hogy valamit elrontasz az ADC beállításakor, olvasásakor. Tedd fel a forrást, legalább azt ami GPIO-t és ADC-t inicializálja.
Köszönöm a válaszodat, sajnos HW hibának néz ki, ezért nem fogok vele itt spamelni, a TL431 által kiadott feszültséget stabilan méri.
Egy tanács arra az esetre ha más is hasonlóan járna: TL431-el és egy ellenállással érdemes építeni egy 2.5v-os tápot, azt rákötve a GPIO-ra el lehet dönteni hogy pontosan mér-e az uC. Szerk: a TL431 által kiadott 2.5V-os jelt 3006-3009 közötti értéknek méri a 12 bites ADC, ami bőven megfelel az elvárásnak . A hozzászólás módosítva: Márc 22, 2021
Sziasztok!
Valakinek van tapasztalata Seeeduino XIAO-val? Nem tudok rá feltölteni progit az a problémám! Vettem egy újat a TME-ből, felraktam EZT a drivert mert a leírás szerinti FTDI drivert nem telepítette. COM port beállítva, alaplap infó olvasható, de a feltöltésnél csak homokóra van, aztán sikertelen. Valakinek építő jellegű gondolata?
Sziasztok!
Gondom van egy ssd1306 kijelzővel. Kiderült, hogy az I2C órajele nem jó, kb. 100us a clk periódus ideje szkópon nézve. Hogyan tudnám beállítani, illetve az initnél a speed miért nem megy a beállított 100000-el? Ha egy szájbarágós példát kaphatnék... valami periféria órajel a megoldás, de a neten lelt példán nem tudtam elmenni. C-ben kellene, gd32f103rtc6-ra. Előre is köszönöm.
Melyik c része vagy headerje? Mert ez egy jó nagy progi...
Az I2C init:
A hozzászólás módosítva: Máj 28, 2021
Honnan kapja az MCU az órajelet?
Mennyi a SYSCLK?
Köszönöm, hogy foglalkozol a gondommal. Sajnos nem tudom, a kódrészletet tudom bemásolni.
Nem lehet, hogy a DMA kavar be? Az eredeti kódban a követése (debug) I2C módban így volt megoldva.
Köszönöm, megoldódott, annyit kellett tenni, hogy a
I2C1->CCR = 0x28; sort beszúrni az initbe. Direkt módon izélgetni a regisztert Én hülye meg a rutinok között keresgéltem, hogy a c-ben biztosan van valami beállítás.
Urak, újabb gondom van: a sprintf funkció nem írja ki a float számokat egyáltalán, üres string van helyette. Visual Studióban, HAL alatt használnám stm32f103rtc-hez.
A neten azt írják, hogy -u paranccsal be kell tenni, hogy float is legyen, de amit javasolnak, olyan file-om nincs. Ezek a fordítási üzenetek:
STM32CubeIDE esetén "-u _printf_float" kapcsolót látok a lebegőpontos kiírást használó projekteknél. A runtime library egyébként "Reduced C" (--specs=nano.specs).
A Visual Studióhoz nem tudok hozzászólni.
Én csak CubeIDE-hez tudok hozzászólni, ott project properties / C/C++ build / settings / MCU settings / use float with printf... : pipa be.
Hogy a VS-ben ezt lehet bekapcsolni, azt már neked kell megtalálni.
Köszi, közben meg is lett (netes info):
Ezt kellett betenni a platformio.ini-be: -Wl,--undefined,_printf_float Ha még lenne hajam, most tépkedtem volna ki szálanként... A hozzászólás módosítva: Máj 30, 2021
Idézet: „Ha még lenne hajam, most tépkedtem volna ki szálanként...” De miért? A float print sok helyet foglal, alapesetben ki van kapcsolva.
A sok ellentmondó információ miatt. Mivel teljesen kezdő vagyok a c környezetben, kénytelen vagyok a neten terjedő infó-morzsákra hagyatkozni. A kis kijelző esetében pl. kénytelen voltam az én korábbi, jól működő assembly programomból részeket átvenni, mert az eredeti nem működött - az inicializálása is már rossz volt.
És már csak nem tölthetem az egész szép ifjúságomat manualok olvasásával. |
Bejelentkezés
Hirdetés |