Выбор микроконтроллера
Выбор микроконтроллера [7] является одним из самых важных шагов, ведущих к успеху или провалу задуманного проекта. При этом необходимо учесть и оценить большое количество факторов. Обычно выбор проводится в 3 стадии:
Определение разработчиком необходимых характеристик МКпутем ответа на вопрос: «Что должен делать микроконтроллер в данной системе?». При этом немаловажной целью является выбор наименее дорогого МК, но удовлетворяющего требованиям по производительности, надежности, условиям применения и т. д.
Выбор микроконтроллеров или группы семейств МК, удовлетворяющих всем системным требованиям, включая необходимый подборлитературы, технических описаний и возможность получения консультаций, отдавая предпочтение однокристальным устройствам – из-за цены и надежности, с учетом стоимости и габаритов.
Выбор из списка приемлемых устройств одного путем анализа ряда факторов: цены, доступности, средств разработки, поддержки производителя, стабильности производства, наличия других производителей или поставщиков. Для выработки оптимального решения, возможно, весь процесс придется повторить несколько раз.
Рассмотрим основные критерии выбора МК в порядке значимости.
Пригодность МК для конкретной прикладной системы. Из возможных вариантов реализации системы (применением набора устройств автоматики, специализированных микросхем или однокристального МК промышленного производства) необходимо окончательно выбрать МК как гибкое, универсальное и недорогое средство автоматизации. Представляя основные задачи МК в разрабатываемой системе, необходимо выбрать МК с наиболее подходящим количеством контактов/портов ввода/вывода и набором встроенных дополнительных периферийных устройств (последовательные порты ввода/вывода, RAM, ROM, A/D, D/A, ШИМ, и т. д). Также надо убедиться в отсутствии избыточности по структуре и в оптимальном соотношении производительности и стоимости МК.
Доступность выбранного МК.Используя информацию о поставщиках и производителях МК, необходимо определить, имеются ли данные МК в количествах, достаточных для реализации вашего проекта, производятся ли сейчас и каковы перспективы их приобретения в будущем?
Поддержка разработчика МК. Для эффективной реализации задуманного проекта немаловажную роль играют такие факторы, как наличие ассемблеров и/или компиляторов с развитыми средствами отладки: оценочных модулей (EVM), внутрисхемных эмуляторов, насадок для логических анализаторов, отладочных мониторов, отладчиков программ в исходных текстах. Существенную помощь оказывают разработчики МК, осуществляющие информационную поддержку распространением примеров применения со схемами и исходными текстами программ, сообщений об ошибках, а также бесплатных оценочных ассемблеров. Для поддержки применений фирмы-поставщики обязаны иметь специальные группы поддержки применений, включающие инженеров, техников и менеджеров, обеспечивающих быструю реакцию на запросы о помощи.
Надежность фирмы-производителя. Хорошим ориентиром в выборе МК является компетентность фирмы-производителя, подтвержденная уже выполненными разработками, надежность производства и качества продукции, подтвержденная сертификатами, продолжительность работы в данной области, хотя не следует забывать, что любая фирма должна была с чего-то начинать.
Системные требования. Системный анализ проекта позволяет ответить на ряд вопросов и выявить существенные системные требования, в числе которых:
состав периферийных устройств. Реализация некоторых функций ввода/вывода и обработки данных возможна как чисто программными средствами, так и с использованием встроенных специализированных средств – периферийных устройств, позволяющих повысить производительность МК, однако набор таких устройств для МК различных фирм-производителей и внутри семейств МК может различаться;
манипуляции при программной обработке данных. Структуры обрабатываемых данных могут существенно повлиять на производительность системы, поскольку обработка битовых полей и числовых данных требует различного подхода к алгоритмам и программам. Еще более существенной разницы в затратах потребует обработка данных по алгоритмам целочисленной арифметики и при операциях с плавающей запятой;
принцип управления системой. На успешное решение проекта может влиять правильность выбора одного из принципов управления системой: по командам, по готовности или по прерываниям, когда система должна работать в реальном времени (с жесткими характеристиками откликов);
типы устройств ввода/вывода. Для связи с объектом управления и оператором могут потребоваться различные устройства: терминалы, выключатели, реле, контакторы, клавиатура, сенсоры и датчики (температуры, света, напряжения, тока, положения), звуковые устройства (микрофоны, синтезаторы), индикаторы: жидкокристаллические (LCD); светодиодные (LED), аналого-цифровые (ADC) и цифроаналоговые (DAC) преобразователи;
тип системы электропитания.В разрабатываемой системе может потребоваться стабилизированное напряжение питания не только для МК, но и для устройств связи с объектом. При этом номинальные значения напряжений и мощности источников вторичного питания (ВИП) будут определяться составом системы. В ряде случаев может потребоваться бесперебойная система электропитания со встроенными аккумуляторными батареями;
условия эксплуатации.Выбор элементов системы должен учитывать диапазон рабочих температур, атмосферного давления, влажности, а также агрессивность и взрывоопасность среды при эксплуатации и хранении системы;
массогабаритные характеристики.Наличие ограничений по массогабаритным характеристикам определяет много дополнительных требований, среди которых могут быть требования по базированию пользовательского программного обеспечения (на компакт-дисках, на твердотельных дисках, на микросхемах).
Основные особенности микроконтроллера.
Разрядность. Существуют группы 8-, 16-, 32-разрядных МК – по размеру АЛУ и индексных регистров или по размеру шин обмена данными и инструкциями.
Тактовая частота (или более точно – скорость шины) определяет, сколько операций ввода/вывода и вычислений может быть выполнено за единицу времени. Ранние МК могли работать в узком диапазоне частот, новые – в широком, вплоть до нулевой. Снижение тактовой частоты уменьшает потребление, а повышение – приводит к возрастанию вычислительной и потребляемой мощностей. Однако следует ожидать, что система с более высокой тактовой частотой будет стоить больше уже потому, что все дополнительные микросхемы (RAM, ROM, PLD) тоже будут дорогостоящими. В некоторых случаях выбор тактовой частоты может быть связан с требованиями определенной скорости обмена данными по последовательным каналам.
Язык программирования. Выбор языка программирования: ассемблер или язык высокого уровня (чаще всего «Си»).
Технология изготовления. Сравнивая технологии изготовления МК отметим, что N-канальную применяли в более ранних разработках. Современная технология HCMOS позволяет использовать полный диапазон напряжений от 0 до U питания, МК потребляют меньшую мощность, меньше нагреваются, имеют меньшие габариты и, следовательно, более дешевы в производстве, так как на одном кристалле получается большее количество чипов.
Возможности микроконтроллера. Наличие встроенных периферийных и дополнительных устройств повышает надежность систем на основе МК, поскольку не требуется внешних электрических цепей. К таким устройствам относятся устройства памяти, порты ввода/вывода, таймеры, системные часы, генераторы.
Память – устройство для хранения данных и программ. Оперативная память (RAM) используется для записи и хранения данных, полученных путем обмена с датчиками и терминалами или в процессе обработки (вычислений) во время работы системы. Постоянная память (ROM) используется для хранения программы, которая записывается один раз, до того как система начнет работать. Другие типы устройств памяти – перепрограммируемая (EPROM), электрически перепрограммируемая (EEPROM), FLASH – позволяют делать перезапись от сотен до десятков тысяч раз, что необходимо при отладке системы или может быть использовано для хранения некоторых параметров настройки.
Таймер – это часы реального времени и таймеры прерываний. Следует иметь в виду разрешение и диапазон таймеров (тактовую частоту и разрядность), а также наличие функций захвата событий и входных сигналов, что позволяет реализовывать эффективные алгоритмы обработки данных и управления аппаратурой.
Средства ввода/вывода включают порты параллельные и последовательные, аналого-цифровые (ADC) и цифроаналоговые (DАC) преобразователи, драйверы клавиатуры и дисплея – жидкокристаллического (LCD) или вакуумного флуоресцентного (VFD).
Сторожевой таймер (WDT) – таймер слежения за нормальным функционированием МК, система обнаружения отказа тактового генератора или «зависания» программы – бесконечного ожидания или циклического выполнения какой-то части программы в ущерб функционированию системы.
Системный интеграционный модуль (SIM) позволяет выбрать конфигурацию памяти и настроить внешние контакты микросхемы на ввод или вывод данных, а также настроить специальные регистры, управляющие работой всех встроенных периферийных устройств. В большинстве МК с внутрисхемными ресурсами содержится блок конфигурационных регистров для управления этими ресурсами, обеспечивающими необходимую гибкость при низкой стоимости.
Набор команд микроконтроллера. Набор команд МК играет важную роль в определении возможностей системы: манипуляции с битовыми полями, арифметические операции, умножение, деление и табличные преобразования.
Система команд микроконтроллера тесно связана с архитектурой. На рис. 20 показаны примеры выполнения арифметической операции с двумя операндами для процессоров с различной архитектурой.
Для большинства 8-разрядных микроконтроллеров (типа MCS-51, PIC) с «классической» аккумуляторной архитектурой операция сложения выполняется в 3 этапа:
загрузка первого операнда в аккумулятор, имеющий связь с одним из портов арифметическо-логического устройства (АЛУ);
извлечение второго операнда из оперативной памяти, сложение с данными, находящимися в аккумуляторе, и автоматическая передача результата в аккумулятор;
пересылка результата выполнения операции по месту назначения (в ОЗУ).
Такой подход позволяет существенно уменьшить формат команд за счет сокращения адресной части (необходим адрес только одного операнда), что уменьшает объем памяти программ.
По мере развития микропроцессорной техники аккумуляторная архитектура стала тормозом в повышении производительности процессора, появилась регистр-регистровая архитектура (16-разрядные микроконтроллеры MCS-196).
Основное отличие новой архитектуры заключается в том, что любые ячейки интегрированной на кристалл сверхбыстродействующей оперативной памяти, регистрового ОЗУ могут служить источником или приемником данных, т. е. могут выполнять функции аккумулятора. При этом любая команда процессора может быть трехоперандной и необходимость в дополнительных операциях по пересылке данных в аккумулятор и в ОЗУ отпадает. Естественно, время обработки данных сокращается, но сложность и формат команд увеличиваются. В сочетании с возможностью обработки 16-разрядных данных производительность MCS-196 по сравнению сMCS-51 увеличивается в несколько раз при работе на одной и той же тактовой частоте.
Прерывания. В системах реального времени очень важную роль имеет система прерываний. От того, насколько быстрой будет реакция системы на внешнее событие, зависит ее способность выполнять свою роль в процессе управления. Количество линий и уровней прерываний, имеющихся и используемых в системе, определяет число событий, которые может обработать система. Наличие маски прерываний позволяет на время исключить влияние некоторых событий. Наличие индивидуальных векторов для программ обработчиков прерываний позволяет каждое событие обрабатывать отдельной программой, что исключает необходимость опрашивать все возможные источники прерываний. Системы реального времени оцениваются по времени реакции на прерывание – т. е. по времени перехода к первой команде программы обработки.
Характеристика разработчика системы. Специально подготовленный и обученный персонал и наличие специальных средств разработки позволяет существенно сократить сроки и повысить вероятность успеха разработки.
Характеристика поставщика. Поставщиком может быть производитель МК или дилер нескольких компаний, обеспечивающий оптовые поставки.
Карпутер 3. Выбираем микроконтроллер

