Регулятор оборотов вентилятора. Уже в первых экспериментах с коллекторным моторчиком и батарейкой можно было заметить, что при частом попеременном включении и выключении электромотора частота вращения его ротора изменяется. То есть происходила регулировка скорости вращения путём периодичного включения и отключения тока через моторчик. Если изменять при этом время в подключённом состоянии и длину паузы между подключениями, можно регулировать скорость вращения мотора. Такой же эффект проявляется практически с любым потребителем электрического тока, имеющим определённую инерцию, т.е. способным запасать энергию. Именно этот эффект положен в основу принципа Широтно-Импульсной Модуляции (ШИМ), также встречается английское сокращение - PWM (Pulse-Width Modulation). Широтно-Импульсная Модуляция - это способ кодирования аналогового сигналa путём изменения ширины (длительности) прямоугольных импульсов несущей частоты. Рис. 1. Зависимость напряжения от скважности ШИМ. На Рис. 1 синим цветом представлены типичные графики ШИМ сигнала. Так как при ШИМ частота импульсов, а значит, и период (T), остаются неизменными, то при уменьшении ширины импульса (t) увеличивается пауза между импульсами (эпюра "Б" на Рис. 1.) и наоборот: при расширении импульса пауза сужается (эпюра "В" на Рис. 1.). Если сигнал ШИМ пропустить через фильтр низших частот, то уровень постоянного напряжения на выходе фильтра будет определяться скважностью импульсов ШИМ. Назначение фильтра - не пропускать несущую частоту ШИМ. Сам фильтр может состоять из простейшей интегрирующей RC цепи, или же может отсутствовать вовсе, например, если оконечная нагрузка имеет достаточную инерцию. Таким образом, имея в расположении лишь два логических уровня, "единицу" и "ноль", можно получить любое промежуточное значение аналогового сигнала. По принципу вышеизложенного и был разработан регулятор вентилятора. Необходимость в данном устройстве появилась, когда у ребёнка сгорела материнская плата на компьютере и пришлось поставить другую. С другим радиатором и кулером на процессор. Новый кулер был без регулятора оборотов. Для обеспечения тишины работы компьютера пришлось со своего компа снять залмовский регулятор и поставить ребёнку на компьютер, всё лучшее детям . Теперь мой вентилятор начал шумно работать, а так как моя материнка без корпуса и просто прибита гвоздём к стенке за монитором (Рис.2.), то создавался дискомфорт при работе за компьютером. С этим надо было что то делать, что-нибудь простое и дешевое. В результате чего и родилась данная схема. Рис. 2. «Материнкой» внешний вид не испортишь. Схема (Рис. 3.) состоит из стабилизатора на 5В, ключа, на транзисторе ВС547 (при необходимости можно поставить более мощный ключ), и самого процессора управления на PIC12F675 (Можно использовать и PIC12F629, с минимальными изменениями в программе). Управление оборотами производится кнопками S1 (убавить) и S2 (прибавить). При снятии напряжения регулятор запоминает последние выставленные обороты. Подключается регулятор к разъёму вентилятора на материнской плате. Провод оборотов вентилятора сквозной. Так как PIC12F675 имеет АЦП, то можно вместо кнопок установить переменный резистор, изначально я так и делал. Рис. 3. Схема регулятора. Печатную плату я не стал разрабатывать, а собрал на макетной плате. Результат на Рис. 4. При доработке регулятора начерчу печатную плату и выложу в дополнение к статье. Теперь немного о программе. ШИМ организован программно, так как аппаратного модуля ШИМ в данном контроллере нет. После инициализации контроллера программа проверяет в EEPROM значение оборотов, на основе которой производит вычисление ШИМ. Запись в EEPROM производится после нажатия любой из кнопок управления. Чтобы не терзать память, запись в неё производится с задержкой 2-3 сек., когда установится необходимое значение оборотов. Рис. 4. Внешний вид регулятора. Как известно контроллер PIC12F675 не имеет интегрированного отладочного модуля. В интернете эти модули иногда ошибочно называют «переходниками». Для отладки данного типа контроллера необходим модуль AC162050. Его конечно в наличии нет, а поотлаживать очень хочется . Я в таких случаях собираю схему на отладочной плате, беру контроллер (в данном случае PIC16F877A), который поддерживает внутрисхемную отладку и пишу программу под оба контроллера одновременно. Вернее сначала под отлаживаемый контроллер (PIC16F877A), а потом изменения для основного (PIC12F675). Для того, чтобы компилятор мог определить под какой контроллер производить компиляцию имеются директивы IFDEF и ENDIF. Ниже приведён пример конфигурации для разных контроллеров в одной программе. Компилятор сам выбирает нужный кусок, в зависимости от того, какой контроллер указан в MPLab (Configure -> Select Device). Не трудно догадаться под какой контроллер какой кусок программы относится. Строка ErrorLevel -302,-205,-207 является общей, не зависимо какой контроллер установлен. IFDEF __12F675 LIST #Include __config p=12f675 <P12F675.INC> 01FC4h ENDIF ;**************************************** IFDEF __16F877A LIST p=16f877A #Include <P16F877A.INC> __CONFIG 3731H TRISIO equ 0x06 GPIO equ 0x86 ENDIF ;**************************************** ErrorLevel -302,-205,-207 Приведу ещё один пример инициализации контроллеров. Здесь всё, то же самое. Что находится между директив IFDEF и ENDIF , относится к определённому контроллеру, а всё остальное является общим кодом для обоих контроллеров. ;**************************************** START movlw .7 movwf CMCON bsf STATUS,RP0 ;**************************************** IFDEF __12F675 call 3FFh movwf OSCCAL movlw b'00000110' movwf WPU clrf ANSEL clrf IOC ENDIF ;**************************************** IFDEF __16F877A movlw b'00001110' movwf ADCON1 ENDIF ;**************************************** movlw b'00000000' movwf OPTION_REG movlw b'00000110' movwf TRISIO bcf STATUS,RP0 clrf GPIO clrf Flag call EERD ; Чтение значения скорости из EEPROM. В итоге получается одна программа под два вида контроллеров (можно и больше). Только не забываем указать в MPLab (Configure -> Select Device), необходимый контроллер, под который надо её скомпилировать. Список использованных ресурсов: http://www.myrobot.ru