ZP-STM32 и беспроводной последовательный порт. Борьба продолжается
ZP-STM32 and a wireless serial port. The battle goes on
Из цикла «Моя борьба с микроконтроллерами».
В выпуске:
Введение
Evaluation board ZP-STM32
Старый, добрый, но почти не нужный COM-порт без проводов
Увлекшись изучением микроконтроллеров, за почти два года накопил много различных аксессуаров, модулей и деталей, полученных от безжалостной разборки своего старого оборудования или купленных, подчас просто от какой-то коллекционной жадности. Причем эта кучка еженедельно растет.
Закончив курс самообразования по 8-битным AVR, сделал полтора выходных проекта и перешел к 32-битным микроконтроллерам. Хотя купил и сделал сам пару модулей на 8/16 битных ATXmega, все же поздновато вышла эта линейка. Проприетарные поделки (от STM, Atmel, да кого угодно), выходят очень дорогими, а по производительности и стоимости проигрывают процессорам на ядре ARM. А ведь уже анонсировано ядро ARM Cortex-M4 и эти процессоры производятся, пару недель на сайте NXP уже можно скачать описание. Частота 150MHz, 264KB SRAM, DSP, плавающая точка, QSPIFI до 40MBps. Если учесть, что нынешняя линейка 100-120МHz середнячков LPC17xx дешевле лидера Хmega, превосходя его почти по всем параметрам (но нет криптографии, ADC помедленней, DRAM не поддерживается, чуть меньше периферии), то Xmega отдыхает. К тому же, на старших ATXmega DRAM поддерживается только 4-х битная, а DMA не поддерживает всю периферию, хуже всего, что SPI. В утешение Atmel можно сказать, что и на Cortex-M4 LPC43xx криптодвижок имплементирован только на дешифровку AES.
Но свою жадность к железкам не обуздать, купил (но пока не получил) кит на 16-бит 430-ке от TI, так как стоит он всего 4 евро. Чисто чтобы в руках подержать. Подобные наборы, продвигающиеся в массы по цене гораздо ниже той, если бы вы покупали все установленные детали по отдельности, выгодно покупать и под разборку. Именно так я и поступил с набором Discovery от STM, в результате чего появился 32-битный микроконтроллер STM32F103C8 на ядре Cortex-M3, штучной стоимостью дороже всего набора. На этом контроллере я и собрал собственную маленькую платку, ZP-STM32.

Модуль ST-Link с донором STM32F103C8, уже отделен от Discovery, к нему подпаяна JTAG-колодка и отдельными проводами подключен «корпусной» ST-Link. В принципе, это и есть самая дешевая «еvaluation board» для STM32. Вполне можно отработать USB-интерфейс, но большинство выводов микроконтроллера никуда не подсоединены, поэтому аккуратно его выпаиваем, быстренько разрабатываем свой дизайн PCB и определяем его на новое место жительства.
Evaluation board ZP-STM32
Вот как выглядел один из предрелизных вариантов платы:

Делается такая плата по стандартному описанию из руководств и рекомендаций STM32, впрочем, все рекомендации иногда трудно выполнить. Особенно на двухслойной плате. Из «грубых» отступлений - кристалл X1 можно бы обменять местами с парой CN4 CN5. По поводу кристалла 32768 KHz для RTC - требование по емкостной нагрузки не более 6пФ лучше выполнить, хотя таких кристаллов не так много (например, EPSON MC30x, MC40x).
Но на этой плате кристалл для RTC не установлен, будем использовать внешний.
Питание (на любимом FAN1540B) можно было поставить вместо JTAG разъема CN2. Поскольку стандартный 20-пиновый JTAG интерфейс занял бы половину платы, на CN2 оставлены только главные интерфейсные сигналы и одна земля. Но и этот разъем не нужен, так как, сэкономив к тому же два вывода для GPIO, вполне можно обойтись двухпроводным JTAG-SWD. Он выведен на 4-х штырьковый разъем с шагом 1.27мм CN3. Разводка соответствует цоколевке ERNI (это не обязательно) и применяется ответная часть ERNI-интерфейса.

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

Кроме стандартной обвязки, мини-USB разъема и цепей питания, на плате установлены три светодиода, один для сигнализации наличия питания и два с открытыми анодами для свободного использования (ограничивающие ток резисторы установлены).
Ну и последний нюанс — это первая платка с MCU, на которой я не поставил кнопку сброса (хоть и предусмотрел вывод на внешнюю цепь), и зря. На отладочных платах без нее очень неудобно, все равно потом пришлось подключать внешнюю.

