Контакты

ARM. Учебный курс. IAR EWARM. Создание проекта. Создание шаблонов проекта IAR EWARM (и не только для ARM) Iar embedded workbench arm описание

Среда IAR Workbench проприетарна и требует лицензирования (в случае если ваш код превышает 32 КБ), однако её вполне хватает для домашнего использования.

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

С сайта ST Microelectronics нужно будет скачать архив - в нём содержатся:

  • CMSIS (Cortex Microcontroller Software Interface Standard) - библиотека, определяющая работу ядра, того самого Cortex M3 (о ней мы поговорим позже);
  • SPL (Standart Peripheral Library) - стандартная периферийная библиотека, которая сэкономит вам много сил в конфигурации той или иной периферии;
  • Examples - если нужно изучить, как работает новая для вас периферия, то в этой папке лежит множество примеров на все случаи жизни.

Запустив IAR, создайте рабочее пространство File New Workspace . Далее новый проект, меню Project Create New Project…

Программу можно писать на ассемблере, Си или С++. Мы будем использовать язык программирования Си.

Созданный проект необходимо настроить, для этого открываем меню Project Options . Во вкладке General Options выбираем целевой микроконтроллер - STM32F100x4 .


Кроме того, в Library Configuration ставим галочку Use CMSIS . Среда IAR уже включает в себя эту библиотеку, и добавлять её к проекту необязательно, однако новые версии могут выдавать предупреждение вида:

Warning : Label ‘xxxxx’ is defined pubweak in a section implicitly declared root

Проблема решается заменой некоторых строк во встроенной библиотеке CMSIS: в местах упоминания CODE:REORDER добавьте NOROOT(1) . Например:

PUBWEAK NMI_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
NMI_Handler

Далее добавляем путь, по которому будут храниться файлы *.c и *.h - для этого заходим во вкладку C/C++ Compile r ⇒ Preprocessor и добавляем &PROJDIR& (переменная, содержащий путь к папке с проектом).


В разделе Debugger выбираем в качестве отладчика ST-LINK . Ставим галочки Use flash loader и Verify во вкладке Download .

Мы продолжаем изучение программирования микроконтроллеров STM32.



Прежде всего познакомимся с фирмой производителем — ST Microelectronics .

Переходим в раздел Products -> Microcontrollers . Выбираем вкладку STM32 ARM Cortex .

Фирма ST производит микроконтроллеры STM32 в трех основных сегментах:

  • Ультранизкопотребляющие
  • Общего назначения
  • Высокопроизводительные.

На данной схеме указано соответствие названия микроконтроллера и ядра ARM Cortex, примененного в нем.

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

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

Пакет IAR может использоваться в двух режимах – это

  • режим 30-дневной полнофункциональной версии
  • режим с ограничением по объему компилируемого кода.

Для STM32 это 32 килобайта кода (из имеющихся 256 килобайт Flash-памяти). Но для учебных задач вполне достаточно, поэтому будем использовать именно этот вариант.

Запускаем скачанный архив и переходим в раздел Install IAR Embedded Workbench.


Программа IAR начинает свою установку. Принимаем лицензионное соглашение и указываем папку, куда будет установлена среда разработки. Можно оставить по умолчанию.

Дальше нам предлагается выбрать драйвера USB-устройств, которые нам понадобятся. Поскольку мы будем пользоваться программатором ST-link, я рекомендую убрать остальные драйвера, что немного ускорит процесс установки.

Устанавливаем программное обеспечение для STM микроконтроллеров, и на этом программа IAR завершает свою установку.

Теперь устанавливаем лицензионную информацию. Запускаем IAR License Manager, и нам предлагается ввести лицензионный ключ. Для этого необходимо зарегистрировать продукт на сайте IAR Systems. Если Вы уже имеете лицензионный ключ, можете ввести его. Если нет, переходим на сайт. Регистрация бесплатная. И нажимаем кнопку Register.

В соответствующей форме вводим тип лицензии – code size limited и заполняем обязательные поля. E-mail необходимо указать корректно, поскольку туда придет подтверждающее письмо. Также требуется указать отрасль, в которой будет применяться среда разработки IAR и указать производителя микроконтроллеров, для которых мы планируем применять эту среду – ST Microelectronics.
Отвечаем на несколько вопросов и подтверждаем регистрацию. Получаем соответствующее письмо подтверждения на указанный адрес электронной почты.

Лицензия успешно активирована, программа IAR готова к работе. Можем запустить IAR Systems. Выбираем язык интерфейса и видим окно среды разработки.


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

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

