본문 바로가기
임베디드 개발/펌웨어

AD5292BRUZ-100, Digital Potentiometer 데이터시트 분석

by eteo 2024. 5. 7.

 

 

 

 

AD5292BRUZ-100은 Analog Devices사의 디지털 포텐셔미터 IC이다.

 

SPI 인터페이스로 제어가 가능하며 내부에 최대 20번까지 쓰기 가능한 20-TP memory가 있어서 칩의 전원이 공급되거나 리셋이 발생할 때 자동으로 설정할 저항값을 써둘 수 있다.

 

블락 다이어그램을 보면 결국 시리얼 인터페이스로 RADC 레지스터에 원하는 설정값을 써서 A와 B사이에 있는 전위차계의 Wiper 위치를 조정하는 원리이다.

 

 

 

 

 

뒤에 붙는 모델명에 따라 조절가능한 저항값과 해상도가 달라지는데 AD5292BRUZ-100 모델은 0Ω부터 최대 100 kΩ까지 조정할 수 있고, 해상도는 1024단계로 설정된다. 즉, 97.65625Ω 단계로 저항 값을 정밀하게 설정할 수 있다.

 

 

 

 

 

 

 

참고로 전위차계의 회로 연결 및 사용 방법은 크게 다음의 2가지가 있다.

 

먼저 그림 왼쪽은 전위차계를 전압분배기로 쓰는 방법이다.예를들면  A에는 레퍼런스 전압을 인가하고 B핀은 그라운드에 연결하고 W핀에서는 위, 아래 저항 비율에 따라 결정된 전압을 출력되므로 A와 B 사이에서 스윙하는 전압을 얻어낼 수 있다.

 

다음 그림 오른쪽은 전위차계를 단순히 가변저항으로 쓰는 방법이다. 아마 오른쪽 그림에서는 상단의 회로가 일반적으로 사용될 것 같은데 A와 W핀만 회로에 연결해서 저항 값만 활용하는 방식이다.

 

 

 

 

 

그리고 28페이지에는 각 응용방식에 따른 RDAC 레지스터와 출력저항의 관계를 수식화해 보여주고 있다.

 

아래 그림처럼 가변저항 모드로 사용될 때는..

 

 

저항값 Rwa는 다음의 공식으로 구할 수 있다.

 

RADC 레지스터 값이 0이면 저항이 최대값인 100 kΩ이고, RDAC 레지스터 값이 커질 수록 저항값이 감소하는 반비례 관계를 나타낸다.

즉, RDAC가 0일때 Wiper가 터미널 B에 연결되고, RDAC가이 1023일 때 Wiper가 터미널 A에 연결됨을 알 수 있다.

 

 

 

아래와 같이 전압분배기로 사용될 때는 다음의 공식으로 Vout값을 구할 수 있다.

 

 

 

 

 

 

다음 8 페이지에는 설정 코드 범위에 따른 오차가 나와있다. Maximum ±1% resistor tolerance error라고 한다.

 

 

 

 

 

 

 

 

 

 

다음은 12페이지의 Pin Configuration이다. 여기서 알 수 있는정보는 다음과 같다.

 

  • 리셋이 일어나면 RDAC 레지스터는 20-TP 메모리에 쓰인 값으로 갱신된다. 만약 20-TP 메모리가 한번도 쓰여진 적 없다면 공장 출고시 기본 값은 중간 값이다.
  • 칩의 전원 공급 방식은 2가지가 있는데 single supply는 +9V to +33V의 양의 전압과 GND를 Vdd와 Vss에 공급하는 방식이고 dual supply는 ±9V to ±16.5의 양전압과 음전압을 Vdd와 Vss에 공급하는 방식이다. Electrical Characteristics를 봤을 때 일반적으로 Vdd에 +15V, Vss에 -15V를 연결하는 것 같다.
  • Serial Data는 Clock이 falling edge 일 때 샘플링 된다. 그리고 아래 페이지에서도 설명이 나오는데 IDLE일 때 Clock이 low여서 SPI mode는 1이다.
  • Transfer rates는 최대 50MHz이다.
  • /SYNC핀은 /CS핀이라고 보면 된다.
  • RDY핀은 MCU입장에선 입력핀으로 읽기와 쓰기 작업이 완료된 후 High 상태로 전환한다.
  • SDO핀은 외부 풀업이 필요하다. 다른 페이지에도 해당 정보가 나와있는데 Vlogic에 2.2kOhm 풀업저항을 연결해야 한다. 만약 병렬로 연결한 경우 모든 SDO핀에 풀업이 필요하다. 안그러면 파형이 Vlogic에 못미치게 나온다.

 

 

 

 

 

 

