201305170811


Сенсоры и актуаторы

Поговорим об устройствах, внешних по отношению к контроллеру. Устройства, преобразующие воздействие в электрический сигнал, и подключаемые ко входам микроконтроллера - это датчики (сенсоры, http://en.wikipedia.org/wiki/Sensor).

Устройства подключаемые к выходам и преобразующие электрические сигналы на выходах микроконтроллера в требуемую форму - исполнительные устройства (актуаторы, http://en.wikipedia.org/wiki/Actuator). 

Различаются аналоговые и цифровые сенсоры и актуаторы. Если в датчике осуществляется преобразование аналогового сигнала в цифровую форму, он снабжен аналогово-цифровым преобразователем (АЦП). Если в актуаторе осуществляется преобразование аналогового сигнала в цифровую форму, он снабжен - цифро-аналоговым преобразователем (ЦАП). Цифро-аналоговое преобразование может также осуществляться совместными усилиями микроконтроллера, когда программная либо аппаратная широтно-импульсная модуляция цифрового выхода (ШИМ) работает в паре с интегрирующей цепью вне контроллера.
 
Сенсор - Кнопка. В идеальном виде присутствует большинстве симуляторов. Реальная кнопка отличается дребезгом (bouncing) - переход из состояния "выключено" в состояние "включено" и наоборот происходит не мгновенно, примерно на протяжении 1 - 10 миллисекунд вырабатывается колебательный сигнал с хаотически изменяющейся частотой. Подавление этого вредного сигнала может осуществляться

  - программно (прерывание input - on change обнаруживает первое изменение состояния кнопки, после чего делается небольшая задержка, в течение которой данная кнопка отключена от устройства. Более продвинутые программы могут фильтровать сигнал от кнопки фильтром нижних частот (ФНЧ) и симулировать поведение триггера Шмидта, для осуществления повторяемого срабатывания от пологого фронта.

  - аппаратно (например SR-debouncer, либо комбинации RC-фильтра и диодного детектора, например [1])

Часто, важным элементом подключения как актуаторов так и сенсоров, является элемент гальванической развязки, призванный, как правило защитить вычислительное устройство от недопустимых уровней напряжения на внешних выводах чувствительной части схемы. Устройствами гальванической развязки могут служить трансформаторы, электромагнитные реле, оптроны, либо твердотельное реле (solid state relay) и др.

Следует учесть, что при размыкании индуктивной цепи (обмотки электромагнитного реле либо трансформатора) образуется бросок напряжения, способный повредить неправильно расчитанное устройство. 


Задачи.

1. Siemens!Logo Comfort v.7. Построить схему, запоминающую кнопку,
   сработавшую последней. Между схемой и кнопкой установить программный 
   SR-debouncer. Программный SR-debouncer может быть построен, например
   по следующей схеме:                                           
                                                                   выход
                     реле с                                        +-+
                     блоки- +--------------------------------------+Q+
                     ровкой |                                      +-+
              +---+         |                    +---+  +-------+
        +-----+  &|   +---+ +--------------------+ =1|  |       |  +-+
        |     |   +---+ RS| |                    |   +--+ T off +--+M+-+
  вход  |  +--oAND|   |   | | +--------------+ +-+XOR|  | 2 sec |  +-+ |
   +-+  |  |  +---+   |   +-+-+ T on = 0.01s | | +---+  +-------+  флаг|
   |I+--+-----+>=1|   |   |   | Toff = 0.01s +-+        задержка       |
   +-+     |  |   o---+   |   |              |          отключения     |
  кнопка   +--+NOR|   +---+   +--------------+                         |
  с        |  +---+          задержка включения                        |
  фиксацией|                   и отключения                            |
  (дребезг)+-----------------------------------------------------------+
  
   Для наглядности дребезг вырезается 2 секунды (настройки элемента задержка выключения). Реально дребезг обычно не превышает 10 миллисекунд.
          
2. Учебный макет Pic Classic (P16F676). Cравнить различные схемы антидребезга из [1].
  

Полезные сcылки

[1] http://www.eng.utah.edu/~cs5780/debouncing.pdf

------------------------------------------------------------------------

Приложение А. Код для исследования дребезга в переключателях. PIC16F676 (build MikroC v.6, debug PICSimulatorIDE 6.92)

Working C code (PICSIMULATORIDE)

                    The Force can have a strong influence...
                    on the weak-minded.

                    Star Wars: A New Hope, 1977
                    http://www.imdb.com/title/tt0076759/quotes

  void main() {               //  KEYPAD   PORTC.5 NONE.1 NONE.2 NONE.3  
      char x;                 //  PORTC.0  ON/OFF  OFF    OFF    OFF     
      asm {                   //  PORTC.1  OFF     OFF    OFF    OFF     
         BSF STATUS,RP0       //  PORTC.2  OFF     OFF    OFF    OFF   
         CLRF 0x11            //  PORTC.3  OFF     OFF    OFF    OFF   
         MOVLW 0x07           
         BCF STATUS,RP0       //  8xLEDS PORTA, 0
         MOVWF 0x19           //         PORTA, 1
      }                       //         PORTA, 2
      TRISA = 0xf8;           //         PORTA, 3
      TRISC = 0x07;           //         PORTA, 4
      PORTC = 0xf0;           //         PORTA, 5
      while (1) {             //         PORTA, 6
        x = PORTC;            //         PORTA, 7                      
        if (x & 0x07) 
           PORTA = 0x04; 
        else 
           PORTA = 0x02;
      }
  }
  
Or

                    Columbo: I'll tell you what the secret is 
                    to a good omelet. No eggs, just milk.

                    Columbo. Murder by the Book, 1968
                    http://www.tvrage.com/Columbo/episodes/35411

  void main() {               //  KEYPAD   PORTC.5 NONE.1 NONE.2 NONE.3
      ANSEL = 0x00;           //  PORTC.0  ON/OFF  OFF    OFF    OFF   
      CMCON = 0x07;           //  PORTC.1  OFF     OFF    OFF    OFF   
      TRISA = 0xf8;           //  PORTC.2  OFF     OFF    OFF    OFF   
      TRISC = 0x07;           //  PORTC.3  OFF     OFF    OFF    OFF   
      PORTC = 0xf0;           
      while (1) {             //  8xLEDS PORTA, 0
        if (PORTC & 0x07)     //         PORTA, 1
           PORTA = 0x04;      //         PORTA, 2
        else                  //         PORTA, 3                      
           PORTA = 0x02;      //         PORTA, 4
      }                       //         PORTA, 5
  }                           //         PORTA, 6
                              //         PORTA, 7                      
