Pull to refresh

Отладочная плата особого назначения

Reading time7 min
Views8.8K

Введение


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

Однако, довольно часто мы сталкивались с тем, что предложенные на рынке отладки требовали значительной доработки и/или дополнительных модулей. При этом появлялись и дополнительные ограничения, зависевшие от конкретного прибора. Если плату управления и модуль беспроводной связи мы разрабатываем с нуля, то на макетной плате относительный порядок.

Проблемы начинаются, когда разыгрывается второй и более частый сценарий, и мы имеем дело с модернизацией уже разработанной техники. Из-за основного ограничивающего фактора — конечной цены продукта — изменение электрической схемы должно быть минимальным. На этапе макета приходится создавать многими нежно любимый «колхоз».


Источник

Что делать?


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


Типичный представитель платы управления бытового прибора

За время работы у нас появилось несколько стандартных беспроводных модулей от RM2 до RM10. Эти модули, основанные на SoC решении выполняют роль центрального контроллера, а также позволяют управлять прибором по воздуху.

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

Еще одним аргументом за выпуск отладочной платы стало открытие платформы Ready for Sky для сторонних разработчиков. На электронную почту нам стали приходить предложения и просьбы дать доступ к платформе независимым разработчикам или DIY-щикам. Подобное предложение пришло даже в хабровскую личку.

Отладка


Вот мы её и сделали — первую версию RFS-DEV001. Сердцем отладочной платы стал модуль RM10. На базе чипа nRF52832, который соответствует стандарту Bluetooth 5, поддерживает mesh-сети и Bluetooth Low Energy. Также на отладке размещены часы реального времени, осуществлено три варианта питания (батарейное, USB от ПК, внешнее от источника питания). Две кнопки, зуммер и RGB-диод, чтобы посигналить и помигать. Все компоненты на плате подобраны из тех, что сейчас используются в массовом производстве бытовой техники.

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



Плата будет удобна DIY-щикам, среди которых есть и те, у кого программирование не является сильной стороной или они только начинают обучаться. Мы увидели возможность облегчить их работу, например, сделать плату Arduino-совместимой. Понятно, что это любительский и учебный формат, но ее использование, во-первых, не отменяет профессиональную работу с отладкой, а во-вторых, сильно повышает удобство вхождения специалистов в профессию.

Вполне можно было бы распространять плату среди ВУЗов и специализированных техникумов для обучения студентов младших курсов, тем самым внося вклад в будущих специалистов.

Список гарантированно работающих подключаемых модулей
  • Датчик атмосферного давления и температуры BMP180
  • Датчик атмосферного давления и температуры BMP280
  • Датчик влаги
  • Датчик ИК-излучения
  • Датчик газа MQ-135
  • Датчик газа MQ-9
  • Датчик движения HC-SR505
  • Датчик движения HC-SR04
  • Датчик наклона SW-520D
  • Акселерометр, магнетометр MPU9250
  • Акселерометр, магнетометр GY-85
  • Датчик света и приближения AP3216
  • Датчик интенсивности света GY-2561
  • Модуль распознавания жестов APDS-9960
  • Модуль управления шаговыми двигателями Arduino Motor Shield
  • Модуль для подключения доп. USB-устройства Arduino USB Host Shield
  • Релейный модуль Arduino 4 Relays Shield
  • Модуль с SD-картой беспроводной Wireless SD
  • GSM(GPRS)-модуль SIM900
  • Приемопередатчик LC12S
  • Модуль 433/868 Мгц NRF905
  • ИК-модуль XY-MK-5V
  • RFID/NFC-модуль PN532
  • Дисплей
  • Дисплей
  • GPS-модуль MIKROE-1032 GPS Click
  • GLONASS-модуль MIKROE-1895 GNSS3
  • Модуль клавиатуры 4х4 MIKROE-86
  • Диодная матрица MIKROE-1881
  • Диодная матрица Adafruit NeoPixel Shield for Arduino
  • При этом мы планируем выпустить свои модули, так же на основе комплектующих, применяемых в массовом производстве. Если у вас есть идеи или предложения, пишите в комментариях, какие модули могли бы вам понадобиться.




API


Поскольку без программного кода отладка станет малополезным куском текстолита, стоит немного рассказать об API, которое призвано в рамках открытия платформы позволить разработчику сконцентрироваться на функционале своего устройства, абстрагировавшись от многочисленных настроек Bluetooth и пр.

Итак, API R4S состоит из:

  • набора библиотек, обеспечивающих работу типовых и специфических сервисов, например основная библиотека, содержащая основные настройки Bluetooth и библиотеки, ориентированные на функционал устройств;
  • примеров устройств или функций, реализованных на API;
  • драйверов для периферии, подключаемой к отладочной плате, см. список выше.

Можно немного рассмотреть возможности API на примере создания световых эффектов при помощи светодиодной лампы через плавное изменение яркости с использованием кривых Безье.


Перейдя в режим пейринга, лампочка будет плавно менять цвет свечения

В основном файле нужно будет самостоятельно определить основную информацию, например, сведения о прошивке, объявить настройки (местонахождение бутлоадера, буфера для обновления прошивки и т.п.).

/** Firmware information structure */
R4S_FW_INFO_DEF(application, 0x26000) = {
    .version = {
        .major = 0, /** Product version (major) */
        .minor = 1, /** Product version (minor) */
    },
    .name = { /** Device name */
        .name = "RGB Lightbulb",
        .len = sizeof("RGB Lightbulb") - 1 /** Without \0 symbol at the end*/
    }
};

