Skocz do zawartości
sewek10

problem w programie Arduino

Rekomendowane odpowiedzi

Witam, robię sobie projekt, jest to moduł mechanicznej modulacji światła na arduino, steruję wentylatorem 4 pinowym za pomocą pwm zmienionego na 30kHz, do tego mam czujnik szczelinowy który zlicza prędkość, potencjometry do regulacji wypełnienia PWM oraz lcd który pokazuje aktualna prędkość. Problem polega na tym, że wszystko ładnie działa, ale tylko wtedy kiedy pwm jest 100%. Pokazuje wtedy prędkosc 2200 rpm a jak zahamuje wentylator palcem to stopniowo maleje. Gdy zmniejsze wypełnienie pozniej 100% to nagle skacze z 2200 na 3800 a nastepnie stopniowo spada wraz ze mniejszaniem wypełnienia, jednak te wartosci skacza w zakresie 100rpm wiec to i tak jakies bzdury. Dodam, że jak ustawie wartosc PWM na sztywno to dzieje się to samo. Juz nie wiem co to moze byc, Timer 1 zlicza predkosc a timer 2 przestawia PWM na 30kHz. Prosze o pomoc

 

#include <LiquidCrystal_I2C.h>
#include "TimerOne.h"
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
const byte SpeedSensor = 2;
volatile unsigned int counter = 0;
volatile unsigned int counterStan = 0;
float diskslots = 6;
float Speed = 0;

int timeToWait = 1000; //Czas, który ma czekać
int setTime=0;               
int aktualTime=0;
int done;

int odczytanaWartosc = 0;
void ISR_count()
{
 counter++;
}

void ISR_timerone()
{
 Timer1.detachInterrupt();
 counterStan = counter;
 Speed = (counter / diskslots) * 60.00;
 counter = 0;
 Timer1.attachInterrupt( ISR_timerone );
}
void setup() {

  TCCR2B = TCCR2B & B11111000 | B00000001; // Set PWM for D3 & D11
   pinMode(3, OUTPUT); // Sets the pin as output

 Timer1.initialize(1000000);
 attachInterrupt(digitalPinToInterrupt (2), ISR_count, RISING);
 Timer1.attachInterrupt( ISR_timerone);

 lcd.init();
 lcd.backlight(); 

}

void loop() {

lcd.clear();

 setTime = millis();
 done=1; 
 while(done){  //Wykonuje się tak długo aż upłynie 1s i wykona się reszta kodu
   aktualTime = millis();
   if (aktualTime < setTime+timeToWait){
 lcd.setCursor(0,0);
 lcd.print("Frequence: ");
 lcd.print(counterStan);
 lcd.setCursor(0,1);
 lcd.print("RPM: ");
 lcd.print(Speed);
}
else
 {   
   odczytanaWartosc = analogRead(A3);
   analogWrite( 3,(odczytanaWartosc/4));
   done=0;
   }
}
}

 

4189131600_1573848755.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czy counterStan dobrze wyświetla, czy też jest przekłamanie?

 

Nie znam się na Arduino i innych sprzętowych sprawach ale może coś z zegarem jest nie tak i przy zmniejszaniu wypełniania np. zaczyna wolniej chodzić? :hmm:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja bym zaczal od dania Speed jako volatile, bo w petli sie ono nigdzie nie zmienia i kompilator nie ma powodu odczytywac Speed z RAMu. Albo jeszcze lepiej, przenies obliczanie Speed do loop(). Zastanawiam sie po co przestawiales PWM na 30 kHz? Czy standardowe 490 HZ nie bylo by OK? Tak jak pytał przedmowca jakie wartosci counterStan pokazuje? Sprawdziles czy LiquidCrystal_I2C nie uzywa Timer2, ewentualnei jakos w niego ingeruje? Lub w timer1, uzywany przez twoje przerwanie? Sprawdzales jak sie zmienia napiecie na silniku wraz ze zmiana ustawien? Czy przy większej predkosci kartonik nie odkształca się tak, ze sensor nie lapie wszystkich otworow? Skoro to wentylaor 4 pin, to nie ma on wbudowanego sensora obrotow?

Edytka:

