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

    • Ja wyłączałem przyciskiem, ale nie powinno przecież tak się dziać chyba? Po prostu włączyłem test i chciałem odejść na dłużej od kompa, więc wyłączyłem monitor przyciskiem. Wracam po pewnym czasie, a tu CBR23 zawieszony. Z innymi programami do testowania stabilności jak np y-cruncher, czy memtest nie ma takich problemów przy wyłączonym monitorze. Może to jednak taka przypadłość tego programu? Przy włączonym monitorze jest wszystko ok. DDC wyłączyłem na próbę, ale to nic nie dało.
    • Do kuców to w ogóle słowa krytyczne odnośnie ich idoli czy nawet partii, z którą się teraz utożsamiają, bo oni gadają po POPiS czy jak ta Unia jest złem i trzeba wyjść z UE najlepiej jeszcze następnego dnia nie docierają . Zresztą to nie tylko kuców dotyczy, takim samym zachowaniem praktycznie również wykazują ci w elektoracie PiS-u. Kuce jak to kuce, ale w Konfie coraz śmielej zaczynają również tam odzywać z nie wiadomo do końca jakich powodów kobiety. Patrząc na taką Bryłkę, Zajączkowską, Pikułę, Domagałę, Czech i wiele wiele tych kobiet w Konfie odnoszę takie wrażenie, że są ładne, ale jednocześnie są głupie tak jak niektóre kobiety w Lewicy pokroju Żukowskiej.
    • Niektórzy nie zdają sobie sprawy jak Polska gospodarka jest mocno zależna od Unii i to najlepiej silnej Unii. Wystarczy małe rozwolnienie u Niemców i zaraz dostajemy rykoszetem. "Dane GUS wskazały, że nowe zamówienia w przemyśle Polski spadły w marcu o -22% w ujęciu rocznym." https://www.parkiet.com/waluty/art40234551-fatalne-dane-z-polskiego-przemyslu-ciaza-zlotemu
    • Przewidział, oczywiście że tak. Dalem jedynie przykład, że to co deweloper daje w standardzie nie znaczy, że wystarczy do tego jak chce mieć urządzony dom. Samych punktów świetlnych w części kuchennej mam kilka, o różnym przeznaczeniu. Co zazwyczaj dają w standardzie to oświetlenie ogólne, jedno, dwa nadblatowe robocze i tyle. Ja mam podzielone na sekcje i na kilku wyłącznikach. Mogę dowolnie włączać sekcje nie odpalając nadmiarowej ilości światła. Podobnie część salonowa.  Same dodatkowe przełączniki rolet to 4 punkty Tak Ci się wydaje że mało dali że aż tyle "dorabiam", ale robiąc dodatkowy wypust świetlny + włączniki w różnych miejscach salonu dochodzi tych punktów. Podobnie schowane gniazdka w np szufladach łazienkowych żebyś na blacie nie miał np golarki czy szczoteczki ładującej się.  Gniazdka zewnętrzne, balkonowe, ogrodowe, żebym np robiąc ozdoby świąteczne nie musiał ciągnąć listew. Deweloper daje tyle ile w sztuce się przewiduje czyli pewnie stara szkoła gniazdko co 2-3m i po dwa punkty świetlne na pomieszczenie.  I to by zgadzało się z tym co w oryginalnym projekcie było.  Kupując te mieszkanie w którym mieszkam podobnie kalkulacja wychodziła patrząc na metraż/gniazdka/światło.
    • @MarioDee czy podczas uruchomionego testu CB R23 to Ty wyłączasz monitor przyciskiem na monitorze czy monitor sam się wyłącza po pewnym czasie?
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...