Skocz do zawartości

Ćwiczenia z Arduino nano, zagadnienia, problemy.


Pomocna odpowiedź

(edytowany)

Sprawdziłem opcję "analogReadMilliVolts" ale błąd pomiaru (odchyłka) wychodzi podobna. Różnica pomiędzy 12V a 18V wynosi ok. 95mV zamiast 110mV. Sprawdzę jeszcze jaki mam spadek napięcia na GND. 

Spadek napięcia na polygonie GND wynosi ok. 0,3mV. Zresztą skąd mogłoby się tam aż tyle wziąć (ok 100mV)?  

Edytowano przez rafal220
2 minuty temu, ethanak napisał:

Funkcja to esp_adc_cal_get_voltage

Tyle że tych funkcji nie m już w IDE Arduino xd.

Wpisałem display.println(esp_adc_cal_get_voltage(A4)); i sypie błąd, że nie widzi zmiennej. 

Czy ty naprawdę jesteś aż tak durny, że zamiast przeczytać jak się daną funkcję stosuje podstawiasz jakieś losowe parametry z czapy? Poza tym jak nie ma w Arduino IDE, nie wiem co masz na myśli ale możesz stosować wszystkie funkcje z esp-idf i FreeRTOS.

Przeczytałem kila stron forów i nigdzie takiej matematyki nie zalazłem po za tym co wkleił w linku @farmaceuta (tylko trochę inaczej przepisane ze strony oficjalnej) Nie mam pojęcia jak stosować te funkcje, i gdzie jest jakiś poradnik do tego odnośnie IDE Arduino. 

Zapamietaj jedno: oprócz znanych funkcji Arduino możesz stosować funkcje FreeRTOS i edp-idf. Odpowiednia dokumentacja znajduje się w odpowiednich miejscach, i nie jest nim dokumentacja Arduino. Wydrukuj to i powieś na ścianie tak żebyś zawsze widział.

A co do forów... czy jak potrzebujesz przepisu na forszmak dragomirowski szukasz w forach dla piekarzy i wypisujesz pierdoły że nie znalazłeś?

W tydzień raczej nie ogarnę zakresu ponad Arduino IDE, a urządzenie trzeba zrobić. Natomiast polecenie  "analogReadMillivolts" daje guzik lepszą jakość pomiaru. Tyle że nie musisz tego samodzielnie mapować. W tym przypadku mapowanie funkcją map daje nieco większe możliwości, bo wartość surową możesz przeliczyć na wartość która najlepiej Ci odpowiada do obliczeń. Natomiast przeliczanie jednej mapy "analogReadMillivolts" na inną do innego konkretnego obliczenia trochę mija się z celem. 

Rozumiem że mierzysz napięcia w zakresie liniowym przetwornika? Jaki kondensator zastosowałeś? Ta funkcja nie nadaje się do doładnych pomiarów, a na takie co się nadają nie masz czasu...

(edytowany)

Kondensator standardowo 100nF + rezystor odsprzęgający 10k. Z napięciem to sobie poradzę, bo ustalę pi razy drzwi współczynnik. Ponieważ urządzenie samochodowe, to napięcie zakładam 8-15V z obliczonym dzielnikiem na ok. 33V. Gorzej będzie z prądem, ale skoro wszystkie pomiary pracują na ADC1, to i odchyłka będzie jednakowa, tylko trzeba ją odpowiednio przeliczyć i dodać do mapy. Zresztą prądem to się zajmę jutro, bo jeszcze nie wiem co otrzymam na wyjściu z LM258. Z LM358 można praktycznie startować od 0V na -VSS. Z LM258 nie miałem większego doświadczenia. No tu z OA mogą wyjść jeszcze cyrki. Wstępnie napięcie niezrównoważenia dla 0V to tak sobie. Praktycznie niczego nie równoważy. Zobaczymy od jakiego progu zacznie działać. 🙂

Edytowano przez rafal220

Jeszcze nie jestem oblatany w tych wszystkich gadżetach pod Arduino. Tutaj rozchodziło się aby to upchnąć małej obudowy. Te LM258 ze wstępnych ustaleń zaczynają działać poprawnie przy ok 10mV dla 0V VSS. Nie jest źle. Mam dwa kanały prądowe. Jutro się tym pobawię. Będzie trochę zabawy, ale jak już ustalę współczynniki korekcji, to reszta poleci. Tutaj nie potrzeba mega dokładności. 

Rozumiem że jeśli coś działa z Arduino to jest gadżetem Arduino nawet jeśli równie dobrze zadziała z PLC? Przecież to jakiś idiotyzm jest...

(edytowany)

@ethanak Nie jest idiotyzmem, ponieważ niektóre gadżety (jak ja to zwykle nazywam), albo inaczej moduły rozszerzeniowe są spójne dla różnych struktur. Czy to RP, czy też PLC. Mowa o tym czy jest po prostu w ogóle kompatybilne.

A wracając do tematu ADC tych ESP, to dalsza zabawa nie ma sensu. Nie wiem co tam producent władował do korekcji, ale z tego co pokazują pomiary, to musiał wgrać całą tablicę do linearyzacji. Inaczej po prostu się nie da.

 Swoją drogą zrobiłem coś takiego;

//***********************************Inicjacja biblioteki wyświetlacza OLED SSD1315 (128x64)**********************************
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128  // Szerokość wyświetlacza OLED w pikselach
#define SCREEN_HEIGHT 64  // Wysokość wyświetlacza OLED w pikselach

#define OLED_RESET -1        // Bez pinu RST
#define SCREEN_ADDRESS 0x3C  // Adres wyświetlacza
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//****************************************************************************************************************

int napiecie;

void setup() {

  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);  // Uruchamianie OLED 128 x 64
  display.clearDisplay();
}

void loop() {

  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE, BLACK);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("");
  display.println(napiecie);
  display.display();


  funkcja_pomiarADC_AND_konwersja(10);
}

void funkcja_pomiarADC_AND_konwersja(int iloscProbek) {

  static int usrednionyPomiarNapiecia, korekjaNapiecia1, korekjaNapiecia, napiecieUsrednione = 0;
  static int i0 = 0;

  korekjaNapiecia1 = analogRead(A4);
  korekjaNapiecia1 = min(korekjaNapiecia1, 1300);
  korekjaNapiecia = analogRead(A4) + map(korekjaNapiecia1, 0, 1000, 0, 50);


  usrednionyPomiarNapiecia += korekjaNapiecia;
  i0++;

  if (i0 >= iloscProbek) {
    napiecieUsrednione = usrednionyPomiarNapiecia / iloscProbek;
    usrednionyPomiarNapiecia = 0;
    i0 = 0;
  }
  napiecie = map(napiecieUsrednione, 0, 4095, 0, 2840);  // Mapowanie na (mV)
}

Oczywiście spójność obserwowałem na wyświetlaczu OLED. Zasilanie tego z USB portu PC i obserwacja przez Serial.print z wiadomych powodów mija się z celem. 

Powiem tak; Działa to w zakresie błędu +/- 10mV do wartości ok 2600mV. Powyżej z oczywistych powodów przy wartości 2840mV pomiar odpływa na wartość ok 40mV. Czyli wartość którą dodaliśmy wcześniej korekcją. Nie chce mi się już z tym bawić, bo od wartości 2600 trzeba by wprowadzić tzw. ujemną korekcję tak aby przy 2840mV wartości z powrotem się zrównały. Tak czy inaczej pomiar z ADC mało tego że jest nieliniowy, to jeszcze sobie pływa od - do + przecinając miejscami ze wskazaniem multimetru. To żeby dobrze skalibrować, to trzeba by wprowadzić tablicowanie współczynnika korekcji minimum co 50mV. 

Edytowano przez rafal220

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...