ARM. Учебный Курс. Keil + CMSIS. Создание проекта

Хотел вначале толкнуть речугу за ядро, но потом подумал, что этой то инфы на каждом углу, да и рано пока еще. А вот создать простейший проект будет полезней. Также я решил краешком поддерживать и описывать не только STM32F103, но и LPC1343. LPC я буду уделять меньше времени, скорей показывать различия и аналогии. Но, думаю, проблем в освоении не возникнет.

Среда разработки
Я тут однозначно остановился на Keil uVision 4. Эта IDE, пожалуй, является одной из самых мощных и самых массовых не только на ARM, но и на С51 и ряде других камней.
Собственный, весьма неплохой, Си компилятор. Весьма продвинутая и функциональная IDE, плюс в нагрузку там идет мощный симулятор, в том числе с поддержкой периферии, а также всяких виртуальных приборов.
Не как в Proteus, конечно. Схему там не нарисуешь, но вот поглядеть на виртуальный логический анализатор или UART можно запросто. Плюс удобная система создания мастеров кода на ровном месте (всякие визарды аля CVAVR тут дружно пьют йад).
А также Keil поддерживает огромное число разных отладочных систем и JTAG адаптеров. В том числе и ColInkEx, который юзаю я.

Недостатки тоже есть. Во-первых, Keil uVision идет только под винду. Так что линухоиды либо извращаются с виртуалками (но не факт что получится), либо обламываются и корячат из подручного материала что то свое. Впрочем, им не привыкать к геморою со спец софтом :)
Во-вторых, Keil платный. И стоит он весьма неслабых денежек.
Кряки, конечно же, валяются на каждом углу. Но! Мы же честные и на наше счастье в Keil есть демо режим, дающий нам ограничение в 32кила. Под наши заморочки с Cortex M3 хватит вполне (а в LPC1343 больше и нету, кстати ;) ).
(далее…)

Read More »

ИК дистанционное управление

Завязка или «Как начинался девайс»

…Когда я пришёл, Виктория сидела на диване, уставившись в телевизор. День выдался тяжёлый, поэтому ей не хотелось ничего делать. Несколько минут мы смотрели какой-то попсовый сериал, потом он закончился, и Вика выключила телевизор. В комнате стало темно. На улице шумел дождь, и от этого казалось, что дома тоже холодно.
Вика поднялась с дивана и принялась, на ощупь, искать выключатель от светильника. Настенный светильник висел, почему-то, не у дивана, а на другой стене и приходилось топать через всю комнату, чтобы зажечь свет. Когда она, наконец, включила его, комната наполнилась тёплым светом лампочки накаливания.
Около меня, на помятой простыне, лежал пульт от телевизора. Нижние кнопки без опознавательных знаков и, скорее всего, не использовались. И тут у меня возникла интересная мысль…
— Вик, а хочешь, я сделаю так, что твой светильник можно будет пультом от ящика включить? Там даже кнопки лишние есть…

Концепция
Наше устройство должно уметь принимать сигнал с ИК-пульта, отличать «свою» кнопку от других, и управлять нагрузкой. Первый и последний пункты простые, как топор. А вот со вторым немного интереснее. Я решил не ограничиваться каким-то конкретным пультом (Почему? – «Не интересно так!»), а сделать систему, которая может работать с разными моделями пультов от разной техники. Лишь бы ИК-приёмник не спасовал, и уверенно ловил сигнал.

Ловить сигнал будем с помощью фотоприёмника TSOP. Причем не каждый приёмник подойдёт – несущая частота должна совпадать с частотой пульта. Несущая частота приёмника указана в его маркировке: TSOP17xx – 17 это модель приёмника, а хх – частота в килогерцах. А несущую частоту пульта можно найти в документации или в инете. В принципе, сигнал будет приниматься, даже если частоты не совпадают, но чувствительность будет фиговой – придётся тыкать пультом прямо в приёмник.
(далее…)

Read More »

Детектор звуков

Привет! Сегодня мы будем собирать акустический датчик.

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

Преобразовать звук в электрический сигнал можно двумя способами: с помощью пьезодинамика или микрофона. На выходе у них напряжение. У пьезодинамика, в состоянии покоя выход = 0В, а у микрофона, обычно, около 2В, в зависимости от подтягивающего резистора.

Пьезодинамик подойдёт не всякий. Простая «пластинка с двумя проводками» имеет маленькую чувствительность, хотя если её запихнуть в резонатор, то, наверное, станет лучше. Идеально подходят пьезодинамики марки 3П-22. Это такая кругляшка 3 см в диаметре, с отверстием в центре. Выглядит так:

Такие стоят в совковых часах с будильником, и ещё много где.
(далее…)

Read More »

ARM. Учебный Курс. Подключение контроллера и демоплата

Выбор контроллера
Контроллеров на ядре ARM Cortex множество. И мне пришлось поломать голову чтобы выбрать и взять за основу. В народ уверенно идут две линейки это LPC1xxx от NXP и STM32 от ST. Остальные дорогие и/или труднодоставаемые, либо в неадекватных для домашнего применения корпусах. Решил если брать, то из этой серии. Но какую именно? В результате поковырял и те и другие.
 

И вот мои соображения:
 

