В качестве очередных семплов мне прибыла партия цифровых потенциометров от Analog Devices. Вещь интересная и многообещающая. Попытаюсь разобраться с линейкой AD8400/AD8402/AD8403. Отличаются между собой они только количеством потенциометров в одной микросхеме: 1, 2 и 4, соответственно. Мне достались AD8402, т.е. с двумя R в одной микросхеме. Блок-схему можете посмотреть в даташите — там всё просто. Только вот реализация непосредственно переменного резистора не показана. Восполню этот пробел схемкой из просторов интернета:
Как видно из рисунка, резистивный элемент Rh — Rl состоит из N-1 резисторов, и N (это его разрядность) коммутирующих ключей в виде МОП-транзисторов. В моём случае — N = 256, и дальше я буду это подразумевать. Код дешифратора определяет подключаемую в цепь «ползунка» Rw через соответствующий МОП-транзистор точку соединения 255-ти последовательно соединённых резисторов. Если зависимость потенциометра линейная (как в моём случае), то величины сопротивлений составляющих линейку резисторов будут одинаковы. Отмечу, что обозначениям на рисунке слева соотносятся обозначения в даташите: Rh -> A, Rl -> B, а Rw -> W.
Команды установки принимаются по последовательному 10-ти разрядному SPI — интерфейсу.
Далее посмотрим на распиновку камня. Рисунок из даташита:
AGND — аналоговая «земля»;
A2-B2 — резистивный элемент 2-го резистора;
W2 — ползунок 2-го резистора;
DGND — цифровая «земля»;
SHDN — сигнал аппаратной установки ползунков обоих резисторов в минимальное значение;
CS — стандартный «выбор кристалла»;
SDI — вход данных последовательного интерфейса;
CLK — тактирующий сигнал последовательного интерфейса;
RS — сигнал аппаратной установки ползунков обоих резисторов в среднее значение;
Vdd — + питания;
W1 — ползунок 1-го резистора;
A1 — B1 — резистивный элемент 1-го резистора.
Теперь структура управляющего слова из того же даташита:
Слово состоит из 10-ти разрядов. А1 и А0 определяют, какому именно резистору (00 — 1-му, а 01 — 2-му) отсылается байт устанавливаемого значения D7 — D0 для ползунка W. Как видите — совершенно ничего сложного нет.
Макетную плату я сконструировал из платы старого отладочного модуля для ATtiny2313.
? написал код:
#include <avr/io.h> #include <util/delay.h> #define PORT_SPI PORTD/*назначения портов и сигналов*/ #define DDR_SPI DDRD #define PIN_SPI PIND #define SDO PD0 #define CKL PD1 #define CS PD2 #define SHDN PD3 #define RS PD4 void init_SPI (void)//функция инициализации программного SPI { DDR_SPI |= (1< <SDO) | (1<<CKL) | (1<<CS) | (1<<SHDN) | (1<<RS);//все сигналы выходы PORT_SPI |= (1<<CS) | (1<<SHDN) | (1<<RS);//с лог. 1 PORT_SPI &= ~(1<<SDO);//и лог. 0 PORT_SPI &= ~(1<<CKL);// } void set_resistance (unsigned char addr, unsigned char value)//функция записи { unsigned char i;//переменная для цикла unsigned int addr_value;//промежуточная переменная для вычисления управляющего слова addr_value = ((unsigned int) (addr<<8)) | ((unsigned int) value);//формируем управляющее слово из двух бит адреса и байта сопротивления PORT_SPI &= ~(1<<CS);//выбор микросхемы for(i=0; i < 10; i++)//для 10 бит управляющего слова { if(0x0001 & (addr_value>>(9-i))) PORT_SPI |= (1< <SDO);//если бит-единица, то и выставляем единицу else PORT_SPI &= ~(1<<SDO);//иначе - выставляем ноль PORT_SPI |= (1<<CKL);//фронт синхроимпульса PORT_SPI &= ~(1<<CKL);//спад синхроимпульса } PORT_SPI |= (1<<CS);//не выбираем микросхему } int main (void)//главная функция { unsigned char q;//переменная для цикла init_SPI();//инициализируем программный SPI while (1)//в бесконечном цикле { for(q=0;q < 255; q++)//для всех 256 значений сопротивления { set_resistance(0x01, q);//поочередно устанавливаем для 1-го потенциометра //_delay_ms(500);//это для наладки, можно смотреть омметром изменение сопротивления 1-го потенциометра } } } |
Теперь вернёмся к блок-схеме. Посмотрите на неё ещё раз внимательно… Ничего не напоминает? На один из выводов резистивного элемента подаём опорное напряжение и получаем… ЦАП — цифро-аналоговый преобразователь! ? код написан для этой функции — так лучше будет осциллографом наблюдать работу микросхемы. Ну, если захочется омметром проверить, то раскомментируйте задержку. Тогда будет видно изменение сопротивления.
?, наконец, непосредственно исследования.
Убедившись в работе цифрового потенциометра омметром, а также в правильной работе сигналов SHDN и RS, я упомянутую выше полсекундную задержку закомментировал и решил для себя выяснить поведение чипа при:
1. Подаче напряжения на резистор непосредственно от питания самой микросхемы, т.е. гальванически не развязанного. Картинка получилась такая:
Это, если на А подать + питания, а корпус на В.
? такая:
если на В подать + питания, а на А — корпус (короче, переполюсовать).
2. Подаче напряжения на резистор от отдельного, гальванически развязанного источника напряжением меньше или равного питанию самой микросхемы.
Это при питании микросхемы от 5 В, а резистора — от отдельного аккумулятора 3,3 В при подаче + 3,3 В на А, а — 3,3 В на В.
Питание то же, но для резистора — переполюсовка (- на А, + на В).
3. Подаче напряжения на резистор от отдельного, гальванически развязанного источника напряжением немного большим, чем питание самой микросхемы.
Это при питании микросхемы от 3 В, а резистора — от отдельного аккумулятора 5 В при подаче + 5 В на А, а — 5 В на В.
Питание то же, но для резистора — переполюсовка (- на А, + на В).
4. Подаче напряжения на резистор от отдельного, гальванически развязанного источника напряжением много большим, чем питание самой микросхемы.
Это при питании микросхемы от 3 В, а резистора — от «Кроны» 9 В при подаче + 9 В на А, а — 9 В на В.
Питание то же, но для резистора — переполюсовка (- на А, + на В).
Для случаев 3 и 4 AD8402 греется, а в 4-м случае достаточно ощутимо, да и на «Кроне» напряжение просаживается до 7 В. ?нтересно, что в 4-м опыте явно видны ступеньки дискретизации, а частота ощутимо выросла.
Вот такие дела, господа! Хреново, что резистор гальванически привязан к потрохам самой микросхемы. Выше головы 7 В не прыгнешь, а я хотел использовать описываемую микросхему в электронной начинке лабораторного блока питания (имею ввиду напрямую т.е. без дополнительного обвеса) 🙁
Один операционный усилитель спасет отца русской демократии.
Это понятно )))
В яблочко!!! Эта статья спасла меня от ломки мозга над идиотскими переводами буржуйских даташитов.
Большое спасибо, s_black.
Весьма рад ))) Пожалуйста!
Секунду, я хотел использовать эту микр-у для цифровой регулировки adj lm317 в кач-ве R2(по типичной схеме). так не получится? чем заменить? 0867532.com@mail.ru
Если с верхним питанием выше 7 В — то нет. ?спользуйте дополнительный ОУ.
А можно схему?
?мхо, взять контроллер STM8L152C6, использовать встроенный ЦАП — эффект будет тот же, или я не прав?
Да конечно же! Не обязательно СТМ-ку 8-ю — любой контроллер с ЦАП на борту даст вам тот же результат.
А кто может подсказать, как расширить с помощью внешнего «обвеса» допустимое напряжение с 7В до примерно 15В?
Сигнал с выхода можно усилить операционным усилителем — такой комментарий уже был (самый первый). Удачи вам!