Подключение транзистора к линии порта ввода/вывода

Изучив данный материал, в котором все очень детально и подробно описано с большим количеством примеров, вы сможете легко овладеть и программировать порты ввода/вывода микроконтроллеров AVR.


Пример будем рассматривать на микроконтроллере ATMega8.

Программу писать будем в Atmel Studio 6.0.

Эмулировать схему будем в Proteus 7 Professional.

Максимальный ток, который способен пропустить каждый порт ввода/вывода составляет 40 mA.
Максимальный ток, который способна пропускать каждая линия порта ввода/вывода составляет 20 mA.
Прежде чем подключать нагрузку, в том числе и транзистор к линиям порта ввода/вывода можно спалить его превысив допустимую нагрузку на линию порта ввода/вывода.
Что бы ограничить ток, который протекает через линии порта ввода/вывода микроконтроллера нужно рассчитать и подключить токоограничивающий резистор.



Рис: Рапиновка транзистора n-p-n-типа.



Рис: Рапиновка транзистора p-n-p-типа.



Рис: Подключение к микроконтроллеру транзистора n-p-n-типа.



Рис: Подключение к микроконтроллеру транзистора p-n-p -типа.

Сопротивление токоограничивающего резистора подключаемого к линиям портов ввода/вывода при подключении транзистора рассчитывается по формуле:



Пример:
— включения мощного светодиода через транзисторный ключ.



Рис: Подключение к микроконтроллеру светодиода через транзисторный ключ n-p-n-типа.

Данные на светодиод:
— напряжение источника питания – ;
— прямое падения напряжения на светодиоде – 1,35В(Берётся с datasheet на светодиод);
— прямой ток на светодиоде – 120мА (Берётся с datasheet на светодиод);
— коэффициент надежности роботы светодиода – 75% (Берётся с datasheet на светодиод);

Данные на транзистор BC547 берем из Datasheet-BC547:



Данные на микроконтроллер:
— напряжение источника питания – ;
— падение напряжения на линии порта ввода/вывода – 0,5В (Берётся с datasheet на микроконтроллер: Vol(output low voltage) – если ток втекает, и Voh (output high voltage) – если ток вытекает);

Рассчитываем сопротивление R1:



Таким образом, номинал резистора R1 = 38.33 Om, подбирается ближайшее большее значение сопротивления, например 39 Ом.

Определив номинал резистора R1, необходимо рассчитать мощность P1, измеряемая в ваттах, которая будет выделяться в резисторе, в виде тепла при протекании тока в цепи.



Рассчитав выделяемую мощность на резисторе, выбираем ближайшее большее значение мощности резистора.

Рассчитываем сопротивление R2:



Таким образом, номинал резистора R2 = 4750 Om, подбирается ближайшее меньшее значение сопротивления, например 4,7 кОм.

Определив номинал резистора R2, необходимо рассчитать мощность P2, измеряемая в ваттах, которая будет выделяться в резисторе, в виде тепла при протекании тока в цепи.



Рассчитав выделяемую мощность на резисторе, выбираем ближайшее большее значение мощности резистора.

?
— подключения транзистора n-p-n-типа к линии порта ввода/вывода:



// Подключаем внешние библиотеки
#include <AVR/io.h> 
#include <stdint.h> 

// Основная программа
int main(void) 
{ 
 
 // Настраиваем порты ввода/вывода
 DDRC  = 0b11111111;  //Настраиваем все разряды порта C на режим "Выход"
 PORTC = 0b11111111;  //Устанавливаем все разряды порта C в лог.«1» (На выходе порта напряжение равное Vcc) 
 
 // Вечный цикл
 while (1) 
 { 
 } 
}


— подключения транзистора p-n-p-типа к линии порта ввода/вывода:



// Подключаем внешние библиотеки
#include <AVR/io.h> 
#include <stdint.h> 

