Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  20 4300
Er det mulig å bruke arduino mega eller uno som en DAC?
Det jeg ønsker å gjøre er å gjøre 2 digitale sensorer "analog". Output fra arduino må være enten 0-5v eller 4-20mA.

Har en PLS jeg skal koble temperatursensorene til, problemet er at den kun har analoge utganger.
Sitat av Spelly Vis innlegg
Har en PLS jeg skal koble temperatursensorene til, problemet er at den kun har analoge utganger.
Vis hele sitatet...
Den har kun analoge innganger?

http://arduino.cc/en/Reference/analogWrite
I praksis et PWM signal, men du får jo bare prøve deg frem. Hvis den støtter 0-100% duty cycle så har du jo 0-5v. Får håpe elektronikken du skal fore har litt filtrering, ellers kan det være nødvendig å tenke på. 4-20ma ville jeg løst med en ekstern IC som du kan gi beskjeder til via uart/i2c/spi. En DAC-chip med digital interface, mao.
Sitat av wanna-b Vis innlegg
Den har kun analoge innganger?

http://arduino.cc/en/Reference/analogWrite
I praksis et PWM signal, men du får jo bare prøve deg frem. Hvis den støtter 0-100% duty cycle så har du jo 0-5v. Får håpe elektronikken du skal fore har litt filtrering, ellers kan det være nødvendig å tenke på. 4-20ma ville jeg løst med en ekstern IC som du kan gi beskjeder til via uart/i2c/spi. En DAC-chip med digital interface, mao.
Vis hele sitatet...
Bare for å utdype bittelitt for TS...

PWM med tilstrekkelig høy frekvens trenger bare en bitteliten kondensator for å "glatte" så blir det helt analogt. Arduino sin PWM mener jeg å huske er på rundt 2-4 kHz (med mindre du "hacker" litt med registrene, men da mister du f.eks klokkefunksjon etc), som burde være tilstrekkelig for å bli tolket som "analogt" av en IC. I tillegg må du huske at inngangsimpedansen på CMOS er utrolig høy, så hvis du velger å gå for en bitteliten kondensator kan det hende at den innfører en bitteliten "delay", men i praksis kan jeg ikke tenke meg at det utgjør noen forskjell. Temperatursensorene i seg selv er nok en større feilkilde når det gjelder "delay" da de ofte er innkapslet i metall... Prøv uten først, jeg kan ikke tenke meg at inngangen på PLS har lav nok frekvens til at den ikke skal tolke signalet som analogt...

Og ja, den støtter 0-100% duty cycle, så du har i praksis 0-5V analog ut, selv om det ikke er "helt ekte".
Du kan køyre fleire utgangar igjennom eit R2R motstandsnettverk for å lage eit analogt signal. Oppløysinga er då styrt av antal utgangar du har tilgjengeleg.

http://www.instructables.com/id/Ardu...log-Converter/
PWM frekvensen er 490 Hz eller 980 Hz http://arduino.cc/en/Reference/analogWrite jeg ville satset på å filtrere dette signalet og få 0-5 V. Du kan dog forandre frekvensen litt for å få bedre filtrering og lavere risetime på signalet http://playground.arduino.cc/Main/TimerPWMCheatsheet
Sitat av Ferner-Jensen Vis innlegg
PWM frekvensen er 490 Hz eller 980 Hz http://arduino.cc/en/Reference/analogWrite jeg ville satset på å filtrere dette signalet og få 0-5 V. Du kan dog forandre frekvensen litt for å få bedre filtrering og lavere risetime på signalet http://playground.arduino.cc/Main/TimerPWMCheatsheet
Vis hele sitatet...
Det var lavere enn jeg husket, men det er lenge siden jeg har holdt på med Arduino. Jeg fikk min til ~30 kHz med noe snuskete kode, men den enkleste løsningen er nok en kondensator på utgangen, evt RC fra signal til jord, som er litt lettere å regne på
Tok å simulerte et outputsignal med 30 kHz og plotta responsen til et andregrads RC-filter, ble meget akseptabelt det http://i.imgur.com/Kpqezz2.png
risetime på 5 millisekunder og ripple på 100 mikrovolt ish?
Sitat av Ferner-Jensen Vis innlegg
Tok å simulerte et outputsignal med 30 kHz og plotta responsen til et andregrads RC-filter, ble meget akseptabelt det http://i.imgur.com/Kpqezz2.png
risetime på 5 millisekunder og ripple på 100 mikrovolt ish?
Vis hele sitatet...
Det der fungerer, ingen tvil om det