Jeszcze zmien aktualTime i setTime na long unsigned, mozesz tez dla pewnosci timeToWait zmienić, bo nie wiem jak kompilator skonwertuje sume tych dwoch. Oczywiscie wiesz, ze nadal bedziesz mial przepelnienie po 50 dniach i przez sekunde petla while nie podziala prawidlowo (dwrotnie zadziala warunek if).

Edytowane przez mkopek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

  • Tematy

  • Odpowiedzi

    • Trudne się wylosowało... Monitorów z tunerem jest jak na lekartwo a szybszych niz 60hz tym bardziej. Nie ma mowy też o oledzie ani miniledzie z tunerem chyba że chodzi o telewizor to już prędzej coś znajdziesz.  Nie podałeś specyfikacji swojego komputera to też niezbyt można powiedzieć czy poradzi sobie z monitorem 4k np. (Samsung monitor m7 i m8) mają smart tv ale tunera już nie mają... Dodatkowo są na matrycy VA co nie każdemu może przypaść do gustu. Najlepszym rozwiązaniem będzie kupno możliwie najlepszego monitora na miniledzie/oled (jeżeli nadal mówimy o budżecie 4000zł) i jakiegoś smartboxa (googletv) z tunerem i podłączenie go do monitora poprzez HDMI.
    • Witam Proszę o ocenę zestawu do grania w 1440p i ewentualne propozycje zmian, chciałabym żeby wszystko zamknęło się w 7tys. Preferuję połączenie Intel/Nvidia, najlepiej jak najmniej RGB, dyski już posiadam (2 SSD Sata). Procesor i5 14600KF Karta Gigabyte GeForce RTX 4070 Super Windforce OC 12GB Płyta główna MSI B760 Gaming Plus WIFI lub MSI MAG B760 Tomahawk WIFI (wcześniej rozważałam również Gigabyte B760 Gaming X AX) Zasilacz Seasonic Focus GX - 750W Lexar Ares RGB 32GB 6400MHz CL32 Obudowa Genesis Irid 505F Z chłodzeniem mam problem, ponieważ chciałam zakupić Deepcool'a AK620, jednak nie jest dostępny w sklepie komputronika (sklep wybrałam ze względu możliwości odbioru komputera w moim mieście). Niestety ten ma dość ograniczony wybór chłodzeń. Tak samo jak widać mocno zastanawiam się nad płytą główną, jestem otwarta na propozycje.
    • https://www.rtings.com/monitor/learn/research/vrr-flicker  
    • Ja czego nie rozumiem? No ja rozumiem jaka jest różnica pomiędzy odbiornikiem prądu a generatorem. Z tego co widzę hybrydy się zgłasza. Czy Ci się to podoba czy nie. To nie jest offgrid.  Tak samo jak magazyn energii. Mimo iż ludzie używają je wewnątrz domu, to muszą być zgłaszane.  To że chińczyk mówi, że falownik nie wysyła nadmiaru energii poza sieć nie ma żadnego znaczenia jeśli podepniesz to do sieci.  Czy na rondo nie ma liczników? Na enmasz umowy tam z energetyka? Nie da się zamontować normalnej instalacji? Co powiedział Ci dostawca prądu? Jeśli sąsiada z działki wywali choćby radio na drugi tydzień po montażu Twojego lewego PV, to spodziewaj się problemów.  Jak udowodnił aż że Twój chiński szajs jest przekozak wówczas? Będziesz miał na to jakieś papiery?  Ze specyfiki pracy jaką oczekujesz. Ta sama zasada działania Cię interesuje. Będziesz szukał paneli gruntowych? A czym różnią się takie od paneli dachowych albo balkonowych? Zestaw balkonowy to jest to co szukać powinieneś. Bo zestawów RODo nie robi a raczej?  Zacznijmy od tego, że zacząłeś od złej strony, bo zamiast falownika i budowania hybrydy, podpina się takie rzeczy prosto w panele. Pompa na prąd stały o szerokim napięciu działania pyrka sobie jak ma napięcie i tyle. 
    • 40 powinno na górkę styknąć. I to na luzie jako dodatkowe.  Ewentualnie powinieneś pomyśleć nad jakimiś listwami przypodlogowymi z systemem dowolnego dodawania gniazdek.
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...