Итак, со схемами в proteus наигрались, теперь голова полна идеями, хотелками и желалками. Но ни одна идея не реализуется сама собой, поэтому надо выбрать "движок" для нее.
Как выбирают контроллер?
Во-первых, по личным предпочтениям. Кому-то нравится одна архитектура, кому-то другая. У кого-то уже есть опыт с одними микроконтроллерами и ему лень изучать другие … Но я считаю, что раз опыта и предпочтений нет, поэтому — stm32. Вам на данном этапе все равно, а мне потом спасибо скажете.
Во-вторых, по скорости. Если задача сложная, то думаю понятно, что работающий на 72МГц контроллер обгонит работающего на 16МГц (грубо — у кого больше литраж у двигателя, тот быстрее разгонится или больше увезет). А если устройство работает от батареек, то наоборот, устройство работающее на 16МГц легко даст фору работающему на 72х (опять же, чем больше литров, тем чаще на заправку надо будет ездить). Но на данном этапе нам совершенно все равно, какая скорость у контроллера — для нас подойдет любая.
И наконец, по числу портов и их возможностями. Все порты делятся на два типа: цифровые и аналоговые. Цифровые оперируют уровнями типа "есть сигнал" и "нету сигнала", а аналоговые — "какой уровень у сигнала?". Говоря другими словами — кнопки, выключатели и прочие переключатели — это цифровые, а всякие регуляторы, измерители и прочее — аналоговые. На каждую кнопку, релюшку или измеритель надо по одному порту (конечно, есть куча возможностей, как от этого уйти, но пока нам этого не надо). И крайне рекомендую при выборе зарезервировать пару портов под всякие доделки и внезапно всплывшие идеи.
Ладно, хватит разговоров, пора выбирать то, на чем делать будем, а то очень охота в магазине денег потратить, пока еще есть возможность.
Что будем делать-то? В смысле для чего мы все это затеяли? Давайте начнем с простого. Пусть будет система автоматического включения света в машине. Как пример использования: садимся в машину, включаем зажигание, заводим машину и через некоторое время наш контроллер включает фары. Выключили зажигание — все выключилось. Сплошные бонусы: стартеру легче крутить двигатель — фары не отбирают лишних ампер и вам не надо будет помнить о включении фар.
Какой будет алгоритм работы?
1. Измеряем напряжение бортовой сети
2. Напряжение меньше 13В? если да, иди на п.1
3. Подождать 5 секунд.
4. Включить фары.
Все, никаких заморочек. Просто и совсем не страшно. Как видно, нам потребуется всего 2 порта: один аналоговый для измерения напряжения в сети и один цифровой, для управления релюшкой фар.
(отступление) Не хотите фары включать? Ну тогда например можно автоматически включать и выключать компрессор в пневмосистеме. Или в зависимости от температуры включать нагреватель или вентилятор. В общем, подойдет любой вариант "измерил что-то и как это что-то достило такого-то уровня — включил или выключил нечто".
Вернемся к нашим баранам. Нам нужен микроконтроллер, у которого есть как минимум 1 аналоговый порт на вход и 1 цифровой порт на выход. Сейчас смешно, да. Но потом всего будет не хватать и начнутся мучения.
Теперь готовимся скачать много из сети. Для начала нам нужна программа STM32CubeMx. (Все поисковики ее легко находят, но вот прямая ссылка www.st.com/web/catalog/to…533/PF259242?sc=stm32cube там мотайте страницу в самый низ и справа будет маленькая красная кнопочка Download).
Зачем нужна эта программа? Как я писал в первом посте, STM32 имеют один, но очень большой и неприятный минус — очень сложно начать с ними работать. В этих микроконтроллерах очень много возможностей и вариаций, поэтому даже просто запустить его составляет очень большую проблему. Команды инициализации, предназначенные для одной серии, не подходят для другой. Один и тот же порт может выполнять разные функции на разной частоте, причем все это настраивается в четырех или пяти местах. В общем, реальный кошмар после атмеловских контроллеров и 99% причин неработащих программ.
Вот и придумали этакий "генератор кода инициализации", когда можно мышкой не торопясь повыбирать порты и их функции. При этом идет одновременный контроль правильности использования порта и непересечение его с другими функциями. В общем, скачивайте, распаковывайте и запускайте программу (может потребовать java, так что тоже ставьте). Как ставить программы, нажимая next, я рассказывать не буду 🙂

