X9Cxxx — электронный потенциометр (Arduino)

ИМС X9Cxxx это потенциометр с цифровым управлением. Управление изменением сопротивления модуля цифрового потенциометра осуществляется путем коммутации 99 постоянных резисторов.

Управление модулем потенциометра осуществляется подачей сигналов на входы U/D, INC и CS.

VH, RW, VL —  выходы потенциометра, максимальное напряжение через потенциометр 10 В, ток до 8 мА.

В серии X9Cxxx содержит потенциометры 4-х номиналов:

 

Управление цифровым потенциометром достаточно простое, сигнал CS разрежает (LOW) и запрещает (HIGH) работу потенциометра. Сигнал U/D меняет направление изменение сопротивления, а импульсы подаваемые на вход INC с каждым тактом меняют значение сопротивления потенциометра на один шаг (1%).

Например если необходимо установить значение сопротивления с 0 % на 20 %, необходимо установить CS в LOW, на пин U/D подать HIGH и далее на пин INC подать 20 импульсов. Если необходимо уменьшить сопротивление, то на пин U/D нужно подать LOW.

Ниже показан пример использования цифрового потенциометра, пример очень простой, на вывод VH подано с платы контроллера напряжение 3,3 В, на VL GND, а вывод RW подключен к аналоговому входу A0. Так же используются две кнопки управления работой цифрового потенциометра.

В примере используется плата разработчика на базе LGT8F328.

#define CS   2
#define INC  4
#define UD   3

#define STEP 5

int pop,dat=0,dat_old;
bool w=1;


void setup() {
  analogReadResolution(12);
  analogReference(INTERNAL4V096);
  Serial.begin(9600);
  pinMode(CS,OUTPUT);
  pinMode(INC,OUTPUT);
  pinMode(UD,OUTPUT);
  pinMode(A0,INPUT);
  pinMode(11,INPUT_PULLUP);
  pinMode(12,INPUT_PULLUP);
  digitalWrite(CS,LOW);
  cl();
}

void loop() {
   if(digitalRead(11)==LOW){dat+=STEP;w=1;if(dat>100){dat=100;}delay(200);digitalWrite(CS,LOW);}
   if(digitalRead(12)==LOW){dat-=STEP;w=1;if(dat<0){dat=0;}delay(200);digitalWrite(CS,LOW);}
   
   if(dat_old!=dat){pop = dat-pop;
   if(pop>0){up(abs(pop));}
   if(pop<0){dw(abs(pop));}
   pop=dat;
   digitalWrite(CS,HIGH); 
   }
   dat_old=dat;
  if(w==1){w=0;
   delay(50);
   Serial.print(analogRead(A0)/1000.0,3);Serial.println(" V"); 
   Serial.print(pop);Serial.println(" %");
 }
}

void cl(){digitalWrite(UD,LOW);for(int i=0;i<100;i++){digitalWrite(INC,LOW);digitalWrite(INC,HIGH);}}
void up(byte data){digitalWrite(UD,HIGH);for(int i=0;i<data;i++){digitalWrite(INC,LOW);digitalWrite(INC,HIGH);}} 
void dw(byte data){digitalWrite(UD,LOW);for(int i=0;i<data;i++){digitalWrite(INC,LOW);digitalWrite(INC,HIGH);}} 

При подачи питания потенциометр устанавливает % сопротивления указанный в переменной dat. В данном примере переменная dat имеет значение 0. Если занести значение переменной в EEPROM, то при подачи питания будет установлено ранее установленное напряжение. Далее кнопками UP и DW можно регулировать напряжение подаваемое на вход A0, от 0 до 3,3 В. Так же можно установить кол-во шагов при одном нажатии кнопки, в примере одно нажатие равно 5 шагам (5 %).

#define STEP 5

Показания напряжения и % сопротивления выводиться в монитор порта:

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=595

Помочь сайту: 100, 200, 500 рублей

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

Войти с помощью: