- Как собрать DIY-генератор PWM с STM32F0 и запаять микросхемы размером с булавочную головку
- Почему именно STM32F0?
- Выбор корпуса: LQFP-48 или QFN-32?
- Что тебе понадобится
- Как запаять QFN-32 без термовоздуха — пошагово
- Как настроить PWM на STM32F0 — без CMSIS и HAL
- Частые ошибки — и как их избежать
- Что выбрать в зависимости от ситуации
- Как сделать лучше — 5 советов от практика
- Итог: что делать прямо сейчас
Как собрать DIY-генератор PWM с STM32F0 и запаять микросхемы размером с булавочную головку
Ты хочешь сделать свой генератор PWM — не на Arduino, не на готовой плате, а на STM32F0, и запаять сам микроконтроллер в LQFP-48 или QFN-32. Не для красоты, а потому что тебе нужно точное управление мотором, светодиодом или инвертором, а готовые решения либо не точны, либо слишком дороги. И ты боишься, что запаяешь микросхему — и она сгорит, или не заработает, или ты её вообще не найдёшь в магазине. Ты не хочешь тратить неделю на поиски «идеального» решения. Ты хочешь просто сделать это — и чтобы заработало.
Я делал десятки таких плат. Не для продажи. Не для диплома. Просто потому что нужно. И я расскажу, как сделать это без лишних ошибок — с реальными советами, которые не написаны в даташитах.
Почему именно STM32F0?
STM32F0 — это не самый мощный, но самый удобный для такого проекта. Он:
- стоит меньше $1 за штуку оптом;
- имеет встроенный таймер с PWM до 16 бит;
- работает от 1.8 до 3.6 В — можно питать от USB или батарейки;
- имеет 3 независимых PWM-канала — хватит для управления трёхфазным мотором или RGB-светодиодом;
- не требует внешнего кварца — встроенного RC-генератора хватает для PWM с погрешностью меньше 1%.
Если ты хочешь точность выше 0.1% — тогда бери STM32F4. Но для 95% задач (управление питанием, димминг, частота вентилятора) F0 — идеален. И главное: он доступен в корпусах, которые можно запаять даже без станции — если знать как.
Выбор корпуса: LQFP-48 или QFN-32?
Ты можешь взять STM32F030F4P6 (LQFP-48) или STM32F030K6T6 (LQFP-32). Но если хочешь запаять вручную — бери QFN-32. Почему?
| Параметр | LQFP-48 | QFN-32 |
|---|---|---|
| Размер | 7×7 мм | 5×5 мм |
| Шаг выводов | 0.5 мм | 0.4 мм |
| Выводы снизу | нет | да (термопад) |
| Сложность пайки | средняя | высокая |
| Теплоотвод | слабый | отличный |
| Доступность | всегда в наличии | иногда нет в мелких магазинах |
Если ты новичок — возьми LQFP-48. Выводы торчат — их видно. Можно паять утюгом. Если ты уже паял SMD — возьми QFN-32. Он лучше отводит тепло, меньше занимает места, и в нём больше пинов на периферию. Но есть один нюанс: у QFN есть термопад снизу — его нужно запаять. Без него микросхема будет греться и сбоить.
Что тебе понадобится
Список — не для «всё-всё», а только для того, чтобы заработало. Никаких лишних вещей.
- STM32F030K6T6 (QFN-32) или STM32F030F4P6 (LQFP-48)
- Печатная плата — лучше заказать в JLCPCB или PCBWay. Шаблон возьми с сайта STMicroelectronics — они дают бесплатные GERBER-файлы для демоплат.
- Кварцевый резонатор 8 МГц (необязательно, но рекомендую)
- 2 конденсатора 22 пФ для кварца
- Конденсатор 100 нФ для питания (на каждый VDD)
- Резистор 10 кОм на NRST (для сброса)
- Паяльник с тонким жалом (0.5 мм или меньше)
- Паяльная станция с термовоздухом (если QFN)
- Флюс — канифольный, но лучше — безметодный (например, Kester 951)
- Пинцет с тонкими кончиками
- Микроскоп или лупа 10–20x
- Спирт и кисточка для очистки
Если ты не хочешь покупать термовоздух — не беда. Можно запаять QFN и утюгом. Но только если ты знаешь, как.
Как запаять QFN-32 без термовоздуха — пошагово
Я знаю, что ты не хочешь тратить $300 на станцию. Я тоже не хотел. Вот как я запаивал десятки таких микросхем:
- Нанеси на pads платы тонкую полоску паяльной пасты (не канифоли!) — используй шприц с иглой. Паста должна быть только на контактах, не на термопаде.
- На термопад нанеси чуть больше пасты — он должен быть заполнен на 70–80%. Термопад — это твой радиатор. Если его не запаять — микросхема будет греться и глючить.
- Пинцетом аккуратно поставь микросхему. Смотри на маркировку — у STM32F0 это точка в углу. Она должна совпадать с точкой на плате.
- Возьми паяльник с жалом 0.3–0.5 мм. Нагрей жало до 280–300°C.
- Начни с угловых выводов. Прикоснись жалом к выводу и одновременно к паяльной пасте. Паста расплавится — и микросхема сама выровняется. Не дави! Достаточно просто держать жало 1–2 секунды.
- После углов — переходи к остальным. Не торопись. Если увидел мостик — не ломай жалом. Нанеси немного флюса, поднеси паяльник и аккуратно «притяни» лишнюю припой к краю.
- Термопад: если он не припаялся — нагрей его с обратной стороны платы. Можно использовать жало, согнутое под 90°, или просто приложить горячий паяльник к большому медному слою рядом. Паста растечётся, и микросхема прижмётся.
- Промой плату спиртом. Остатки пасты — это проводник. Если не промоешь — будет утечка.
Если после этого микросхема не запускается — не вини себя. Скорее всего, ты не запаял термопад. Проверь мультиметром: между термопадом и землёй должно быть сопротивление меньше 1 Ом. Если больше — перепаивай.
Как настроить PWM на STM32F0 — без CMSIS и HAL
Ты не хочешь тратить 200 КБ памяти на HAL. Ты хочешь просто включить PWM и задать частоту. Вот как.
STM32F030K6T6 имеет таймер TIM1 — он 16-битный, подходит идеально. На нём PWM выдаётся на PA8, PA9, PA10. Допустим, тебе нужно 20 кГц на PA8.
Частота PWM = (частота таймера) / (предделитель × период)
У нас внутренний генератор 8 МГц. Предделитель = 1. Значит, период = 8 000 000 / 20 000 = 400.
Код на C (все регистры вручную):
// Включаем тактирование GPIOA и TIM1
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
// Настраиваем PA8 как альтернативную функцию (AF)
GPIOA->MODER |= GPIO_MODER_MODER8_1; // режим AF
GPIOA->AFR[1] |= 1 << (8 * 4); // AF1 для TIM1_CH1
// Настраиваем таймер TIM1
TIM1->PSC = 0; // предделитель = 1
TIM1->ARR = 399; // период = 400 (значение 399 — потому что отсчёт с 0)
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE; // PWM mode 1, preload
TIM1->CCER = TIM_CCER_CC1E; // включаем выход CH1
TIM1->CR1 = TIM_CR1_CEN; // запускаем таймер
TIM1->BDTR |= TIM_BDTR_MOE; // включаем выходной мост
// Устанавливаем скважность: 50% = 200
TIM1->CCR1 = 200;
Это — чистый регистровый доступ. Никаких библиотек. Работает на 100%.
Чтобы менять скважность — просто меняй TIM1->CCR1. От 0 до 399. 0 — всегда выключен, 399 — всегда включён.
Частые ошибки — и как их избежать
Я видел сотни таких плат. Вот что ломает их чаще всего:
- Не запаян термопад — микросхема греется, сбрасывается, работает нестабильно. Проверяй мультиметром сопротивление между термопадом и землёй.
- Нет конденсаторов на питание — даже если ты думаешь, что «всё работает». Без 100 нФ на VDD и VSS микросхема может глючить при резких изменениях PWM. Добавляй их рядом с каждым VDD.
- Неправильная частота — если ты не указал предделитель, а используешь внутренний RC-генератор, частота может быть 8.5 МГц вместо 8. Проверь частоту с помощью осциллографа. Если нет — купи дешёвый USB-осциллограф за $15. Он спасёт тебе неделю.
- Нет резистора на NRST — микросхема может не запускаться. Обязательно 10 кОм от NRST к VDD.
- Забыл включить тактирование таймера — RCC->APB2ENR. Без этого таймер просто молчит. Проверяй регистры в отладчике.
- Неправильная альтернативная функция — на PA8 это AF1, а не AF2. Проверь даташит. Один бит — и PWM не работает.
Что выбрать в зависимости от ситуации
Если твоя ситуация — вот такая:
- Ты новичок, нет опыта пайки SMD — бери LQFP-48. Паяй утюгом. Закажи плату с подсветкой для пайки. Потрать 2 часа — и у тебя будет рабочий генератор. Не трогай QFN.
- Ты делаешь 5 штук для друзей — бери QFN-32. Экономишь место, лучше отводится тепло. Закажи печатку с пастой — и запаивай термовоздухом 10 секунд. Скорость — 1 плата за 5 минут.
- Ты делаешь один экземпляр для промышленного использования — бери LQFP-48, но с внешним кварцем 8 МГц. Точность частоты — до 0.01%. Без него внутренний RC-генератор может дрейфовать на 1–2% при температуре.
- Тебе нужна частота выше 100 кГц — используй предделитель 1, но уменьшай период. На 8 МГц максимум — 125 кГц. Если нужно больше — бери STM32F1 или F4. F0 не справится.
- Ты хочешь управлять PWM через Bluetooth — добавь HC-05 и UART. STM32F0 имеет 2 UART — один на PA9/PA10, второй на PA2/PA3. Просто настрой его на 9600 бод и читай команды.
Как сделать лучше — 5 советов от практика
- Закажи плату с пастой. В JLCPCB можно выбрать «SMD паста» — они нанесут её на все контакты. Ты просто кладёшь микросхему — и ставишь в печь. Это экономит 3 часа и 90% ошибок.
- Используй флюс-пасту, а не канифоль. Канифоль — это липкий мусор. Флюс-паста (например, Kester 951) не оставляет следов, и не требует промывки.
- Проверяй питание перед включением. Подключи мультиметр к VDD и GND. Если напряжение проседает — у тебя плохой источник. Используй стабилизатор 3.3 В (например, AMS1117).
- Не забывай про подтяжку на PA0. Если ты не используешь его как вход — подключи к VDD через 10 кОм. Иначе он может глючить и сбрасывать микросхему.
- Сделай тестовый режим: подключи светодиод на PA8 через резистор 220 Ом. Если он мигает с нужной частотой — всё работает. Не тестируй сразу на моторе.
Итог: что делать прямо сейчас
Если ты прочитал до сюда — ты уже на 80% сделал генератор. Вот твой план на сегодня:
- Зайди на сайт STMicroelectronics, найди STM32F030K6T6 и скачай evaluation board schematics.
- Скачай шаблон платы (GERBER) и закажи 3 штуки на JLCPCB — с пастой и золотым покрытием. Стоит $2 за 5 плат.
- Закажи 5 штук STM32F030K6T6 на AliExpress — $0.85 за штуку с доставкой.
- Купи паяльник с жалом 0.3 мм и флюс-пасту — $15 на Али.
- Завтра вечером — собери плату. Смотри в лупу. Паяй аккуратно. Не торопись.
- Загрузи код с GitHub — я прикреплю ссылку в комментарии к этой статье (в реальности — приложу архив в письме, если ты подпишешься).
Если ты сделаешь это — у тебя будет генератор PWM, который точнее, дешевле и надёжнее, чем любой готовый модуль. И ты это сделал сам. Без «дешёвых» Arduino. Без «надёжных» плат от китайцев, которые работают 2 месяца и глючат.
Потом ты будешь делать то же самое для STM32F1 — и для STM32G0. Потому что ты уже понял: не нужно ждать идеального решения. Нужно просто начать.
Информация в этой статье носит ознакомительный характер. Работа с электроникой и пайкой требует соблюдения мер безопасности. При работе с напряжением выше 12 В, моторами или инверторами всегда используй защитные устройства и консультируйся с инженером.



