Skocz do zawartości

Pomocna odpowiedź

9 minut temu, galik19871987 napisał:

Tak właśnie o to mi chodzi że np. powyzej 53 v był złamany a poniżej otwarty. 53v mam w spoczynku magazyn po pełnym naładowaniu.

Nawet 52.5 mogło by byc

A to takie coś to bajka...nie będzie chyba żadnych przeróbek w kodzie nawet tylko pomiar napięcia na adc i jedna funkcja która będzie blokowac obecną funkcje od siłownika...jutro coś Co skrobne...ten wyświetlacz chcesz drugi??? No może by zastosować takie odrazu do pomiaru napięcia, wiesz o co chodzi...podpinasz dwa kable do Aku i masz napięcie, żeby wizualnie było widać 

(edytowany)

@galik19871987 wraz ze wzrostem napięcia na magazynie spadają ampery??? W sensie czy np przy 51v prądnica dalej jest w stanie osiągnąć moc nominalną przy odpowiednich obrotach??

Edytowano przez farmaceuta

Zawsze tak jest jak napięcie rośnie ampery spadają. Ale to dzieje się wszystko w ułamkach sekundy. Tak mppt działa. Wiatraki tak mają, wszystko w ułamku sekundy bo wiatr nie jest nawet przez sekundę taki sam. Na razie więcej to przerabiam niż testuje 🙂 ciągle coś ulepszam, dużo czasu to pochłania.

Tak mogę dołożyć drugi podwójny wyświetlacz, taki sam może być. 

Na jednym napięcie ako może być, a na tym obok zakres do ustawienia. 

Tylko co musiałbym dokupić? 

Przed chwilą, galik19871987 napisał:

Nie musi być 🙂 52.5 v to git. Minimalnie mniej od naładowanego. Wtedy może się ogon prostować jak spadnie poniżej tego. Tylko czym mierzyć ? Jakieś specjalne coś do Arduino?

Do Arduino to się da dzielnik z rezystorów (dwie sztuki) cena może zawrotne 50gr? No i jakieś kabelki...ale to poczekaj...napięcie jest dosyć wysokie, może są jakieś układy do takich pomiarów, zaraz się rozpytam...

I żeby ta funkcja wyłączała pierwszą funkcje,żeby się nie gryzło. No i że jak się prostuje czyli napięcie spadnie poniżej 52.5 v to żeby pierwszą funkcje jednocześnie aktywował spowrotem🙂

8 minut temu, galik19871987 napisał:

I żeby ta funkcja wyłączała pierwszą funkcje,żeby się nie gryzło. No i że jak się prostuje czyli napięcie spadnie poniżej 52.5 v to żeby pierwszą funkcje jednocześnie aktywował spowrotem🙂

No dokładnie tak to zrobimy 🤪 bliżej jutra coś ogarnę 

  • Lubię! 1

Na spokojnie,muszę sobie przypomnieć jak to robiłem na kompie 😛 bo wszystko zapomniałem. Wiatrak leży na ziemi zasypany śniegiem, czekam na lepsze dni żeby go podnieść bo to logistycznie skomplikowane takie 100 kg na maszcie 7 m podnieść. 

1 minutę temu, galik19871987 napisał:

Na spokojnie,muszę sobie przypomnieć jak to robiłem na kompie 😛 bo wszystko zapomniałem. Wiatrak leży na ziemi zasypany śniegiem, czekam na lepsze dni żeby go podnieść bo to logistycznie skomplikowane takie 100 kg na maszcie 7 m podnieść. 

A no jasne że nie łatwa sprawa...paru chłopów trzeba 😅 i dużo uwagi...na kompie to pójdzie jak po maśle bo masz już wszystko zainstalowane więc tylko kabel podłączyć kliknąć i się wgra 

Tak. To była dopiero jedna faza zrobiona. Drut 1.3 mm max 10 A na faze. Więc przy 3 fazach 30 A max obciążenia,więcej grozi szybka awarią, a że mam system 48v to do 1500 mogę max go kręcić. Przy wysoko napięciowym regulatorze kilka kw dało by radę wycisnać, ale to już inna bajka...ogromne łopaty i fundamenty,maszt inny. może kiedyś jak już to wszystko dopracuje to będę robił modernizację 🙂

  • 3 tygodnie później...

@galik19871987  

#include <TM1638plus.h>


#define  STROBE_TM 2
#define  CLOCK_TM 3
#define  DIO_TM 4
#define  ADC_PIN A1
#define  Rz1 500000
#define  Rz2 15000


