Inhoudsopgave:

Arduino en de TI ADS1110 16-bit ADC: 6 stappen
Arduino en de TI ADS1110 16-bit ADC: 6 stappen

Video: Arduino en de TI ADS1110 16-bit ADC: 6 stappen

Video: Arduino en de TI ADS1110 16-bit ADC: 6 stappen
Video: Getting Started with ADC Functionality of ESP32 using MicroPython 2024, November
Anonim
Arduino en de TI ADS1110 16-bits ADC
Arduino en de TI ADS1110 16-bits ADC

In deze tutorial onderzoeken we het gebruik van Arduino om te werken met de Texas Instruments ADS1110 - een ongelooflijk klein maar handig 16-bits analoog-naar-digitaal converter-IC.

Het kan werken tussen 2,7 en 5,5 V, dus het is ook prima voor Arduino Due en andere ontwikkelingsborden met een lager voltage. Voordat u verder gaat, downloadt u alstublieft het gegevensblad (pdf), aangezien dit nuttig zal zijn en waarnaar wordt verwezen tijdens deze zelfstudie. De ADS1110 geeft je de mogelijkheid van een nauwkeuriger ADC dan aangeboden door de 10-bit ADC's van de Arduino - en het is relatief eenvoudig te gebruiken. Het is echter alleen beschikbaar als een kaal onderdeel in SOT23-6.

Stap 1:

Afbeelding
Afbeelding

Het goede nieuws is dat u de ADS1110 gemonteerd op een zeer handig breakout-bord kunt bestellen. De ADS1110 gebruikt de I2C-bus voor communicatie. En aangezien er slechts zes pinnen zijn, kunt u het busadres niet instellen - in plaats daarvan kunt u kiezen uit zes varianten van de ADS1110 - elk met hun eigen adres (zie pagina twee van het gegevensblad).

Zoals je op de bovenstaande foto kunt zien, is die van ons gemarkeerd met "EDO", wat overeenkomt met het busadres 1001000 of 0x48h. En met de voorbeeldcircuits hebben we 10kΩ pull-up-weerstanden op de I2C-bus gebruikt.

U kunt de ADS1110 gebruiken als een single-ended of differentiële ADC. Maar eerst moeten we het configuratieregister onderzoeken dat wordt gebruikt om verschillende attributen te besturen, en het dataregister.

Stap 2: Configuratieregister

Ga naar pagina elf van het gegevensblad. Het configuratieregister is één byte groot en aangezien de ADS1110 wordt gereset bij een power-cycle, moet u het register opnieuw instellen als uw behoeften afwijken van de standaardinstellingen. Het datablad geeft het vrij netjes weer … bits 0 en 1 bepalen de versterkingsinstelling voor de PGA (programmeerbare versterkingsversterker).

Als je alleen spanningen meet of experimenteert, laat deze dan op nul voor een winst van 1V/V. Vervolgens wordt de datasnelheid voor de ADS1110 geregeld met bits 2 en 3. Als u continue bemonstering hebt ingeschakeld, bepaalt dit het aantal monsters per seconde dat door de ADC wordt genomen.

Na wat experimenteren met een Arduino Uno ontdekten we dat de waarden die door de ADC werden geretourneerd een beetje afwijken bij gebruik van de snelste snelheid, dus laat het op 15 SPS tenzij anders vereist. Bit 4 stelt ofwel continue bemonstering (0) of eenmalige bemonstering (1) in. Negeer bits 5 en 6, maar ze zijn altijd ingesteld als 0.

Ten slotte bit 7 - als u in de eenmalige bemonsteringsmodus bent, stelt u deze in op 1 en vraagt u om een monster - en als u het leest, weet u of de geretourneerde gegevens nieuw (0) of oud (1) zijn. U kunt controleren of de gemeten waarde een nieuwe waarde is - als het eerste bit van de configuratiebyte dat na de gegevens komt, 0 is, is het nieuw. Als het 1 retourneert, is de ADC-conversie nog niet voltooid.

Stap 3: Gegevensregistratie

Omdat de ADS1110 een 16-bits ADC is, retourneert hij de gegevens over twee bytes - en volgt dan de waarde van het configuratieregister. Dus als je drie bytes aanvraagt, komt de hele boel terug. De gegevens zijn in "twee-complement"-vorm, wat een methode is om ondertekende getallen met binair getal te gebruiken.

Het converteren van die twee bytes wordt gedaan door enkele eenvoudige wiskunde. Bij bemonstering met 15 SPS valt de waarde die wordt geretourneerd door de ADS1110 (niet de spanning) tussen -32768 en 32767. De hogere byte van de waarde wordt vermenigvuldigd met 256, vervolgens opgeteld bij de lagere byte - die vervolgens wordt vermenigvuldigd met 2,048 en uiteindelijk gedeeld door 32768. Geen paniek, want we doen dit in de aanstaande voorbeeldschets.

Stap 4: Single-ended ADC-modus

Single-ended ADC-modus
Single-ended ADC-modus

In deze modus kunt u een spanning aflezen die tussen nul en 2,048 V valt (wat ook de ingebouwde referentiespanning is voor de ADS1110). Het voorbeeldcircuit is eenvoudig (uit het gegevensblad).

Vergeet de 10kΩ pull-up weerstanden op de I2C-bus niet. De volgende schets gebruikt de ADS1110 in de standaardmodus en retourneert eenvoudig de gemeten spanning:

// Voorbeeld 53.1 - ADS1110 enkelzijdige voltmeter (0~2.048VDC) #include "Wire.h" #define ads1110 0x48 float voltage, data; byte highbyte, lowbyte, configRegister; void setup() { Serial.begin(9600); Draad.begin(); } void loop() { Wire.requestFrom(ads1110, 3); while(Wire.available()) // zorg ervoor dat alle gegevens binnenkomen {highbyte = Wire.read(); // hoge byte * B11111111 lowbyte = Wire.read (); // low byte configRegister = Wire.read(); }

gegevens = highbyte * 256;

data = data + lowbyte; Serial.print("Gegevens >> "); Serial.println(data, DEC); Serial.print("Spanning >> "); spanning = gegevens * 2.048; spanning = spanning / 32768.0; Serial.print (voltage, DEC); Serieel.println ("V"); vertraging (1000); }

Stap 5:

Afbeelding
Afbeelding

Eenmaal geüpload, sluit u het te meten signaal aan en opent u de seriële monitor - u krijgt iets te zien dat lijkt op de afbeelding van de seriële monitor die in deze stap wordt getoond.

Als u de versterking van de interne programmeerbare versterkingsversterker van de ADC wilt wijzigen, moet u een nieuwe byte in het configuratieregister schrijven met:

Wire.beginTransmission (ads1110); Wire.write (configuratiebyte); Wire.endTransmission();

voordat u de ADC-gegevens opvraagt. Dit zou 0x8D, 0x8E of 0x8F zijn voor versterkingswaarden van respectievelijk 2, 4 en 8 - en gebruik 0x8C om de ADS1110 terug te zetten naar de standaardwaarde.

Stap 6: Differentiële ADC-modus

Differentiële ADC-modus
Differentiële ADC-modus

In deze modus kunt u het verschil aflezen tussen twee spanningen die elk tussen nul en 5 V vallen. De voorbeeldschakeling is eenvoudig (uit het gegevensblad).

We moeten hier (en in het gegevensblad) opmerken dat de ADS1110 geen negatieve spanningen op een van de ingangen kan accepteren. U kunt de vorige schets gebruiken voor dezelfde resultaten - en de resulterende spanning is de waarde van Vin- afgetrokken van Vin+. Als u bijvoorbeeld 2 V op Vin+ en 1 V op Vin- had, zou de resulterende spanning 1 V zijn (met de versterking ingesteld op 1).

Nogmaals, we hopen dat u dit interessant en mogelijk nuttig vond. Dit bericht aangeboden door pmdway.com - alles voor makers en elektronica-enthousiastelingen, met gratis levering wereldwijd.

Aanbevolen: