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 커맨드 시퀀스 예시는 다음과 같다.
- DIN 0x1803, SDO 0xXXXX : 커맨드 6번이다. 컨트롤 레지스터에 0x3을 써서 20-TP memory program과 wiper position update를 가능하게 한다.
- DIN 0x0500, SDO 0x1803 : 커맨드 1번이다. RDAC 레지스터에 0x100(256)을 쓰고 와이퍼는 full scale에서 1/4 position으로 이동하게 된다.
- DIN 0x0800, SDO 0x0500 : 커맨드 2번이다. RDAC 레지스터를 Read back하여 제대로 써졌는지 다음 프레임으로 확인한다. 4번의 SDO를 통해 확인할 수 있다.
- DIN 0x0C00, SDO 0x0100 : 커맨드 3번이다. RDAC 레지스터의 셋팅값을 20-TP 메모리에 저장한다. SDO 값 중 하위 10bit는 RDAC 레지스터의 현재 값이다.
- DIN 0x1C00, SDO 0x0C00 : 커맨드 7번이다. 컨트롤 레지스터를 다음 프레임에 읽는 명령이다.
- 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
'임베디드 개발 > 펌웨어' 카테고리의 다른 글
MAX7424 5th-Order Lowpass Switched-Capacitor Filters (0) | 2024.05.13 |
---|---|
오실로스코프 1M Ohm, 50 Ohm 설정에 관해 (0) | 2024.05.09 |
BH2227FV, D/A Converters 데이터시트 분석 (0) | 2024.05.05 |
ADG201A, Analog Switch IC 데이터시트 분석 (0) | 2024.05.03 |
인텔 hex 포맷 이해하기 (+ Intel hex to Bin 변환) (0) | 2024.04.23 |