Как собрать DIY-генератор PWM с STM32F0 и запаять микросхемы размером с булавочную головку

Как собрать DIY-генератор PWM с STM32F0 и запаять микросхемы размером с булавочную головку

Как собрать 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 есть термопад снизу — его нужно запаять. Без него микросхема будет греться и сбоить.

Что тебе понадобится

Список — не для «всё-всё», а только для того, чтобы заработало. Никаких лишних вещей.

  1. STM32F030K6T6 (QFN-32) или STM32F030F4P6 (LQFP-48)
  2. Печатная плата — лучше заказать в JLCPCB или PCBWay. Шаблон возьми с сайта STMicroelectronics — они дают бесплатные GERBER-файлы для демоплат.
  3. Кварцевый резонатор 8 МГц (необязательно, но рекомендую)
  4. 2 конденсатора 22 пФ для кварца
  5. Конденсатор 100 нФ для питания (на каждый VDD)
  6. Резистор 10 кОм на NRST (для сброса)
  7. Паяльник с тонким жалом (0.5 мм или меньше)
  8. Паяльная станция с термовоздухом (если QFN)
  9. Флюс — канифольный, но лучше — безметодный (например, Kester 951)
  10. Пинцет с тонкими кончиками
  11. Микроскоп или лупа 10–20x
  12. Спирт и кисточка для очистки

Если ты не хочешь покупать термовоздух — не беда. Можно запаять QFN и утюгом. Но только если ты знаешь, как.

Как запаять QFN-32 без термовоздуха — пошагово

Я знаю, что ты не хочешь тратить $300 на станцию. Я тоже не хотел. Вот как я запаивал десятки таких микросхем:

  1. Нанеси на pads платы тонкую полоску паяльной пасты (не канифоли!) — используй шприц с иглой. Паста должна быть только на контактах, не на термопаде.
  2. На термопад нанеси чуть больше пасты — он должен быть заполнен на 70–80%. Термопад — это твой радиатор. Если его не запаять — микросхема будет греться и глючить.
  3. Пинцетом аккуратно поставь микросхему. Смотри на маркировку — у STM32F0 это точка в углу. Она должна совпадать с точкой на плате.
  4. Возьми паяльник с жалом 0.3–0.5 мм. Нагрей жало до 280–300°C.
  5. Начни с угловых выводов. Прикоснись жалом к выводу и одновременно к паяльной пасте. Паста расплавится — и микросхема сама выровняется. Не дави! Достаточно просто держать жало 1–2 секунды.
  6. После углов — переходи к остальным. Не торопись. Если увидел мостик — не ломай жалом. Нанеси немного флюса, поднеси паяльник и аккуратно «притяни» лишнюю припой к краю.
  7. Термопад: если он не припаялся — нагрей его с обратной стороны платы. Можно использовать жало, согнутое под 90°, или просто приложить горячий паяльник к большому медному слою рядом. Паста растечётся, и микросхема прижмётся.
  8. Промой плату спиртом. Остатки пасты — это проводник. Если не промоешь — будет утечка.

Если после этого микросхема не запускается — не вини себя. Скорее всего, ты не запаял термопад. Проверь мультиметром: между термопадом и землёй должно быть сопротивление меньше 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 советов от практика

  1. Закажи плату с пастой. В JLCPCB можно выбрать «SMD паста» — они нанесут её на все контакты. Ты просто кладёшь микросхему — и ставишь в печь. Это экономит 3 часа и 90% ошибок.
  2. Используй флюс-пасту, а не канифоль. Канифоль — это липкий мусор. Флюс-паста (например, Kester 951) не оставляет следов, и не требует промывки.
  3. Проверяй питание перед включением. Подключи мультиметр к VDD и GND. Если напряжение проседает — у тебя плохой источник. Используй стабилизатор 3.3 В (например, AMS1117).
  4. Не забывай про подтяжку на PA0. Если ты не используешь его как вход — подключи к VDD через 10 кОм. Иначе он может глючить и сбрасывать микросхему.
  5. Сделай тестовый режим: подключи светодиод на PA8 через резистор 220 Ом. Если он мигает с нужной частотой — всё работает. Не тестируй сразу на моторе.

Итог: что делать прямо сейчас

Если ты прочитал до сюда — ты уже на 80% сделал генератор. Вот твой план на сегодня:

  1. Зайди на сайт STMicroelectronics, найди STM32F030K6T6 и скачай evaluation board schematics.
  2. Скачай шаблон платы (GERBER) и закажи 3 штуки на JLCPCB — с пастой и золотым покрытием. Стоит $2 за 5 плат.
  3. Закажи 5 штук STM32F030K6T6 на AliExpress — $0.85 за штуку с доставкой.
  4. Купи паяльник с жалом 0.3 мм и флюс-пасту — $15 на Али.
  5. Завтра вечером — собери плату. Смотри в лупу. Паяй аккуратно. Не торопись.
  6. Загрузи код с GitHub — я прикреплю ссылку в комментарии к этой статье (в реальности — приложу архив в письме, если ты подпишешься).

Если ты сделаешь это — у тебя будет генератор PWM, который точнее, дешевле и надёжнее, чем любой готовый модуль. И ты это сделал сам. Без «дешёвых» Arduino. Без «надёжных» плат от китайцев, которые работают 2 месяца и глючат.

Потом ты будешь делать то же самое для STM32F1 — и для STM32G0. Потому что ты уже понял: не нужно ждать идеального решения. Нужно просто начать.

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

radio-blog.ru — электроника и технологии