Jedno servo jede a druhe ne - proc ?

Odpovědět
Vladimir66
Příspěvky: 383
Registrován: 02 dub 2014, 15:30

Jedno servo jede a druhe ne - proc ?

Příspěvek od Vladimir66 »

Ahoj,

vzhledem k tomu, ze pouze potrebuji otocit servem o 180stupnu, zdalo se mi zbytecne kvuli tomu linkovat do Arduina knihovnu. - (nechci pouzit
Timer1)
tak jsem pouzil tuto funkci.
se servem Vigor to slape, ale s SG90 ani tuk.. (s knihovnou Servo.h mi SG90 funguje)
nejake napady na zmenu parametru ?
pripadne poradit, jak odlehcit/zmensit knihovnu servo.h , aby fungovalo jen jedno servo sem-tam bez zadnych dalsich pridavnych features.

Kód: Vybrat vše


int servoPin = 9;

void SERVOUP()
{
int pos = 400;
int inc = 60; 
int servopos;
do {
  pos += inc;
  digitalWrite(servoPin, HIGH); 
   delayMicroseconds(pos);
  digitalWrite(servoPin, LOW);
  delay(20);
  }
  while(pos < 2100);
  delay(400); 

}



Naposledy upravil(a) Vladimir66 dne 06 kvě 2018, 15:08, celkem upraveno 1 x.
Uživatelský avatar
gilhad
Příspěvky: 262
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: Jedno servo jede a druhe ne - proc ?

Příspěvek od gilhad »

Pokud vim, tak serva se ridi prez PWM s konstantni frekvenci, tady potrebujes 50Hz a tu frekvenci dodrzet, jen menit rozsah te jednicky od 1 do 2 ms
http://akizukidenshi.com/download/ds/towerpro/SG90.pdf

takze o co je "pos" delsi, o to musi byt nasledna nula kratsi
https://www.arduino.cc/reference/en/lan ... roseconds/
Currently, the largest value that will produce an accurate delay is 16383

cili delayMicroseconds jde pouzit maximalne na 16 ms, zbytek musi jit prez klasicky delay (nebo jeste lepe prez klasicke odecitani milis a porovnani s intervalem, pokud by mely vypocty uvnitr trvat nezanedbatelnou dobu, nebo bys pri tom chtel delat neco jineho)

Kód: Vybrat vše

do {
  pos += inc;
  digitalWrite(servoPin, HIGH); 
   delayMicroseconds(pos);
  digitalWrite(servoPin, LOW);
  delayMicroseconds(3000-pos);  // maximalne (16000-pos) v extermnim pripade
  delay(17); // dopocet do 20 ms (20-3=17; 20-16=4 v exremnim pripade)
  } while(pos < 2100); // pos < 2100 us, cili 2.1ms proto nam staci dopocet do 3000us a cekat 17ms
Vladimir66
Příspěvky: 383
Registrován: 02 dub 2014, 15:30

Re: Jedno servo jede a druhe ne - proc ?

Příspěvek od Vladimir66 »

teorie je jasná.. dík

Tak jsem to vyresil.
trochu jsem si upravil tento kod.
http://privateblog.info/prostoj-sposob- ... odom-sg90/
jo " Maladcí, to jsou hekři " :)

ale, ze to servo SG90 je ale zmlsane.
-V66
Odpovědět