Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Da ne otvaram novu temu, par pitanja...
A da li znas koja je specificna impedansa A/D ulaza kod STM32F103?
Koliko je "dovoljno"? 1k, 10k?

Zelim da istrazi potencialne mogucnosti za merenje napona ali samo da se oslonim na raspoloziv HW u kontroleru i sve ostalo da resavam u SW.
Poenta je sto imam u STM32F103 brdo memorije na pretek, mogu da iskoristim to da linearizujem bukvalno svaku pojedinacnu tacku od konvertera ...
Reply
Miki,

pogledaj ovaj dokument:

https://raw.github.com/spark/core/master...F103CB.pdf

strana 75.
Jos jedna stvar. Npr. ako pravis x10 sa npr. vrednostima otpornika 1K i 9K. Ako ti je izlazna impedansa kola na kom meris napon, npr. 100R ti ces imati slabljenje 9.18x umesto x10. Vodi racuna i o tome.
Sto se tice ulazne impedanse AD-a, tu ne bi trebao da imas problema.
Reply
Takodje razmisljam o internom temperaturnom senzoru u MCU, hehe, meni se isplati da postavim nekako STM32 na veliki hladnjak, ne da bi njega hladio, nego da bi pratio temperaturu hladnjaka od neke sprave koji taj MCU upravlja, moze da se kompenzuje sve zivo i jos pod razlicitom temperaturom, TCMCU, Temperaturno Kompezovan MCU Smile
Reply
Senzori temperature unutar mcu mere uglavnom temperaturu tacke silicijuma. Da bi izracunao spoljasnju temperaturu ili temperaturu hladnjaka moras da znas potrosnju mcu-a i termicke otpornosti slojeva na kojima se mcu oslanja. Npr. mcu ce da izmeri 45C a napolju je 25C.
Reply
https://www.themetalstore.co.uk/products...ors-square

a li ovo ima da se kupi kod nas negde?
Reply
https://youtu.be/ovd8YATDfM0

Ovo odradih za test jer mi stoji u fioci vec duze vreme a zainteresovao sam se za izgradnju ozbiljnijeg CNC rutera dimenzija 2m x 1m.

Interesuje me da li se neko upustio u slican poduhvat? Posebno me interesuje da li neko ima ideju kako izravnati podlogu za sine od X ose (one od 2m duzine) da budu iste visine? Nisam nasao da neko u mojoj blizini moze da obradi na glodalici toliku povrsinu a ne pada mi na pamet kako bi to drugacije moglo da se odradi...

Pitanje je vise masinske prirode i mozda nije bas za ovaj forum al ne kosta nista da pitam... Smile
Reply
Pravo pitanje za našeg forumaša @Želja...
Reply
igram se sa stm32 nucleo plocicom, konkretno sa ADC ulazom
povezao sam DAC direktno na ADC i napravio jednostavan sawtooth pomocu for petlje
poredjenjem zadatog i izmerenog sam dosao do zakljucka da bar jedan od njih ne radi kako treba
googlanjem sam dosao do toga da je ADC krivac za odstupanja (previse suma ima)
ono sto je zaista ublazilo problem je deklarisanje neupotrebljenih analognih pinova kao izlazne digitalne
problem je smanjen ali ne i otklonjen, prebacio sam podatke na komp i plotovao

zanima me kako da otlkonim smetnje (talasnost, sum) a lako cu posle kalibrisati odstupanje nagiba

dodatno pitanje je vezano za sam pocetak i kraj opsega, da li je neko imao problema sa tim
kraj opsega je relativno lako otfikariti, ali je pocetak ipak potreban, mada mogu da pomerim sve razdelnikom napona

a mozda da otvorim novu temu...

molim podelite vasa iskutva sa adc-om nevezano za upotrebljeni MCU
Angel Big Grin


Attached Files Thumbnail(s)

Reply
(11-13-2017, 12:19 PM)Ubledeli Wrote: igram se sa stm32 nucleo plocicom, konkretno sa ADC ulazom
povezao sam DAC direktno na ADC i napravio jednostavan sawtooth pomocu for petlje
poredjenjem zadatog i izmerenog sam dosao do zakljucka da bar jedan od njih ne radi kako treba

Smile  Gotovo sam siguran da oba rade onako kako piše u datasheet-u, odnosno errata (ako ga ima).

Ako sam te dobro razumeo izlaz iz DAC MCU odveo si na ulaz ADC MCU. Ako je tako, onda je maksimalno odstupanje definisano zbirom njihovih pojedinačnih grešaka čije vrednosti možeš pronaći u datasheet-u za konkretni MCU (INL, DNL...) Na sledećoj stranici imaš lep pregled šta je šta kod DAC i ADC.

https://www.maximintegrated.com/en/app-n...mvp/id/641

Pretpostavljam da si ispoštovao settling time za DAC i acqusition time za ADC.
Reply
hvala na linku,settling time ispostovao jesam i nisam, nemam dodatni delay izmedju slanja i primanja podataka
ukupan delay je 0.2 sekunde, naso sam AN od ST-a koji opisuje razne probleme oko adc-a, tu sam i nasao da treba izbaciti nekoriscene ADC ove iz price

moje pitanje je sledece: kako filtrirati dobijeni signal?
mozda analogni LowPass filter, mada me mrzi da svaki put menjam komponente kad promenim frekvenciju akvizicije
da li se neko igrao sa FIR ili IIR filterima MovingAverage SavitzkyGolay ili nekim drugim algoritmima
Reply
Sa kojom konretnom Nucleo plocicom se igras?

Shum je neminovan, i to shum moze da dodje sa vise strana, sa samog ulaza, sa sekcije analognog napajanja (VDDA/VSSA) ili referentnog napona (VREF, ukoliko je razlicit od VDDA).
Shum/ripple/smetnje na bilo kojem od ta tri segmenta dovodi do istih posledica.

Za kraj opsega obicno nije problem jer ti je tu najveci SNRi i rezultati bi trebali da budu tacniji.
Pocetak opsega zna da bude sporan jer je tu najmanji SNR.

Takodje za A/D konverter ulazna impedansa moze da pravi problem, skoro sam nesto experimentisao i ja i recimo tek kada se spustim sa impedansom ispod nekih 1K pocinju da stvari rade normalno, da bi bilo skoro idealno MORA da se stavi buffer.
Za buffer sam stavio OPA192 i to iako ga kao reklamiraju kao Rail-To-Rail OP, mora da se "razvuce" njegovo napajanje van granica ulaza u A/D konverter (0 do 3.3V), dakle pozitivno moze da ide na 5V dok negativno je takodje neophodno i to makar nekih -0.2V do -0.5V da bi mogao da koristis kompletan ulazni opseg za A/D tj da bi OP stvarno mogao da "swinguje" do 0V, nece bez toga!
Ovih negativnih -0.5V se najlakse prave sa jednom diodom tako da masa celog kontrolera "lebdi" nad diodom preko koje ide GND ako to dopusta postavka, u suprotnom se mora dovesti "pravi" negativni napon.
Izlaz iz OP-a sam strujno limitirao sa jednim otpornikom i ogranicio struju koja moze da ptotekne kroz A/D ulaz u slucaju da se pojavi napon preko 3.3V koji se interno inace klampuje na VDD.

Sto se tice filtriranja ulaza (LPF), to je uvek pozeljno prvo uraditi na HW nivou i ograniciti bandwith konvertera pa tek onda preci u SW domen gde mozes da radis dodatni averaging/oversampling ili neko drugo naprednije DSP filtriranje ali HW filter je prakticno obavezan.
Reply
Inace, postavicu skorije neki info i fotke kako mi je ispao A/D konverter tj voltmetar koji sam napravio sa STM32F103 kao zamena za stradali IC u Fluke 8600A.
Izvukao sam 17bit, tj dodao jos dve decimale na njihov HW uz pmoc ultra-masivnog oversampling-a Smile
Ostali samo dugmici i ulazni delitelj : ), sve ostalo je Blue Pill i malo prepakovano napajanje, spustio MCU na 3V (TPS73133-ADJ) da bi mi sve radilo sa LiIon baterije bez dodatnih naponskih konvertera ...
Spomenuta OPA192 je obavezna u ovom mom slucaju ...
Reply
Za Moving Average imaš lep dokument od Atmela i ja sam ga radio sa PIC-om. On može da ti ispegla malo šum. Ovde je doc:
http://www.atmel.com/Images/doc0940.pdf

Ovo na početku opsega bi mogao da bude uticaj offset error na jednom od ta dva dela hardvera. Kraj opsega mi je totalno nejasan Huh
Ako nisi već to uradio predlažem ti da sve rezultate konverzije guraš u RAM pa tek nakon što pređeš celu skalu podatke prebaciš na PC (USART ili šta već). Pa onda sve ponovo...
Cilj je da ti na konverziju ne utiče nijedan deo hardvera MCU. Pogasi sve živo..
Reply
(11-13-2017, 01:11 PM)Ubledeli Wrote: hvala na linku,settling time ispostovao jesam i nisam, nemam dodatni delay izmedju slanja i primanja podataka
ukupan delay je 0.2 sekunde,

