Iar описание. IAR, установка и настройка. ПодробнееАнализ сред программирования для мк

Не Keil’ом единым…
Есть такая компания, называется она IAR Systems. Делает много вещей, в том числе и среды разработки и компиляторы для различных архитектур, список которых довольно обширен. Также в числе продуктов компании есть отладчики, наборы разработчиков и т.д. Более подробно со всем этим разнообразием можно ознакомиться на их родном сайте iar.com

Нас же сейчас интересует среда для разработки приложений для архитектуры ARM, в частности Cortex-M3. Есть в их ассортименте и такой продукт и называется он EWARM, что является сокращением от Embedded Workbench for ARM, что в свою очередь, в моем вольном переводе на великий и могучий, звучит примерно как «Среда разработки для встроенных систем на архитектуре ARM», впрочем, за точность я не ручаюсь…

Данная среда поддерживает большое количество микропроцессоров и микроконтроллеров построенных на базе архитектуры ARM разных версий. Полный список можно посмотреть на их сайте Т.к. это серьезная среда разработки, то она поддерживает различные отладочные интерфейсы и средства сопряжения как производства самой IAR так и сторонних компаний, имеет встроенный отладчик, симулятор и т.д.

Но по причине отсутствия у меня какого либо девайса для внутрисхемной отладки рассказать я про все это не могу. А пользоваться симулятором как-то в голову даже не приходило. Я по старинке, пишу, заливаю в контроллер и смотрю что происходит. (Зато их есть у меня. И я вам скоро выдам пример того, какой это рулез. прим. DI HALT)

Есть мнение, что компилятор С/С++ у IAR один из самых лучших, но за это я не ручаюсь, хотя кое какие мои сравнения с Keil uVision v3 показали его превосходство.

В общем, это мощнейшая полноценная среда для разработчика. Кому интересно, изучайте описания на официальном сайте Есть ли версия для линукса я на сайте нигде не углядел, поэтому точно не скажу. (Боюсь, что как всегда;) Впрочем, там есть могучий и универсальный GCC и обязательно есть поддержка ARM. Так что если есть желающие показать старт проекта под линухом — ждем с распростертыми обьятьями. Пишите на [email protected] прим. DI HALT)

На момент написания данной статьи доступна версия 6.10 (я же буду рассказывать на примере версии 5.4).

Сколько стоит данное чудо я, к сожалению, на их официальном сайте найти так и не смог, а лазить по сайтам дилеров как-то недосуг… На наше счастье, данный продукт доступен в демо режиме для ознакомления. (Я тоже полазил, не нашел. Кейл стоит около 3 килобаксов. IAR, думаю, в тех же пределах. Вполне подьемно для коммерческого применения прим. DI HALT)

И здесь есть 2 варианта

  • 1. Полнофункциональная версия с ограничением использования в 30 дней.
  • 2. Версия без ограничения по времени использования но генерирующая код не более 32Кб. Под наши ковыряния хватит с лихвой.

Обе версии, кроме того имеют следующие ограничения:

  • Они не включают исходный код библиотек.
  • Они не включают поддержку MISRA C (что это такое, к сожалению не знаю).
  • Имеют ограниченную техническую поддержку.
  • Версия с ограничением кода в 32Кб не имеет поддержки расширенной отладки (что это такое, к сожалению не знаю)

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

После установки можно приступать к созданию проекта. Запускаем IAR Embedded Workbench и видим следующее окно:

Project->Create New Project

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

Создался новый проект содержащий только один файл main.c который содержит только одну пустую функцию main(). А вы хотели большего? Дальше все ручками.

На данном этапе желательно нажать на кнопку с изображением трех дискеток или через меню

File->Save All.

File->Save All.

EWARM попросит ввести имя WorkSpace (воркспейс может содержать множество проектов) и не мудрствуя лукаво я назвал его также LEDTest.

В отличие от Keil’a EWARM не попросил указать целевое устройство и все остальное, поэтому лезем в свойства проекта и начинаем его настраивать.

По аналогии с Microsoft Visual Studio EWARM позволяет создавать произвольное число конфигураций и по умолчанию создает в проекте 2 конфигурации Debug и Release, что подразумевает 2 набора параметров, одни для компиляции кода содержащего отладочную информацию и другой для кода без нее. Выбираем наиболее подходящую для себя.

Я, например, сразу выставляю Release и настраиваю только ее, но это дело вкуса и наличия или отсутствия у вас средств отладки.

Итак, идем в меню

ST->ST STM32F10xxY

Где Y соответствует семейству имеющегося у вас микроконтроллера. Я выберу ST STM32F10xxE .


Output (вывод)
Здесь указываем что мы хотим получить навыходе, исполняемую программу или библиотеку. Оставляем без изменения – Executable. Также здесь можно прописать пути куда ложить откомпилированную программу/библиотеку, объектные файлы и файлы листингов. Меняем, если душа того просит.

Library Configuration (конфигурация runtime библиотеки языка С). Это тема отдельной телепередачи:-) но сейчас можно смело поставить None и пройти дальше.

Library options (опции стандартной библиотеки языка С)
Здесь настраивается работа функций printf и scanf. Вернее поддержка различных ключей строки форматирования. Ниже кратко расписано какая опция что поддерживает, а более подробно можно прочитать в документации идущей в комплекте с EWARM. Поддержка более сложных ключей форматирования увеличивает размер кода т.к. обработчики строки форматирования разные по сложности реализации. В данном проекте нам это не важно т.к. данными функциями мы пользоваться не будем. А в последущием я освещу данный вопрос подробнее.

MISRA-C: 2004 и MISRA-C: 1998. Настройки расширений MISRA-C. Что это такое, я честно не знаю. :-)

C/C++ Compiler (настройки компилятора С/С++)
Здесь настраивается поддержка расширений языков С/С++, режимы оптимизации компилятора, генерация отладочной информации, пути к инклудам и т.д. Здесь пока можно ничего не трогать.

Assembler
Соответственно настройки языка ассемблера. Здесь пока можно ничего не трогать.

Output Converter (конвертация вывода)
Вот это нам нужно. Дело в том, что по умолчанию EWARM генерирует исполняемый файл в формате ELF, что какбы намекает, что Unix и прочие линуксы IAR’у не чужды.

Но нам то они ни к чему, поэтому смело тыкаем галку Generate additional output (генерировать дополнительный выходной файл) и в списке Output format (формат выходного файла) выбираем подходящий для себя, вернее для используемого вами программатора, формат.

Выбор особо не велик и реально для большинства будет состоять из двух вариантов: Intel extended, в простонародье именуемый HEX или binary. Я лично пользуюсь вариантом binary. Здесь же, если того требуют ваши религиозные убеждения, можно задать имя выходного файла отличающееся от дефолтного.


Custom build (пользовательская сборка)
Здесь можно задать дополнительные утилиты и их параметры которые будут использоваться при сборке проекта, но нам это ни к чему — пропускаем.

Build Actions (действия при сборке)
Здесь можно указать команды которые нужно выполнить перед сборкой или после. Поступаем аналогично предыдущему пункту.

Категория Linker (линковщик)
Вот и добрались до второго, после указания целевого устройства, важного момента! Ибо от линковщика, вернее его настроек, очень сильно зависит запуститься ваш проект в микроконтроллере или нет т.к. именно линковщик располагает код и различные таблицы (например векторов прерываний) по нужным адресам.

Вкладка Config (конфигурация). Здесь содержится ссылка на используемый файл конфигурации линковщика. Это очень важный файл т.к. именно в нем прописана конфигурация нашего микропроцессора в части памяти (ее наличия или отсутствия, адресации и размера), размещения таблицы векторов прерываний, размеры стека и кучи. По умолчанию проставлена ссылка на файл конфигурации идущий в комплекте с EWARM’ом и едином для всех устройств на базе ядра Cortex, что не есть хорошо, т.к. устройства все разные, объемы флеша и ОЗУ у них разные и т.д. К счастью, есть возможность отредактировать этот файл самостоятельно, что дает широчайший простор творчеству, либо с использованием кнопки Edit… находящейся здесь же.


Самостоятельная конфигурация файла настроек линковщика, занятие бесспорно увлекательное и плодотворное, но оно выходит далеко за рамки данной статьи т.к. только об этом можно написать не одну статью. Подробно все описано в руководстве пользователя, идущем в комплекте с EWARM. Скажу лишь, что там можно создавать сегменты памяти, указывать их тип, размер, размещение и еще много чего. Иногда это очень нужно, но это уже в более серьезных проектах.
Поэтому ограничимся нажатием кнопочки Edit… Правда перед этим нужно решить один концептуальный вопрос.

Дело в том, что как я уже сказал выше, данный файл является заготовкой для всей архитектуры Cortex, поэтому если вы его измените, а потом захотите создать проект для другого контроллера, того-же NXP LPC17XX, то его опять придется редактировать уже под этот процессор. Тут есть 3 варианта решения:

  • Сказать себе, что кроме STM32F меня ничего не интересует и отредактировать данный файл.
  • Скопировать данный файл в той-же папочке где он лежит (а лежит он, как можно догадаться, в папке диск:путь куда установили EWARM\arm\CONFIG\) во что-то типа STM32F10XXX.icf и редактировать его.
  • Скопировать его в папочку с проектом переименовав во что-то типа STM32F10XXX.icf и редактировать его.

Итак, выбираем вариант себе по душе (я лично пользуюсь 3-им вариантом а путь прописываю так:

$PROJ_DIR$\stm32f103re.icf

$PROJ_DIR$\stm32f103re.icf

Переменная $PROJ_DIR$ разворачивается в путь до папки с проектом автоматически, т.е. путь получается относительным. Таким образом можно папку с проектами копировать потом куда угодно и файл не «потеряется» в отличие от использования жесткого пути), выбираем свой файл отредактировав путь или нажав кнопку выбора файла (кнопка с «…» справа от едита) и нажимаем кнопку Edit…

В появившемся окошке в первой вкладке Vector Table задаем адрес таблицы векторов прерываний. Что это такое, для тех кто не в курсе, я не буду раскрывать. (Я тоже не скажу:), т.к. все уже сказано в разделе про . Тут все точно также, только векторов больше. прим DI HALT)

Адрес может быть либо 0х00000000 либо 0х08000000. Я предпочитаю ставить 0х08000000 т.к. он указывает на начало внутренней флеш памяти, а адрес 0х00000000 может мэпиться на флешку а может и нет, в зависимости от состояния входов BOOT в момент инициализации контроллера, но это нужно уже курить даташит на устройство.

Вкладка Memory Regions (регионы памяти).
Здесь задается 2 важных для работы контроллера вида памяти ROM (ПЗУ) и RAM (ОЗУ) вернее их адреса начала и окончания. ROM — это наша внутренняя флеш память. Начинается она с адреса 0х08000000, это заложено в архитектуре контроллера. А вот заканчивается у каждого по разному. Зависит от объема который есть в вашем контроллере.

У меня ее 512Кб, а у вас может быть 32, 64, 128, 256. Т.е. адрес окончания этой области памяти вычисляете сами. Для меня он будет равен 0x0807FFFF (адрес начала 0x08000000 + размер флеша (512*1024) – 1 в шестнадцатеричном формате). Для вас это может быть 0x08007FFF, 0x0800FFFF, 0x0801FFFF и т.д. Желательно указывать точный размер чтобы полученная прошивка не превысила этот размер, а так линковщик ругнется в случае чего. Но нам это не грозит пока. Аналогично заполняем поля для RAM, зная из чтения даташита, что она начинается с адреса 0x20000000 и посчитав где она закончится.

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

Вкладка Stack/Heap Sizes (размеры стека и кучи)
Параметры говорящие сами за себя.
Стек нужен для передачи параметров функциям, сохранения точек возврата из них и т.д. Сильно большим его делать не имеет смысла т.к. зря будет расходоваться ОЗУ, а если сделать сильно маленьким, то может не хватить (особенно если будет использоваться много вложенных функций). Поставим его равным 0x200 т.е. 512 байт. В нашем проекте этого более чем достаточно.
Куча – это часть ОЗУ выделенная для функций работы с памятью языка С/С++ таких как malloc, оператор new и т.д. В данном проекте мы их использовать не планируем, поэтому ставим 0.

Все, нажимаем кнопочку Save.

В остальных вкладках категории Linker настраиваются подключаемые внешние библиотеки, пути к ним, настройка имени выходного файла, настройки генерации листингов, расчета контрольных сумм и т.д. Нам в данном проекте ничего из этого не понадобиться, а объяснять все слишком долго. Будут конкретные вопросы — спрашивайте в комментах.

Категория Debuger (отладчик)
Здесь настраиваются аппаратные средства внутрисхемной отладки либо отладка в симуляторе. Как я уже говорил, аппаратных средств у меня нет, а симулятором я не пользуюсь. Поэтому рассказать тут особо ничего не могу.

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

Теперь можно смело нажать кнопку F7 или в меню

Project->Make

Project->Make

и откомпилировать наш проект.

В папочке которую вы указали для выходных файлов программы (если ничего не меняли, то это будет, в зависимости от выбранной конфигурации, папка Debug/exe либо Release/exe в папке с проектом) увидим 2 файла. Один с раширением.out и второй.bin или.hex, в зависимости от того, что вы указали в качестве дополнительного выходного файла.

Все, наша первая программа готова! Можно прошивать ее в контроллер и она заработает! Не верите? А вы попробуйте.

На этом позвольте закончить мою первую статью т.к. она и так получилась не маленькой. А к написанию более функционально насыщенной программы мы перейдем на следующем нашем шаге.

PS:
Хочу еще пару слов сказать о прошивке контроллера. Как я написал в эпиграфе, если ничего нет, но очень хочется… Если у вас нет аппаратного прошивальщика и/или отладчика, то это не большая проблема. Дело в том, что прошить контроллер STM32F можно с использованием обычного интерфейса USART, в простонародье это называется через COM порт. В идеале, если на плате с микроконтроллером распаян преобразователь уровней USART в TTL и заведен на порт USART1 контроллера (ножки PA.8 PA.9). Если нет, то тоже не большая беда. Можно немного распотрошить любой кабель-переходник USBCOM (в крайнем случае покупается в магазине), там внутри стоит микросхема с TTL уровнями, и пользоваться им подключаясь напрямую к ножкам контроллера. Про выставление уровней BOOT0/1 и как входить в режим бутлоадера можно узнать из даташита. А прошивать можно программой Flash Loader Demo производства самой ST Microelectronics. Я пользуюсь именно ей. Правда почему-то найти ее на сайте ST невозможно, поэтому прикладываю ее к своей статье, спасибо за нее нашим китайским братьям!

В данной статье речь пойдет о том, какие шаги необходимо выполнить для создания минимального и удобного проекта под микроконтроллер серии STM32 в среде разработки IAR. Этот пост скорее напоминалка для меня самого дабы не забыть мелких нюансов IDE в ответственный момент. Ведь в любой момент я смогу просто зайти на эту страницу и скачать готовый стартап проект. Ну а Вам, дорогие читатели, самим решать, чего полезного можно почерпнуть из этого поста! Ну что ж, приступим?

Естественно, в первую очередь необходимо скачать и установить программу IAR. Дальше необходимо скачать полезную библиотеку от производителя процессора, которая называется STM32F10x_StdPeriph_Lib_V3.5.0 (версия в Вашем случае может отличаться). После этого, запускаем установленную среду разработки. Создаем новый проект Project->Create New Project…

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


Получаем


Создаем желаемые условные разделения внутри проекта (с помощью команд Add->Add Group… )

Добавляем необходимые файлы


В результате дерево проекта должно выглядеть следующим образом

Переходим к настройке проекта. Выбираем процессор




Устанавливаем галочку в настройках для использования библиотеки CMSIS

Добавляем путя к библиотечным файлам, а также добавляем определения (Defines) в настройки препроцессора C/C++


Кроме этого есть возможным получать на выходе будущей сборки проекта выходные файлы разного формата. Одним из возможных форматов является обычный двоичных файл. Для его генерации нужно зайти в настройки проекта и установить их следующим образом

Ради приличия считаю должным, упомянуть о самой программе, которую мы собираемся скомпилировать. Что она должна делать? Это своего рода «Hello World» в мире встроенных систем. Иными словами — будем мигать светодиодом. Рассмотрим исходный код главного файла:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_flash.h" int main() { GPIO_InitTypeDef GPIO_InitStructure; /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1) ; RCC_PCLK2Config(RCC_HCLK_Div2) ; RCC_PCLK1Config(RCC_HCLK_Div4) ; /* Select HSI as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI) ; /* Wait till HSI is used as system clock source */ while (RCC_GetSYSCLKSource() != 0x00) { } FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable) ; FLASH_SetLatency(FLASH_Latency_0) ; // Enable peripherals clocks RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE) ; /* LED configuration */ /* Configure PD.05 as output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, & GPIO_InitStructure) ; while (1) { GPIO_SetBits(GPIOD, GPIO_Pin_5) ; for (long i= 0 ; i< 200000 ; i++ ) ; GPIO_ResetBits(GPIOD, GPIO_Pin_5) ; for (long i= 0 ; i< 200000 ; i++ ) ; } }

Что тут творится? В первую очередь настраиваем систему тактирования микропроцессора и выбираем внутренний источник тактирования (HSI, 8 MHz). Дальше подаём тактирование на порт GPIOD, который «висит» на шине APB2. После, настраиваем 5-ый пин порта GPIOD на выход (к этому пину подключаем светодиод). Ну а дальше видим бесконечный цикл в котором и происходит поочерёдное включение и выключение светодиода. Между включением и выключением также добавлены циклы. Они выполняют роль задержки, дабы человеческий глаз успевал замечать мигание светодиода.

