如何使用PT2258构建数字音量控制器

发布时间:2023-06-06  

电位器是一种机械装置,使用它可以根据所需值设置电阻,从而改变通过它的电流。电位器有很多应用,但大多数情况下电位器用作音频放大器的音量控制器。


电位器不控制信号的增益,但它形成了一个分压器,这就是输入信号衰减的原因。因此,在这个项目中,我将向您展示如何使用 IC PT2258 构建您的数字音量控制器,并将其与 Arduino 接口以控制放大器电路的音量。


集成电路PT2258

poYBAGL0x5iAAsNqAAQ2fA_aIDo141.png

正如我之前提到的,PT2258 是一款用作 6通道电子音量控制器的 IC,该 IC 采用专为多通道音频-视频应用而设计的 CMOS 技术。


该 IC 提供 I2C 控制接口,衰减范围为 0 至 -79dB,1dB/步长,采用 20 引脚 DIP 或 SOP 封装。


一些基本功能包括,

6 个输入和输出通道(适用于 5.1 家庭音频系统)

可选 I2C 地址(用于菊花链应用)

高通道分离(用于低噪声应用)

信噪比 》 100dB

工作电压为 5 至 9V

PT2258 IC 工作原理

pYYBAGL0x5SARv0GAACk6UFoAKU525.png

该 IC 通过 SCL 和 SDA 线从微控制器发送和接收数据。SDA 和 SCL 构成总线接口。这些线必须通过两个 4.7K 电阻拉高,以确保稳定运行。


在我们进入实际的硬件操作之前,这里是IC的详细功能描述。如果你不想知道这一切,你可以跳过这部分,因为所有的功能部分都由 Arduino 库管理。


数据验证

当 SCL 信号为 HIGH 时,SDA 线上的数据被认为是稳定的。

SDA 线的 HIGH 和 LOW 状态仅在 SCL 为 LOW 时改变。

poYBAGL0x5CAZQZyAABfKD69ajY130.png

启动和停止条件

启动条件被激活时

SCL 设置为 HIGH 和

SDA 从 HIGH 状态变为 LOW 状态。

停止条件被激活时

SCL 设置为 HIGH 和

SDA 从低状态转变为高状态

poYBAGL0x4uAZWUYAABHnKtr_JI026.png

笔记!此信息对于调试信号非常有用。

数据格式

传输到 SDA 线的每个字节由 8 位组成,形成一个字节。每个字节后面必须跟一个确认位。


致谢

确认确保稳定和正确的操作。在确认时钟脉冲期间,微控制器将 SDA 引脚拉高,此时外围设备(音频处理器)将 SDA 线拉低(低)。

pYYBAGL0x4eAaxNtAABhRm5m32g852.png

外围设备(PT2258)现在被寻址,它必须在接收到一个字节后产生一个确认,否则,SDA 线将在第九(9)个时钟脉冲期间保持高电平。如果发生这种情况,主发送器将生成 STOP 信息以中止传输。

poYBAGL0x4OAYHsOAABYeEv1tBM786.png

这消除了有效数据传输的必要性。

地址选择

该 IC 的 I2C 地址取决于 CODE1 (Pin No.17) 和 CODE2 (Pin No.4) 的状态。

poYBAGL0x4CAOTchAAANUsL8IBc232.png

逻辑高 = 1

逻辑低 = 0

接口协议

接口协议由以下部分组成:

一个起始位

一个芯片地址字节

ACK=确认位

一个数据字节

停止位

pYYBAGL0x3uAGzAcAACC4K60oWM109.png

IC上电后,需要等待至少200ms才能传输第一个数据位,否则可能会导致数据传输失败。

延迟之后,首先要做的是通过 I2C 线发送“0XC0”来清除寄存器,这样可以确保正常运行。

poYBAGL0x3aAYb_gAABh6k7KiyM607.png

上述步骤清空了整个寄存器,现在我们需要给寄存器设置一个值,否则,寄存器存储垃圾值,我们得到一个雀斑的输出。

为保证音量调节合适,需要依次发送 10dB 的倍数和 1dB 的代码到衰减器,否则 IC 会出现异常。下图更清楚地说明了这一点。

pYYBAGL0x3KADHhMAACqlh4XBVo871.png

以上两种方法都可以正常工作。

为确保正常运行,请确保 I2C 数据传输速度不超过 100KHz。

这就是您可以向 IC 传输一个字节并衰减输入信号的方式。上面的部分是学习 IC 的功能,但正如我之前所说,我们将使用 Arduino 库与管理所有硬代码的 IC 进行通信,我们只需要进行一些函数调用。

原理图

pYYBAGL0x26AQPjcAAEiv9bYf5g164.png

上图显示了基于 PT2258 的音量控制电路的测试原理图。它取自数据表并根据需要进行修改。

为了演示,电路是在上面显示的示意图的帮助下在无焊面包板上构建的。

所需组件

PT2258 集成电路 – 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代码

#include

#include 

#include 

接下来,使用您喜欢的文本编辑器打开PT2258.cpp文件,我使用的是 Notepad++。


可以看到wire库的“w”是小写字母,与最新的Arduino版本不兼容,需要换成大写的“W”,就这样。


