1

Topic: Проблема с сервоприводами

Добрый день.
Почитал форум и часть проблем удалось решить, но часть осталась.
Теперь по порядку. Есть силовой двигатель, мотор движения и сервопривод руля. Если использовать оба решения по отдельности, то все работает как надо, но если вместе, то сервопривод ведет себя странно.
Если крутить слайдер1 то сервопривод начинает крутиться и становиться в разные позиции.
Если крутить слайдер2, то сервопривод поворачивается рывками или запинается и замирает на половине пути.
Вот код:
//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__HARDSERIAL

#include <RemoteXY.h>
#include <Servo.h> //используем библиотеку для работы с сервоприводом

// настройки соединения
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 9600


// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,3,0,0,0,31,0,6,5,0,
  2,0,2,1,22,11,2,79,78,0,
  79,70,70,0,4,48,76,2,13,59,
  2,4,176,2,25,57,14,2 };
 
// структура определяет все переменные вашего интерфейса управления
struct {

    // input variable
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен
  int8_t slider_1; // =-100..100 положение слайдера
  int8_t slider_2; // =-100..100 положение слайдера

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////
#define PIN_MOTOR_LEFT_UP 5
#define PIN_MOTOR_LEFT_DN 4
#define PIN_MOTOR_LEFT_SPEED 9
#define PIN_LED 13
#define PIN_MOT 8

Servo servo; //объявляем переменную servo типа Servo

void setup()
{
  RemoteXY_Init ();
 
  pinMode (PIN_MOTOR_LEFT_UP, OUTPUT);
  pinMode (PIN_MOTOR_LEFT_DN, OUTPUT);
  pinMode (PIN_LED, OUTPUT);
 
  servo.attach(PIN_MOT); //привязываем привод к порту PIN_MOT
  servo.write(60);
 
}

void loop()
{
  RemoteXY_Handler ();
 
  digitalWrite(PIN_LED, (RemoteXY.switch_1==0)?LOW:HIGH);

  servo.write(map(RemoteXY.slider_2,-100,100,140,40));
 
  if (RemoteXY.slider_1>0) {
    digitalWrite(PIN_MOTOR_LEFT_UP, HIGH);
    digitalWrite(PIN_MOTOR_LEFT_DN, LOW);
    analogWrite(PIN_MOTOR_LEFT_SPEED, RemoteXY.slider_1*2.55);
  }
  else if (RemoteXY.slider_1<0) {
    digitalWrite(PIN_MOTOR_LEFT_UP, LOW);
    digitalWrite(PIN_MOTOR_LEFT_DN, HIGH);
    analogWrite(PIN_MOTOR_LEFT_SPEED, (-RemoteXY.slider_1)*2.55);
  }
  else {
    digitalWrite(PIN_MOTOR_LEFT_UP, LOW);
    digitalWrite(PIN_MOTOR_LEFT_DN, LOW);
    analogWrite(PIN_MOTOR_LEFT_SPEED, 0);
  }
}

Что не так???

2

Re: Проблема с сервоприводами

А еще обнаружилось, что ШИМ не работает.  То есть если Слайдер1 не доведен до 100, то крутится серво, а как только доведен, то серво становиться как надо и более менее нормально отвечает на движение Слайдера2. Но ШИМ не работает вообще.

3

Re: Проблема с сервоприводами

Заменил библиотеку Servo на SoftwareServo. Проблема разрешена. Всем спасибо.

4

Re: Проблема с сервоприводами

http://forum.remotexy.com/viewtopic.php?id=9