Есть совсем древние ЭПСН-40 и «москабель» 90Вт, чуть более новый ЭМП-100 (топорик), совсем новый китайский TLW 500W. Последние два особенно хорошо сохраняют температуру (даже при пайке медных труб), но вот паять ими микросхемы не очень удобно:). Попытка использования ZD-80 (пистолетик с кнопкой) не вышла - ни мощности, ни нормального поддержания температуры. Прочая «электронная» мелочь типа Antex cs18/xs25 годится только для совсем мелочей, да и встроенной регулировки не имеет. Лет 15 назад пользовался den-on"овским ss-8200, но жала там совсем малюсенькие, термодатчик далеко и градиент температуры огромен - несмотря на заявленные 80W, на жале по ощущениям и трети не будет.
В качестве стационарного варианта я уж лет 10 использую Lukey 868 (это практически 702, только нагреватель керамический и еще какие-то мелочи). Но портативности в ней нет никакой, с собой в карман или мелкую сумку никак не взять.
Т.к. на момент покупки я еще не был уверен «а нужно ли мне оно», был взят минимальный бюджетный вариант с K-жалом и ручкой, максимально похожей на привычный паяльник от Lukey. Возможно, что кому-то она кажется не очень удобной, но для меня важнее, что-бы ручки обоих используемых паяльников привычно и одинаково лежали в руке.
Дальнейший обзор можно будет условно разделить на две части - «как из запчастей сделать устройство» и попытка анализа «как это устройство и прошивка контроллера работают».
К сожалению, продавец убрал именно этот SKU, поэтому могу дать только ссылку на снимок товара из журнала заказов. Впрочем, нет никаких проблем найти аналогичный товар.

Часть 1 - конструкция

После макетной проверки работоспособности, встал вопрос о выборе конструкции.
Имелся почти подходящий блок питания (24v 65W), высотой практически 1:1 с платой управления, чуть уже ее и длиной около 100мм. Учитывая, что этот блок питания питал какую-то сдохшую (не по его вине!) связную и не дешевую lucent-овскую железку, а в его выходном выпрямителе стоят две диодные сборки на суммарные 40А, я решил, что он не сильно хуже распространенного здесь китайца на 6A. Заодно и валяться не будет.
Тестовая проверка на проверенном временем эквиваленте нагрузки (ПЭВ-100, выкручен на примерно 8 Ом)

показала, что БП практически не греется - за минут 5 работы ключевой транзистор, несмотря на свой изолированный корпус, нагрелся градусов до 40 (чуть теплый), диоды потеплее (но руку не обжигает, держать вполне комфортно), а напряжение по прежнему 24 вольта с копейками. Выбросы увеличились до сотни милливольт, но для данного напряжения и этого применения сие вполне нормально. Собственно, я остановил опыт из-за нагрузочного резистора - на его меньшей половине выделялось около 50W и температура перевалила за сотню.
В результате минимальные габариты были определены (БП + плата управления), следующим этапом шел корпус.
Поскольку одним из требований была портативность, вплоть до возможность распихать по карманам, вариант с готовыми корпусами отпал. Доступные универсальные пластмассовые корпуса совсем не годились по размерам, китайские алюминиевые корпуса под T12 для карманов куртки тоже великоваты, да и ждать еще месяц не хотелось. Вариант с «напечатанным» корпусом не проходил - ни прочности, ни теплостойкости. Прикинув возможности и вспомнив пионерскую молодость, решил сделать из древнего одностороннего фольгированного стеклотекстолита, валяющегося еще со времён СССP. Толстенная фольга (микрометр на тщательно разглаженном кусочке показал 0.2мм!) все равно не позволяла травить дорожки тоньше миллиметра из-за бокового подтравливания, а для корпуса - самое то.
Но лень вкупе с нежеланием пылить категорически не одобрила распиловку ножовкой или резаком. После прикидки имеющихся технологических возможностей, решил попробовать вариант распиловки текстолита на электрическом плиткорезе. Как оказалось - в высшей степени удобный вариант. Диск режет стеклотекстолит без всяких усилий, кромка получается практически идеальная (с резаком, ножовкой или лобзиком даже не сравнить), ширина по длине реза тоже одинаковая. И, что немаловажно, вся пыль остается в воде. Понятно, что если нужно отпилить один маленький кусочек, то разворачивать плиткорез слишком долго. Но даже на этот маленький корпус нужно было под метр реза.
Далее был спаян корпус с двумя отделениями - одно под блок питания, второе для платы управления. Первоначально, я не планировал разделение. Но, как и при сварке, припаянные в угол пластины при остывании стремятся уменьшить угол и дополнительная перепонка очень полезна.
Передняя панель согнута из алюминия в форме буквы П. В верхнем и нижнем отгибе нарезана резьба для фиксации в корпусе.
В результате получился такое (с устройством я до сих пор «играюсь», поэтому покраска пока очень черновая, из остатков старого балончика и без шлифовки):

Габаритные размеры самого корпуса - 73 (ширина) x 120 (длина) x 29 (высота). Ширину и высоту сделать меньше нельзя, т.к. размеры платы управления 69 x 25, да и найти более короткий блок питания тоже не просто.
Сзади установлен соединитель под стандартный электропровод и выключатель:


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

Черный изолятор из резиноподобного материала остался от исходного блока питания. Он довольно толстый (чуть меньше миллиметра), теплостойкий и очень плохо режется (отсюда и грубый вырез для пластиковой распорки - чуть-чуть не влезало). По ощущениям - как асбест, пропитанный резиной.
Слева от блока питания - радиатор выпрямителя, справа - ключевого транзистора. В оригинальном БП радиатором была тонкая полоска алюминия. Я решил «усугубить» на всякий случай. Оба радиатора изолированы от электроники, поэтому могут свободно прилегать к медным поверхностям корпуса.
На перепонке смонтирован дополнительный радиатор для платы управления, контакт с d-pak корпусами обеспечивается термопрокладкой. Пользы не много, но все лучше воздуха. Что бы исключить замыкание, пришлось чуть обкусить выступающие контакты «авиационного» разъема.
Для наглядности - паяльник рядом с корпусом:

Результат:
1) Паяльник работает примерно как заявлено и вполне помещается в карманах куртки.
2) В старом хламе утилизированы и более не валяются: блок питания, кусок стеклотекстолита 40-летней давности, балончик с нитроэмалью 1987 года выпуска, микровыключатель и небольшой кусок алюминия.

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

Часть 2 - заметки о функционировании

Как можно заметить, в первой части я вообще не упомянул о том, как все это работает. Мне показалось целесообразным не смешивать описание своей личной конструкции (довольно «колхозно-самопальной» на мой взгляд) и функционирование контроллера, который идентичен или похож у многих.

В качестве некоторого предварительного предупреждения хочу сказать:
1) Разные контроллеры имеют несколько разную схемотехнику. Даже у внешне одинаковых плат могут быть немножко отличающиеся компоненты. Т.к. у меня имеется только одно мое конкретное устройство, я никак не могу гарантировать совпадение с другими.
2) Прошивка контроллера, которую я анализировал, не единственная имеющаяся. Она распространенная, но у Вас может стоять другая прошивка, функционирующая другим образом.
3) Я нисколько не претендую на лавры первооткрывателя. Многие моменты уже были ранее освещены другими обозревателями.
4) Дальше будет много скучных букв и ни одной веселой картинки. Если внутреннее устройство не интересует - остановитесь здесь.

Обзор конструкции

Дальнейшие выкладки будут во многом связаны со схемотехникой контроллера. Для понимания его работы точная схема не обязательно, вполне достаточно рассмотреть основные компоненты:
1) Микроконтроллер STC15F204EA. Ничем особо не выдающийся чип семейства 8051, заметно более быстрый, чем оригинал (оригинал 35 летней давности, да). Питается от 5В, имеет на борту 10-битный АЦП с коммутатором, 2x512байт nvram, 4KБ программной памяти.
2) Стабилизатор на +5В, состоящий из 7805 и мощного резистора для уменьшения тепловыделения(?) на 7805, сопротивлением 120-330 Ом (на разных платах разное). Решение в высшей степени бюджетное и тепловыделяющее.
3) Силовой транзистор STD10PF06 с обвязкой. Работает в ключевом режиме на низкой частоте. Ничего выдающегося, старый.
4) Усилитель напряжения термопары. Подстроечный резистор регулирует его усиление. Имеет защиту на входе (от 24В) и подключен на один из входов АЦП МК.
5) Источник опорного напряжения на TL431. Подключен на один из входов АЦП МК.
6) Датчик температуры платы. Также подключен к АЦП.
7) Индиктор. Подключен к МК, работает в режиме динамической индикации. Подозреваю, что один из основных потребителей +5В
8) Ручка управления. Вращение регулирует температуру (и другие параметры). Линия кнопки в очень многих моделях не запаяна или разрезана. Если соединить, то позволяет настраивать дополнительные параметры.

Как несложно заметить, все функционирование определяется микроконтроллером. Почему китайцы ставят именно такой - мне неизвестно, он не сильно дешевый (около $1, если брать несколько штук) и впритык по ресурсам. В типовой китайской прошивке остаются свободными буквально десяток байт памяти программ. Сама прошивка написана на С или чем-то аналогичном (там видны явные хвосты библиотеки).

Функционирование прошивки контроллера

Исходных текстов я не имею, но IDA никуда не делась:). Механизм работы довольно простой.
При начальном запуске прошивка:
1) инициализирует устройство
2) загружает параметры из nvram
3) Проверяет нажатость кнопки, если нажата - ждет отжатия и запускает п/п настройки расширенных параметров (Pxx) Там много параметров, если нет понимания, то лучше их не трогать. Могу выложить раскладку, но опасаюсь спровоцировать проблемы.
4) Выводит на экран «SEA», ждет и запускает основной цикл работы

Есть несколько режимов работы:
1) Обычный, нормальное поддержание температуры
2) Частичное энергосбережение, температура 200 градусов
3) Полное отключение
4) Режим настройки P10(шаг настройки температуры) и P4(усиление ОУ термопары)
5) Режим альтернативного управления

После запуска работает режим 1.
При коротком нажатии кнопки производится переход в режим 5. Там можно повернуть регулятор влево и уйти в режим 2 или вправо - увеличить температуру на 10 градусов.
При длительном нажатии производится переход в режим 4.

В предыдущих обзорах было много споров, как правильно устанавливать вибродатчик. По имеющейся у меня прошивке могу сказать однозначно - без разницы. Уход в режим частичного энергосбережения выполняется по отсутствию изменений состояния вибродатчика, отсутствию существенных изменений температуры жала и отсутствию сигналов от ручки - все это на протяжении 3х минут. Замкнут вибродатчик или разомкнут - совершенно неважно, прошивка анализирует только изменения в состоянии. Вторая часть критерия тоже интересна - если вы паяете, то температура жала неминуемо плавает. И если фиксируется отклонение более чем на 5 градусов от заданной, выхода в режим энергосбережения не будет.
Если режим энергосбережения продлится больше заданного, то паяльник полностью выключится, на индикаторе будут нули.
Выход из энергосберегающих режимов - по вибрации или по ручке управления. Возврата из полного энергосбережения в частичный не бывает.

Поддержанием температуры МК занимается в одном из таймерных прерываний (их задействовано два, второе занимается дисплеем и прочим. Зачем так сделано непонятно - интервал прерывания и другие настройки выбраны одинаковые, вполне можно было обойтись единым прерыванием). Цикл управления состоит из 200 таймерных прерываний. На 200-м прерывании нагрев обязательно отключается (- целые 0.5% мощности!), выполняется задержка, после чего производится измерение напряжений с термопары, термодатчика и опорного напряжения с TL431. Далее все это по формулам и коэффициентам (частично задаваемым в nvram) пересчитывается в температуру.
Здесь я позволю себе маленькое отступление. Зачем в такой конфигурации термодатчик - не вполне понятно. При правильной организации, он должен давать поправку температуры на холодном спае термопары. Но в этой конструкции он измеряет температуру платы, не имеющую никакого отношения к требуемой. Его либо нужно переносить в ручку, как можно ближе к картриджу T12 (и еще вопрос - в каком месте картридже находится холодный спай термопары), либо вовсе выкинуть. Возможно, я чего-то не понимаю, но похоже, что китайские разработчики тупо передрали схему компенсации с какого-то другого устройства, совершенно не понимая принципов работы.

После измерения температуры вычисляется разница между заданной и текущей температурой. В зависимости от того, большая она или маленькая работают две формулы - одна большая, с кучей коэффициентов и накоплением дельты (желающие могут почитать про построение ПИД-регуляторов), вторая проще - при больших отличиях нужно либо греть максимально, либо полностью отключить (в зависимости от знака). Переменная ШИМ может иметь значение от 0 (отключено) до 200 (полностью включено) - по количеству прерываний в цикле управления.
Когда я только включил устройство (и еще не залез в прошивку), меня заинтересовал один момент - не было дрожания на ± градус. Т.е. температура либо держится стабильно, либо дергается сразу на 5-10 градусов. После анализа прошивки выяснилось, что дрожит оно по всей видимости всегда. Но при отклонении от заданной температуры менее чем на 2 градуса прошивка показывает не измеренную, а заданную температуру. Это ни хорошо и не плохо - дрожащий младший разряд тоже сильно раздражает - просто нужно иметь в виду.

Завершая разговор о прошивке хочу отметить еще несколько моментов.
1) С термопарами я не работал уже лет 20. Может за это время они стали линейнее;), но раньше для сколько-нибудь точных измерений и при наличии возможности, всегда вводилась функция корректировки нелинейности - формулой или таблицей. Здесь этого нет от слова совсем. Можно настроить только смещение нуля и угол наклона характеристики. Может во всех картриджах используются высоколинейные термопары. Либо индивидуальный разброс в разных картриджах больше, чем возможная групповая нелинейность. Хотелось бы надеяться на первый вариант, но опыт намекает на второй…
2) По непонятной для меня причине, внутри прошивки температура задается числом с фиксированной точкой и разрешением в 0.1 градус. Совершенно очевидно, что в силу предыдущего замечания, 10-битного АЦП, неверной поправки холодного конца, неэкранированного провода и т.п. реальная точность измерений и 1 градус никак не составит. Т.е. похоже, что опять содрано с какого-то другого устройства. А сложность вычислений чуть выросла (неоднократно приходится делить/умножать на десять 16-разрядные числа).
3) На плате имеются контактные площадки Rx/TX/gnd/+5v. Насколько я понял, у китайцев были специальные прошивки и специальная китайская программа, позволяющая напрямую получать данные со всех трех каналов АЦП и настраивать параметры ПИД. Но в стандартной прошивке ничего этого нет, выводы предназначены исключительно для заливки прошивки в контроллер. Программа для заливки доступна, работает через простой последовательный порт, только TTL-уровни нужны.
4) Точки на индикаторе имеют свой функционал - левая индицирует режим 5, средняя - наличие вибрации, правая - тип выводимой температуры (выставленная или текущая).
5) Для записи выбранной температуры отведено 512 байт. Сама запись сделана грамотно - каждое изменение пишется в следующую свободную ячейку. Как только достигнут конец - блок полностью стирается, а запись производится в первую ячейку. При включении берется самое дальнее записанное значение. Это позволяет увеличить ресурс в пару сотен раз.
Владелец, помни - вращая ручку настройки температуры, ты тратишь невосполнимый ресурс встроенного nvram!
6) Для остальных настроек используется второй блок nvram

