Arduino Polska Forum
Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Konstrukcje (https://forum.arduinopolska.pl/dzial-konstrukcje)
+--- Wątek: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY (/watek-utrzymywanie-zadanych-obrot%C3%B3w-silnika-spalinowego-w-agregacie-pr%C4%85dotw%C3%B3rczym-diy)

Strony: 1 2 3 4


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - Jarewa0606 - 29-03-2020

Jak 3R to czujnik optyczny w rozdzielaczu WN wtedy sygnał z cewki był by w sam raz... Z czym sobie tam nie poradziłeś? przecież sygnałowy to impulsy z tym że tam napięcie 14V ale to nie problem...


" funkcji interrupt." nie będziesz wiedział które zbocze wywołało przerwanie ja nadal jestem za ICP...


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - fast_rabbit - 30-03-2020

(28-03-2020, 14:48)dankal666 napisał(a): Gdyby silnik reagował szybciej na obciążenie i nie dopuszczał do zbytnich spadków obrotów nie będzie problemu.
Jak chcesz reagować szybciej gdy używając nieprecyzyjnego pulsein uśredniasz wyniki?


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - Agregacik - 30-03-2020

@fast_rabbit autor już wie, że pulsein nie nadaje się do tego celu i poszukuje innego sposobu pomiaru obrotów a właściwie czasu najlepiej jednego obrotu. Czy możesz coś zaproponować?


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - elvis - 30-03-2020

Proponuję powrót do porad z początku wątku i tego co napisał kolega @kaczkat, czyli poczytać o PID. Pomiar jest oczywiście ważny, ale już samo mierzenie szerokości impulsu jest błędne, więc poprawianie i tak niewiele pomoże.
Użycie PID to znacznie ważniejsza zmiana. W końcu przy 3000obr/min mamy 50 impulsów na sekundę, układ nie musi reagować już po 1/50sekundy, nawet chyba nie powinien bo mechanika może tego nie wytrzymać. Więc mając dane z pulseIn, prosty filtr i PID powinno się udać uzyskać to o co w temacie chodzi.


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - dankal666 - 30-03-2020

Bardzo dziękuję za odzew,
dzisiaj zacząłem od odczytu kroków serwa w mikrosekundach i przerobiłem servo.write na writeMicroseconds. Efektem tego jest zdecydowanie gładsza praca serwa i trochę dokładniejsze dozowanie 'gazu'. Niestety zauważyłem również, że przy stałym obciążeniu obroty delikatnie falują od zadanych niskich do zadanych wysokich i tak w kółko. Serwo nie jest w stanie na tyle precyzyjnie ustawić pozycji przepustnicy, żeby obroty dłużej utrzymywały się na tym samym poziomie. Zastanawiam się nad dodatkową przekładnią między serwem, a przepustnicą. Może zamontowanie długiego ramienia na osi przepustnicy i serwa przy jego końcu rozwiązałoby sprawę. Dodatkowo pozmieniałem wartości warunków i efekt tego jest taki, że całość przestała się 'wywalać' ze względu na zbyt duże wahania obrotów i restart avrek.
Teraz chciałbym zająć się przede wszystkim ewentualną implementacją PID, żeby dodatkowo usprawnić to co jest, a dopiero później zmieniać rodzaj pomiaru na szybszy. Mój odczyt przy 25 próbkach zajmuje dokładnie 0,64 sekundy. Wydaje mi się, że od biedy może wystarczyć, oczywiście tylko na czas dopracowania czegoś lepszego. Jutro w wolnej chwili postaram się coś sklecić i wkleić tutaj, mam nadzieję, że Pomożecie Smile


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - dankal666 - 31-03-2020

Input = srednia; // czy mogę tak zrobić?

double gap = abs(Setpoint-Input); //distance away from setpoint
if(gap<10)
{ //we're close to setpoint, use conservative tuning parameters
myPID.SetTunings(consKp, consKi, consKd);
}
else
{
//we're far from setpoint, use aggressive tuning parameters
myPID.SetTunings(aggKp, aggKi, aggKd);
}

myPID.Compute();
// analogWrite(3,Output); w przykładzie funckcja steruje wyjściem analogowym

serwo.writeMicroseconds(Output); // Ja potrzebuję żeby output przyjmowało wartości od 544 (pozycja 0 serwa) do ok 1000 mikrosekund ( dalej jeszcze serwa nie ruszałem)
// Czy najpierw zamienić output na mikrosekundy?


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - dankal666 - 31-03-2020

Wpisałem setpoint 920, gdzie ta wartość odpowiada ok 50Hz. W przykładzie jest 100, zakres 0-255.
Jakie wartości przyjmuje zmienna output? Zakładam , że wpisując w setpoint i input wartości długości impulsu, output też będzie w długości fali, czy ma Ktoś może pomysł jak to zamienić na mikrosekundy?


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - Jarewa0606 - 31-03-2020

Szkoda ze ci nie powiedzieli że regulator PID w twoim przypadku może być za wolny. On nadaje się tylko do regulacji temperatury itp. gdzie nie jest wymagana szybkość..

W robotyce stosuje się regulatory PD proporcjonalno - różniczkujący, człon całkujący jest wolny....


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - dankal666 - 31-03-2020

Może jednak w ramach nauki najpierw spróbuję z PIDem. Masz może pomysł jak to napisać, żeby output skonwertować do mikrosekund?


RE: Utrzymywanie zadanych obrotów silnika spalinowego w agregacie prądotwórczym DIY - Robson Kerman - 31-03-2020

Jarewa0606 -->
W regulatorze PID, jak ustawisz I na zero, to masz PD, więc w czym problem?
To jest bardzo uniwersalna technologia i możesz się zdziwić jak szybko to działa.