Взял код (из робовики) управления сервами при помощи 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
Серва работает некорректно дергается сдвигается в сторону при заданном среднем
положении