AFON // радиотехник affonya@mail.ru
← Все проекты для дронов

Failsafe: отсечка моторов

Остановка моторов при пропадании сигнала управления по таймауту.

DMC.18 · Моторы и ESC · ATmega328P

Задача

Если новый пакет управления не пришёл дольше таймаута — принудительно перевести моторы в стоп.

Алгоритм

Таймер/счётчик времени с последнего валидного кадра; при превышении порога выход газа = 1000 мкс.

Исходный код (C, avr-gcc)

⇩ Скачать 18-failsafe-cut.c

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>

int main(void){
  DDRB|=(1<<PB5);
  uint16_t since=0; const uint16_t TIMEOUT=50;  // 50*10мс = 500мс
  volatile uint8_t rc_new=0;
  for(;;){
    if(rc_new){ since=0; rc_new=0; } else since++;
    if(since>=TIMEOUT){ PORTB|=(1<<PB5); /* motor=1000 (стоп) */ }
    else PORTB&=~(1<<PB5);
    _delay_ms(10);
  }
}

Сборка: avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os файл.c -o файл.elf

Пояснения

Здесь моделируется счётчиком в главном цикле; в реальности обновляется по приходу кадра RC.

Смотрите также

Failsafe: настройка правильно