Pentru a citi diferite valori analogice si a le transforma in valori digitale vom vedea cum putem face acest lucru cu ajutorul placii de dezvoltare STM32 BluePill.

    Convertoarele analog/digitale (ADC) din aceasta placa de dezvoltare functioneaza cu o rezolutie de 12 biti.  De aceea se pot obtine valori in plaja 0-4095 (rezultatul lui 2 la puterea a 12-a).

    Pentru a citi tensiunea vom folosi urmatoarea formula de calcul: Tensiune/Pas = Tensiune_referinta/212.  Cum tensiune de referinta va fi de 3.3V rezulta ca cea mai mica valoare a tensunii citite este de 3.3V / 4096 = 0.8056mV. Tensiune poate fi calculata cu aceasta formula: Tensiune = (Valoare ADC / rezolutie ADC) * Tensiune_referinta.

    Pentru a testa convertorul Analog/Digital vom folosi un rezistor semireglabil conectat cu terminalele la +3.3V si GND iar cursorul conectat la pinul PA06. Placuta de dezvoltare STM32 BluePill are 10 intrari analogice (ADC): pinii PA0 - PA7 si pinii PB0-PB1.

    In acest exemplu pentru afisarea informatiilor analogice si conversia lor in format digital vom folosi displayul led 160*128 ST7735, acest se va conecta la placa de dezvoltare conforma acestui articol.

    Sketchul folosit este urmatorul:

#include <Adafruit_GFX.h> 
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS        PA3
#define TFT_DC        PA4
#define TFT_RST       PA2
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
const int SR = PA6;   //declaram pinul PA6 ca intrare analogica

void setup() {
  tft.initR(INITR_BLACKTAB);
  tft.setRotation(2);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(ST77XX_WHITE); 
  tft.setTextSize(2);   
  tft.setTextWrap(true);
  tft.println("Vizitati site-ul www.electronicstore.ro!"); 
  delay(2000);

  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(2);
  tft.setTextWrap(true);
  tft.println("STM32 BluePill convertor analog digital");
  delay(2000);
  
}

void loop() {
  tft.fillScreen(ST77XX_BLACK);
  int valoare = analogRead(SR);  //citim valoare analogica a tensiunii aflate la cursorul semireglabilului
  float tensiune = (float(valoare)/4096 * 3.3);  //calculam tensiunea existenta la cursorul semireglabilului
  tft.setCursor(5, 10);
  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(2);
  tft.setTextWrap(true);
  tft.println("Valoare:");
  tft.setCursor(0, 30);
  tft.setTextColor(ST77XX_RED);
  tft.println(valoare);
  tft.setCursor(5, 60);
  tft.setTextColor(ST77XX_WHITE);
  tft.println("Tensiune:");
  tft.setCursor(0, 90);
  tft.setTextColor(ST77XX_RED);
  tft.println(tensiune);
  delay(500);
}

 

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.