Operácie

A/D prevodník: Rozdiel medzi revíziami

Z SensorWiki

(Hardware)
(Hardware)
Riadok 26: Riadok 26:
 
* potenciometer alebo trimer, ktorý máte v MISP kite  
 
* potenciometer alebo trimer, ktorý máte v MISP kite  
 
* fotorezistor, ale ten slúži len na orientačné merania, pretože nemáme referenčný zdroj osvetlenia  
 
* fotorezistor, ale ten slúži len na orientačné merania, pretože nemáme referenčný zdroj osvetlenia  
* termistor, ktorý tiež vieme využiť len orientačne, hoci k nemu by sme vedeli vypočítať teplotu podľa [http://senzor.robotika.sk/mmp/2322640.pdf datasheetu].
+
* termistor, ktorý tiež vieme využiť len orientačne, hoci k nemu by sme vedeli vypočítať teplotu podľa [http://senzor.robotika.sk/mmp/2322640.pdf datasheetu] (pozri tiež [https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation Stienhart-Hartovu rovnicu]).
  
 
<div style='text-align: center;'>
 
<div style='text-align: center;'>
 
[[Súbor:MIPS_ADC-Schema01.png|800px]]<BR>
 
[[Súbor:MIPS_ADC-Schema01.png|800px]]<BR>
''Schéma pripojenia vstupov k A/D prevodníku. Ak vám nepomôže, použite [[Media:MIPS_ADC-Schema02.png|zapojovací diagram]]'' (pozri tiež [https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation Stienhart-Hartovu rovnicu])
+
''Schéma pripojenia vstupov k A/D prevodníku. Ak vám nepomôže, použite [[Media:MIPS_ADC-Schema02.png|zapojovací diagram]]''  
 
</div>
 
</div>
  

Verzia zo dňa a času 09:36, 15. apríl 2021

A/D prevodník

Úlohy

  1. Zapojte si na doštičke potenciometer s vývodom na niektorý z analógových vstupov. Môžete tiež vyskúšať fotorezistor, alebo termistor.
  2. Doplňte program o jednoduchý A/D prevod a zobrazte hodnotu z potenciometra na sériovom termináli (a príp. aj na LCD displej).
  3. Zistite, čo sa stane, ak budete merať nezapojený vstup ("zo vzduchu").
  4. Oboznámte sa s programom SerialPlot a zobrazte časový priebeh nameranej veličiny.
  5. Napokon pomocou potenciometra ovládajte intenzitu svitu niektorej LED diódy.

Rekapitulácia

V tejto úlohe sa predpokladá znalosť funkcie A/D prevodníka z prednášky. Na posledných dvoch slajdoch máte pripravené funkcie na inicializáciu a načítanie výsledku prevodu. Preto sa v tomto návode nebudeme zaoberať týmito funkciami.


Hardware

Ako vstup do A/D prevodníka môžete použiť niektorý zo štyroch uvedených príkladov:

  • obyčajný odporový delič, ktorým môžeme detekovať napríklad pokles napätia napájacej batérie
  • potenciometer alebo trimer, ktorý máte v MISP kite
  • fotorezistor, ale ten slúži len na orientačné merania, pretože nemáme referenčný zdroj osvetlenia
  • termistor, ktorý tiež vieme využiť len orientačne, hoci k nemu by sme vedeli vypočítať teplotu podľa datasheetu (pozri tiež Stienhart-Hartovu rovnicu).

MIPS ADC-Schema01.png
Schéma pripojenia vstupov k A/D prevodníku. Ak vám nepomôže, použite zapojovací diagram

A/D prevodník

AVR ADC.png


Pre nameranú hodnotu N platí vzťah


             U_{in} = \frac{N U_{ref}}{1024}


Ako zdroj referenčného napätia použijeme priamo napájacie napätie 5V oddelené tlmivkou a filtrované paralelným kondenzátorom 100n (pozri interaktívnu schému zapojenia). Zodpovedajúce bity REFS1, REFS0 v registri ADMUX sú teda 01.

Zdroj hodinového signálu pre A/D prevodník musí byť v rozsahu 50 až 200 kHz!

Príklad najjednoduchšieho SW ovládaného A/D prevodu je uvedená v tomto príklade - pozri AVR A/D example.c


Software

Ukážkový program pre prevod napätia na číslo pomocou zabudovaného A/D prevodníka. Obslužné funkcie sú deklarované v knižnici, definície si doplňte sami z prednášky.

#include <avr/io.h>
#include "adc.h"


int main(void)
{
  unsigned int measuredValue;

  adc_init();                                          // Init A/D converter

  while (1)
  {
    measuredValue = adc_read(0);
    /* tu s nou nieco spravime, napr. na LCD, UART,...  */  
  }

  return(0);
}
#include <avr/io.h>

void adc_init(void);                                   // A/D converter initialization

unsigned int adc_read(char a_pin);
#include <avr/io.h>

... zvysok najdete v prednaske ...
#define aPin A0
int sensorValue = 0;      // analog value

void setup() 
{                
   Serial.begin(9600);
}

void loop() {

  sensorValue = analogRead(aPin); // sample signal
  Serial.println(sensorValue);
  delay(100);
}

Vizualizácia

Vizualizáciu dát môžeme robiť rozlične. Jeden z možných spôsobov je vypisovať po sériovej linke v pravidelných intervaloch holé data a tie potom uložiť ako maticu do Matlabu a tam nakresliť graf, priebeh, čo treba...

Iná možnosť je použiť napr. program SerialPlot, ktorý kreslí prichádzajúce data priamo ako graf.

Download: SerialPlot 0.11.0


Download

Icon Terminal.png Terminal 1.9b

IconSerialPlotter.png Serial Plot 0.11.0


Literatúra:


TODO: prerobit na verziu 2022:



Návrat na zoznam cvičení...