可在本节末尾找到 PT2258 音量控制器的完整代码。这里解释了程序的重要部分。


我们通过包含所有必需的库文件来开始代码。Wire 库用于在 Arduino 和 PT2258 之间进行通信。PT2258 库包含所有关键的 I2C 时序信息和确认。ezButton库用于与按钮交互。


不要使用下面的代码图像,而是从代码文件中复制所有代码实例,并像我们以前在其他项目中那样将它们格式化


#include 

#include 

#include 

接下来,为两个按钮和 PT2258 库本身制作对象。


PT2258 PT2258;

ezButton button_1(2);

ezButton button_2(4);

接下来,定义音量级别。这是该 IC 启动时的默认音量级别。


国际体积 = 40;

接下来,启动 UART,并设置 I2C 总线的时钟频率。


序列号.开始(9600);

Wire.setClock(100000);

设置I2C时钟非常重要,否则IC将无法工作,因为该IC支持的最大时钟频率为100KHz。


接下来,我们使用if else语句做一些整理工作,以确保 IC 与 I2C 总线正确通信。


如果 (!pt2258.init())

 Serial.printIn("PT2258 启动成功");

别的

 Serial.printIn(“启动 PT2258 失败”);

接下来,我们设置按钮的去抖动延迟。


Button_1.setDebounceTime(50);

Button_2.setDebounceTime(50);

最后,通过设置默认通道音量和引脚号来启动 PT2258 IC。


/* 使用默认音量和 Pin 启动 PT*/

Pt2258.setChannelVolume(音量,4);

Pt2258.setChannelVolume(音量,5);

这标志着Void Setup()部分的结束。


在循环部分,我们需要从按钮类中调用循环函数;这是图书馆的规范。


Button_1.loop(); //库规范

Button_2.loop(); //库规范

下面的if部分是为了降低音量。


/* 如果条件为真,则按下按钮 1 */

如果 (button_1.ispressed())

{

   音量++;// 增加音量计数器。

   // 这个 if 语句确保交易量不超过 79

   如果(音量 >= 79)

   {

   体积 = 79;

   }

   Serial.print(“卷:”); // 打印音量级别

   Serial.printIn(volume);

   /* 设置通道 4 的音量

   在 PT2558 IC 的 PIN 9 中

  */

  Pt2558.setChannelVolume(音量,4);

  /* 设置通道 5 的音量

  PT2558 IC的PIN 10是哪个

  */

  Pt2558.setChannelVolume(音量,5);

}

下面的if部分是为了增加音量。


// 按钮 2 也是如此

如果 (button_2.isPressed())

{

体积 - ;

// 这个 if 语句确保音量不低于零。

如果(音量 <= 0)

音量 = 0;

Serial.print(“卷:”);

Serial.printIn(volume);

Pt2258.setChannelVolume(音量,4);

Pt2558.setChannelVolume(音量,5);

}

测试数字音频音量控制电路

68362dd7e45f24f5267aef8409504f17_poYBAGL0x2aAfUXDAAdSIoxTai8104.png


为了测试电路,使用了以下设备

具有 13-0-13 分接头的变压器

2 4Ω 20W 扬声器作为负载。

音源(电话)

我弄乱了机械电位器,并用两条小跨接电缆短接了两条引线。现在,借助两个按钮,可以控制放大器的音量。
#include
#include
#include
PT2258 PT2258;// PT2258 对象
ezButton button_1(2); //Button_1 对象
ezButton button_2(4); //Button_2 对象
整数体积 = 40;// 默认音量/起始音量
无效设置(){
序列号.开始(9600);//UART开始
Wire.setClock(100000); // 将 I2C 时钟设置为 100KHz
/* 检查 MCU 是否可以与 PT 通话 */
如果(!pt2258.init())
Serial.println("PT2258 启动成功");
别的
Serial.println("启动 PT2258 失败");
/* 设置按钮去抖动延迟*/
button_1.setDebounceTime(50);
button_2.setDebounceTime(50);
/* 使用默认音量和 Pin 启动 PT*/
pt2258.setChannelVolume(音量, 4);
pt2258.setChannelVolume(音量, 5);
}
无效循环(){
button_1.loop(); //库规范
button_2.loop(); //库规范
/* 如果条件为真,则按下按钮 1*/
if (button_1.isPressed())
{
音量++;// 增加音量计数器。
// 这个 if 语句确保交易量不超过 79
如果(音量 >= 79)
{
体积 = 79;
}
Serial.print("音量:"); // 打印音量级别
Serial.println(卷);
/*设置通道4的音量
在 PT2258 IC 的 PIN 9 中
*/
pt2258.setChannelVolume(音量, 4);
/*设置通道5的音量
PT2258 IC的10脚是哪个
*/
pt2258.setChannelVolume(音量, 5);
}
//按钮2也是如此
如果 (button_2.isPressed())
{
体积 - ;
// 这个 if 语句确保音量不低于零。
如果(音量 <= 0)
体积 = 0;
Serial.print("音量:");
Serial.println(卷);
pt2258.setChannelVolume(音量, 4);
pt2258.setChannelVolume(音量, 5);
}
}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>