Jedno servo jede a druhe ne - proc ?

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

Jedno servo jede a druhe ne - proc ?

Příspěvek od Vladimir66 » 06 kvě 2018, 09:56

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: 165
Registrován: 29 kvě 2015, 00:36

Re: Jedno servo jede a druhe ne - proc ?

Příspěvek od gilhad » 06 kvě 2018, 14:12

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: 262
Registrován: 02 dub 2014, 15:30

Re: Jedno servo jede a druhe ne - proc ?

Příspěvek od Vladimir66 » 06 kvě 2018, 14:14

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů