Контакти

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, створіть робочий простір FileNewWorkspace. Далі новий проект, меню ProjectCreate New Project ...

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

Створений проект необхідно налаштувати, для цього відкриваємо меню ProjectOptions. у вкладці 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 ++ Compiler ⇒ Preprocessor і додаємо & PROJDIR & (змінна, що містить шлях до папки з проектом).


У розділі Debugger вибираємо в якості відладчика ST-LINK. ставимо галочки Use flash loader і Verify у вкладці Download.

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



Перш за все познайомимося з фірмою виробником - ST Microelectronics.

Переходимо в розділ Products -\u003e Microcontrollers. Вибираємо вкладку STM32 ARM Cortex.

Фірма ST виробляє мікроконтролери STM32 в трьох основних сегментах:

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

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

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

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

Пакет IAR може використовуватися в двох режимах - це

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

Для STM32 це 32 кілобайти коду (з наявних 256 кілобайт Flash-пам'яті). Але для навчальних завдань цілком достатньо, тому будемо використовувати саме цей варіант.

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


Програма IAR починає свою установку. Приймаємо ліцензійну угоду і вказуємо папку, куди буде встановлена \u200b\u200bсередовище розробки. Можна залишити за замовчуванням.

Далі нам пропонується вибрати драйвера 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, середня - наявність вібрації, права - тип виведеної температури (виставлена \u200b\u200bабо поточна).
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\u003e Create New Project ...

IAR запропонує вибрати тип шаблону проекту (Project templates). Вибираємо C\u003e main і натискаємо Ок.

У стандартному Save As діалозі знаходимо або створюємо папку і зберігаємо проект. Проект готовий. Придивімося до IARу.

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

З правого боку знаходиться редактор коду. Зараз там відкрито файл main.c, але в ньому тільки порожня функція main ().

З лівого боку розташовано вікно робочого простору (workspace), в якому відображається структура проекту. Будь IARовскій проект должн перебувати по-крайней мере в одному робочому просторі.

У верхній частині робочого простору знаходиться меню, що випадає. Це так звані конфігурації проекту. За замовчуванням їх дві - Debug і Release. Вони відрізняються між собою настройками проекту. Можна створювати свої конфігурації.

Збережемо робочий простір. Якщо не зробимо зараз, доведеться робити це на етапі компіляції. Вибираємо в меню File\u003e Save Workspace

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

Або натискаємо правою кнопкою мишки по галочці навпроти назви проекту.

Відкриється діалогове вікно з безліччю налаштувань.

Вибираємо тип мікроконтролера
General Options\u003e Target\u003e Processor configuration
У мене це ATmega8535.

Дозволяємо використання імен бітів визначених у хедер файлі
У General Options\u003e System ставимо галочку Enable bit definitions in I / O-Include files

Хоч нам і не знадобиться зараз ця настройка, корисно знати де вона знаходиться.

Включаємо генерацію ассемблерного лістингу. Необов'язкова опція, але я зазвичай включаю, щоб подивитися що накоїв компілер.
С / С ++ Compiler\u003e List\u003e галочка Output List File

Міняємо формат вихідного файлу
Linker\u003e 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 \u003d 1;
DDRC \u003d 255;

while (1)
{
PORTC \u003d ~ led;
__delay_cycles (400000);
led \u003d led<<1;
if (Led \u003d\u003d 0)
led \u003d 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 \\ \\ .. \\ .. \\ 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 запитують яке ядро \u200b\u200bCortex підключено.

Вибір повинен бути таким:

    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 і виправлені деякі помилки.



Сподобалася стаття? поділіться їй