ADC:Измерение сопротивлений - технические детали

Материал из Wiren Board

Канал LRADC процессора, который в Wiren Board используется для работы АЦП имеет встроенный источник тока. Это делает возможным измерение сопротивлений нагрузки, подключенной к выходам АЦП, т.е. снятие показаний с резистивных датчиков.

См. также описание в документации на процессор, стр. 1334.


Устройство канала

To Be Done...

Если к каналу АЦП подключен резистор, то


Сопротивления:

  • Последовательно соеденены r - измеряемое, R2 - сопротивление 12kOhm + некое эквивалентное сопротивление мультиплксора (~1kOhm).
  • Параллельно к ним R1=33.0 kOhm - плечо делителя.

Формула для расчёта

V - напряжение на входе LRADC, измеряемое процессором.

r = 1.0/(I/V  - 1/R1) - R2

Установка выходного тока

Установка выходного тока не поддерживается драйвером, поэтому реализуется с помощью userspace-приложения с прямым доступом в память. Утилита /opt/utils/adc/resistance/lradc_set_current (https://github.com/contactless/wirenboard/tree/master/utils/adc/resistance).


root@wirenboard:~# /opt/utils/adc/resistance/lradc_set_current
Set output current for LRADC1 channel
USAGE: ./lradc_current <uA>|off
Available currents: 0uA, 20uA, ..., 280uA, 300uA
Use "off" to switch off current source. 0uA setting could result in some current

Максимальный ток - 300 мкА. Ток устанавливается с шагом в 20 мкА.

Установка тока в 100 мкА:

root@wirenboard:~# /opt/utils/adc/resistance/lradc_set_current 100

Отключение источника тока:

root@wirenboard:~# /opt/utils/adc/resistance/lradc_set_current off

Порядок измерений

Отключение выхода

Выбора канала

С помощью adc_set_channel.sh выберите канал (ADC)

Установка выходного тока

Необходимо установить такое как можно большее значение выходного тока, при котором напряжение на LRADC не зашкаливает за 1.85V, т.е. сырой результат не равен 4095.

В примере 40 мкА - оптимальный ток:

root@wirenboard:~# /opt/utils/adc/resistance/lradc_set_current 100
root@wirenboard:~# /opt/utils/adc/adc_get_value.sh
4095
root@wirenboard:~# /opt/utils/adc/resistance/lradc_set_current 20 
root@wirenboard:~# /opt/utils/adc/adc_get_value.sh
1663
root@wirenboard:~# /opt/utils/adc/resistance/lradc_set_current 60
root@wirenboard:~# /opt/utils/adc/adc_get_value.sh
4095
root@wirenboard:~# /opt/utils/adc/resistance/lradc_set_current 40
root@wirenboard:~# /opt/utils/adc/adc_get_value.sh
3154

Вычисление результата

Сопротивление вычисляется по формуле, указанной выше. При этом

V =  N / 4095 * 1.85V

N - сырые показания LRADC, I - ток, R1 = 33kOhm, R2 ~ 13.3kOhm

Калибровка R2

Для увеличения точности можно измерить значение R2. Для этого надо соединить выход ADC с землёй: открыть транзистор (клеммники 2-7) или установить значение gpio в логический ноль (клеммник 8). При этом r = 0 и по формуле можно вычислить значение R2.