roboforum.ru

Технический форум по робототехнике.

m128-ds + сервы

m128-ds + сервы

Korbofos » 11 авг 2011, 18:30

Не могу разобраться в чём проблема(((
Взял код (из робовики) управления сервами при помощи 4017 счётчика
Код: Выделить всёРазвернуть

uint16_t servo_position[9] = {3000 //для среднего положения

volatile uint32_t i;


SIGNAL(SIG_OUTPUT_COMPARE1A)
{
   
   static uint8_t current_servo = 1;
   
   
   static uint16_t pause = 40000;

   
   TCCR1A |= _BV(FOC1A);

   if (current_servo == 9) {
      current_servo = 0;
      OCR1A += pause;
      pause = 40000;
   } else {
      
      OCR1A += servo_position[current_servo];
      pause -= servo_position[current_servo];
      current_servo++;
   }
}


Пересчитал все переменные под частоту 7.3728
в итоге получилось
Код: Выделить всёРазвернуть
interrupt [TIM3_COMPC] void timer3_compc_isr(void)
{
static char current_servo=1;
static unsigned int pause = 18432;

TCCR3C|=(1<<FOC3C);
       
        if (current_servo == 9)
        {
         current_servo = 0;
         OCR3C += pause;
         pause = 18432;
        }
        else
        {
         OCR3C+=servo_position[current_servo];
         pause -= servo_position[current_servo];
         current_servo++;
        }
}     
servo_position[9]={1382 //среднее положение

Пред делитель счётчика на 8
Серва работает некорректно дергается сдвигается в сторону при заданном среднем
положении :pardon:


Rambler\'s Top100 Mail.ru counter