Цифровой потенциометр AD8402.

В качестве очередных семплов мне прибыла партия цифровых потенциометров от Analog Devices. Вещь интересная и многообещающая. Попытаюсь разобраться с  линейкой AD8400/AD8402/AD8403. Отличаются между собой они только количеством потенциометров в одной микросхеме: 1, 2 и 4, соответственно. Мне достались AD8402, т.е. с двумя R  в одной микросхеме. Блок-схему можете посмотреть в даташите — там всё просто. Только вот реализация непосредственно переменного резистора не показана. Восполню этот пробел схемкой из просторов интернета:
output_dig_potКак видно из рисунка,  резистивный элемент Rh — Rl состоит из N-1 резисторов, и N (это его разрядность) коммутирующих ключей в виде МОП-транзисторов. В моём случае — N = 256, и дальше я буду это подразумевать. Код дешифратора определяет подключаемую в цепь «ползунка» Rw через соответствующий МОП-транзистор точку соединения 255-ти последовательно соединённых резисторов. Если зависимость потенциометра линейная (как в моём случае), то величины сопротивлений составляющих линейку  резисторов будут одинаковы. Отмечу, что обозначениям на рисунке слева соотносятся обозначения в даташите: Rh -> A,  Rl -> B,  а Rw -> W.
Команды установки принимаются по последовательному 10-ти разрядному SPI — интерфейсу.

Далее посмотрим на распиновку камня. Рисунок из даташита:
AD8402AGND — аналоговая «земля»;
A2-B2 — резистивный элемент 2-го резистора;
W2 — ползунок 2-го резистора;
DGND — цифровая «земля»;
SHDN — сигнал аппаратной установки ползунков обоих резисторов в минимальное значение;
CS — стандартный «выбор кристалла»;
SDI — вход данных последовательного интерфейса;
CLK — тактирующий сигнал последовательного интерфейса;
RS — сигнал аппаратной установки ползунков обоих резисторов в среднее значение;
Vdd — + питания;
W1 — ползунок 1-го резистора;
A1 — B1 — резистивный элемент 1-го резистора.
Теперь структура управляющего слова из того же даташита:
control_wordСлово состоит из 10-ти разрядов. А1 и А0 определяют, какому именно резистору (00 — 1-му, а 01 — 2-му) отсылается байт устанавливаемого значения D7 — D0 для  ползунка W. Как видите — совершенно ничего сложного нет.

Макетную плату я сконструировал из платы старого отладочного модуля для ATtiny2313.
AD8402_board 003И написал код:

#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. Подаче напряжения на резистор непосредственно от питания самой микросхемы, т.е. гальванически не развязанного. Картинка получилась такая:

Vdd_Vref_3_ABЭто, если на А подать + питания, а корпус на В.

И такая:
Vdd_Vref_3_BAесли на В подать + питания, а на А — корпус (короче, переполюсовать).

2. Подаче напряжения на резистор от отдельного, гальванически развязанного источника напряжением меньше или равного питанию самой микросхемы.

Vdd_5_Vref_3_ABЭто при питании микросхемы от 5 В, а резистора — от отдельного аккумулятора 3,3 В при подаче + 3,3 В на А, а — 3,3 В на В.

Vdd_5_Vref_3_BAПитание то же, но для резистора — переполюсовка (- на А, + на В).

3. Подаче напряжения на резистор от отдельного, гальванически развязанного источника напряжением немного большим, чем питание самой микросхемы.
Vdd_3_Vref_5_ABЭто при питании микросхемы от 3 В, а резистора — от отдельного аккумулятора 5 В при подаче + 5 В на А, а — 5 В на В.

Vdd_3_Vref_5_BAПитание то же, но для резистора — переполюсовка (- на А, + на В).

4. Подаче напряжения на резистор от отдельного, гальванически развязанного источника напряжением много большим, чем питание самой микросхемы.
Vdd_3_Vref_9_ABЭто при питании микросхемы от 3 В, а резистора — от «Кроны» 9 В при подаче + 9 В на А, а — 9 В на В.

Vdd_3_Vref_9_BAПитание то же, но для резистора — переполюсовка (- на А, + на В).

Для случаев 3 и 4 AD8402 греется, а в 4-м случае достаточно ощутимо, да и на «Кроне» напряжение просаживается до 7 В. Интересно, что в 4-м опыте явно видны ступеньки дискретизации, а частота ощутимо выросла.

Вот такие дела, господа! Хреново, что резистор гальванически привязан к потрохам самой микросхемы. Выше головы 7 В не прыгнешь, а я хотел использовать описываемую микросхему в электронной начинке лабораторного блока питания (имею ввиду напрямую т.е.  без дополнительного обвеса) 🙁

 

Запись опубликована в рубрике Комплектующие с метками , , . Добавьте в закладки постоянную ссылку.

10 комментариев: Цифровой потенциометр AD8402.

  1. Кирилл говорит:

    Один операционный усилитель спасет отца русской демократии.

  2. s_black говорит:

    Это понятно )))

  3. Владимир говорит:

    В яблочко!!! Эта статья спасла меня от ломки мозга над идиотскими переводами буржуйских даташитов.
    Большое спасибо, s_black.

  4. s_black говорит:

    Весьма рад ))) Пожалуйста!

  5. 0867532 говорит:

    Секунду, я хотел использовать эту микр-у для цифровой регулировки adj lm317 в кач-ве R2(по типичной схеме). так не получится? чем заменить? 0867532.com@mail.ru

  6. s_black говорит:

    Если с верхним питанием выше 7 В — то нет. Используйте дополнительный ОУ.

  7. 0867532 говорит:

    А можно схему?

  8. Brunnen-G говорит:

    Имхо, взять контроллер STM8L152C6, использовать встроенный ЦАП — эффект будет тот же, или я не прав?

  9. s_black говорит:

    Да конечно же! Не обязательно СТМ-ку 8-ю — любой контроллер с ЦАП на борту даст вам тот же результат.

  10. Артур говорит:

    А кто может подсказать, как расширить с помощью внешнего «обвеса» допустимое напряжение с 7В до примерно 15В?

Добавить комментарий

Ваш e-mail не будет опубликован.