Теперь проект должен без особых проблем собраться по нажатии клавиши F7 . Нами была создана возможно первая прошивка для микропроцессора STM32F103. Поздравляю! На выходе получим желаемый двоичный файл. В одной из следующих статьей рассмотрим способ загрузки полученного бинарного файла, собственно в сам микропроцессор. Это сделать очень просто, если у Вас имеется в наличии переходник USB-UART.

Читая местные обзоры, уже не раз подумывал о покупке паяльника с жалом 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.

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

Основные преимущества пакета – дружественный пользовательский интерфейс и непревзойденная оптимизация генерируемого кода. Кроме этого реализована поддержка различных операционных систем реального времени и JTAG -адаптеров сторонних компаний.

В настоящее время IAR Embedded Workbench поддерживает работу с 8-, 16-, 32-разрядными микроконтроллерами от , ARM, NEC, Micronas, Dallas Semiconductor/ , Ember, Luminary, OKI, Samsung, TI/Chipcon, Silicon Labs и . Для каждой платформы существует своя среда разработки, в частности ARM микроконтроллерам соответствует версия пакета IAR Embedded Workbench for ARM.

Программная среда включает в себя:
1. C/C++ компилятор – один из самых эффективных в своем роде. В нем также присутствует полная поддержка ANSI C.
2. Транслятор ассемблера, включающий в себя макроассемблер для программ реального времени и препроцессор для C/C++компилятора.
3. Компоновщик, поддерживающий более тридцати различных выходных форматов для совместного использования с внутрисхемными эмуляторами.
4. Текстовый редактор, настроенный на синтаксис языка Си и имеющий удобный пользовательский интерфейс, автоматическое выделение ошибок программного кода, настраиваемую инструментальную панель, подсветку блоков, а также удобную навигацию по именам подпрограмм, макросов и переменных.
5. Симулятор и отладчик в кодах Си и ассемблера. Отладчик позволяет просматривать области EEPROM, DATA, CODE, а также регистры ввода/вывода, устанавливать точки останова и аппаратные флаги, обрабатывать прерывания с предсказанием. Кроме этого предусмотрен контроль стека и любых локальных переменных, режим пошагового выполнения программы. Тип отладчика и его настройки устанавливаются в свойствах проекта. Если отладчик отсутствует, то на помощь приходит симулятор, который, однако, не имеет возможности эмулировать работу процессора.
6. Менеджер проектов, облегчающий контроль и управление рабочими модулями.
7. Дополнительные утилиты для работы с оптимизированной CLIB/DLIB библиотекой.

Интегрированная система помощи облегчает написание программ в данной среде. Предусмотрено взаимодействие с утилитой AVR Studio. Помимо прочего в IAR Embedded Workbench существует возможность самостоятельного управления оптимизацией отдельных модулей проекта, что упрощает процесс отладки, а также позволяет ускорить работу программы или сэкономить на памяти.

IAR Embedded Workbench была разработана IAR Systems, более двадцати лет являющейся одной из ведущих компанией по созданию C/C++ компиляторов для встраиваемых микроконтроллерных устройств и систем. Ее штаб-квартира находится в старинном городе Уппсала (Швеция). В настоящее время программы IAR Systems используют по всему миру более сотни тысяч разработчиков, производителей телекоммуникационного и промышленного оборудования, медицинской и компьютерной техники, среди которых такие гиганты, как Apple Computer, Cisco Systems, Motorola, Hewlett-Packard и Siemens.

IAR Embedded Workbench является коммерческим продуктом, его стоимость составляет около 3000 долларов за одну пользовательскую лицензию. Однако, в качестве дополнения к полнофункциональной версии, существует бесплатный вариант среды программирования с единственным ограничением на размер выходного кода до 4 или 8 КБ в зависимости от модели контроллера. Этот вариант подойдет для первого знакомства с программой, а также написания небольших приложений. Можно найти и взломанную версию, но для ее нормальной работы придется отключать выход в интернет.

Язык интерфейса IAR Embedded Workbench – английский.

Рассматриваемая среда работает под управлением только операционной системы Microsoft Windows версий 95, 98, NT, 2000, XP, Vista, 7 (не имеет значения 32- или 64-битных).

Распространение программы: платная. Есть бесплатная версия с ограничениями на размер кода в зависимости от МК





Copyright © 2023 Базовые компьютерные навыки.