Kunne du testet med bare RC til drain fra output og, med en litt større kondensator? Tror også det hadde fungert uten å endre PWM-frekvens, om kondensatoren er stor nok. Ulempen er som nevnt rise-time, men slike temperatursensorer er ofte(st) innkapslet i en metallhylse, så noen ms her og der spiller ingen trille. Spent på om det hadde fungert...

Hvis man kan unngå å endre frekvensen er det bedre, jeg husker det var noen ulemper ved det, samt at det blir litt ekstra kode og det er ikke plass til veldig mye på en Arduino i utgangspunktet...
Sitat av Antagonist Vis innlegg
Kunne du testet med bare RC til drain fra output
Vis hele sitatet...
Hva mener du med drain? Et første ordens filter fungerer jo også, bare litt høyere risetime.
Innestengt
Spelly's Avatar
Trådstarter
Takker for mange svært gode svar!
Tror jeg har tatt meg litt vann over hode i dette prosjektet, ser ut til å være på et litt høyere nivå enn det jeg mestrer atm.
Regner med at output fra arduino representerer hver av sensorene og en eventuell PLS vil kunne tolke dette som en analog temperatursensor (iallefall hvis PLSen har filtrering. Eventuelt kan jeg bruke en kondensator for å gjøre signalet "helt analogt").

Er det noen som har forslag til en kodesnutt etc? Spanderer gledelig en pizza på den som kunne hjulpet meg å få dette til å fungere.
Sist endret av Spelly; 6. februar 2014 kl. 15:36.
Hvilken tempsensor har du da?
Sitat av Ferner-Jensen Vis innlegg
Hva mener du med drain? Et første ordens filter fungerer jo også, bare litt høyere risetime.
Vis hele sitatet...
Drain blir i dette tilfellet "jord" eller 0. "Drain" er forsåvidt et begrep som i første rekke forbindes med transistorer, men den direkte oversettelsen "sluk" er ganske dekkende. Jeg burde nok kanskje skrevet "nullpunkt" eller noe.

Jeg tenkte å koble RC i serie mot jord, slik at C lader seg ut gjennom R til jord og dermed glatter signalet. Det er veldig lenge siden jeg gikk elektronikk, så du får tilgi litt "rusk" i både språk og hukommelse

Når det gjelder sensor er det trolig en 10k NTC/PTC, det finner du ut om du måler motstanden i f.eks kokende vann. Jeg skrev en gang et program til Arduino som gjorde om det analoge signalet til grader celsius og outputtet det til en LCD, men om jeg har koden er jeg veldig usikker på for det begynner å bli en stund siden.

Jeg er helt sikker på at nettet er rimelig fullstappet med eksempler på akkurat det der, og kretsen for temperatursensoren er bare en 10k motstand i serie med sensoren, så henter du ut signalet midt i mellom...
Han skrev at det var en digital sensor, så da er det mer enn bare en NTC/PTC i chippen. Og ja, alle filtere er jo koblet til jord på en måte?
Innestengt
Spelly's Avatar
Trådstarter
Det er en dallas 18b20. Bruker onewire protokollen
Sitat av Ferner-Jensen Vis innlegg
Han skrev at det var en digital sensor, så da er det mer enn bare en NTC/PTC i chippen. Og ja, alle filtere er jo koblet til jord på en måte?
Vis hele sitatet...
Åja, fikk ikke med meg at han skrev det, da stiller saken seg annerledes. Og ja, alt er koblet til jord, men det er nok bare det at jeg ikke liker "jord" om ting som ikke er ekte jord, som i en jordet stikkontakt f.eks. "Nullpunkt" er et bedre ord, men det er langt og knotete

Uansett:

http://www.dfrobot.com/wiki/index.ph..._(SKU:_DFR0024)

Her står kode for den sensoren...
Ligger masse tutorials for å kommunisere den på nettet, bare søk på "DS18b20 Arduino" ellerno. Jeg regner med at du ville ha hjelp til analog output:

Kode

int output_1 = 9;
int output_2 = 10;

void setup() {
  //legg dette inne i setup() med alt annet
  pinMode(output_1, OUTPUT);
  pinMode(output_2, OUTPUT);
  
  //denne fikser 30 kHz PWM på pin 9 og pin 10
  TCCR1B = TCCR1B & 0b11111000 | 0x01;
}
  
