Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Automatyczne PWM
#44
Jeśli przyjmiemy że zmienna Napiecie jest odczytem z INP1 a Trzymaj to ustawiona przez nas napięcie które powinno być utrzymywane to w kodzie C możnaby to tak zapisać i działałoby bez zarzutu. i jest określone jako uint8_t. OCR1A określa wartość wypełnienia
Kod:
if (Napiecie > Trzymaj) {
                        if( 255 == i ) OCR1A=100;
                        else {
                        i++;
                    OCR1A=i;
                        if( 255 == i ) i--;
                        }
                }
                if (Napiecie < Trzymaj) {
                        if( 0 == i ) OCR1A=0;
                        else {
                        i--;
                    OCR1A=i;
                        }
                }

                if (Napiecie == Trzymaj) {
                 OCR1A=OCR1A;  //nie rób nic
                }

ten kod można oczywiście rozbudować jeszcze o przedziały. Że jeżeli napięcie jedno od drugiego jest dużo większe to szybszy skok itp.
Tak to zrobiłem na AVR Atmega8 i działa ładnie.
Zrobiłem też dzielnik częstotliwości żeby zmniejszyć z 2553Hz na dowolną inną częstotliwość PWM - po testach na stykówce robię teraz podejście do solarów Smile i próba w terenie.
<t></t>
Odpowiedz


Wiadomości w tym wątku

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości