Расскажу о таком непрятном и опасном явлении как паразитное питание. Речь идет о питании устройства не через пару Vcc GND, а через обычные входы. Особенно это касается разного рода микроконтроллеров.
У многих микросхем, а у контроллеров так поголовно, на входе стоят защитные диоды. Их задача стравливать броски напряжения в линию питания. Все бы замечательно, только диоды эти уж очень хилые. Точной цифры сейчас не вспомню, но у AVR их предельный ток порядка 500мкА. Представили? В 50 раз меньше чем у какого нибудь светодиода! А что дальше? А дальше капец дохнет диод и либо тебе повезет и там будет обрыв и МК останется в строю, либо, что чаще, КЗ и этот вывод МК можно считать дохлым.
Паразитное питание возникает обычно когда у нас есть два девайса, питающихся от разных источников и связанных между собой линями связи и землей. Простейший пример: микроконтроллер и программатор.
Результатом этого эффекта может стать странное поведение устройства. Так что если все вот только работало, а сейчас выдает финтеля, то ищите первым делом обрыв питания. Но потеряное время это еще пол беды, бывает хуже. Поэтому расскажу сейчас грустную историю про мальчика Билли Хальта, который очень любил деньги был жутко ленив и невнимателен.
В общем было так
Купил я на днях парочку новых ATmega168 в DIP корпусе. Так, помучить, да вкорячить их в новую полукоммерческую поделку ту самую линейку светодиодов, в народе POV проектор. Воткнул все это дело в схему, подключил к родимому USBASP, стал накатывать прошивку. В ходе экспериментов, чтобы вся эта линейка (40 светодиодов, однако) не нагружала USB от которого она питается, я щелкнул рубильником Power на USBASP, оборвав линию питания. Но при этом MISO/MOSI/RESET/SCK/GND остались заведены на МК.
А еще я поленился делать процедуру выдачи байт в регистровую линейку через обычный вывод, а нагрузил сдвиговые регистры прямо на SPI. Чтобы слать байты в регистровую цепь посредством SPI передатчика.
Чуете какая задница нависла над несчастной Мегой? Нет? Сейчас поймете!
Подправив программу, я пнул дудку с требованием прошить мне МК. Забыв включить питание! Рубильник там механический, поэтому USBASP не знает есть там питалово или нет, наличие МК он определяет экспериментально посылая ему запрос.
Таким образом USBASP взял и отрыгнул в SPI запрос на выдачу сигнатуры МК. Поскольку питание МК было выключено, то он это дело проигнорировал.
Но вот высокие уровни на линиях MISO/MOSI/RESET/SCK прошли через защитные диоды в ATMega168 и дошли до линейки регистров.
Регистр, получив питание, радостно проснулся, такты на линии SCK, предназначавшиеся для опроса меги, принял на свой счет, с громким чавканьем захавав первый попавшийся мусор из эфира, естественно запалив добрых полтора десятка ультраярких светодоидов.
Защитные диоды в микроконтроллере, охренев от такой нагрузки, мгновенно склеили ласты, образовав мощное КЗ. В итоге, SPI (а равно как и ISP) у этого МК сдохли окончательн и бесповоротно. R.I.P.
Какие ошибки я допустил и как этого можно было избежать?
- Не давать на входы напряжения до того как подано питание
- Не давать болтаться входам регистров. Т.к. МК был без питания, то его выходы были в Hi-Z, считай что в воздухе. Поэтому DATA вход регистра ловил мусор. Но подтяни я его через регистр в 10кОм к GND то регистр бы не наелся и диоды бы не загорелись, а питание трех резисторов и МК диоды могли бы сдюжить.
- Можно было поставить дополнительные защитные диоды, внешние, параллельные внутренним. Но это уже ближе к промышленным решениям.
Страшные истории
Ладно микроконтроллер, обидная, но не критичная потеря. В следующий раз буду внимателней. Бывают косяки посерьезней. Например, очень дешевый, но при этом феерически глючный GPRS модем SIM300DZ при подаче напряжения на входы без питания в лучшем случае теряет прошивку, в худшем склеивает ласты, а это уже полтора килорубля.
Также возможна тиристорная защелка. Это когда вначале паразитное питание, а потом, при подаче нормального напряжения, выводы заклинивает в открытом состоянии (с Vcc на GND), через них начинает идти большой ток, а МК сгорает источая вонь. Спасение от этого только быстро вырубить питание.
Оцените статью!