Перед вами откроется очень информативное окно. New Project — это создать новый проект, Load Project — загрузить старый, который редактировали раньше. Нам естесственно надо выбрать создать новый. И тут …

И тут перед вами откроется окно, в котором собрана вся (почти) линейка микроконтроллеров. Первая вкладка — MCU Selector позволяет выбрать подходящие контроллеры в их голом виде. Слева в табличке функционал, справа — подходящие контроллеры. Скажем, нужно нам в нашем проекте использовать одновременно ethernet и часы реального времени, так значит ставим галочки и получаем, что нам подходят 88 микроконтроллеров из 590 (на момент написания). Но эта вкладка для продвинутых пацанов.
Нам нужна следующая вкладка, которая называется Board Selector. Тут уже можно выбрать готовые платы, со всем распаянным. Сразу рекомендую нажать кнопку ">>", которая будет показывать изображение платы.

Механизм тот же самый — слева выбираем что хочется, а справа получаем список того, где это есть. Потом открываем веб-сайт ближайшего магазина электроники и смотрим на наличие и цену. Лично у меня есть платы STM32L100 и STM32F3 (именно она изображения на скриншоте). Так как F3 мне нравится больше, то и в дальнейшем я буду использовать именно эту плату. Но повторюсь, вы можете использовать любую плату или процессор — главное, что бы он вам подошел по характеристикам.
Выбрав плату или процессор, жамкаем на кнопоку ОК в самом низу. Компьютер немного подумает и потом выдаст примерно вот такую картинку.

