Перейти к содержанию

Какой номинал потенциометра подключать к Arduino?

Обновлено Редакция GAW

Потенциометр для analogRead() включают делителем: один крайний вывод — на 5 В, другой — на GND, движок — на аналоговый вход. Отношение напряжения на движке к питанию задаёт только положение ручки, поэтому номинал выбирают не по шкале, а по двум ограничениям: выходному сопротивлению для АЦП и току через дорожку.

Почему 10 кОм

Выходное сопротивление делителя — это два плеча, включённые параллельно. Оно максимально в середине хода и равно четверти номинала (наш расчёт):

Rвыхmax⁡=R/2⋅R/2R=R4.R_\text{вых}^{\max} = \frac{R/2 \cdot R/2}{R} = \frac{R}{4}.

По разделу 24.6.1 даташита ATmega328P АЦП рассчитан на источник до 10 кОм — тогда конденсатор выборки успевает зарядиться. Отсюда сверху номинал ограничен примерно 40 кОм, а снизу — током.

НоминалНаибольшее выходное сопротивлениеТок от 5 ВМощность на дорожке
1 кОм250 Ом5 мА25 мВт
10 кОм2,5 кОм0,5 мА2,5 мВт
100 кОм25 кОм — больше 10 кОм50 мкА0,25 мВт

Расчёт по закону Ома наш; у малогабаритного PTV09 допустимая мощность 0,05 Вт, и все три варианта в неё укладываются. 10 кОм — середина: выход в четыре раза ниже предела даташита и ток, о котором не нужно думать при питании от USB. Кривая нужна линейная (B): логарифмическая для задатчика неудобна, ручка будет менять значение неравномерно.

Чего не делать

  • Подключать движок к 5 В, а крайний вывод — к GND. В крайнем положении между 5 В и землёй окажется только остаточное сопротивление, и дорожка сгорит.
  • Оставлять движок без делителя — с одним подключённым крайним выводом вход висит в воздухе, и analogRead() показывает случайные числа; почему, объясняет ответ «analogRead на свободном входе».

Напряжение на движке под нагрузкой считает калькулятор потенциометра, код АЦП в вольты переводит калькулятор АЦП AVR, а как устроен analogRead() внутри — в уроке «analogRead изнутри».

Похожие вопросы

Можно ли взять 100 кОм вместо 10 кОм?

Работать будет, но в середине хода выходное сопротивление дойдёт до 25 кОм — больше 10 кОм из даташита. Тогда при переключении analogRead между входами конденсатор выборки не успевает перезарядиться, и показания соседних каналов влияют друг на друга. Помогает конденсатор от движка на землю, который отдаёт заряд конденсатору выборки, или повторное чтение после переключения канала.

Почему показания не доходят до 0 или до 1023?

Из-за остаточного сопротивления: у PTV09 оно 500 Ом или 1 % полного, и движок в крайнем положении не соединяется с выводом накоротко. На 10 кОм это до 5 % хода по напряжению — край шкалы просто не покрыт. В программе такие края зажимают через map() и constrain().

Нужен ли резистор последовательно с потенциометром?

При правильном подключении — нет: ток через дорожку ограничен её полным сопротивлением. Резистор 1 кОм в разрыве движка полезен только как защита входа, если потенциометр стоит на длинных проводах и может поймать помеху или перепутанное питание.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — разд. 24.6.1 Analog Input Circuitry: АЦП оптимизирован для сигналов с выходным сопротивлением около 10 кОм и меньше, тогда время выборки пренебрежимо; при большем сопротивлении время зарядки конденсатора выборки может сильно меняться; рекомендованы низкоомные источники с медленно меняющимся сигналом
  2. Bourns. PTV09 Series — 9 mm Potentiometer, REV. 01/25 — кривые — линейная и логарифмическая, 1 кОм – 1 МОм, допуск ±20 %, остаточное сопротивление 500 Ом или 1 %, мощность 0,05 Вт, до 20 В постоянного напряжения
  3. Kuphaldt T. R. Lessons In Electric Circuits, Vol. I — DC, ch. 6 «Divider Circuits and Kirchhoff's Laws» (CC BY) — потенциометр — регулируемый делитель: отношение выходного напряжения к входному задаёт положение движка и не зависит от полного сопротивления

Нашли ошибку?