NXP
Берут низкой ценой. Реально многие из них продаются рублей по 50-80р за микруху. И это в розницу! Может это, конечно, маркетинговая акция и скоро все изменится. Но ситуация такая есть. С другой стороны, у NXP три линейки процов. LPC1000, LPC1300, LPC1700 (про LPC2xxx речь не идет, там ARM7 TDMI ядро).
 

  • LPC1000 закастрированные донельзя (но дешевые). Там от всех вкусняшек ARM ядра только таймер да 32 разряда. Корпуса от 33 до 48 выводов. Есть даже PLCC, но обычно LQFP.
  • LPC1300 уже интересней, но тоже нет ряда полезных фич вроде DMA или быстрого доступа к портам. Корпус от также от 33 до 48 выводов. Самый адекватный LQFP.
  • LPC1700 уже как в лучших домах — есть полный фарш, но камни там с 80ю и более ногами. И куда их такие здоровые?

 

Причем все три линейки весьма сильно отличаются друг от друга. Т.е. код с LPC1300 копипастой хрен перетащишь на LPC1700. Будут отличаться и имена регистров, и способы доступа к периферии. По разному будет выполняться конфигурация портов. В общем, хочешь перелезть на линейку послабже — изучай даташит с нуля. Конечно библиотека CMSIS сильно все сглаживает, но тем не менее от лишнего чтения доков не избавляет. Ну и документация у NXP тот еще аббадон. Давно я такой каши не видел. Бррр…
 

STM
Стоят дороже. Пока самый дешевый STM32F103C8T6 видел за 150р штука. Где найдете дешевле свистните. Но зато у них одна линейка F10x и один даташит на всех. Более того, ходят слухи, что периферия очень похожа и на STM8, так что при случае параллельно раскурим и эти камни :)
 

Процессоры в линейке отличаются только количеством ног и наличием на борту тяжелой периферии вроде USB/Ethernet/CAN. Причем в том же STM32F103C8T6 есть уже и DMA и полноценный BitBanding и все это в корпусе LQFP48 т.е. вполне компактный и паяемый в домашних условиях. Сами камни внутри выглядят более продумаными чтоль. Нет зоопарка периферии на разных линейках. Хорошо расписанные библиотеки CMSIS (о том что это такое расскажу попозже). Т.е. изучил его один раз и можешь уже смело программировать хоть 36 ногих козявок, хоть 100 выводных монстров. Плюс очень многие выводы у STM32F103 имеют 5V Tollerance т.е. их можно смело заводить на пятивольтовую периферию.
 

В общем, мне STM32 понравился больше. Хотя от применения LPC я не отказываюсь, но подробно на них останавливаться не буду, в лучшем случае вскользь упоминать.
 

(далее…)

Read More »

Управление множеством сервомашинок

При построении разных роботов порой приходится использовать несколько сервоприводов. А если это какой-нибудь шестиногий паук, то приводов там этих просто тьма. Как ими управлять? На форуме кое кто даже сокрушался, что ему бы для этих целей плисину применить. Хотя на кой черт там ПЛИСка, когда с рулением даже трех десятков сервоприводов справится самый рядовой микроконтроллер, затребовав под это дело всего один таймер.

Итак, кто не помнит как управляются сервы может прогуляться в старую статью и освежить знания.

Возьмем, для начала, 8 сервомашинок. На каждую серву идет вот такой сигнал:

На каждую серву со своей ноги контроллера должна идти такая вот последовательность. Итого подобие ШИМ’a на 8 каналов. Как сгенерировать эту бодягу? Да проще простого. Принцип тут простой. Импульсы медленные — всего то 50Гц, меняются тоже нечасто — серва штука инерционная, поэтому даже сто раз в секунду ей не подергаешь. Так что времени на обработку у нас вагон и маленькая тележка.

Сами импульсы будут генерироваться одним таймером, в фоновом режиме. Принцип генерации прост: Все импульсы стартуют одновременно, выставляя свои уровни в 1.
Затем в таймер, в регистр сравнения, заносится время длительности первого импульса. По прерыванию сравнения происходит:

  • Сброс бита на порту первого канала
  • Загрузка в регистр сравнения таймера значения длительности второго импульса

(далее…)

Read More »

Приспособление для вертикального сверления отверстий

Иногда, хотя я это и очень не люблю, мне приходится делать двусторонние платы. Обычно это редко происходит, все часто удается раскидать по одному слою. В худшем случае с перемычками-пофигисторами. Но когда делаешь двусторонку, то сразу же возникает проблема. Нет, совмещение слоев при травлении это задача элементарная. Я травлю сначала одну сторону, потом, совместив по трем отверстиям, накатываю второй слой и вытравливаю его.
Главная проблема тут в сверловке. Практически нереально ручной дрелькой просверлить идеально перпендикулярное плате отверстие, а малейший перекос, хотя бы на 10 градусов даст расхождением порядка 0.5мм, а то и больше. Что черевато несовпадением переходных отверстий (которые я делаю диаметром около 1.3мм, при отверстии в 0.5мм), а то и площадок. Не говоря уже о том, что выглядит в высшей мере убого.

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

Тем не менее двусторонняя плата вытравлена. Проблема есть и ее надо решать. За пару минут мозгового штурма, из подручного хлама родился вот такой козлик, лихо направляющий сверло, занимающий мизерное количество места.

Два крохотных кусочка макетки. Идеальны тем, что дырочки на них просверлены на заводе, заведомо правильные и соосные. Несколько штырьков PLS и обоймы от них. Спаяно все в незатейливую конструкцию. На нижнем «этаже» лишние уголки сковырены, чтобы не заслонять обзор.

А дальше, придерживая козлика рукой и нацеливая ушком на нужное место, борзо сверлим отверстия, Не волнуюясь на счет перекоса сверла. Красота!

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

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

Read More »