Moraš da ispoštuješ settling time. ADC konverziju startuješ nakon što istekne to vreme. Acquisition time za ADC takođe pogledaj u datasheet-u.
Reply
Ja sam sve experimentisao sa asinhronom konverzijom, tj A/D radi sam-za-sebe u SCAN modu sa najvecim/najduzim sampling-time i bukvalno svo ostalo rasplozivo CPU vreme sam ostavio za oversampling ...
Kao sto Goran rece, sve radis u RAM prvo i tu racunas pa kad sracunas onda to saljes dalje i prikazujes. Valjalo bi da te "niko i nista ne prekida" dok radis A/D konverziju jer je tajming jako bitan ZBOG SHUMA jer se sve tek slozi kada se uklopis u Gaussian distribuciju shuma! Tu se uz oversampling mesa i ditering tako da ti shum u propisanoj kolicini cak i pogoduje!


Attached Files
.pdf   doc8003.pdf (Size: 117,96 KB / Downloads: 9)
Reply
@mikikg hvala na ukljucivanju i prilozenom pdf-u, svakako okaci svoja iskustva
@gorankg, kraj intervala je 1001. sample(pocetak sledecg ciklusa) koji treba da bude 0.0 a on je 0.71 ponekad a 0.01 u ostalim slucajevima
jos nisam uspeo da pohvatam sta se tu desava, moguce da je bas settling time o kome pricas
Reply
Okači kod pa da pogledamo!
Reply
Druze,

sto se tice akvizicije, MORAS da imas hardverski anti-aliasing filtar pre A/D-a. Kao sto je Miki rekao moras da imas baferovanje da ti filtarska mreza ne bi narusila karakteristike sample and hold kola unutar MCU-a. Anti aliasing filtar bi trebao da ima granicnu ucestanost koja je bar 2.5x manja od frekvencije semplovanja. Posto baferujes, onda mozes da implementiras sallen-key drugog reda.
Pored analognog anti-aliasing filtra preporucljivo je da koristis i neku vrstu usrednjavanja. Usrednjavanje mozes da radis tako sto ces usemplivati odredjeni broj odbiraka (npr. 16) sabrati i podeliti sa brojem odbiraka ili da radis u svakom semplu usrednjavanje, kao npr. (pisem pseudo kod)


Code:
unsigned int X_k = 0;
unsigned int X_k_1 = 0;
unsigned int Y_k;

unsigned int AD_Mean(unsigned int AD_Value) {
Y_k = (AD_Value + X_k_1) >> 2;
X_k_1 = Y_k;
return Y_k;
}
Reply
@vojinilic hvala na predlogu, otprilike sam i ja dosao do zakljucka da cu da stavim filter na 20kHz a sample rate na 48kHz
probacu da izbegnem obicno usrednjavanje jer ono dobrim delom unistava karakteristike signala a zauzvrat malo pomaze
http://195.134.76.37/applets/AppletSmoot...ooth2.html

@gorankg
Code:
while(1) {
       for(int i = 0; i<= 1000;i++){
         f = (float)(i)/(float)1000;
         aout.write(f);
         pc.printf("%f %f\n",ain.read(),f);
         wait(0.2);
       }
       wait(0.5);
   }
Reply
Ovo parce code-a ima malkice problema, Float i 48kHz samplig rate tesko idu zajedno!

Mnogo vise se isplati raditi sa integerima jer je drasticno brza kalkulacija (za 32bit, cak i 64bit integeri nistu mnogo sporiji), videces vec kad budes dosao dotle, recimo referetne vrednosti mozes da "trimujes" preko broja oversemplova da bi izbegao floating point matematiku ...

Takodje mozes da upotrebis DMA da ti A/D konverter popuni ceo tvoj buffer za kalkulaciju (npr uzmes 1024 semplova) pa onda radis zeljenu matematiku nad tim bufferom jer tako doobijas dosta precizniji tajming uzorkovanja, opet povezano sa spomenutim shumom, sve dok se drzimo prezicnog tajminga shum koji se pojavljuje tu celoj prici moze da pomogne. U suprotnom ako imamo bilo kakav jitter prilikom uzorkovanja onda nam se kvari distribucija shuma i gubi se efekat diteringa.

Dodatno, Floating Point matematika ima promenljivo vreme izvrsavanja, nije konstatno sto opet ima los efekat po distibuciju shuma, dodaje se digitalni shum koji je "bljak" kako bi se pratio njegov spektralni sastav (FFT)!

Varijanta sa bufferom od recimo 1024 semplova koje popunjava A/D preko DMA je isto zgodna varijanta da bi mogao da iscrtas grafikon distribucije vrednosti uzoraka. Ako dobijes "lepu" Gauissian distribuciju onda si na dobrom putu, ako to "zvrji" nasumice onda imas nekih drugih problema u tom lancu konverzije.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)