Ще раз про джерело струму для гальваніки
Після деякої кількості набитих шишок і вбитих прототипів вдалося все-таки зробити схему джерела струму досить просту і одночасно досить ефективну. Апетити поки довелося дещо поміряти і схема дає лише +-10А (реально під навантаженням тривалий час дещо менше, можливо це вдасться виправити, див.нижче), але зате вона містить мінімум компонентів і в процесі експериментів продемонструвала завидну живучість (що, втім, не скасовує необхідності захисту у блоці живлення, який її живить). Одразу обмовлюся, що я розглядав тільки джерела струму, побудовані за схемою buck конвертера. Інші варіанти, що в тій чи іншій формі імітують реостат, відпали в силу своєї неефективності та завищених вимог до джерела живлення.
Design considerations. Основні граблі в джерелі струму для гальваніки - необхідність реверсу. Це відразу сильно ускладнює конструкцію як мінімум за двома пунктами: вимірювання струму через навантаження та необхідність комутації навантаження. Вимірювання струму через навантаження вирішується шляхом застосування спеціалізованих мікросхем, що вимірюють струм через навантаження, використовуючи ефект Холла. Вони мають як мінімум два важливі для даного завдання переваги перед традиційним струмовимірювальним резистором: вкрай мале падіння напруги на вимірювальному елементі та наявність можливості вимірювати струм в обох напрямках (не у всіх сенсорах це реалізовано, так що вибирати треба уважно). Це окрім повної гальванічної розв'язки від навантаження та вбудованого перетворювача струм у навантаженні -> напруга з досить великою роздільною здатністю (так що не потрібно обробляти малі сигнали на фоні неабияких струмів і перешкод, що гуляють навколо сенсора). З необхідністю комутації навантаження дещо складніше. Найпростіше рішення -використовувати реле. Варіант не надто вдалий, оскільки короткі інтервали часу між перемиканнями напрямку за допомогою їх реалізувати важко. Крім того, індуктивне навантаження (а в ланцюгу конвертера обов'язково є індуктивність), не найприємніше навантаження для контактів. Інший варіант - перемикання "в лоб" за допомогою моста на польових транзисторах. Цей варіант має чимало переваг, зокрема, міряти струм у навантаженні можна в однополярному режимі і зміну полярності можна робити незалежно від роботи конвертера. Очевидний недолік - драйвер моста (або два драйвери півмоста) + 4 ключі - неабияка доважка до конвертера який сам по собі містить лише половину цих компонентів. Ну і, нарешті, третій варіант, який, власне, я застосував. Якщо уважно подивитися на схему синхронного конвертера, можна помітити, що схема симетрична щодо землі та живлення:

10A для АЦП (і контролерів) що живляться від 3.3В вихідну напругу сенсора потрібно подавати на вхід АЦП черездільник, оскільки він вийде за верхню межу діапазону. Ну і, з урахуванням підтяжки на деяких входах, керуючі виходи таких контролерів мають бути стійкими до 5В. Можливо, має сенс використовувати стабілізатор на 3.3В і живити цифрову частину відразу від 3.3В. Стабілізаторів напруги на 5В два - один для аналогової частини та один для цифрової. Вихід стабілізатора цифрової частини виведено на роз'єм та від нього живиться схема управління. Для живлення аналогової частини використається LP2985A. Вибір обумовлений двома причинами - малий шум і досить висока точність калібрування вихідної напруги. З урахуванням того, що ця напруга є опорною для сенсора, фактор важливий. Діоди - звичайні 0540 у корпусі SOD123, хоча там підійдуть будь-які, ті ж 4148, наприклад. Електроліти комп'ютерні, з малим ESR. Ну і, нарешті, сумне — індуктивність. Підібрати потрібну готову так і не вдалося, довелося мотати самому. Мотав дротом 1.2 на оправці діаметром 16мм (шматок трубки для кабелів). Довжина намотування близько 40мм, намотування пошарове, загалом близько 100 витків. Після намотування індуктивність була залита полімерним клеєм. Замір індуктивності показав
90мкГн. Цього замало для малих струмів на малих частотах ШІМ, але головна проблема в іншому — на струмах близьких до максимальних вона досить гріється і, що особливо неприємно, гріє полігони, які охолоджують транзистори і, власне, призводить до того, що тривалий час працювати з максимальним струмом неможливо. Мабуть, доведеться переробляти ще раз (це друга спроба). Розумні рекомендації щодо конструкції приймаються з подякою. Частоту ШІМ я пробував у діапазоні від 36 до 200кГц. Низькі частоти конструкція переживає явно краще щодо нагріву.
Трохи про плату Для зручності описунаведу розведення у вигляді картинки:

Можливі напрямки розвитку Як згадував вище, має сенс спробувати транзистори в QFN. За ціною вони мало відрізняються від тих, що у схемі, а параметри явно кращі. Збираюся ще спробувати трохи збільшити опори, що задають dead time (R14 і R15 на схемі). Можливо, це дозволить підняти робочі частоти хоча б до 140-150кГц, і це дозволить, відповідно, знизити вимоги до індуктивності. Іншим напрямком, який явно варто покопати глибше, є використання багатофазних конвертерів. Саме такі конвертери застосовуються на материнках для живлення процесорів. Розпаралелювання зі зсувом фази має багато переваг - ефективна частота перетворення пропорційна кількості фаз, а при правильному виборі фаз і режимів роботи можна отримати безперервний струм у навантаженні без згладжування. На жаль, контролери таких конвертерів штука досить рідкісна у вільному продажу, а самі контролери погано пристосовані для регулювання вихідного струму. Зате отримати сотню ампер таким конвертером завдання, втім, рутинне.
Фотки Відразу попереджаю, що плата не дуже добре відмита, все-таки це прототип, який багато разів перепаювався.



Update Після невеликого збільшення dead time та заміни котушки на видертий з компового БП дросель частоту вдалося легко підняти до 100кГц, а нагрівання помітно знизити. Дросель дещо слабкуватий і все-таки гріється, але значно менше і, відповідно, значно менше гріє транзистори. Новий (сподіваюся правильний) дросель уже порахував і зробив, але під нього треба переробляти платню. Ще раз дякую всім за корисну інформацію.
Update2 Перші експерименти з реверсивним струмом показали, що метушня з джерелом того коштувала - вдалося підняти щільність струму до 3А/дм і при цьому практично немає "підгару". Щоправда, качати плату доводиться дуже інтенсивно.
Update3 В аналогічному обговоренні на радіокоті мені вдалося чіткіше пояснити чому моя схема виглядає саме так, як виглядає. На прохання одного з камрад процитую самого себе тут, щоб вся інформація була в одному місці. Під час пояснення згадується схема, її можна подивитися тут.
Як правильно помітив камрад led_fan, це степ-даун із синхронним випрямленням. Верхній транзистор лівого за схемою напівмосту разом з індуктивністю утворюють понижувальний перетворювач (степ-даун). До традиційної схеми перетворювача не вистачає лише діода між лівим виведенням індуктивності та землею. Замість нього стоїть нижній транзистор лівого напівмосту. Коли відкривається верхній транзистор, індуктивність накопичує енергію. Потім, коли верхній транзистор закривається, відкривається нижній і індуктивність віддає накопичену енергію навантаження. Регулюючи співвідношення часів протягом яких відкриті кожен із транзисторів ми можемо регулювати напругу на навантаженні. В ідеалі (якщо взагалі немає втрат), потужність споживана від джерела живлення дорівнює потужностіщо віддається в навантаження. Отже, струм, що споживається від джерела живлення, дорівнює струму через навантаження діленому на співвідношення напруги на навантаженні до напруги живлення (наприклад, при живленні 12В і напрузі на навантаженні 1.2В ми можемо прокачати через навантаження 10А споживаючи тільки 1А від джерела живлення). Варіант схеми понижуючого перетворювача, в якій замість діода стоїть другий транзистор, що відкривається в протифазі з основним, називається "перетворювач із синхронним випрямленням" або просто "синхронний перетворювач". До речі, всі потужні перетворювачі (розраховані на великі вихідні струми), зокрема ті ж регулятори живлення CPU на материнках, все робляться за синхронною схемою. Перевага такого варіанту в тому, що падіння напруги на нижньому транзисторі значно нижче прямого падіння на діоді.
З усього написаного вище є кілька важливих висновків (стосовно схеми, що обговорюється): 1. При переключенні в режим реверсу транзистори змінюються ролями - нижній "накачує" індуктивність, а верхній працює синхронним випрямлячем для нижнього. З цього, у свою чергу, стає (сподіваюся) зрозуміло, що при перемиканні в режим реверсу потрібно змінювати шпаруватість PWM сигналу на «додаткову»: скажімо, якщо у нас таймер налаштований так, що час циклу займає 1024 відліки для отримання струму через навантаження 1А ми виставляли PWM, наприклад, у 100 (скважність
10%), то при перемиканні в режим реверсу шпару потрібно поставити
90% (тобто виставити PWM 1024-100 = 924) для збереження струму через навантаження (за абсолютною величиною). 2. Місткість, яка фільтрує вихідну напругу перетворювача, краще ставити паралельно навантаженню, а не між виходом і землею. У реверсному режимі вона просто не працюватиме як очікується — урежимі реверсу вона буде включена послідовно з конденсаторами, що фільтрують живлення всієї схеми і це може призвести до різної форми струму через навантаження в прямому і реверсному режимах (особливо якщо конденсатори живлення зі значним ESR). 3. Місткість фільтра не повинна бути великою. По-перше, це не потрібно при достатній частоті PWM, по-друге, в момент перемикання прямий-реверсний режим ця ємність перезаряджається через один із транзисторів правого (за схемою) напівмосту, що, природно, не йде йому на користь. 4. Як я вже не раз писав, струм споживаний від джерела живлення і струм через навантаження безпосередньо не пов'язані і можуть відрізнятися в рази. Отже, міряти потрібно струм в ланцюгу, в яку включено навантаження. Струмовимірювальний резистор між землею та витоками нижніх транзисторів півмоста дозволить поміряти струм споживаний від джерела живлення, але не струм через навантаження. Мірити струм через навантаження можна трьома способами: а) спеціалізований датчик струму в ланцюзі навантаження (не важливо який, резистор, датчик на ефекті Холла як у мене в схемі або ще якась байда), б) міряти падіння напруги на внутрішньому опорі індуктивності, в) міряти падіння напруги на відкритому каналі транзистора працюючого (на даний момент) синхронним випрямлячем. Варіант а) з резистором і варіанти б) і в) принципово однакові, відмінності лише в тому, який опір використовується і в тому, який температурний коефіцієнт опору датчика (індуктивність і відкритий канал транзистора мають значний позитивний ТКС). Стосовно обговорюваної схеми варіанти засновані на вимірі падіння напруги на опорі датчика мають один істотний недолік: виділення сигналу з датчика потрібен диференціальний підсилювач. У схемі з реверсом цей підсилювач будепрацювати у важкому режимі - великі синфазні сигнали на входах близькі до напруг живлення (причому стрибають від одного полюса до іншого). Причому потрібно виділити сигнал досить малої величини — скажімо, з струмовимірювального резистора 10мОм при струмі через навантаження 1А сигнал складе всього 10мВ на тлі синфазної перешкоди порядку 12В і смугою в мегагерц (а то й кілька мегагерц). Після того, як я спробував підібрати підходящий для цієї мети операційник, вартість спеціалізованого датчика струму на основі ефекту Холла (алегровський ACS712 у моєму випадку) мене дуже зраділа. Додайте до цього зручність використання того сигналу, який він генерує, неабияку чутливість, відсутність необхідності робити температурну компенсацію та мінімум необхідної обв'язки і стане зрозуміло, чому у своїй схемі я використовував саме його, а не струмовимірювальний резистор (або його варіації).
Так, думаю важливо уточнити, що правий напівміст перемикається рідко, тільки при зміні полярності, основне навантаження несе лівий напівміст. І від того, наскільки швидко його можна перемикати залежить розмір індуктивності, а від цього, у свою чергу, залежать не тільки габарити, а й те, наскільки вона грітиметься.