Первый запуск ZP-STM32, LCD S65 на базе L2F50. На удивление, LCD работает на 36MHz, хотя ПСП для SPI STM32F103C8 на 36MHz равна ПСП на 18MHz.
Старый, добрый, но почти не нужный COM-порт без проводов
Изначально обычный последовательный порт USART использовать не планировалось ввиду очевидного атавизма для новых разработок. Во встраиваемых системах, если нет прямой необходимости сопряжения с имеющимися устройствами, этот интерфейс используется в отладочных целях для вывода контрольной информации. Но такой вывод легко переназначается на любую другую периферию, пишется своя процедура потокового вывода, и конфигурируется нужный поток и буфер. Таким образом я конфигурировал графический SPI дисплей на AVR. Но нужно учитывать, что при этом требуется гораздо большее время для вывода информации, что может быть неприемлимо при отладке, поэтому подобный прием лучше подходит для сообщений об обнаруженных ошибках, а лог можно записывать в файл, хотя это потребует написания отдельной процедуры или установки какой-нибудь файловой системы.
Но как-то, копаясь в закромах, взгляд упал на давным-давно купленный комплект 868MHz RF-модулей FSK производства HOPE RF , состоящий из одного трансивера и по паре передатчиков HM-T и приемников HM-R. Более полутора лет назад я в одной из заметок приводил их фотографии и измерял скорость передачи, модулируя вход передатчика меандром и контролируя качество приема осциллографом. Тогда было выяснено, что после 20KHz начинаются явно заметные проблемы с джиттером и постепенно появляются пропуски сигнала. С тех пор все модули так и пролежали без дела в упаковке. Их паспортная ПСП 4800 бод давно уже устарела, да и все более популярны 2.4GHz модули.
Но и эти вполне вполне могут сгодиться. Так как скоро перейду к роботостроению (уже заказал гусеничное шасси и двухмоторную трансмиссию под боевого лазерного робота, вторым шагом будет мобильная вертолетная площадка с боевым лазером на вертолете), то простые команды управления вполне можно передавать и со скоростью 4800 бод, к тому же радиус досягаемости RF-модулей - несколько сот метров.
А пока — можно потренироваться в стандартном канале последовательного порта. Для этого сконфигурируем USART1 микроконтроллера на симплексную передачу и подсоединим к выводу TX порта передатчик, у которго всего три контакта — питание и вход. Питание от 2.7 до 5 V. Если порт сконфигурирован с открытым стоком, то его нужно подтянуть на плюс резистором, или включить внутренний у порта.

Антенну подсоединять не будем (в комплекте идет залуженный с одного конца отрезок изолированного провода длиной в несколько сантиметров), так как дистанция пока не будет превышать пары метров.
Приемник, у которого 4 вывода (кроме питания и входа, еще и ENABLE с активным высоким уровнем), подсоединим к виртуальному COM-порту PC, сделанному на базе FT232RL. Для этого воспользуемся другим заброшенным девайсом, Arduino Duemillanove. Если оттуда снять процессор, то получим обыкновенный переходник USB-TTL USART.

На микроконтроллере запускаем в непрерывном цикле передачу строки «ZP USART», на PC конфигурируем любой удобный терминал (я использовал встроенный Hyper Terminal) на номер виртуального порта.
На экране должен постоянно появляться результат приема:

В радиусе двух метров от передатчика (USB-кабель 2.5м), прием без сбоев, на максимально возможно длине шнура иногда проскакивают помехи (напомню, антенны не подсоединяются, ENABLE у приемника активен постоянно). Не стоит забывать, что диапазон 868 MHz открытый, и там творится черт знает что.
Отсоединяем передатчик от платы (то есть мы в эфир ничего не передаем), смотрим, что показывает выход приемника:

Принимаем какие-то сигналы внеземной цивилизации. В отдельные часы такие сигналы даже воспринимаются компьютером как управляющие и на экране начинается чехарда — курсор хаотично бегает и включает все подряд. Отфильтрованная на входе спектральная плотность сигнала (рамка до 30Кгц):

Маркер стоит на 15625КГц – принимаем сигнал строчной развертки чьего-то телевизора, посередине — половинная гармоника, слева — сетевые наводки. Спектр часто меняется, появляются новые частоты, если рамку уводить выше, то увидим устойчивый сигнал от своего монитора (194KHz). Чувствительность приемника позволяет уловить все в радиусе нескольких сотен метров.
Поэтому нужно включать приемник только на моменты работы своего передачика (через ENABLE), применять фильтрацию и кодирование посылок, но в пределах небольшого помещения достаточно будет и ENABLE-защиты.
Разумеется, если убрать приемник и передатчик и соединить напрямую TX на плате ZP-STM32 и виртуального COM-порта, то вопрос помехозащищенности отпадает сам собой и достижимы скорости в миллионы бод.
Но и беспроводной последовательный порт работоспособен и вполне пригоден для передачи небольших потоков информации в виде отладочной информации или команд управления.
Испытания проводились на бредборде, общий вид которого на сегодня такой:

В правом нижнем углу ринга как раз идет подготовка к управлению трансмиссией боевого робота — черная микросхема это КА3082 (устаревшая, но зато как раз для бредборда, обороты регулируются аналоговым напряжением на одном из входов, в реальном прототипе, вероятно, будет что-то от Allegro A39xx, с регулировкой скорости путем ШИМ-модуляции входных логических сигналов). Рядом с ней стоит аллегровский датчик Холла для измерения потребляемого тока.
В среднем ряду, правее ZP-STM32, располагаются три NOR -флэшки от разных производителей и последовательная SRAM от Microchip в DIP корпусе. Между флэшками планируется устроить забег на скорость. Примечательно, что вместо заказанной M25P16 от Numonyx Farnell прислал старую производства STM. Если не ошибаюсь, STM передала их в новую компанию Numonyx в 2005 году, уже и Numonyx куплена Micron-ом, а под эту флэш, на сайте Micron, так и подцеплены самые первые драйвера от STM.
Пока не установлен контроллер тачскрина (TSC2200), как оказалось, в хозяйстве отстутствует переходник на 0.65мм, есть только на 0.635мм, на котором стоит TSC2007, но на этот раз попробуем контроллер со SPI и встроенным клавиатурным модулем, для экономии выводов STM32F103C8.
В декабре ZP-STM32 будет заменен на более серьезную плату на 144-ногом STM32, так как, кроме робота, будем работать с мультимедийным и 3D контентом.
Комментарии, вопросы и предложения здесь.
Zauropod,
19 ноября 2010 года.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают