Liczba postów: 884
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
43
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...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 356
Liczba wątków: 5
Dołączył: Aug 2019
Reputacja:
28
30-03-2020, 08:40
(Ten post był ostatnio modyfikowany: 30-03-2020, 08:44 przez Agregacik.)
@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ć?
Liczba postów: 210
Liczba wątków: 2
Dołączył: Sep 2019
Reputacja:
13
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.
Liczba postów: 16
Liczba wątków: 1
Dołączył: Jun 2019
Reputacja:
0
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?
Liczba postów: 16
Liczba wątków: 1
Dołączył: Jun 2019
Reputacja:
0
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?
Liczba postów: 884
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
43
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....
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 16
Liczba wątków: 1
Dołączył: Jun 2019
Reputacja:
0
Może jednak w ramach nauki najpierw spróbuję z PIDem. Masz może pomysł jak to napisać, żeby output skonwertować do mikrosekund?
Liczba postów: 654
Liczba wątków: 3
Dołączył: Apr 2017
Reputacja:
51
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.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.