void loop() {
  //antar at du har to variabler "temp_1" 
  // og "temp_2" fra DS18b20
  //feks fra 0-100 grader celsius
  //dette må være et tall mellom 0 og 255
  //noe omregning må derfor til
  analogWrite(output_1, temp_1);
  analogWrite(output_2, temp_2);
}
Så kobler du bare outputen til det filteret jeg la ved tidligere, og inn i PLSen.
Sist endret av Ferner-Jensen; 6. februar 2014 kl. 16:21.
Ferner-Jensen sin idé med et enkelt R-C filter burde fungere godt.
Litt høy rise time kanskje, men regner med applikasjonen PLS'en skal brukes til ikke er supernøyaktig mtp at du bruker arduino?

Funker sikkert fett!
Sitat av visualn00b Vis innlegg
Ferner-Jensen sin idé med et enkelt R-C filter burde fungere godt.
Litt høy rise time kanskje, men regner med applikasjonen PLS'en skal brukes til ikke er supernøyaktig mtp at du bruker arduino?

Funker sikkert fett!
Vis hele sitatet...
Det var vel snakk om å simulere en temp.føler eller noe. Hva mener du med at applikasjonen ikke blir nøyaktig om han bruker en arduino? Hvilken microkontroller foreslår du?
Sitat av wanna-b Vis innlegg
Det var vel snakk om å simulere en temp.føler eller noe. Hva mener du med at applikasjonen ikke blir nøyaktig om han bruker en arduino? Hvilken microkontroller foreslår du?
Vis hele sitatet...
Det er mulig å lage en "supernøyaktig" temperaturmåler med Arduino og, og jeg tror ikke det var det han mente. Jeg tror heller han siktet til at det er veldig få tilfeller der det er nødvendig å få ned hele signalveien til ~10 ms for temperaturer. Bare innpakningen til sensoren har såpass høy varmekapasitet at den gjør 10ms ekstra fra Arduino til signal neglisjerbar...

Arduino bra nok den Jeg vil si den egner seg meget godt til oppgaven, med mindre det er noen krav til nøyaktighet som langt overgår "normale" krav. Hvis du f.eks senker sensoren i vann og øker dette fra 20 til 21 grader "på et blunk" vil det sikkert ta flere sekunder før isolasjonen i sensoren (noe er det alltid) har sluppet varmen igjennom til NTC/PTC og den vil registrere riktig temperatur.

TS har ikke skrevet noe om krav til nøyaktighet, men jeg kan ikke tenke meg at noe som involverer en PLS får problemer med en 5ms forsinkelse pga. RC-filter. Merk at jeg bare tar noen kvalifiserte gjett her, men jeg regner med at det hadde vært spesifisert om det var ekstreme krav.
Men forsinkelsen i signalet og ordet nøyaktighet går om hverandre her. En arduino (eller noen annen mcu) kan ikke gjøre noe med forsinkelsen, men nøyaktighet og oppløsning på den innebygde AD converteren derimot... Enkelt å overkomme det problemet, bruk en ekstern temp sensor og digitalt interface. Og det har han gjort. Så presisjon og nøyaktighet opprettholdes om du så skulle skrevet ut telegrammene fra one-wire bussen på a4 ark og lest dem høyt i en forsamling.
Sitat av wanna-b Vis innlegg
Men forsinkelsen i signalet og ordet nøyaktighet går om hverandre her. En arduino (eller noen annen mcu) kan ikke gjøre noe med forsinkelsen, men nøyaktighet og oppløsning på den innebygde AD converteren derimot... Enkelt å overkomme det problemet, bruk en ekstern temp sensor og digitalt interface. Og det har han gjort. Så presisjon og nøyaktighet opprettholdes om du så skulle skrevet ut telegrammene fra one-wire bussen på a4 ark og lest dem høyt i en forsamling.
Vis hele sitatet...
Jeg tror vi snakker forbi hverandre, eller rettere sagt; jeg tror jeg misforsto ditt første innlegg Du har rett i at nøyaktighet og forsinkelse er to forskjellige ting, men i og med at det er snakk om automatisering vil det i noen tilfeller være ønskelig med en "umiddelbar" respons på f.eks mitt eksempel.

Ellers (som en "side note") kan man veldig fint oppnå det samme med en analog sensor, bortsett fra at det krever litt mer kode (som ellers ville vært innebygget i den digitale) om man skal gjøre det om til grader celsius før man eventuelt sender signalet videre til outputs...

Jeg trodde du mente at arduino ikke var egnet, men det var nok bare jeg som skumleste litt for fort Beklager misforståelsen...