/** The init structure with the device information wich required for ReadyForSky library.
*/
R4S_CONFIG_DEF(r4s_init_conf) = {
    .p_fw_info = &application,
    .production_key = NULL, 
    /** 
     * The production key allows integrating the device into ReadyForSky infrastructure.
     * Contact support to get the production key for your device.
     */
    .bootloader = {
        .start_address = 0x7B000, /** Bootloader start address */
        .mbr_param_page = 0x7f000, /** MBR param page address */
        .fw_upgrade_buf = {
            /** The firmware upgrade buffer is used for background flashing.
             * The region size should more than softdevice + bootloader + application size + 4096
             */
            .p_api = &nrf_fstorage_sd, /** fstorage api */
            .start_addr = 0x35000, /** start address of firmware upgrade buffer */
            .end_addr = 0x78000, /** end address of firmware upgrade buffer */
            .chunk_size = 0, /** default chunk size */
        }
    },
    .company_info = {
        .p_company_name = "Imperium of Mankind",
    },
        .watchdog = {
        .timeout_ms = 5000, /** If loop or priority will not finish after 5 seconds watchdog will reset microcontroller automatically */
    },
    .low_power_mode_enable = true, /** Low power ble settings */
}

Разработка устройства схожа с разработкой под Arduino. Есть setup функция, для инициализации основных модулей и loop, где происходит обработка. Сам функционал приложения разделен на модули — по разным выполняемым операциям.

/** @brief Application initialisation
 * @return none
 */
void app_setup(void) {
    m_pairing_init(m_led_ctrl_pairing_handler);
    m_led_ctrl_init();
}

/** @brief Application loop
 * @return true - sleep is not allowed
 * @return false - All modules have completed operation, the mcu can enter into sleep mode. (the next loop iteration will be after any interrupt)
 */
bool app_loop(void) {
    return NRF_LOG_PROCESS();
}

После объявления ресурсов в файле («m_resources.c») — например, анимаций лампочки, назначения пинов (нескольких групп LED), цвета и др., библиотека сама определит остальные параметры.

/** Animation timer definition for m_rgb */
APP_TIMER_DEF(animation_timer_id);

/** Leds pin map for m_rgb*/
static const r4s_rgb_ctrl_led_t m_leds_map[LEDS_COUNT] = {
    {
        .color = {
            .red_pin = RED_LEDS_0_PIN,
            .green_pin = GREEN_LEDS_0_PIN,
            .blue_pin = BLUE_LEDS_0_PIN,
        }
    },
    {
        .color = {
            .red_pin = RED_LEDS_1_PIN,
            .green_pin = GREEN_LEDS_1_PIN,
            .blue_pin = BLUE_LEDS_1_PIN,
        }
    },
    {
        .color = {
            .red_pin = RED_LEDS_2_PIN,
            .green_pin = GREEN_LEDS_2_PIN,
            .blue_pin = BLUE_LEDS_2_PIN,
        }
    },
};

/** PWM map for m_rgb */
static const r4s_rgb_ctrl_pwm_map_elem_t m_pwm_map[LEDS_COUNT] = {
    {
        .color = {
            .p_pwm_red = &pwm0,
            .p_pwm_green = &pwm0,
            .p_pwm_blue = &pwm0,
        }
    },
    {
        .color = {
            .p_pwm_red = &pwm1,
            .p_pwm_green = &pwm1,
            .p_pwm_blue = &pwm1,
        }
    },
    {
        .color = {
            .p_pwm_red = &pwm2,
            .p_pwm_green = &pwm2,
            .p_pwm_blue = &pwm2,
        }
    },
};

/** RGB lamp definition */
R4S_RGB_CTRL_DEF(m_rgb, m_leds_map, m_pwm_map, &animation_timer_id, LEDS_COUNT, 3);

После бондинга приложение получает данные, что умеет устройство, лампочка в нашем случае, и выводит соответствующую информацию.



Далее через приложение можно управлять параметрами — интенсивностью, цветностью, температурой и др.


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

Из дополнительных возможностей можно отметить:

  • Мультиконнект — несколько смартфонов, одновременно подключенных к модулю. Потенциально эта функция порождает проблемы при попытке одновременно управлять устройством. Эти проблемы мы постарались упредить, в том числе посредством уведомлений на всех подключенных смартфонах — при изменении какого-либо параметра одним телефоном, информация об новом значении параметра будет сразу же отправлена остальным;
  • Быстрая перепрошивка — размер пакета, передаваемом по Bluetooth зависит от MTU. При увеличении MTU процесс перепрошивки будет идти быстрее так как размер пакета увеличится;
  • Перечень типичных ошибок, определяемых функцией микроконтроллера. При обнаружении ошибки в отладчик будет выводиться текст вроде «Not enough memory for softdevice. For more information enable sdm debug.».

Для работы с отладкой будет выпущено инженерное приложение R4S с теми же возможностями, что и обычное, но именно через него осуществляется управление платой. В принципе, через инженерное приложение можно управлять собранными устройствами в своей квартире — приятная деталь для DIY. Это должно помочь в поддержке устройства начинающим разработчикам. В основном приложении R4S такое устройство появится после согласования и контроля качества с нашей стороны.

Также отладку мы будем использовать в повседневной работе компании, в том числе и при обучении новых сотрудников. Хабровчане, как считаете, взлетит? Было бы вам интересно поработать с такой отладкой?
Tags:
Hubs:
Total votes 13: ↑11 and ↓2+9
Comments15

Articles

Information

Website
readyforsky.com
Registered
Employees
101–200 employees
Location
Россия