События‎ > ‎

Радиомодуль APC220 434МГц + mbed

Отправлено 2 авг. 2012 г., 13:58 пользователем Олег Евсегнеев
Для обеспечения передачи телеметрии с автономного квадрокоптера, в китайской народной республике были куплены два модуля APC220. Данные радиомодули достаточно распространены среди авиамоделистов, прежде всего, из-за своей низкой цены. На местных сайтах пара APC220 стоит около 1600р, цена надо сказать конская. Мне удалось купить пару модулей за $35 на ebay.com и я доволен ими как слон.

Официальные характеристики APC220:
  • рабочая частота: 431-478МГц
  • питание: 3.3 - 5.5В
  • рабочая температура: -20 - +70
  • дистанция: 1200м
  • интерфейс: UART/TTL
  • скорость передачи данных между MCU и APC220: 1200-19200 бит/с
  • скорость передачи данных между модулями: 1200-19200 бит/с
  • буфер приемника: 256 байт
  • размер: 37х17х6.6мм (без антенны)
  • вес: 30г

Настройка модуля APC220

1) Перед подключением модулей к контроллеру, согласно разным инструкциям, рекомендуется настроить модули с помощью специальной программы rfmagic. 
Программу можно скачать практически с любого интернет магазина где имеется APC220.

2) Также потребуется установить драйвера для USB-UART моста:
http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
После установки драйверов windows лучше перезагрузить.

3) Теперь подключаем модуль к USB-COM мосту и втыкаем все это в USB порт ПК.

4) Пробуем запустить rfmagic, что с первого раза может не получиться - вываливается ошибка после которой программа не видит модуль. Пробуем снова.

5) После того как rfmagic успешно запустится, меняем настройки на нужные и жмем "Write W".

Теперь подробнее о настройках APC220.


Лично в моем случае, оба модули были изначально правильно настроены, поэтому перезаписывать настройки не было необходимости. Правильная же настройка заключается в следующем:

1) Оба модуля должны иметь одинаковую (естественно) частоту RF frequency, я оставил 434МГц. 

2)  Оба модуля должны иметь NET ID (не проверено) и одинаковую скорость RF TRx rate (скорость передачи данных между модулями).

3) Что касается NODE ID, то я искренне считал что это уникальный идентификатор модуля, ввиду чего эти параметры должны различаться для разных модулей (так и пишут в прочих тестах). Но у меня оба модуля имеют одинаковый NODE ID и это не мешает им общаться. В общем, вопрос назначения Net параметров требует дополнительного изучения.

Прочие параметры:

Параметр RF Power определяет мощность излучения передатчика, я оставил 9 как и было. Настройки связи с контроллером также оставил по-умолчанию: 9600б/с и отключенный Parity (в софтине опечатка кстати).

Кстати сказать, согласно даташита, настройку модуля можно меня online, то есть прямо во время полета. Здесь сразу возникает ассоциация с печально известным Фобос-грунт-ом и неудачными попытками его перепрограммировать...

Подключение к mbed

В комплекте с парой модулей имеется переходник USB-UART (виден на фото). По сути переходник нужен лишь для изменения настроек модулей и для тестирования.

Распиновка APC220:
  1. GND - земля;
  2. VCC - 3.3 - 5.5В;
  3. EN - Enable; вкл. при >1.6В (либо N/C) и выкл. при <0.5В;
  4. RXD - UART RX;
  5. TXD - UART TX;
  6. AUX - режим модуля Master/Slave?
  7. SET - настройка модуля (низкий уровень).
В общем случае, к контроллеру подключаются только четыре вывода APC220. Схема подключения: 
  • GND APC220 - GND mbed
  • VCC APC220 - +5V mbed
  • RXD APC220 - TXD mbed
  • TXD APC220 - RXD mbed
Во всех инструкциях по подключению APC220 используют схему PC-APC220-APC220-MCU. То есть один модуль подключают к компьютеру через переходник, а другой к контроллеру. Затем запускают на ПК какой-нибудь терминал и принимают/отправляют данные с/на контроллер. У меня такой вариант не получился, так как оба терминала (putty и TeraTerm) с различными вариантами настроек напрочь отказывались принимать данные. Именно поэтому в моем тесте оба APC220 подключены к контроллеру mbed. Я уверен что проблема все-таки решаемая, но в данный момент задача состояла в базовой проверке работоспособности купленных устройств.

Для эксперимента, как и всегда, использовался MCU mbed. Вывод данных осуществлялся на LCD 1602. Схема стенда представлена ниже.


Программа

Код программы чрезвычайно прост. В бесконечном цикле происходит опрос одного модуля на предмет получения данных, отправка новых данных через второй модуль и вывод отправленных и полученных данных на дисплей.

APC220 LCD

#include "mbed.h"
#include "TextLCD.h"

DigitalOut led1(LED1);
DigitalOut led2(LED2);
Serial apc_1(p9, p10); // tx, rx
Serial apc_2(p28, p27); // tx, rx
TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2); // rs, e, d4-d7

Timer tmr;
Timeout t2, t1;

void t1out(void) { led1 = 0; }
void blip1(void) { led1 = 1; t1.attach(&t1out, 0.01); }

void t2out(void) { led2 = 0; }
void blip2(void) { led2 = 1; t2.attach(&t2out, 0.01); }
 
int main() {
    char data[8];
    char idx; 
    int unsigned sec;
    tmr.start();

    apc_1.baud(9600);
    apc_2.baud(9600);
    while(1) {
        sec = tmr.read();
        idx = 0;
        while( apc_1.readable() ){
            data[idx++] = apc_1.getc();
            blip1();
        }
        if( apc_2.writeable() ){
            apc_2.printf("%d", sec);
            blip2();
        }
        lcd.locate(0,0);
        lcd.printf("%d - %s", sec, data);        
        wait_ms(500);
    }
}

Запуск

В итоге, как всегда, небольшая демонстрация:

На следующем этапе будут проведены полевые испытания с целью выяснить реальную рабочую дистанцию модуля в городе и в лесу.

Comments