С прошивкой все, если возникнут дополнительные вопросы - задавайте.

Мощность

Одна из важных характеристик паяльника - максимальная мощность нагревателя. Оценить ее можно следующим образом:
1) Имеем напряжение 24В
2) Имеем жало Т12. Измеренное мной сопротивление жала в холодном состоянии составляет чуть более 8 Ом. У меня получилось 8.4, но я не берусь утверждать, что погрешность измерения менее 0.1 Ома. Предположим, что реальное сопротивление никак не менее 8.3 Ома.
3) Сопротивление ключа STD10PF06 в открытом состоянии (по даташиту) - не более 0.2 Ома, типовое - 0.18
4) Дополнительно нужно учесть сопротивление 3х метров провода (2x1.5) и разъема.

Итоговое сопротивление цепи в холодном состоянии составляет не менее 8.7 Ома, что дает предельный ток в 2.76А. С учетом падения на ключе, проводах и разъеме, напряжением на самом нагревателе будет около 23В, что даст мощность порядка 64 Вт. Причем это предельная мощность в холодном состоянии и без учета скважности. Но не стоит особо расстраиваться - 64 Вт это весьма много. А учитывая конструкцию жала - достаточно для большинства случаев. Проверяя работоспособность в режиме постоянного нагрева, я помещал кончик жала в кружку с водой - вода вокруг жала кипела и пАрила весьма бодро.

Но вот попытка экономии с использованием БП от ноутбука имеет очень сомнительную эффективность - внешне незначительное снижение напряжения, приводит к потере трети мощности: вместо 64 Вт останется порядка 40. Стоит ли этого экономия $6?

Если наоборот, попытаться выжать из паяльника заявленные 70Вт, есть два пути:
1) Немного увеличить напряжение БП. Достаточно увеличить всего на 1В.
2) Уменьшить сопротивление цепи.
Почти единственный вариант, как немного уменьшить сопротивление цепи - заменить ключевой транзистор. К сожалению, практически все p-канальные транзисторы в используемом корпусе и на требуемое напряжение (на 30В я не рискнул бы ставить - запас будет минимален) имеют сходные Rdson. А так было бы вдвойне замечательно - заодно меньше бы грелась плата контроллера. Сейчас в режиме максимального разогрева на ключевом транзисторе выделяется около ватта.

Точность/стабильность поддержания температуры

Кроме мощности, не менее важна стабильность поддержания температуры. Причем лично для меня стабильность даже важнее точности, поскольку если значение на индикаторе можно и опытным путем подобрать - обычно я так и делаю (и не очень важно, что при выставке 300 градусов реально на жале - 290), то вот нестабильность таким образом не побороть. Впрочем, по ощущениям, стабильность поддержания температуры на T12 заметно лучше, чем на жалах 900-й серии.

Что имеет смысл переделать в контроллере

1) Контроллер греется. Не фатально, но больше желаемого. Причем главным образом его греет даже не силовая часть, а стабилизатор на 5В. Измерения показали, что ток по 5В составляет порядка 30 мА. 19В падения при 30 мА дает примерно 0.6Вт постоянного нагрева. Из них на резисторе (120Ом) выделяется порядка 0.1Вт и еще 0.5Вт - на самом стабилизаторе. Потребление остальной схемы можно игнорировать - всего 0.15Вт, из которой заметная часть тратится на индикатор. Но плата маленькая и поставить step-down просто некуда - если только на отдельной платке.

2) Силовой ключ с большим (относительно большим!) сопротивлением. Применение ключа с сопротивлением 0.05 Ом сняло бы все проблемы его нагрева и добавило бы около ватта мощности нагревателю картриджа. Но корпус был бы уже не 2х миллиметровый dpak, а минимум на размер больше. Или вообще переделать управление на n-канал.

3) Перенос ntc в ручку. Но тогда имеет смысл перенести туда и микроконтроллер, и силовой ключ и опорное напряжение.

4) Расширение функциональности прошивки (несколько наборов параметров ПИД для разных жал и т.п.). Теоретически возможно, но лично мне проще (и дешевле!) заново слепить на каком-нибудь младшем stm32, чем утаптывать в существующую память.

В результате имеем замечательную ситуацию - переделывать можно много чего, но практически любая переделка требует выкинуть старую плату и сделать новую. Либо не трогать, к чему я и склоняюсь пока.

Заключение

Имеет ли смысл переходить на T12? Не знаю. Пока я работаю только с жалом T12-K. Для меня оно одно из самых универсальных - и полигон хорошо греет, и гребенку выводов эрзац-волной пропаять/отпаять можно, и отдельный вывод острым концом прогреть можно.
C другой стороны, имеющийся контроллер и отсутствие средств автоматической идентификации конкретного типа жала усложняет работу с T12. Ну что мешало Hakko засунуть какой-нибудь идентифицирующий резистор/диод/чип внутрь картриджа? Было бы идеально, если в контроллере имелось несколько слотов под индивидуальные настройки жал (хотя-бы штуки 4) и при смене жала он автоматом загружал нужные. А в существующей системе можно как максимум сделать ручной выбор жала. Прикидывая объем работ понимаешь, что овчинка не стоит выделки. Да и картриджи по стоимости соизмеримы с целой паяльной станцией (если не брать китай по $5). Да, разумеется можно экспериментально вывести таблицу поправок температур и приклеить табличку на крышку. Но с коэффициентами ПИД (от которых напрямую зависит стабильность) так не поступить. От жала к жалу они обязаны отличаться.

Если отбросить мысли-мечты, то выходит следующее:
1) Если паяльной станции нет, но хочется - лучше забыть про 900 и брать T12.
2) Если нужно дешево и точные режимы пайки не сильно нужны - лучше взять простой паяльник с регулировкой мощности.
3) Если паяльная станция на 900х уже есть, то достаточно T12-К - универсальность и портативность получилась на высоте.

Запускаем IAR AVR. Откроется окно Embedded Workbench Startup, можно создать проект ипользуя его, но мы пойдем другим путем, поэтому жмем Cancel. Окно закроется и перед нами во всей своей невзрачной красе предстанет IAR.

Выбираем в верхнем меню Project > Create New Project…

IAR предложит выбрать тип шаблона проекта (Project templates). Выбираем C > main и кликаем Ок.

В стандартном Save As диалоге находим или создаем папку и сохраняем проект. Проект готов. Приглядимся к IARу.

Верхняя строка – почти стандартный menu bar. Ниже - tool bar с кнопками.

С правой стороны находится редактор кода. Сейчас там открыт файл main.c, но в нем только пустая функция main().

С левой стороны расположено окно рабочего пространства (workspace), в котором отображается структура проекта. Любой IARовский проект должн находиться по-крайней мере в одном рабочем пространстве.

В верхней части рабочего пространства находится выпадающее меню. Это так называемые конфигурации проекта. По умолчанию их две – Debug и Release. Они отличаются между собой настройками проекта. Можно создавать свои конфигурации.

Сохраним рабочее пространство. Если не сделаем сейчас, придется делать это на этапе компиляции. Выбираем в меню File > Save Workspace

Зададим настройки проекта для конфигурации Debug. Выбираем в меню Project > Options

Или кликаем правой кнопкой мышки по галочке напротив названия проекта.

Откроется диалоговое окно с множеством настроек.

Выбираем тип микроконтроллера
General Options > Target > Processor configuration
У меня это ATmega8535.

Разрешаем использование имен битов определенных в хедер файле
В General Options > System ставим галочку Enable bit definitions in I/O-Include files

Хоть нам и не понадобится сейчас эта настройка, полезно знать где она находится.

Включаем генерацию ассемблерного листинга . Необязательная опция, но я обычно включаю, чтобы посмотреть что натворил компилер.
С/С++ Compiler > List > галочка Output List File

Меняем формат выходного файла
Linker > Output.
B поле Output file cтавим галочку Override default и заменяем расширение d90 на hex
В поле Format выбираем Other и в выпадающем меню Output format выбираем тип файла intel-standart

Жмем ОК.
Теперь копируем и вставляем текст нашей программы в main.c

#include
#include

int main(void )
{
unsigned char led = 1;
DDRC = 255;

while (1)
{
PORTC = ~led;
__delay_cycles (400000);
led = led<<1;
if (led == 0)
led = 1;
}
return 0;
}

Кликаем кнопку Make.

Если все сделано правильно, IAR откомпилирует и соберет проект, а внизу откроется окно Messages.

До того, как ARM купила компанию Keil , лучшими практически по всем показателям были компиляторы от IAR Systems . Сейчас ситуация выровнялась и по некоторым тестам компилятор от Keil даже превосходит компилятор от IAR. Но тем, кто привык работать в IAR нет большого смысла осваивать новую среду.

Миландр предоставляет файлы поддержки своих микроконтроллеров для среды IAR, но подключение этих библиотек не так очевидно, как в случае PACK для Keil. Эта статья будет посвящена тому, как начать работать с микроконтроллерами Миландр в среде IAR. Напишем обычный "HelloWorld", то есть помигаем светодиодами.

Создастся проект с пустой реализацией функции main. Откроем опции проекта и настроим его под конкретный микроконтроллер, выбираем пункт меню или жмем Alt+F7. Далее приведу только те опции, которые необходимо поменять, все остальное остается по умолчанию. По вкладкам:

General Options

Выбираем наш микроконтроллер, 1986ВЕ92У относится к группе 1986ВЕ9х.

Output Converter

Если будет необходим hex файл прошивки, то включить его создание можно в этой вкладке.

Linker

Здесь необходимо выбрать файл задающий раскладку памяти для МК. Этот файл MDR32F1.icf мы копировали ранее при установке SPL. Определение $TOOLKIT_DIR$ как раз содержит путь к директории установки, в которую мы копировали папки Milandr.

C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\arm\config\flashloader\Milandr\MDR1986VE9х\MDR32F1.icf

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

