전위차계는 원하는 값에 따라 저항을 설정하여 통과하는 전류를 변경할 수있는 기계 장치입니다. 전위차계에는 많은 응용 분야가 있지만 대부분 전위차계는 오디오 증폭기의 볼륨 컨트롤러로 사용됩니다.
전위차계는 신호의 이득을 제어하지 않지만 전압 분배기를 형성하므로 입력 신호가 감쇠됩니다. 따라서이 프로젝트에서는 IC PT2258로 디지털 볼륨 컨트롤러를 구축하고 Arduino와 인터페이스하여 증폭기 회로의 볼륨을 제어하는 방법 을 보여 드리겠습니다. VU 미터, 톤 제어 회로 등 다양한 오디오 관련 회로도 여기에서 확인할 수 있습니다.
IC PT2258
앞서 언급했듯이 PT2258은 6 채널 전자 볼륨 컨트롤러로 사용하도록 제작 된 IC 이며, 이 IC는 다중 채널 오디오-비디오 애플리케이션을 위해 특별히 설계된 CMOS 기술을 사용합니다.
이 IC는 1dB / 단계에서 감쇠 범위가 0 ~ -79dB 인 I2C 제어 인터페이스를 제공하며 20 핀 DIP 또는 SOP 패키지로 제공됩니다.
일부 기본 기능에는 다음이 포함됩니다.
- 6 개 입력 및 출력 채널 (5.1 홈 오디오 시스템 용)
- 선택 가능한 I2C 주소 (데이지 체인 애플리케이션 용)
- 높은 채널 분리 (저소음 애플리케이션 용)
- > 100dB의 S / N 비율
- 작동 전압은 5 ~ 9V입니다.
PT2258 IC 작동 원리
이 IC는 SCL 및 SDA 라인을 통해 마이크로 컨트롤러로부터 데이터를 송수신합니다. SDA와 SCL은 버스 인터페이스를 구성합니다. 이러한 라인은 안정적인 작동을 보장하기 위해 2 개의 4.7K 저항으로 하이로 당겨야합니다.
실제 하드웨어 작동으로 이동하기 전에 IC에 대한 자세한 기능 설명이 있습니다. 이 모든 것을 알고 싶지 않다면 모든 기능 부분이 Arduino 라이브러리에서 관리되기 때문에이 부분을 건너 뛸 수 있습니다.
데이터 유효성 검사
- SCL 신호가 HIGH 일 때 SDA 라인의 데이터는 안정적인 것으로 간주됩니다.
- SDA 라인의 HIGH 및 LOW 상태는 SCL이 LOW 일 때만 변경됩니다.
시작 및 중지 조건
시작 조건은 다음과 같은 경우 활성화됩니다.
- SCL이 HIGH로 설정되고
- SDA가 HIGH에서 LOW 상태로 전환됩니다.
정지 조건은 다음과 같은 경우 활성화됩니다.
- SCL이 HIGH로 설정되고
- SDA가 LOW에서 HIGH 상태로 이동합니다.
노트! 이 정보는 신호를 디버깅하는 데 매우 유용합니다.
데이터 형식
SDA 라인으로 전송되는 모든 바이트는 바이트를 형성하는 8 비트로 구성됩니다. 각 바이트 뒤에는 승인 비트가 와야합니다.
승인
승인은 안정적이고 적절한 작동을 보장합니다. Acknowledge Clock Pulse 동안 마이크로 컨트롤러는 주변 장치 (오디오 프로세서)가 SDA 라인을 풀다운 (LOW)하는 정확한 순간에 SDA 핀을 HIGH로 당깁니다.
주변 장치 (PT2258)는 이제 주소가 지정되고 바이트를 수신 한 후 승인을 생성해야합니다. 그렇지 않으면 SDA 라인이 9 번째 (9 번째) 클럭 펄스 동안 High 레벨로 유지됩니다. 이 경우 마스터 송신기는 전송을 중단하기 위해 STOP 정보를 생성합니다.
따라서 유효한 데이터 전송을 위해 준비 할 필요가 없습니다.
주소 선택
이 IC의 I2C 주소는 CODE1 (핀 번호 17) 및 CODE2 (핀 번호 4)의 상태에 따라 다릅니다.
CODE1 (핀 번호 17) |
CODE2 (PIN 번호 4) |
16 진수 주소 |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
논리 높음 = 1
로직 낮음 = 0
인터페이스 프로토콜
인터페이스 프로토콜은 다음으로 구성됩니다.
- 시작 비트
- 칩 주소 바이트
- ACK = 승인 비트
- 데이터 바이트
- 정지 비트
약간의 청소
IC의 전원이 켜진 후 첫 번째 데이터 비트를 전송하기 전에 최소 200ms를 기다려야합니다. 그렇지 않으면 데이터 전송이 실패 할 수 있습니다.
지연 후 가장 먼저해야 할 일은 I2C 라인에 "0XC0"을 전송하여 레지스터를 지우는 것입니다. 이렇게하면 적절한 작동이 보장됩니다.
위의 단계는 전체 레지스터를 지 웁니다. 이제 레지스터에 값을 설정해야합니다. 그렇지 않으면 레지스터가 가비지 값을 저장하고 주근깨가있는 출력을 얻습니다.
적절한 볼륨 조정을 보장하려면 10dB의 배수와 1dB 코드를 차례로 감쇠기에 전송해야합니다. 그렇지 않으면 IC가 비정상적으로 동작 할 수 있습니다. 아래 다이어그램은 더 자세히 설명합니다.
위의 두 가지 방법 모두 제대로 작동합니다.
올바른 작동을 보장하려면 I2C 데이터 전송 속도가 100KHz를 초과하지 않도록하십시오.
이것이 IC에 바이트를 전송하고 입력 신호를 감쇠하는 방법입니다. 위의 섹션은 IC가 어떻게 작동하는지 배우기위한 것이지만 앞서 말했듯이 Arduino 라이브러리를 사용하여 모든 하드 코드를 관리하는 IC와 통신 할 것입니다. 함수 호출을 몇 가지만하면됩니다.
위의 모든 정보는 데이터 시트에서 가져온 것입니다. 자세한 내용은 데이터 시트를 참조하십시오.
회로도
위의 이미지는 PT2258 기반 볼륨 제어 회로 의 테스트 회로도를 보여줍니다. 데이터 시트에서 가져와 필요에 따라 수정합니다.
데모를 위해 회로는 위에 표시된 회로도를 사용하여 납땜없는 브레드 보드에 구성됩니다.
노트! 모든 구성 요소는 기생 커패시턴스 인덕턴스 및 저항을 줄이기 위해 가능한 한 가깝게 배치됩니다.
필요한 구성 요소
- PT2258 IC – 1
- Arduino Nano 컨트롤러 – 1
- 일반 브레드 보드 – 1
- 나사 고정 터미널 5mm x 3 – 1
- 푸시 버튼 – 1
- 4.7K 저항, 5 %-2
- 150K 저항, 5 %-4
- 10k 저항기, 5 %-2
- 10uF 커패시터 – 6
- 0.1uF 커패시터 – 1
- 점퍼 와이어-10
Arduino 코드
간단하게하기 위해 sunrutcon에서 만든 GitHub의 PT2258 라이브러리를 사용하겠습니다.
이것은 매우 잘 작성된 라이브러리이므로 사용하기로 결정했지만 매우 오래 되었기 때문에 약간 버그가있어서 사용하기 전에 수정해야합니다.
먼저 GitHub 저장소에서 라이브러리를 다운로드하고 추출합니다.
추출 후 위의 두 파일을 얻을 수 있습니다.
# 포함 # 포함
다음으로, 좋아하는 텍스트 편집기로 PT2258.cpp 파일을 엽니 다. 저는 Notepad ++를 사용하고 있습니다.
와이어 라이브러리의 "w"가 최신 Arduino 버전과 호환되지 않는 소문자로되어있는 것을 볼 수 있으며 대문자 "W"로 교체해야합니다.
PT2258 볼륨 컨트롤러에 대한 전체 코드 는이 섹션 의 끝에 있습니다. 여기에 프로그램의 중요한 부분이 설명되어 있습니다.
필요한 모든 라이브러리 파일을 포함하여 코드를 시작합니다. Wire 라이브러리는 Arduino와 PT2258 간의 통신에 사용됩니다. PT2258 라이브러리에는 모든 중요한 I2C 타이밍 정보 및 승인이 포함되어 있습니다. ezButton의 라이브러리는 푸시 버튼과 인터페이스하는 데 사용됩니다.
아래 코드 이미지를 사용하는 대신 코드 파일에서 모든 코드 인스턴스를 복사하여 다른 프로젝트에서 사용했던 것처럼 형식화합니다.
#포함
다음으로 두 개의 버튼과 PT2258 라이브러리 자체에 대한 개체를 만듭니다.
PT2258 pt2258; ezButton button_1 (2); ezButton button_2 (4);
다음으로 볼륨 수준을 정의합니다. 이 IC가 시작할 기본 볼륨 레벨입니다.
Int 부피 = 40;
다음으로 UART를 시작하고 I2C 버스의 클럭 주파수를 설정합니다.
Serial.begin (9600); Wire.setClock (100000);
I2C 클럭을 설정하는 것이 매우 중요합니다. 그렇지 않으면이 IC에서 지원하는 최대 클럭 주파수가 100KHz이기 때문에 IC가 작동하지 않습니다.
다음으로 IC가 I2C 버스와 올바르게 통신하는지 확인하기 위해 if else 문 으로 약간의 관리 작업을 수행합니다.
If (! pt2258.init ()) Serial.printIn ("PT2258 성공적으로 시작됨"); Else Serial.printIn ("PT2258을 시작하지 못했습니다");
다음으로 푸시 버튼에 대한 디 바운스 지연을 설정합니다.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
마지막으로 기본 채널 볼륨 및 핀 번호로 설정하여 PT2258 IC를 시작합니다.
/ * 기본 볼륨 및 핀으로 PT 시작 * / Pt2258.setChannelVolume (volume, 4); Pt2258.setChannelVolume (volume, 5);
이것은 Void Setup () 섹션 의 끝을 표시합니다.
에서 루프 섹션, 우리는 버튼 클래스의 루프 함수를 호출 할 필요가; 그것은 도서관 규범입니다.
Button_1.loop (); // 라이브러리 규범 Button_2.loop (); // 도서관 규범
아래는 경우 부분은 볼륨을 감소하는 것입니다.
/ * 조건이 참이면 버튼 1을 눌렀을 때 * / If (button_1.ispressed ()) {Volume ++; // 볼륨 카운터 증가. //이 if 문은 볼륨이 79를 초과하지 않도록합니다. If (volume> = 79) {Volume = 79; } Serial.print ("볼륨:"); // 볼륨 레벨 인쇄 Serial.printIn (volume); / * PT2558 IC의 PIN 9에있는 채널 4의 볼륨 설정 * / Pt2558.setChannelVolume (volume, 4); / * PT2558 IC의 PIN 10 인 채널 5의 볼륨 설정 * / Pt2558.setChannelVolume (volume, 5); }
아래의 경우 부분은 볼륨을 증가시키는 것이다.
// 버튼 2도 마찬가지입니다. If (button_2.isPressed ()) {Volume--; //이 if 문은 볼륨 레벨이 0 아래로 떨어지지 않도록합니다. If (볼륨 <= 0) 볼륨 = 0; Serial.print ("볼륨:"); Serial.printIn (볼륨); Pt2258.setChannelVolume (volume, 4); Pt2558.setChannelVolume (volume, 5); }
디지털 오디오 볼륨 제어 회로 테스트
회로를 테스트하기 위해 다음 장치가 사용되었습니다.
- 13-0-13 탭이있는 변압기
- 2 4Ω 20W 스피커를 부하로 사용합니다.
- 오디오 소스 (전화)
이전 기사에서 TDA2050 IC로 간단한 2x32W 오디오 증폭기를 만드는 방법을 보여 드렸으며이 데모에도 사용할 것입니다.
기계식 전위차계를 손상시키고 두 개의 작은 점퍼 케이블로 두 개의 리드를 단락 시켰습니다.
이제 두 개의 푸시 버튼을 사용하여 앰프의 볼륨을 제어 할 수 있습니다.
추가 향상
성능을 향상시키기 위해 회로를 추가로 수정할 수 있습니다. IC의 디지털 섹션에서 생성되는 노이즈를 더욱 제거하기 위해 회로와 같은 개선을 PCB에 적용 할 수 있습니다. 고주파 노이즈를 제거하기 위해 추가 필터를 추가 할 수도 있습니다. 또한 다른 오디오 증폭기 회로 및 기타 오디오 관련 프로젝트를 확인하십시오.
이 기사를 좋아하고 새로운 것을 배웠기를 바랍니다. 의심스러운 점이 있으면 아래 의견에 질문하거나 포럼을 사용하여 자세한 토론을 할 수 있습니다.