Skocz do zawartości

PWM o częstotliwość 50 Hz (czyli PWM powinien mieć częstotliwość 50 Hz (czyli okres 20 ms), a wypełnienie mieścić się w


robo1973

Pomocna odpowiedź

Witam !!

Prosiłbym o pomoc

Potrzebuję wygenerować PWM modelarskiego - okres 20 ms, a wypełnienie mieścić się w zakresie od 1 do 2 ms np >2 ms

Znalazłem coś takiego

const int PWM_CHANNEL = 0;    // ESP32 has 16 channels which can generate 16 independent waveforms
const int PWM_FREQ = 500;     // Recall that Arduino Uno is ~490 Hz. Official ESP32 example uses 5,000Hz
const int PWM_RESOLUTION = 8; // We'll use same resolution as Uno (8 bits, 0-255) but ESP32 can go up to 16 bits 

// The max duty cycle value based on PWM resolution (will be 255 if resolution is 8 bits)
const int MAX_DUTY_CYCLE = (int)(pow(2, PWM_RESOLUTION) - 1); 

const int LED_OUTPUT_PIN = 33;

const int DELAY_MS = 4;  // delay between fade increments

void setup() {
  
  Serial.begin(115200);

  // Sets up a channel (0-15), a PWM duty cycle frequency, and a PWM resolution (1 - 16 bits) 
  // ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits);
  ledcSetup(PWM_CHANNEL, PWM_FREQ, PWM_RESOLUTION);

  // ledcAttachPin(uint8_t pin, uint8_t channel);
  ledcAttachPin(LED_OUTPUT_PIN, PWM_CHANNEL);
  Serial.println("OK" );
}
void loop() {

  // fade up PWM on given channel
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
  for(int dutyCycle = 0; dutyCycle <= MAX_DUTY_CYCLE; dutyCycle++){ 
  ledcWrite(PWM_CHANNEL, dutyCycle);
  delay(DELAY_MS);
  }
}

Czy możecie mi pomóc z konfiguracją  ? na (WT32)

Dziękuje i pozdrawiam !!

Edytowano przez robo1973
Link do komentarza
Share on other sites

@robo1973 ten kod wygeneruje zwykły "symetryczny" PWM...ty potrzebujesz jeszcze tej pauzy ~18ms...a szukałeś jakichś bibliotek?? Napewno już coś takiego jest, i powiedz jeszcze do czego Ci taki PWM, nie możesz użyć standardowej biblioteki 'servo' ? 

Link do komentarza
Share on other sites


#include <ESP32Servo.h>

#define przycisk 2
 
Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa 
int pozycja = 0; //Aktualna pozycja serwa 0-180
int zmiana = 20; //Co ile ma się zmieniać pozycja serwa?

void setup() 
{ 
  pinMode(przycisk,INPUT_PULLUP);
  serwomechanizm.attach(33);  //Serwomechanizm podłączony do pinu 9
}  
void loop() 
{ 

  if (pozycja < 180) { //Jeśli pozycja mieści się w zakresie
  serwomechanizm.write(pozycja); //Wykonaj ruch
 } else { //Jeśli nie, to powrót na początek
   pozycja = 0;
  }    
  
  pozycja = pozycja + zmiana; //Zwiększenie aktualnej pozycji serwa
  delay(200); //Opóźnienie dla lepszego efektu                        
}

standardowa to kręci chyba do 180 st

Ja potrzebuję 0-360 st

mam taki serwosilnik https://allegro.pl/oferta/serwo-robota-enkodera-360-stopni-wysoka-moc-stabilne-serwo-z-ok-17046845010?reco_id=2cb7e007-ee10-11ef-a166-7e63178ec10b&sid=f8bddad5d737919e6c726c989b66bdbe96499e13bc806f55bd0c404f69ac7020

i chcę posterować

 

Link do komentarza
Share on other sites

Symetryczny to jest przebieg o wypełnieniu 50%, każdy inny jest niesymetryczny.

@robo1973 swój program musisz dostosować do założeń, które sam podałeś:

Okres 20ms, czyli jaka to będzie częstotliwość? (PWM_FREQ),

Impuls ma trwać 1 do 2 ms. Jakiemu wypełnieniu to odpowiada? Jak to obliczysz, to ustaw  odpowiednio granicę pętli for.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@robo1973 ale tam w aukcji jest coś o tym że dla trybu 360° potrzebujesz na wejście analogowe podawać napięcie z zakresu 0-5v, ja bym jeszcze spróbował odpalić normalny PWM a esp32 o częstotliwości ~250Hz tak żeby mieć zakres 0-4ms, może to przejdzie...nic więcej nie doradzę bo nie korzystałem z takich wynalazków jak zakres 0-360°, a jedynie wiem że można zwykle serwo przerobić na obrotowe...

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.