bool high_freq = false;


int MIN = 100;
int MAX = 300;
int TIME_UP = 5;
int TIME_DOWN = 5;
int PIN_HALL = 12;
int CLEN_OBR = 15;
int R1 = 6;
int R2 = 7;
int MAX_OBR = 20;
int MIN_OBR = 50;


int stan = 0;
int stan1 = 0;
int stan2 = 0;
int stan3 = 0;
int stan4 = 0;
int stan5 = 0;
int stan6 = 0;
int stan7 = 0;

int obr_pot;
int obr;
int kopia_obr_nastawa;
int kopia_obr;
int obr_nastawa;

long time_obr;
long time_zero;
long last_up;
long last_down;

float Vin;

TM1638plus tm(STROBE_TM, CLOCK_TM , DIO_TM, high_freq);


void setup() {
  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(PIN_HALL, INPUT_PULLUP);

  tm.displayBegin();
}

void loop() {
  obr_nastawa = map(analogRead(A0), 0, 1023, MIN, MAX);

  pomiar();

  if (Vin >= 52.5) {
    silownik_up();
  } else {
    sterowanie_silownik();
  }



  if (digitalRead(PIN_HALL) == HIGH && stan == 0) {
    stan = 1;
    time_obr = millis();
    time_zero = millis();
    delay(30);
  } else if (digitalRead(PIN_HALL) == LOW && stan == 1) {
    stan = 2;
    time_zero = millis();
  } else if (digitalRead(PIN_HALL) == HIGH && stan == 2) {
    stan = 0;
    obr = 60000 / (millis() - time_obr);
    time_zero = millis();
  }

  if (millis() - time_zero >= (CLEN_OBR * 1000) && stan7 == 1) {
    stan7 = 0;
    obr = 0;
    time_zero = millis();
  }

  lcd();

}


void lcd() {
  if (obr != kopia_obr || obr_nastawa != kopia_obr_nastawa) {
    kopia_obr = obr;
    kopia_obr_nastawa = obr_nastawa;
    tm.reset();
    tm.DisplayDecNumNibble(obr, obr_nastawa, false, TMAlignTextRight); // "  43" " 991" , right aligned, NO leading zeros
  }
}


void sterowanie_silownik() {

  if (obr > (obr_nastawa + MAX_OBR) && stan1 == 0) {
    last_up = millis();
    stan1 = 1;
  } else if (obr > (obr_nastawa + MAX_OBR)) {
    stan2 = 1;
  } else {
    stan2 = 0;
    stan1 = 0;
  }

  if (millis() - last_up >= (TIME_UP * 1000) && stan2 == 1) {
    silownik_up();
    stan5 = 1;
    stan6 = 0;
  } else if (stan5 == 1) {
    silownik_stop();
    stan5 = 0;
  }



  if (obr < (obr_nastawa - MIN_OBR) && stan3 == 0) {
    last_down = millis();
    stan3 = 1;
  } else if (obr < (obr_nastawa - MIN_OBR)) {
    stan4 = 1;
  } else {
    stan4 = 0;
    stan3 = 0;
  }

  if (millis() - last_down >= (TIME_DOWN * 1000) && stan4 == 1) {
    silownik_down();
    stan5 = 0;
    stan6 = 1;
  } else if (stan6 == 1) {
    silownik_stop();
    stan6 = 0;
  }





}


void silownik_up() {
  digitalWrite(R1, HIGH);
  digitalWrite(R2, LOW);
}

void silownik_down() {
  digitalWrite(R1, LOW);
  digitalWrite(R2, HIGH);

}

void silownik_stop() {
  digitalWrite(R1, LOW);
  digitalWrite(R2, LOW);
}

void pomiar () {

  // Odczyt surowej wartości z ADC (0-1023)
  int rawADC = analogRead(ADC_PIN);

  // Przeliczenie na napięcie na pinie Arduino (standardowo 5V)
  float vOut = (rawADC * 5.0) / 1023.0;

  // Przeliczenie przez dzielnik na napięcie wejściowe
  // Wzór: Vin = Vout * (R1 + R2) / R2
  Vin = vOut * ((R1 + R2) / R2);

}

powinno dzialac...

ponizej schemat dzielnika jak to masz podlaczyc...kondensator nie jest krytyczny...moze miec i 1uF

TUR.thumb.jpg.d510123490efec738aca0c62f8379a2f.jpg

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...