Слева будут всякие возможности, которые умеет процессор, а справа — как и на что распределены ножки и процессора. Если вы вышли сюда из выбора плат, то программа сама показала, что на плате куда подключено. Как видите, все ножки помечены разными цветами.
Желтенькие и светлозеленые — ножки, назначение которых изменить нельзя. Питание, земля и прочие подобные ножки.
Оранживенькие — ножки, на которые повешено то, что есть на плате и что можно либо отключить, либо заиспользовать. У меня это кварцевые резонаторы, гироскоп с компасом, USB порт и так далее.
Зелененькие — это ножки, на которые тоже повешено то, что есть на плате, но это ТО — кнопки, светодиодики и прочее. Грубо говоря, отличие только в сложности с точки зрения контроллера. Таким же цветом будут обозначаться и ножки, которые вы выделили для вашего проекта.
Серенькие — свободные ножки, которые можно использовать.
"Пришпилленость" ножки означает, что программа не может менять ее назначение, как бы этого ей не хотелось. Дело в том, что если у вас нету предпочтения, какой именно порт для чего использовать, то программа постарается "раскидать" их так, что бы микроконтроллер был наиболее функциональным.
Как менять назначение ножек? Есть два способа. Первый — это просто мышкой ткните на ножке. Вот для примера я ткнул на ножке, которая у меня подключена к голубой кнопке.

Как видите, эта ножка может выполнять аж 17 функций, но сейчас она работает как GPIO_Input (я ниже объясню, что это значит).
А второй способ — воспользоваться левой вкладкой и включить нужную функцию.

Как видим, у функции вообще горит желтый предупреждающий знак, который показывает, что что-то с ней не то. Открыв ее, можно увидеть подсвеченным красным подфункцию. В данном случае это IN1. Подведя мышку к красному, можно узнать, что с чем конфликтует. В данном конкретном случае можно увидеть, что 1й канал 1го аналого-цифрового преобразователя конфликтует на ножке процессора PA0, которая уже стоит в режиме GPIO_Input. Белиберда, да? Но ничего. Для примера можно обидеться и раз нам не дают использовать IN1, выбрать IN3, что бы это не значило. И обратите внимание, на рисунке процессора справа одновременно начнет показываться как "занятая" соответствующая ножка процессора. В нашем случае это PA3, в левом нижнем углу.
Дальше можно начинать включать те или иные функции, сообразуясь со своим мнением о прекрасном и расположением выводов на данной конкретной плате.
Итак, как же понять, какие функции можно повесить на ножку? Что бы не забивать голову, я опишу только наиболее нужные и часто используемые функции. Назначение других можете узнать сами, когда прижмет (но 90% это никогда не понадобится).
Итак, что можно выбрать?
ADC — Или АЦП, аналогово-цифровой преобразователь. Показывает значение напряжения. У большинства АЦП есть каналы, к которым он может подключаться. А каналы напрямую подключены к ножкам. То есть когда вам надо измерить напряжение на 1,2 и 3й ножке, то микроконтроллер на самом деле будет выполнять примерно следующее "подключить ацп к ножке 1, измерить, подключить ацп к ножке 2, измерить, подключить ацп к ножке 3, измерить". В принципе, для большинства задач этого достаточно, ведь измерение одного канала занимает от 1 до 10 мс. Но есть задачи, когда необходимо реально одновременно измерить напряжение на несколких ножках. В таком случае используют два или больше АЦП. Например, в F3 серии аж 4 АЦП, поэтому мы можем измерять 4 уровня одновременно. Если мы заиспользуем все доступные ресурсы, то сможем за 0,1с измерить 59 аналоговых выводов (ардуинщики, вы рыдаете? :).
DAC — или ЦАП. Цифро-аналоговый преобразователь. Преобразует некоторое значение в уровень сигнала на выходе. Обычно один DAC имеет от 1 до 10 выходов, каждый из которых можно регулировать отдельно.
TIM — таймеры. Срабатывающие "раз в нное время" сигналы. На таймерах в stm делается очень многое — от PWM (управление сервомоторами и яркостью) до подсчета частоты смены сигнала на входе. Немножко к ним имеют отношение RTC — часы реального времени (которые считают минуты и секунды, а не тики и такты) и WDG — системы, которые автоматически перезагружают контроллер, если он завис, но я их касаться не буду
USART/UART — контроллеры для связи с "внешним миром": с компьютерами, с другими контроллерами и так далее.
И наконец GPIO. Это порты общего назначения. То есть на них можно вешать все, что душе угодно. Они могут быть GPIO_Input — порт, работающий на вход (который принимает сигнал "есть" и "нет") и GPIO_Output — порт, работающий на выход (который выдает сигнал "есть" и "нет"). Вы можете увидеть GPIO_Reset — это означает, что порт находится в хз каком стоянии и GPIO_EXTI — это выход прерывания. В общем лишнее на данном этапе.
Все ножки маркируются следующим способом: [подсистема]_[функция]. Пример:
ADC1_IN6 — 6й вход 1го АЦП контроллера
DAC1_OUT1 — 1й выход 1го ЦАП контроллера
USART1_TX — порт передачи 1 контроллера связи.
Но вернемся назад. Из всего выше перечисленного нам нужен один ADC ввод и один GPIO_Output вывод. Для ввода я заиспользую ADC1_IN2 (ножка PA1), а для вывода GPIO_Output — PC5. Они расположены на одной стороне реальной платы, поэтому мне будет удобно с ними работать. И что самое главное, они не конфликтуют ни с чем, что уже есть на плате.

Щелкаем и меняем назначение нужных нам ножек. Обратите внимание на то, что у PA1 нет булавки, а у PC5 — есть. Это та самая функция переназначения портов, когда вдруг функционал будет конфликтовать, а нам нет разницы, откуда его брать. Что бы "прикрепить" функционал к ножке, надо просто правой кнопкой мышки по ней щелкнуть и выбрать Signal Pinning. Теперь ни одна сволочь не отберет у нас ее :). Кстати, там же можно и дать название ножке, что бы не запутаться.

Согласитесь, так немного красивее? И так по всем ножкам-функциям, которые нам потребуются в нашем будующем устройстве. Не подходит что-то — возвращяемся назад и выбираем другую плату/микроконтроллер. Но я буду считать, что мы этот этап успешно преодолели и с большим трудом выбрали и назначили так нужные нам аналоговый порт на вход и цифровой порт на выход.
Можно сохранить проект на всякий случай, ибо это только начало.
Теперь щелкаем следующую вкладку — Clock Configuration. И у некоторых сейчас порвет мониторы 🙂

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

Тут отображаются те системы, которые будут использоваться в нашем контроллере. Не бойтесь лишних. Просто программа умная и сама добавлят то, что необходимо для жизни микроконтроллера.
На картинке мы видим включенный контроллер ADC1 (для него нужны контроллер DMA, NVIC и RCC) и контроллер GPIO (Для него нужен RCC). В общем, давайте поверим, что нам это надо.
На этом экране у нас есть возможность тонкой настройки. Жмем на ADC1

Тут собраны все тонкие настройки для данного контроллера. Особо менять нечего, за исключением подсвеченного — Continuous Conversion Mode. Поставьте его в Enabled. Данная галочка говорит, что мы желаем запрограммировать контроллер так, что бы он постоянно мерял свои входы. И более того, измерянные значения сразу присваивал переменным. Ну ленивый я, пусть железка сама все делает 🙂
Аналогичную картинку можно получить и по GPIO портам.

Тут можно тоже поизменять разные параметры, но нам тут менять тоже ничего не надо.
В общем, полезная вкладка, особенно когда начинаешь использовать более сложные вещи, как USART или USB — здесь можно настроить все.
И наконец, последняя вкладка — Power Consumption Calculator. Тут можно прикинуть, сколько электричества будет потреблять микроконтроллер.

Но подчеркиваю, именно прикинуть. Ибо система не знает, сколько потребляет то, что еще подключено к этому контроллеру. На приведенном выше скриншоте я уже понажимал все кнопки. Согласно картинке, если мы ничего не будем подключать к этому микроконтроллеру, то на полной мощности он будет потреблять 30 миллиампер. Или говоря другими словами, от одной батарейки АА он проработает 3 с лишним суток. И это я не тыкал в различные режимы энергосбережения …
Итак, остался один последний шаг. Сгенерировать исходный код, котрый будет компилироваться и прошиваться в контроллер. На панели сверху есть кнопка "шестеренка с палкой". Нажимаем ее и …

Заполняем, где будут располагаться файлики и как мы обзовем проект. Так же выберем, для какой среды разработки будет генерироваться исходный текст. Выбор небольшой и все предлагаемые системы — полный шлак (тут конечно у каждого свои фломастеры, но тот же бесплатный CoCox уделывает Keil как бог черепаху), поэтому выберите MDK-ARM, как наиболее описанную в русском интернете.
Если вы запускаете генерацию в первый раз, система предложит скачать Firmware Package именно для вашего процессора. Ждем пока скачает и нагенерирует.

Увидели это окошко? Поздравляю! Вы прошли большую часть пути. Остался еще один шаг. Всего один …
Открываем браузер на www.keil.com/download/product/ и выбираем MDK-ARM v5. Вам дадут анкету, в которой реально проверяется только email. Проверяется — в смысле их сервер подключается к вашему серверу и проверяет валидность ящика, поэтому емайлы типа 2@1.co не проходят. Остальное нужно только для того, что бы выбрать, на каком языке потом вам напишет продавец со словами "купите у нас". Как обычно, у данной версии есть ограничения и самым главным из которых является ограничение в объеме кода в 32 килобайта. Поверьте, это довольно приличный объем для микроконтроллеров и вам его хватит надолго. Но если вас это напрягает, то сами знаете где можно найти вылеченную версию совершенно бесплатно.
На данном этапе можете спокойно идти пить чай. Версия, которую вам предлагают, занимает 500 мегабайт и скачаться мгновенно не может. А самизнаетекакая версия занимает еще больше, потому что в нее напихали всякого нужного и ненужного.
Как обычно, рассказывать как ставить программы с помощью нажатия кнопки next, я не буду. Единственное, что при первом запуске вылезет Packs Installer — дождитесь, пока он отработает и закрывайте его. Так что ставьте Keil и в той папочке, куда сохранили проект, найдите каталог Projects, в нем MDK-ARM и там ваш файл с типом mVision4 Project. Нажимаем на него …

Я тут его немного сплющил, но вы увидите именно это. Теперь нажимаем на кнопочку, которая во втором ряду, под "открыть". Похожа на папку для бумаг, в которую входит стрелочка. Ну или на клавиатуре F7. Этим мы запускаем компиляцию всего того, чего мы нагородили выше.

И только после того, как вы увидели в окошке снизу строчку 0 Errors(s), 0 Warning(s) вы можете поздравить себя — у вас есть полностью готовая прошивка для микроконтроллера. Ну и что, что она пока ничего не делает, зато 90% нашей первоначальной задачи уже выполнено. Теперь вы можете идти в магазин и покупать реальный микроконтроллер за реальные деньги. И у вас есть уверенность, что он заработает.
Выбираем микроконтроллер вместе
Прочитав эту статью я заметил большой интерес к выбору микроконтроллера у читателей и решил взглянуть на эту проблему с другой стороны.
Могу предположить, что всех интересует выбор их первого, либо первого 32-х битного МК.
Тем, кто знает, что на фотографии нет ни одного микроконтроллера — прошу в комментарии, дополнить мой рассказ и тем самым поделиться своим опытом с начинающими. Остальным, непременно под кат!
На мой взгляд чем проще будет каждый этап обучения — тем проще будет дойти до самостоятельного плаванья. Поэтому я считаю, что на начальном этапе следует брать все готовое. Ничего не придумывать самому. Представьте:
вы выбрали контроллер,
проглядели даташит,
развели под него плату,
или нашли ее на просторах интернета,
купили все компоненты(или аналоги если советуемых не было),
запаяли все,
написали первый «hello world»,
собрали программатор, прошили контроллер
И… и ничего не происходит! Что-то не работает, и вы не можете понять что: то ли в пайке ошибка, то ли что-то с программой, то ли в интернете кривая схема, то-ли проблемы с софтом.
Новичка такая ситуация ставит в тупик, знаю это по себе.
Чтобы такого не случилось проще всего сделать первые шаги под чьим-то руководством.
Преимущество простого старта отлично показывает платформа Arduino. Посудите сами: возможности контроллеров совсем не велики, цены на платы огромны, зато огромная поддержка сообщества и все уже готова, любые платы расширения, кучи примеров.
За счет этого и живет платформа!
Давайте посмотрим какой у нас вообще есть выбор! На рынке огромное количество производителей и архитектур. Но выбор на самом деле совсем не велик:
я бы сразу отсек все 8-ми и 16-ти битные архитектуры, кроме PIC и AVR, да иногда производители предлагают отладочные платы и контроллеры по очень заманчивой цене
но я не советую их брать потому, что это малораспространенные архитектуры и на них меньше примеров + пересаживаться на другие контроллеры будет сложнее.
По той же самой причине отсек все 32-х разрядные архитектуры кроме ARM + с ними еще начинаются проблемы с примерами, и они постепенно вымирают.
Арм микроконтроллеры делятся на ARM7, ARM9, Cortex M0, 3, 4.
Седьмые и девятые постепенно замещаюся кортексами и вскоре их тоже не будет.
Итого имеем:
AVR
PIC
ARM Cortex
Про пики сказать много не могу, но по-моему AVR их вытесняет из-за распространенности Arduino.
Но я все-же советовал Cortex, их возможности намного шире, к тому же есть выбор между производителями, а это на мой взгляд большой плюс. Да и существует масса упрощающих жизнь библиотек и даже генераторов кода, которые новичкам позволят не сильно вчитываясь в юзер мануал написать первую программу.
Итак, какие производители представлены у нас?
NXP, ST, Freescale, TI, Luminary Micro, Atmel и много других но поменьше распространенных.
Как выбрать из такого большого количества производителей?
надо выбирать не контроллер а отладочную плату, библиотеки, среду разработки и сообщество.
Сам щупал только NXP, ST и Freescale.
Первые 2 производителя наводнили Москву и другие города России дешевыми/бесплатными отладками — это очень хорошо в том смысле, что всегда есть у кого спросить, есть к кому обратиться.
Также не нужны никакие программаторы — все есть на борту!

Для NXP есть альтернатива от Olimex www.chipdip.ru/product/lpc-p1343.aspx
Есть и минусы: когда захочется расширить их возможности придется искать новую.
Больше всего мне понравилась отлатдка от Freescale, с которой столкнулся на работе.
На мой взгляд это лучший вариант для новичка, но у нее есть один огромный минус:
пока довольно сложно найти в продаже и регионам придется заказывать, но оно того стоит:
Первое и самое важно преимущество: стандартные платы расширения (сначала покупаете стандартный набор, потом докупаете вайфай, сенсоры и тп)

Еще большущий плюс это среда разработки: благодаря Processor Expert можно генерировать код, и море примеров с объяснениями.
Итак подведем итоги:
1 купить Arduino Uno c AVR за 1000р на плате практически ничего нет, зато в продаже множество плат расширения и огромное сообщество
2 купить STM32L-DISCOVERY c M3 за 16.22дол c сенсорными кнопками, USB и маленьким LСD-дисплеем и дебагером на борту
3 купить за 1000р LPCEXPRESSO c M3 с просто выведеными контактами и дебагером на борту
4 купить KWIKSTICK с M4 за 30дол+ доставку с большим сегментным LCD, USB, входом под наушники, динамиком, сенсорными кнопками, литиевой батарейкой, микрофоном, ИК портом, слотом под SD-карту + возможность расширения функционала без пайки и больших вложений. Большой набор библиотек, примеров и хорошая IDE.
В итоге я считаю, что надо покупать STM32L-DISCOVERY и начинать с нее,
либо если не лень заморочиться с заказом платы и чуть-чуть побольше заплатить брать KWIKSTICK — с ней старт будет полегче, да и хватит ее на дольше, но для общения с коллегами нужен английский.
Прошу всех, знакомых с МК написать свой выбор отладочных средств для новичка, я с удовольствием дополню статьюю
UPD: stm32l-discovery по таким ценам можно купить в Компэле
Kwikstick на сайте freescale
Шаг 4. Как выбрать нужный микроконтроллер.
Для создания робота нужно сделать правильный выбор микроконтроллера. Сначала нужно разобраться с понятием, что такое микроконтроллер и что он делает?
Микроконтроллер — это вычислительное устройство, способное выполнять программы (то есть последовательность инструкций).
Он часто упоминается как “мозг” или “центр управления” робота. Как правило, микроконтроллер отвечает за все вычисления, принятие решений и коммуникации.
Для того, чтобы взаимодействовать с внешним миром, микроконтроллер имеет ряд штырей или выводов для электрического распознавания сигнала. Так сигнал может быть включен на максимум (1/С) или минимум (0/выкл) с помощью инструкции программирования. Эти выводы также могут быть использованы для считывания электрических сигналов. Они поступают с датчиков или других приборов и определяют, являются сигналы высокими или низкими.

микроконтроллер для робота
Большинство современных микроконтроллеров может также измерять напряжение аналоговых сигналов. Это сигналы, которые могут иметь полный диапазон значений вместо двух четко определенных уровней. Происходит это с помощью аналогового цифрового преобразователя (АЦП). В результате микроконтроллер может присвоить сигналу числовое значение в виде аналогового напряжения.Это напряжение не является ни высоким, ни низким и, как правило, находится в диапазоне 0 — 10 вольт.
Что может делать микроконтроллер?
Хотя микроконтроллеры могут показаться довольно ограниченными, на первый взгляд, многие сложные действия можно выполнять, используя контакты высокого и низкого уровня сигнала для программирования алгоритма. Тем не менее создавать очень сложные алгоритмы, такие как интеллектуальное поведение или очень большие программы, может быть просто невозможно для микроконтроллера из-за ограниченных ресурсов и ограничения в скорости.
Например, для того, чтобы заставит мигать свет, можно запрограммировать повторяющуюся последовательность. Так микроконтроллер включает высокий уровень сигнала, ждет секунду, превращает его низкий, ждет еще секунду и сначала. Свет подключен к выходному контакту микроконтроллера и в циклической программе будет мигать бесконечно.

микроконтроллер со светодиодами
Аналогичным образом, микроконтроллеры могут быть использованы для контроля других электрических устройств. В первую очередь таких как приводы (при подключении к контроллеру двигателя), устройства хранения (например, карты SD), WiFi или bluetooth-интерфейсы и т. д. Как следствие этой невероятной универсальностью, микроконтроллеры можно найти в повседневной жизни.
Практически в каждом бытовом приборе или электронном устройстве используется, по крайней мере, один микроконтроллер. Хотя часто используется и несколько микроконтроллеров. Например, в телевизорах, стиральных машинах, пультах управления, телефонах, часах, СВЧ-печах и многих других устройствах.
В отличие от микропроцессоров (например, центральный процессор в персональных компьютерах), микроконтроллер не требует периферийных устройств. Таких как внешняя оперативная память или внешнее устройство хранения данных для работы. Это означает, что хотя микроконтроллер может быть менее мощным, чем их коллеги ПК. Почти всегда разработка схем и продуктов, основанных на микроконтроллерах значительно проще и дешевле.Потому что требуется очень мало дополнительных аппаратных компонентов.
Важно отметить, что микроконтроллер может выдавать только очень небольшое количество электрической энергии через свои выходные контакты. Это означает, что к микроконтроллеру не получиться подключить мощный электродвигатель, соленоид, большое освещение, или любую другую большую нагрузку напрямую. Попытка сделать это может вывести контроллер из строя.
Какие существуют более специализированные функции микроконтроллера?
Специальное оборудование, встроенное в микроконтроллеры позволяет этим устройствам сделать больше, чем обычный цифровой ввод/вывод, базовые расчеты и принятие решений. Многие микроконтроллеры с готовностью поддерживает наиболее популярные протоколы связи, такие как UART (RS232 или другой), SPI и I2C. Эта функция невероятно полезна при общении с другими устройствами, такими как компьютеры, датчики, или другие микроконтроллеры.
Хотя эти протоколы можно реализовать вручную, всегда лучше иметь выделенное встроенное оборудование, которое заботится о деталях. Это позволяет микроконтроллеру сосредоточиться на других задачах и обеспечивает чистоту программы.

rs232
Аналого-цифровые преобразователи (АЦП), используются для преобразования аналоговых сигналов напряжения в цифровые. Там количество пропорционально величине напряжения, и это число может затем использоваться в программе микроконтроллера. Для того, чтобы выходное промежуточное количество энергии отличается от высокого и низкого, некоторые микроконтроллеры имеют возможность использовать широтно-импульсную модуляцию (ШИМ). Например, этот способ позволяет плавно изменять яркость свечения светодиода.
Наконец, в некоторые микроконтроллеры интегрирован стабилизатор напряжения. Это достаточно удобно, так как позволяет микроконтроллеру работает с широким диапазоном напряжения. Поэтому вам не требуется обеспечивать необходимые значения напряжений. Это также позволяет легко подключать различные датчики и другие устройства без дополнительного внешнего регулируемого источника питания.
Аналоговые или цифровые?
Какие нужно использовать входные и выходные сигналы зависит от поставленной задачи и условий. Например, если у вас стоит задача просто что-то включить или выключить, то вам достаточно чтобы сигнал на входном контакте микроконтроллера был цифровой.
Двоичное состояние переключателя 0 или 1. Высокий уровень сигнала может быть 5 вольт, а низкий 0. Если же вам нужно измерить, например, температуру, то нужен аналоговый входной сигнал. Далее АЦП на микроконтроллере интерпретирует напряжение и преобразует его в числовое значение.
Как программировать микроконтроллеры?
Программирование микроконтроллеров стало более простым благодаря использованию современных интегрированных сред разработки IDE с полнофункциональными библиотеками. Они легко охватывают все наиболее распространенные задачи и имеют много готовых примеров кода.
В настоящее время микроконтроллеры могут быть запрограммированы на различных языках высокого уровня. Это такие языки как C, C++, С#, Ява, Python, Basic и другие. Конечно, всегда можно написать программу на ассемблере. Хотя это для более продвинутых пользователей с особыми требованиями (с намеком на мазохизм). В этом смысле, любой должен быть в состоянии найти язык программирования, который лучше всего соответствуют его вкусу и предыдущему опыту программирования.
Программировать микроконтроллеры становится еще проще, так как производители создают графические среды программирования. Это пиктограммы, которые содержат в себе несколько строк кода. Пиктограммы соединяются друг с другом. В результате создается программа визуально простая, но содержащая в себе большое количество кода. Например, одно изображение может представлять управление двигателем. От пользователя требуется только разместить пиктограмму там, где необходимо и указать направление вращения и обороты.

