Управление сервоприводом черех ШИМ

hitmax
Offline
Зарегистрирован: 02.07.2017

Доброго времени суток! Помогите разобраться в чём ошибка, отправляю на серву сигнал 1600 микросекунд, с частотой 50гц(20мс), использую ардуино уно. В итоге сервы дергаются, смотрел через осцилограф, вроде все верно, питание подглючено всё правильно - проверял, импульс подавал через генератор, всё гуд. Вот код:

int outPin1 = 7;

// microseconds
int test_impulse = 1600;
int cycle = 20000; // 50Hz


void setup() 
{
  pinMode(outPin1, OUTPUT); 
}


void loop() 
{
  digitalWrite(outPin1, HIGH);
  delayMicroseconds(test_impulse); // 1600
  digitalWrite(outPin1, LOW);

  delayMicroseconds(cycle - test_impulse);  // 20000 - 1600
}

 

GAMON
Offline
Зарегистрирован: 03.07.2017

hitmax пишет:

Доброго времени суток! Помогите разобраться в чём ошибка, отправляю на серву сигнал 1600 микросекунд, с частотой 50гц(20мс), использую ардуино уно. В итоге сервы дергаются, смотрел через осцилограф, вроде все верно, питание подглючено всё правильно - проверял, импульс подавал через генератор, всё гуд. Вот код:

int outPin1 = 7;

// microseconds
int test_impulse = 1600;
int cycle = 20000; // 50Hz


void setup() 
{
  pinMode(outPin1, OUTPUT); 
}

У вас джиттер - фронты дрожжат
void loop() 
{
  digitalWrite(outPin1, HIGH);
  delayMicroseconds(test_impulse); // 1600
  digitalWrite(outPin1, LOW);

  delayMicroseconds(cycle - test_impulse);  // 20000 - 1600
}

 

У вас джиттер - дрожжат фронты

hitmax
Offline
Зарегистрирован: 02.07.2017

А можете поподробнее? Ведь через генератор сигнала ничего не дрожит! Я думал в коде проблема.

GAMON
Offline
Зарегистрирован: 03.07.2017

hitmax пишет:

А можете поподробнее? Ведь через генератор сигнала ничего не дрожит! Я думал в коде проблема.

 Достаточно джиттера 5-10мкс - и серво будет ощутимо жжужать. Посмотрите осциллографом.

hitmax
Offline
Зарегистрирован: 02.07.2017

Ардуино гавно или нужно программировать таймеры через регистры?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

hitmax пишет:

Ардуино гавно или нужно программировать таймеры через регистры?

А в чем Вы видите разницу?

Onkel
Offline
Зарегистрирован: 22.02.2016

программируйте через регистры и не забывайте сбрасывать предделитель. вот он-то и дрожит.

GAMON
Offline
Зарегистрирован: 03.07.2017

hitmax пишет:

Доброго времени суток! Помогите разобраться в чём ошибка, отправляю на серву сигнал 1600 микросекунд, с частотой 50гц(20мс), использую ардуино уно. В итоге сервы дергаются, смотрел через осцилограф, вроде все верно, питание подглючено всё правильно - проверял, импульс подавал через генератор, всё гуд. Вот код:

int outPin1 = 7;

// microseconds
int test_impulse = 1600;
int cycle = 20000; // 50Hz


void setup() 
{
  pinMode(outPin1, OUTPUT); 
}


void loop() 
{
  digitalWrite(outPin1, HIGH);
  delayMicroseconds(test_impulse); // 1600
  digitalWrite(outPin1, LOW);

  delayMicroseconds(cycle - test_impulse);  // 20000 - 1600
}

 

 А для чего  delayMicroseconds(cycle - test_impulse);   ?

Вполне достаточно  delayMicroseconds(cycle);

Частота следования канального импулься для стандартных серво - 50Hz. Небольшие девиации частоты следования этого импульса не влияют на положение вала серво.

hitmax
Offline
Зарегистрирован: 02.07.2017

Сегодня ещё раз проверил осцилографом, частота 49,63 Гц, импульс гуляет от 1613-1620 мкс. 7мкс может вызывать смещение вала?

Onkel
Offline
Зарегистрирован: 22.02.2016

hitmax пишет:

Сегодня ещё раз проверил осцилографом, частота 49,63 Гц, импульс гуляет от 1613-1620 мкс. 7мкс может вызывать смещение вала?

3-4 ° плюс  минус погрешность сервы.

 

GAMON
Offline
Зарегистрирован: 03.07.2017

hitmax пишет:

Сегодня ещё раз проверил осцилографом, частота 49,63 Гц, импульс гуляет от 1613-1620 мкс. 7мкс может вызывать смещение вала?

 У хороших серв мертавая зона 1-2uS

GAMON
Offline
Зарегистрирован: 03.07.2017

Onkel пишет:

hitmax пишет:

Сегодня ещё раз проверил осцилографом, частота 49,63 Гц, импульс гуляет от 1613-1620 мкс. 7мкс может вызывать смещение вала?

3-4 ° плюс  минус погрешность сервы.

 

1,5uS+-0,5uS   стандарт. 0,5uS дает отклонение выходного вала на 45 град

Onkel
Offline
Зарегистрирован: 22.02.2016

GAMON пишет:

1,5uS+-0,5uS   стандарт. 0,5uS дает отклонение выходного вала на 45 град

u - это микро. m- милли.

GAMON
Offline
Зарегистрирован: 03.07.2017

Onkel пишет:

GAMON пишет:

1,5uS+-0,5uS   стандарт. 0,5uS дает отклонение выходного вала на 45 град

u - это микро. m- милли.

 Дааа - пардон муа - это mS