Debugger

В закладке Setup необходимо выбрать наш отладчик, J-link уже присутствует в списке, выбираем его. Отладчика Ulink2 нет в списке, видимо необходимо ставить дополнительно. Кроме этого необходимо выбрать приведенные на картинке ниже файлы FlashMDR32F1x.mac и jbr_1986BE9x.ddf , которые мы так же копировали при установке SPL.

C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\arm\config\flashloader\Milandr\MDR1986VE9х\FlashMDR32F1x.mac
C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\arm\config\debugger\Milandr\MDR1986VE9х\jbr_1986BE9x.ddf

В следующей закладке Download выставляем опции "Verify download" и выбираем файл загрузчика FlashMDR32F1x.board , который загружает нашу программу в микроконтроллер. Это аналог flm файла в среде Keil.

C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\arm\config\flashloader\Milandr\MDR1986VE9x\FlashMDR32F1x.board

J-Link/J-Trace

В данном окне выставим опции аналогичные тем, что мы выставляем для данного отладчика в среде Keil. Укажем стартовую частоту микроконтроллера 8МГц и выставим Reset Pin. Далее можно выбрать использование Jtag или SWD, а так же увеличить скорость подключения, но мне сейчас это не критично, поэтому оставил по умолчанию.

После внесения изменений, да и вообще периодически, полезно нажимать кнопку Save All. При первом сохранении IAR предложит сохранить Workspace текущего проекта, сохраняем под таким же "HelloWord"-ом. При следующих запусках среды выбираем File - Recent Workspaces и IDE открывается в состоянии в котором мы ее оставили.

Организация папок проекта и SPL

При организации проекта я руководствовался данной статьей IAR EWARM. Создание проекта часть 2. CMSIS и Standard Peripherals Library.

Полагаясь на рекомендации статьи раскладывать исходники по папочкам, я завел группы аналогично тем, что создает Keil по умолчанию - Startup и Driver. Приведу сразу конечный вид дерева проекта и выпадающее меню, показывающее как создавать группу.

Согласно статье, я так же создал отдельную папку src и положил туда файл main.c. Для такого маленького и простого примера это не столь важно, но будем вырабатывать правильный стиль.

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

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

Здесь приведены директории и файлы которые будут использоваться в нашем проекте.

IAR_CODE\ - Общая папка с проектами в IAR 1986VE9x\ - папка проектов под 1986VE9x MDR32F9Qx_board.h - файл выбора МК и ревизии HelloWorld - папка проекта SPL\ - папка SPL MDR32F9Qx_config.h - файл прочих настроек CMSIS\ CM3\ CoreSupport - поддержка ядра DeviceSupport\MDR32F9Qx\ - startup файлы inc startup\iar MDR32F9Qx_StdPeriph_Driver\ - driver файлы inc src

Чтобы получилась такая раскладка, вот что нужно скопировать из архива SPL:

В папку IAR_CODE\SPL: Исходные файлы SPL lib\MDR32F9_1986ВЕ4_2015\Libraries\все содержимое Файлы с настройкой SPL под конкретный микроконтроллер lib\MDR32F9_1986ВЕ4_2015\Config\MDR32F9Qx_config.h в папку IAR_CODE\1986BE9x: lib\MDR32F9_1986ВЕ4_2015\Examples\MDR1986VE9x\MDR32F9Q3_EVAL\MDR32F9Qx_board.h

В файле MDR32F9Qx_board.h осуществляется выбор микроконтроллера с помощью макроопределений, поэтому он лежит в папке с проектами под конкретный МК.

Файл MDR32F9Qx_config.h в архиве настроен для микроконтроллера 1986ВЕ4, необходимо открыть этот файл в Notepad и внести небольшую правку. Должно получиться так:

// !!! Раскомментировать блок: /* Seleсt the header file for target microcontroller */ #if defined (USE_MDR1986VE9x) #include "MDR32Fx.h" #elif defined (USE_MDR1986VE1T) #include "MDR1986VE1T.h" #elif defined (USE_MDR1986VE3) #include "MDR1986VE3.h" #elif defined (USE_MDR1986BE4) #include "MDR1986BE4.h" #endif //#include "MDR1986BE4.h" - ! Закомментировать строку, либо удалить.

Теперь чтобы среда IAR могла находить файлы SPL в нашей раскладке необходимо указать ей пути для поиска при сборке. В дереве проекта выбираем самый верхний пункт "HelloWorld - Debug" - просто кликаем на нем левой мышкой, чтобы он был активен и открываем опции проекта (Alt+F7). Если не выбрать верхний пункт проекта, а будет активен какой-то файл из групп в дереве проекта, то при нажатии Alt+F7 откроются опции для этой группы. Нам же необходимо указать пути для всех групп в проекте, поэтому выбираем самый верхний узел в дереве.

Заходим в категорию "С/С++ Compiler ", выбираем закладку Preprocessor . Здесь в поле "Additional include directories" необходимо добавить пути которые мы сформировали. Вот эти пути, добавляем их по одному c помощью диалога, вызываемого кнопкой с многоточием, либо можно скопировать пути прямо отсюда:

$PROJ_DIR$\..\..\SPL\CMSIS\CM3\CoreSupport $PROJ_DIR$\..\..\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\inc $PROJ_DIR$\..\..\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\iar $PROJ_DIR$\..\..\SPL\MDR32F9Qx_StdPeriph_Driver\inc $PROJ_DIR$\..\..\SPL\MDR32F9Qx_StdPeriph_Driver\src $PROJ_DIR$\.. $PROJ_DIR$\..\..\SPL

Это и есть наши пути относительно папки проекта. При расположении прочих проектов по данной раскладке, эти пути останутся валидны.

При добавлении путей через диалоговое окно необходимо следующее, по картинке:

    Пути хорошо бы добавить с относительным путем

    При добавлении пути через диалоговое окно,

    Видно, что пути получаются абсолютными.

    Кликаем на кнопку с треугольником.

    Выбираем вариант с путем относительно проекта.

Собираем пустой проект

Для компиляции минимального проекта к уже существующему файлу main.c необходимо подключить startup-файлы с таблицей векторов прерываний и т.д.

Перед подключением файлов в проект давайте заведем переменную в среде IAR, которая будет задавать путь к нашей папке с кодом IAR_CODE. В главном меню выбираем Tools - Configure Custom Argument Variables .

В открывшемся окне создаем группу MDR_Lib и переменную MDR_CODE, которая будет задавать путь к нашей головной папке.

Если проект не был сохранен, а при первом сохранении сохраняется Workspace, то кнопки в данной форме будут неактивны. В этом случае необходимо перед заходом в данную форму нажать Save All.

Теперь подключая файлы из нашей директории IAR_CODE, пути в проекте будут указываться относительно переменной $MDR_CODE$, следовательно при переносе проекта в другое место достаточно будет переназначить новый путь в переменной MDR_CODE.

Давайте теперь подключим файлы необходимые для компиляции пустого проекта. Для подключения файлов кликаем правой клавишей мыши на созданной нами группе Startup, выбираем Add - Add Files, и подключаем следующие файлы:

Добавляем файлы: IAR_CODE\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\iar\ startup_MDR32F9Qx.s system_MDR32F9Qx.c system_MDR32F9Qx.h

Удобно выделить все файлы и добавить за один раз.

После этого проект должен собираться - меню Project - Rebuild All . Наблюдаем ошибок 0, на ворнинги не обращаем внимания. Библиотека не сильно подчищена для среды IAR.

Для проверки того, что файлы подключились через переменную $MDR_CODE$ кликнем правой клавишей мыши на заголовок в дереве проекта "HelloWorld - Debug" и выберем в выпадающем меню Open Containing Folder . Откроется окно проводника в Windows с выделенным файлом HelloWorld.ewp. Открываем его notepad-ом и листаем в самый низ, где находим как подключены наши, только что добавленные файлы:

.... Startup $MDR_CODE$\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\iar\startup_MDR32F9Qx.s $MDR_CODE$\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\iar\system_MDR32F9Qx.c $MDR_CODE$\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\iar\system_MDR32F9Qx.h ....

Видно, что пути указаны через переменную $MDR_CODE$. Надеюсь данный подход поможет при необходимости перенести весь репозитарий с проектами, то-есть папку IAR_CODE, в новое расположение или на другой компьютер с минимальными усилиями.

Собираем "HelloWorld"

Скопируем в наш файл main.c код из проекта Hello World - светодиод . В этом коде используются библиотечные файлы управления портами и тактовой частотой. Давайте их так же добавим в проект.

Добавляем файлы: IAR_CODE\SPL\MDR32F9Qx_StdPeriph_Driver\src\ MDR32F9Qx_port.c MDR32F9Qx_rst_clk.c

Подключать *.h файлы не будем, пути у нас прописаны и они найдутся сами. Компилируем проект через кнопку в меню или F7. Проект должен успешно скомпилироваться.

Для того, чтобы прошить получившуюся программу в микроконтроллер выбираем в меню Project - Download - Download active application . В Debug Log окне выскакивают некоторые "ворнинги", но прошивка заканчивается успешно и микроконтроллер приветствует Мир!

В случае использования программаторов Segger, при загрузке в устройство подключенное впервые, драйвера Segger запрашивают какое ядро Cortex подключено.

Выбор должен быть таким:

    1986ВЕ9х - "Unspecified Cortex-M3" .

    1986ВЕ1Т, 1986ВЕ3Т - "Unspecified Cortex-M1" ,

    1986ВЕ4У - "Unspecified Cortex-M0"

SPL и пример на GitHUB

Данный пример мигания светодиодом можно скачать с GitHub - IAR_CODE , так же как и аналогичные реализации для 1986ВЕ1Т и 1986ВЕ3Т. В репозитории содержится библиотека SPL на которой реализованы примеры. Эта библиотека собрана из официальной версии, были лишь вырезаны файлы не относящиеся к IAR и исправлены некоторые ошибки.



Понравилась статья? Поделитесь ей