среда программирования Lego Education EV3
Разработанные микроконтроллерные платы достаточно удобны в эксплуатации. И их проще использовать долгое время. Они также обеспечивают удобные питание от USB и интерфейсы программирования. Следовательно, есть возможность подключаются к любому современному компьютеру.
Почему не использовать стандартный компьютер?
Очевидно, что микроконтроллер очень похож на процессор компьютера. Если это так, почему бы просто не использовать компьютер для управления роботом? Итак, что выбрать настольный компьютер или микроконтроллер?
системный блок компьютера
По сути, в более продвинутых роботах, особенно тех, которые включают сложные вычисления и алгоритмы, микроконтроллер часто заменяются (или дополняются) стандартным компьютером. В настольном компьютере установлена материнская плата, процессор, оперативная память устройства (например, жесткий диск), видеокарта (встроенная или внешняя).
Дополнительно есть периферийные устройства, такие как монитор, клавиатура, мышь и т. д. Эти системы обычно дороже, физически больше, потребляют больше энергии. Основные отличия выделены в таблице ниже. Кроме этого они часто имеют больший функционал чем необходимо.
Как выбрать микроконтроллер правильно?
Если вы изучаете робототехнику, то вам понадобится микроконтроллер для любого робототехнического проекта. Для новичка, выбор правильного микроконтроллера может показаться сложной задачей. Особенно учитывая ассортимент, технические характеристики и области применения. Есть много различных микроконтроллеров доступны на рынке:
- Ардуино
- BasicATOM
- BasicX
- Lego EV3
- и многие другие
Для того чтобы правильно выбрать микроконтроллер задайте себе следующие вопросы:
Какой микроконтроллер самый популярный для моего приложения?
Конечно, создание роботов и электронных проектов в целом-это не конкурс популярности. Очень хорошо если микроконтроллер имеет большую поддержку сообщества. И успешно используется в похожих или даже одинаковых ситуациях. В результате это может значительно упростить этап проектирования. Таким образом, вы могли бы извлечь пользу из опыта других пользователей, как среди любителей, так и среди профессионалов.
Участники сообществ конструкторов роботов делятся друг с другом результатами, кодами, картинками, видео, и подробно рассказывают об успехах и даже неудачах. Все это является доступными материалами и возможностью получать советы от более опытных пользователей. Следовательно, может оказаться очень ценным.
Есть какие-то особенные требования у вашего робота?
Микроконтроллер должен быть способен выполнять все специальные действия вашего робота, чтобы функции исполнялись правильно. Некоторые особенности являются общими для всех микроконтроллеров (например, наличие цифровых входов и выходов, возможность выполнять простые математические действия, сравнение значений и принятие решений).
Возможно другим контроллерам требуется специфическое оборудование (например, АЦП, ШИМ, и коммуникационный протокол поддержки). Также требования к памяти и скорости, а также число выводов должны быть приняты во внимание.
Какие компоненты доступны для конкретного микроконтроллера?
Может быть ваш робот имеет специальные требования или необходим конкретный датчик или компонент. И это имеет решающее значение для вашего проекта. Следовательно выбор совместимого микроконтроллера, безусловно, очень важен.
Большинство датчиков и компонентов может взаимодействовать напрямую со многими микроконтроллерами. Хотя некоторые комплектующие предназначены для взаимодействия с конкретным микроконтроллером. Возможно они будут уникальными и несовместимыми другими типами микроконтроллеров.
Что нас ждет в будущем?
Цена на компьютеры резко идет вниз, и достижения в области технологии делают их меньше и эффективнее. В результате одноплатные компьютеры стали привлекательным вариантом для роботов. Они могут работать с полноценной операционной системой (Windows и Linux являются наиболее распространенными).
Дополнительно компьютеры могут подключаться к внешним устройствам, таким как USB-устройства, жидкокристаллические дисплеи и т. д. В отличие от своих предков, эти одноплатные компьютеры, как правило, значительно меньше потребляют электроэнергии.
Основные критерии выбора
Для того чтобы выбрать микроконтроллер составим список нужных нам критериев:
- Стоимость микроконтроллера должна быть низкой
- Он должен быть простым в использовании и хорошо поддерживаться
- Важно наличие доступной документации
- Он должен программироваться в графической среде
- Он должен быть популярен и иметь активное сообщество пользователей
- Так как наш робот будет использовать два двигателя и различные датчики, то микроконтроллеру понадобится как минимум два порта для управления двигателями и несколько портов для подключения датчиков. Также должна быть возможность для расширения количества подключаемых устройств в будущем.
Этим критериям соответствует модуль EV3 из набора Lego Mindstorms EV3.
