Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ru:examples:sensor:potentiometer [2010/12/15 14:24] – создано eduardtlmkru:examples:sensor:potentiometer [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Потенциометр ====== 
  
-//Необходимые знания: [HW] [[et:hardware:homelab:sensor]], [HW] [[et:hardware:homelab:digi]], \\ [ELC] [[et:electronics:voltage_divider]], [AVR] [[et:avr:adc]], [LIB] [[et:software:homelab:library:adc]], \\ [LIB] [[et:software:homelab:library:module:segment_display]]// 
- 
-===== Теория ===== 
- 
-[{{  :examples:sensor:potentiometer:sensor_potentiometer_designator.png?120|Электрическое обозначение потенциометра}}] 
- 
-Потенциометр это переменный резистр с тремя контактами, где между двумя крайними контактами находится фиксированное сопротивление, а между крайними и средним контактами - переменное сопротивление. Потенциометр, в принципе, является и делителем напряжения, где сопротивления образуются между крайними и средним контактами. Синоним потенциометра (на английском языке //potentiometer//) - реостат (на английском //rheostat//).  
- 
-[{{  :examples:sensor:potentiometer:sensor_potentiometer_turn.jpg?120|Поворотный потенциометр}}] 
- 
-Типичный потенциометр состоит из сопротивления с токопроводящей поверхностью и из скользящего по ней подвижного контакта – движка. Чем ближе движок к углу сопротивления, тем меньше сопротивление между движком и этим углом, и наоборот. В роли сопротивления может выступать материал с большим удельным сопротивлением или обмотка скрученная из проволоки сопротивления. Существуют потенциометры как с линеарным, так и логарифмическим сопротивлением и позиционным отношением. Большая часть потенциометров поворотные (пример на картинке справа), но имеются так же и сопротивления скользящего типа. Особенный тип потенциометра это дигитальные потенциометры, в которых регулировка сопротивления происходит внутри микросхемы в соответствии с управляющими сигналами. 
- 
-===== Практика ===== 
- 
-На плате модуля «Датчики» Домашней Лаборатории находится поворотный потенциометр 4,7 kΩ. Потенциометр подключен между землей и +5 V потенциалами, а движок соединен с каналом 3 аналого-дигитального преобразователя микроконтроллера. В таком случае можно регулировать выходное напряжение потенциометра в пределах от 0 до 5 V. Если 
-опорное напряжение аналого-дигитального преобразователя AVR взять с вывода AVCC, то выходное напряжение потенциометра получит дигитальное значение на протяжении всей границы его регулирования. Для использования ADC AVR в библиотеке Домашней Лаборатории написаны следующие функции: 
- 
-~~PB~~ 
-~~CL~~ 
-<code avr> 
-// 
-// Типы данных настроек 
-// 
-typedef enum 
-{ 
- ADC_REF_AREF = 0x00, 
- ADC_REF_AVCC = 0x01, 
- ADC_REF_2V56 = 0x03 
-} 
-adc_reference; 
- 
-typedef enum 
-{ 
- ADC_PRESCALE_2   = 0x01, 
- ADC_PRESCALE_4   = 0x02, 
- ADC_PRESCALE_8   = 0x03, 
- ADC_PRESCALE_16  = 0x04, 
- ADC_PRESCALE_32  = 0x05, 
- ADC_PRESCALE_64  = 0x06, 
- ADC_PRESCALE_128 = 0x07 
-} 
-adc_prescale; 
- 
-// 
-// Запуск ADC 
-// 
-void adc_init(adc_reference reference, adc_prescale prescale) 
-{ 
- // Разрешение работать ADC, выбор частотного делителя 
- ADCSRA = bit_mask(ADEN) | (prescale & 0x07); 
-  
- // Выбор опорного напряжения 
- ADMUX = (reference & 0x03) << REFS0; 
-} 
- 
-// 
-// Преобразование значения обозначеного канала 
-// 
-unsigned short adc_get_value(unsigned char channel) 
-{  
- // Обозначение канала 
- ADMUX = (ADMUX & 0xF0) | (channel & 0x0F); 
-  
- // Начало преобразования 
- bit_set(ADCSRA, ADSC); 
- 
- // Ожидание окончания преобразования 
- while (bit_is_set(ADCSRA, ADSC)) 
- { 
- asm volatile ("nop"); 
-  } 
-  
- // Возвращение результата 
- return ADCW; 
-} 
-</code> 
- 
-Функцию //adc_init// нужно вызвать в начале программы, с помощью чего настраивается работоспособность AVR-а ADC. Cледует выбрать опорное напряжение с вывода AREF или AVCC, или наоборот входное фиксированное напряжение 2,56 V. В добавок нужно обозначить рабочий такт преобразователя, а точнее предварительный делитель частоты, с помощью которого делится рабочий такт микроконтроллера. Преобразование происходит быстрее при использовании более высокого такта, но в таком случае может пострадать точность измерения. Для измерения имеется функция //adc_get_value// с помощью которой можно выбрать канал и которая возвращает 10-битовый результат измерения в виде 16-битного целого числа. Функция измерения является блокирующей, т.е. она остается ждать конца преобразования и возвращает результат только тогда, когда измерение совершено.  
- 
-В примере программы используется только что объясненная библиотека аналогово-дигитального преобразователя и 7-сегментного цифрового индикатора LED. Значение 10-битного аналогово-дигитального преобразователя умножается на десять и делится на 1024, чтобы получить значение в пределах от 0 до 9. Значение 10 не может возникнуть, т.к. в языке Си в частном рассчитывается целочисленное, а не округленное значение. Для получения более точного результата измерения используется функция усреднения результата преобразователя. В качестве результата рабочая программа показывает на индикаторе цифры от 0 до 9, соответственно положению индикатора. 
- 
-<code c> 
-// 
-// Пример программы модуля «Датчики» Домашней Лаборатории. 
-// На 7-сегментном цифровом индикаторе отображается положение потенциометра. 
-// 
-#include <homelab/adc.h> 
-#include <homelab/module/segment_display.h> 
- 
-// 
-// Выбор канала 
-// 
-//  1 = Фоторезистор 
-//  2 = Терморезистор 
-//  3 = Потенциометр 
-// 
-#define ADC_CHANNEL 3 
- 
-// 
-// Основная программа 
-// 
-int main(void) 
-{ 
- int value; 
- 
- // Настройка 7-сегментного цифрового индикатора 
- segment_display_init(); 
- 
- // Настройка ADC преобразователя 
- adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); 
- 
- // Бесконечный цикл 
- while (true) 
- { 
- // Считывание значения, округленного в 4 раза 
- value = adc_get_average_value(ADC_CHANNEL, 4); 
- 
- // Отображение показаний в сотых 
- segment_display_write(value * 10 / 1024); 
- } 
-} 
-</code> 
ru/examples/sensor/potentiometer.1292415872.txt.gz · Last modified: (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0