RDY핀의 경우 25페이지에 그 설명이 나와있는데 20-TP memory에 프로그램하는데 약 8ms 정도가 걸리고 RDY핀을 모니터링해서 program의 종료를 확인할 수 있다고 한다. 근데 걍 10ms 대기했다가 레지스터 읽는방법도 있고, 꼭 RDY 핀이 필요하지 않으니 NC처리해도 된다.

 

 

 

 

 

다음 SPI 인터페이스를 통한 커맨드 명령은 총 8가지가 있다.

총 16bit로 구성되는데 DB15, DB14는 항상 0이고, C3-C0이 커맨드를 의미하며 D9-D0에는 커맨드에 따른 데이터 값이 뒤따른다.

 

아마 가장 많이 사용할 명령이 1번 커맨드일 것 같은데 RDAC 레지스터에 포텐셔미터 와이퍼 position 값을 쓰는 명령으로 분해능이 10비트니까 D9-D0에 0부터 1023사이의 값을 쓰면 된다.

 

 

 

 

 

 

 

컨트롤 레지스터 제어 방법이다.

 

 

 

 

RDAC, 20-TP Memory에 대한 설명과 관련 Write and Read 커맨드 시퀀스 예시는 다음과 같다.

 

  1. DIN 0x1803, SDO 0xXXXX : 커맨드 6번이다. 컨트롤 레지스터에 0x3을 써서 20-TP memory program과 wiper position update를 가능하게 한다.
  2. DIN 0x0500, SDO 0x1803 : 커맨드 1번이다. RDAC 레지스터에 0x100(256)을 쓰고 와이퍼는 full scale에서 1/4 position으로 이동하게 된다.
  3. DIN 0x0800, SDO 0x0500 : 커맨드 2번이다. RDAC 레지스터를 Read back하여 제대로 써졌는지 다음 프레임으로 확인한다. 4번의 SDO를 통해 확인할 수 있다.
  4. DIN 0x0C00, SDO 0x0100 : 커맨드 3번이다. RDAC 레지스터의 셋팅값을 20-TP 메모리에 저장한다. SDO 값 중 하위 10bit는 RDAC 레지스터의 현재 값이다.
  5. DIN 0x1C00, SDO 0x0C00 : 커맨드 7번이다. 컨트롤 레지스터를 다음 프레임에 읽는 명령이다.
  6. DIN 0x0000, SDO 0x000X : 컨트롤 레지스터를 읽기 위해 쓰레기 값을 전송하고 SDO의 하위 4bits를 통해 컨트롤 레지스터 값을 확인한다. 만약 C3 = 1이면 fuse program command successful로 20-TP 메모리 프로그램이 성공한 것이다.

 

 

 

 

 

 

20-TP memory를 Read back 하는 방법은 26페이지에 나와있다. 근데 좀 복잡하니 그냥 리셋후 RDAC를 읽어서 확인하는게 낫겠다.

 

 

 

 

다음은 타이밍 다이어그램인데 SPI mode는 CPOL=0, CPHA=1을 사용한다. 한번에 16bit를 전송하고 MSB first로 전송하는데 상위 2bit는 항상 0으로 고정시켜 둔다. Read Timing Diagram에서 읽기 전 /SYNC이 올라갔다 내려와야하는 걸 볼 수 있다. 저기서 RDY는 MCU입장에서 입력인데 굳이 모니터링 할 필요가 없다.

 

 

 

 

 

 

AD5292 여러개를 Daisy Chain이 아니라 Parallel로 연결한 경우 주의점

 

병렬로 연결시 SDO핀이 common되어 있을 텐데  /SYNC를 내린 칩 뿐만 아니라 다른 칩의 SDO 출력이 신호에 영향을 미친다. SDO핀은 풀업되어 있어서 평소 Vlogic인데 /SYNC 신호를 받지 않은칩이 High-Z 상태가 아니면 /SYNC 신호를 받은 칩이 데이터를 내보내기 위해 Low Level을 출력해도 다른 칩 SDO 출력의 영향으로 완전 Low로 떨어지지 않기 때문이다.  따라서 칩 제어 이후에는 항상 SDO핀을 high impedance 상태로 보내는 0x8001, 0x0000 명령을 보내줘야 정상적으로 읽기 동작이 된다.

 

 

해당 내용 링크 : 

https://ez.analog.com/data_converters/precision_dacs/f/q-a/27547/ad5292-sdo/251019

 

 

 

파형 캡쳐

 

 

1. /SYNC

2. CLK

3. SDO

4. DI

 

먼저 16bit 0x0800을 써서 다음 16bit에 읽는데 RDAC가 최대값이라 0x03FF가 읽힌 모습이다.

 

 

 

 

 

 

참고 :

https://www.digikey.kr/ko/articles/the-fundamentals-of-digital-potentiometers