Предметом размышления была возможность измерения трех температур (ЦП, ГП и воздуха в корпусе), выводимых на дисплей в отсеке от HDD 3,5 дюйма. Результат будет по задумке представлен на трех 7-сегментных LED дисплеях. Дополнительным элементом должен был стать USB-порт, который позволит переместить внутренний USB-разъем, присутствующий на плате расширения PCI, в более рациональное место, то есть на переднюю часть корпуса и, конечно же, также использовать это напряжение для питания термометра.
У проекта было два подхода к делу:
- 1) все они были размещены на одной печатной плате, соответствующей отсеку, и каким-то образом закреплены в отсеке в корпусе компьютера.
+ экономия времени при выполнении (только одна плата)
– нет необходимости использовать дополнительные розетки / штекера для подключения нескольких плат
– необходимость вертикального монтажа гнезда USB
– необходимость тщательного проектирования печатной платы и всех радиоэлементов.
- 2) Дисплеи размещены на первой плате, а остальные детали на второй, соединены с помощью штыревого разъема под 90 градусов. Вторая плата будет крепиться к отсеку снизу.
+ USB-разъем можно установить горизонтально на второй плате
+ больше места на второй плате для размещения компонентов
– необходимость сделать 2 печатные платы.
В итоге выбрал первый метод.
Схема термометра для процессора, видеокарты и БП ПК
AVR Atmega 8 в миниатюрном корпусе TQFP32 идеально подходит для такого типа проектов, в качестве датчиков температуры были выбраны DS18B20, работающие по шине 1-W3ire.
Для управления анодами дисплея использовал транзисторы PNP BC857 (IcMAX = 100 мА, IcPeak = 200 мА) в корпусе SOT23 (каждый сегмент дисплея имеет фиксированный ток при Iseg = 20 мА: Rcathode = (VCC – VGreenLed) / Iseg = (5V – 1,8V) ) / 20 мА = 160R = ~ 150R (т.е. Iseg = ~ 21 мА).
Таким образом, в сумме со всеми включенными сегментами это дает 7 х 21 = 147 мА. Однако каждый дисплей включен только на 1/6 своего времени, поэтому средний ток составляет 147 мА / 6 = 25 мА.
Транзисторы должны работать как ключи, поэтому в соответствии с диапазоном усиления (100…800), выбирая наихудшее усиление и запас прочности x3:
Ib = 3 х Ic / 100 = 3 х 147 мА / 100 = 4,4 мА
Rb = (Vcc – Vbe ) / Ib = (5V – 0.7V) / 4,4 мА = 970R = 1k
Одной из дилемм был способ подключения термометров к компьютеру.
- 1) каждый может быть подключен к отдельной линии передачи данных.
– больше используемых контактов
– термометры можно подключать к любым разъемам, потому что разъем 1 всегда будет связан с дисплеем 1, а 2 с дисплеем 2 и т. д.
- 2) все они могут быть подключены к общей линии передачи данных.
+ сохранение пина
– необходимость связать уникальный серийный номер с данным датчиком (то есть числа, вшитые в код микропроцессора или какой-либо другой метод настройки).
Выбор пал на метод 1. Решил проблему с USB-разъемом, просто согнув его контакты по вертикали и припаяв все это тоже к металлической части корпуса, таким образом обеспечивая их постоянную защиту.
К сожалению, с самого начала все пошло не так, как должно:
После изготовления платы программатор вообще не обнаружил микроконтроллер. Оказалось, что виновником была линия MOSI, которую также использовал для управления сегментом D. Во время программирования все линии ввода / вывода микроконтроллера находятся в состоянии высокого сопротивления, что означает транзисторы управления анодом могут переключаться сами.
В результате такой транзистор высвобождает напряжение питания на линии MOSI / CD, и, несмотря на последовательно включенный резистор 160R, программатор не может управлять этой линией. Конечно, все специальные линии (MOSI, MISO, SCK) могут использоваться во время работы микроконтроллера любым способом, как и любой из его выводов. Но следует помнить, что к этим линиям не подключается никакой вывод от другой внешней схемы, потому что тогда при попытке программирования микроконтроллер не сможет управлять этими линиями.
Решением было заменить вывод, управляющий линией CD, на другой (отсюда и красный кабель, видимый на плате).
Снова не получилось общаться с термометрами (несмотря на то, что была собственная написанная и протестированная библиотека). Оказалось, что забыл про внешние резисторы, подтягивающие эту линию к питанию (4,7 кОм), а встроенные в Atmega резисторы (30-50 кОм) оказались слишком большими. Пришлось добавить резисторы SMD на плату.
Термометр в среднем гнезде не заработал – причиной было короткое замыкание на землю по этой линии, возникшее во время пайки.
Дисплей мигал. Для поддержки протокола 1-Wire требуется соблюдение временных зависимостей во время передачи, а это означает, что прерывания должны быть отключены в это время, что может продлить выполнение критического кода, нарушая передачу. Однако отключение прерываний, которые, в свою очередь, выполняют сегменты кода 7 обработки дисплея, вызывает их заметное мигание. Здесь решение заключалось в отключении прерывания не на все время обработки показаний температуры, а только в критических ситуациях (на время передачи / чтения каждого отдельного бита в протоколе 1-Wire).
Крепление термометра к корпусу ПК
Здесь использовались отрезанные соответствующим образом куски текстолита, которые припаял к передней пластине, создав форму, которая идеально вписывалась в отсек. Просверленные отверстия под винты М3 с припаянными гайками позволят прикрутить все это к корпусу без проблем. Переднюю панель сделать сам – это должна быть просто пластиковая заглушка с прорезями для дисплеев и разъем USB.