// Основная программа
int main(void) 
{ 
 
 // Настраиваем порты ввода/вывода
 DDRC  = 0b11111111;  //Настраиваем все разряды порта C на режим "Выход"
 PORTC = 0b00000000;  //Устанавливаем все разряды порта C в лог.«0»  (На выходе порта напряжение равное GND) 
 
 // Вечный цикл
 while (1) 
 { 
 } 
}

Комментарии (20)


  1. expert_av Автор
    14.04.2015 13:44
    -2

    Люди если что то не нравиться в статье не спешите ставить негативную оценку… напишире в коментариях и все исправим… есть много хорошего материала на тему микроконроллеров…


    1. Singerofthefall
      14.04.2015 13:47

      Ставьте скорее хабракат, пока не заминусовали!


    1. olartamonov
      14.04.2015 14:49
      +5

      Мне, например, «не нравиться», что это материал, написанный криворуким роботом с целью получить аккаунт на Хабре. Вы можете это исправить?

      Данные на транзистор BC547 берем из Datasheet-BC547:


      Вот это правда писал человек, который понимал смысл этих слов?


  1. ploop
    14.04.2015 14:12

    Формулы расчета это конечно хорошо и правильно, но к ним ещё и понимание процессов нужно.
    Например, расчет R2: у нас транзистор работает в ключевом режиме, и то, что вы рассчитали — это максимальное значение сопротивления, при котором транзистор будет в режиме насыщения. Небольшой разброс параметров и всё, он войдёт в линейный режим. От помех тоже будет дрыгаться.

    То есть сопротивление R2 должно бвть НЕ БОЛЕЕ 4.7к и НЕ МЕНЕЕ допустимого тока базы. Оптимально — 100-470 Ом, если энергопотребление критично — 1-2к


    1. expert_av Автор
      14.04.2015 14:22
      -8

      Абсолютно с вами согласен!!! Но статьи не для проффесионалов, а на новачков которые только начинают заниматься программирование микроконтроллеров… Хочется в кратце и на понятном языке обяснить… а изложив много ньюансов и процесов можна полностю запутать начинающего человека…


      1. progchip666
        15.04.2015 09:54
        +3

        Я понимаю что вы волнуетесь и статья для новичков, но количество грамматических ошибок в двух с половиной строчках комментария просто зашкаливает за рамки приличия и уважения к членам хабрасообщества.


  1. dvserg
    14.04.2015 14:19

    Анонс обещал детально…

    Изучив данный материал, в котором все очень детально и подробно описано с большим количеством примеров, вы сможете легко овладеть и программировать порты ввода/вывода микроконтроллеров AVR.


    А позиция не раскрыта…
    Робота портов ввода/вывода


    Примеры и схемы это отлично.
    А можно немного вводной теории на пару абзацев для людей типа меня, которые не совсем в теме?
    Хотелось бы увидеть описание, как организованы ввод/вывод в целом и порты в частности (адреса/данные/упр. сигналы, разрядность, зачем нужны маски 'DDRC = 0b11111111' и что они делают).


    1. expert_av Автор
      14.04.2015 14:28
      -3

      Попробуй прочитать статью:
      habrahabr.ru/post/253213
      Если не понятно будет пиши в коменты… объясню…


      1. dvserg
        14.04.2015 14:30

        Спасибо, с удовольствием прочту. Но Вы хоть в тексте статьи полезные ссылки добавьте…


      1. Dolios
        14.04.2015 14:32

        Дайте ссылки на ваши предыдущие статьи в этой (с кратким пояснением, о чем они). У людей меньше вопросов возникать будет.


        1. expert_av Автор
          14.04.2015 15:24
          -1

          Ссылки на предыдущие статьи в самом вершу статьи…


  1. progchip666
    15.04.2015 09:52
    +1

    Конечно статья про то как присоединить диод к порту микроконтроллера карйне информативна. Самое смешное, что я реально видел как неплохой программист подсоединял светодиоды напрямую к портам контроллера.
    Кстати, уж если ставить транзистор, то лучше заодно предусмотреть запирающий резистор на всякий случай, правда это больше для полевиков актуально.
    Однако во что бы действительно для меня было интересно это статьи по работе с тем же Proteus 7 Professional, о котором в этой статье только одно упоминание имеется.


  1. progchip666
    15.04.2015 10:21

    — падение напряжения на линии порта ввода/вывода – 0,5В (Берётся с datasheet на микроконтроллер: Vol(output low voltage) – если ток втекает, и Voh (output high voltage) – если ток вытекает);

    Что то у меня большие сомнения по поводу этого параметра. Наверно теоретически пол вольта может упасть на открытом канале выходного транзистора но уж точно только при максимально допустимом токе нагрузки. При нагрузке в 4 с лишним килоома на выходе порта точно будет значение очень близкое к напряжению питания. Не верите, можете проверить с тестером в руках, да думаю даже на том же протеусе. Конечно не смотря на это ваша схема останется работоспособной, но раз уж материал обучающий и сделана попытка глубже копнуть в схемотехнику, то не следует делать подобных ошибок.


    1. ploop
      15.04.2015 11:00
      +1

      Обучающий материал должен быть разных уровней. Если это как зажечь светодиод — то Voh/Vol и расчёт микроваттной мощности резистора уж точно стоит забить. Или наоборот, брать пин контроллера и рассказывать про него всё.


      1. progchip666
        15.04.2015 11:11

        Я согласен что на этот параметр легко можно забить, но уж точно не стоит приводить его в неправильном толковании. Получилось уже не умолчание, а ошибка которая вводит новичка в заблуждение. Что по любому не правильно.


        1. ploop
          15.04.2015 11:16

          Как выше говорил — 4 килоома в таком применении тоже неправильное толкование теории.
          По сути с таким «глубоким» подходом реальная схема попросту может не заработать.


          1. ploop
            15.04.2015 11:26

            Спорили только что, теория и практика интересная вещь :)
            К примеру, в теории нельзя соединять параллельно два разных источника напряжения. Толкуем: литиевый аккумулятор источник напряжения? Источник. Соединять нельзя!

            На практике: взять заряженный и разряженный аккум, разница — 1 вольт. Внутреннее сопротивление пусть будет 0.1 Ом, при параллельном соединении мы получим ток 1/0,2 = 5А, который сам по себе немного превышает рекомендуемый (не допустимый, а рекомендуемый) и будет резко падать каждую секунду, пока не устаканится на совсем маленьком уровне, а вскоре — на пренебрежимо малом. Всё, связка работает.
            А если между ними 0.2-0.3 вольта изначально — так и вообще пшик.

            А всё потому, что теорию надо с умом применять.


            1. progchip666
              15.04.2015 12:09

              А всё потому, что теорию надо с умом применять.

              Согласен с вашим утверждением на все сто. Теория она конечно хороша, но не всеобъемлеща. Она работает с сознательно упрощёнными моделями. Когда человек это не понимает, а порой ещё и пользуется неправильными для данного момента упрощениями в точности как в мелком вопросе на который я указал выше результат может получиться совсем не тот, которого он ожидает. И даже самая замечательная система проектирования не спасёт если в неё ввести неполные или неправильные данные.


            1. progchip666
              15.04.2015 12:24

              Расчёт микроволновой мощности сопротивления особенно прикалывает на фоне того, что в схеме используется транзистор с максимальным длительным током коллектор-эммитер в 100 мА по крайней мере согласно тому даташиту, что мне первым в инете под руку подвернулся. Это для питания светодиода током в 120 мА. Но почему то расчёт рассеиваемой мощности транзистора не приводится, хотя в данном случае был бы много уместнее.


              1. ploop
                15.04.2015 12:27
                +1

                Вообще пост очень похож на рерайт с разных источников.