18-12-2023, 21:38
(18-12-2023, 20:30)makuban napisał(a): Poniżej fragment kodu:
Kod:for(int i = 0; i <= 100; i++){ //pętla umożliwiająca ustawienie odpowiedniej pozycji
digitalWrite(3, HIGH); //stan wysoki
delayMicroseconds(1000); //czas trwania stanu wysokiego
digitalWrite(3, LOW); //stan niski
delayMicroseconds(19000); //czas trwania stanu niskiego
delay(10); //opóźnienie w celu spowolnienia ruchu
}
W jakim celu na końcu for-a jest to delay(10), przecież to się po prostu dodaje do poprzedniego delayMicroseconds i razem zamiast 20ms okresu masz 30, stąd wypełnienie jest mniejsze. Nie wiem czy serwa reagują na samą długość impulsu, czy na współczynnik wypełnienia. Na pewno na impulsy o istotnie innej częstotliwości mogą w ogóle nie zareagować.
Po drugie - te impulsu mają przychodzić cały czas, nie tylko w czasie zmiany pozycji. Serwo ciągle porównuje impulsy wejściowe z położeniem i dokonuje korekty jeśli coś się poruszy. Przypuszczam, że gdy brakuje impulsów silnik zostaje odłączony i nie ma aktywnego ustawiana pozycji.

