亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 ATtiny85 的蓝牙音量控制器

发布时间:2021-10-17
分享到:

基于 ATtiny85 的蓝牙音量控制器

发布时间:2021-10-17
分享到:

本方案是关于如何更换立体声系统的音量旋钮的相当详细的描述,该旋钮使用带有按钮和蓝牙连接的定制板的旋转编码器。

介绍
首先,一个重要的注意事项:这个项目是在考虑到松下 SA-AK45立体声系统的情况下编写的,但也适用于使用旋转编码器进行音量控制的任何其他音响系统。请注意,其他系统使用的编码器可能具有略有不同的信号配置文件(这可以通过软件中的小调整轻松处理 - 在适当的步骤中进行更多说明)。

有了这个,让我们进入正确的介绍。松下 SA-AK45 是 90 年代后期的立体声系统,主要用作我的 PC 的音响系统。它前面有一个很大的音量旋钮,但前段时间它坏了,所以我决定修复它并最终得到一个带有蓝牙访问的基于按钮的自定义音量控制。

该系统来自数字控制席卷市场并取代模拟控制的时代,这里也不例外。旋钮不使用电位计,而是位于旋转编码器(旋转时发送数字信号的小型设备)上。在这个系统的情况下,这个特定的部件非常不正统,很难找到替代品(更不用说修理了——这些东西都有微小的部件),所以决定完全摆脱它,取下旋钮并安装我们的定制板与按钮和蓝牙。

所有这一切都必须以某种方式进行控制,我们将使用Attiny85微控制器,因为它便宜、易于使用、非常小,并且有足够的资源来完成这项工作。任何熟悉 Arduino 的人都可以毫无问题地使用它。

对于蓝牙通信,我们将使用HC-06 模块- 它是无处不在的HC-05的一个非常流行的衍生产品,与它的不同之处在于更便宜并且只能作为从机工作(这对我们的场景来说很好)。也可以使用任何其他模块,只需对代码进行最少的更改(请参阅相应的步骤)。

最后说明:需要基本的焊接/拆焊技能。

现在,让我们开始吧。

所需:

  • 松下 SA-AK45 立体声系统(或任何音量由旋转编码器控制的音响系统);
  • Attiny85 微控制器;
  • DIP-8 插座(可选 - 便于拆卸微控制器);
  • HC-06 蓝牙模块(HC-05 或类似的也可以,但控制它的 AT 命令可能不同);
  • 2 个 LED(如果有人不想要 BLING,可以用电阻代替——稍后会详细介绍);
  • 2 个轻触开关(最好是较大的,易于按下 - 这些将是我们的音量控制按钮);
  • 4 个电阻:100、1.2k、2.2k、100k ohm(或类似值);
  • 1 100 nF 电容器;
  • 2x2 方形 PCB 母头连接器;
  • 4 公-公跳线/杜邦线(20 厘米或类似);
  • 通用 PCB(约 4x6 厘米)(或根据后续步骤中附上的原理图定制的);
  • AVR 编程器或 Arduino 板(用于对 Attiny 进行编程);
  • 一个面包板和一些更多的杜邦线用于原型制作(可选);
  • 烙铁、焊锡丝、助焊剂、拆焊泵(可选)。

第 1 步:准备好拆分立体声系统
注意:如果您的立体声系统与 SA-AK45 不同,这里的前几个步骤可能对您没有多大帮助,但它们的某些方面可能适用于其他地方,因此最好至少插检查一下。

注意 2:在拆卸立体声音响时拍照可能是个好主意。特别是当它与我的模型不同时。特别注意您断开的任何连接或其他棘手的地方。

首先,我们必须找到我们将要更换的编码器。它焊接在其中一个前面板 PCB 上,在其他 PCB 下挖得很深。最好找一份系统的Service Manual供参考。这些通常很容易在网上找到。在我们的例子中,我们必须到达“E - Operation PCB”——编码器所在的位置。

第 2 步:打开立体声系统
这个非常简单:从系统上拔下所有电缆并拧下顶盖/侧盖。它用螺钉固定在后面板和系统的两侧(每侧 3 个螺钉)。请记住,它由 3 个薄金属板条锁定到顶部的前面板 - 您必须将其拉起才能将其拆下。

也可以卸下音量旋钮,只需将其从正面朝您的方向拉出即可。

第 3 步:将前面板与其他部分分开
正面通过 3 根带状电缆连接到其余部分,从前面板 PCB 到主 PCB (B)。白色的薄的需要从主 PCB 上的插座中拉出。在拉出黑色较厚的之前,需要在主板上的连接器两侧提起锁定机构,然后才能将其从连接器中拉出。

将正面连接到背面的另一部分是整个设备顶部的 CD 播放器/换碟机。将它从系统的背板上拧下就足够了 - 然后,在断开上述电缆后,可以轻轻地将前部与其余部分分开(通过将其拉开)。

CD 换碟机仍然会连接在前面,这使得事情变得相当笨拙,所以我们想将它完全移除。

第 4 步:卸下 CD 换碟机
CD 换碟机通过 2 根白色带状电缆连接到前面板,该电缆从前面板连接到换碟机上的 2 个独立 PCB。两条色带都可以从转换器侧的连接器中拉出(一个隐藏在一个灵活的黑色覆盖物下面,在拧下一些螺丝后可以弯曲)。

从转换器上断开电缆后,您必须将其从位于前面板一侧的 2 个米色柱子上拧下。就是这样 - 我们将前面板完全分开。

第 5 步:到达音量编码器
我们想用我们的自定义系统替换的编码器位于操作 PCB (E) 上,此时它隐藏在面板 PCB (G) 下。要到达它,我们必须拧下面板 PCB。

有相当多的螺丝要卸下。完成此操作后,您可以小心地抬起面板 PCB。请注意,它仍然通过带状电缆(前面的小 PCB - JOG PCB 和甲板 PCB)和刚性连接器连接到其他 PCB。刚性连接器将通过直接从正面提起 PCB 来断开连接(向上,当正面朝下时)。

连接甲板 PCB 的带状电缆几乎不可断开,因此我们可以保持原样。如果您更喜欢完全移除面板 PCB 以更好地接触下面的内容,则必须从面板 PCB 一侧拆下带状电缆连接器,但这不是强制性的。连接到 JOG PCB (D) 的电缆也是如此,但整个 JOG PCB 非常小,可以很容易地从前面板拆下(拧下它并提起部分覆盖 PCB 的塑料按钮元件后),然后离开悬挂在面板 PCB 旁边。

第 6 步:拆下操作 PCB 并到达编码器
方便的是,操作 PCB 通过伸出的刚性连接器连接到面板 PCB,当我们抬起面板 PCB 时,该连接器断开连接,因此在我们到达编码器之前剩下的唯一一步是从前面板拧下操作 PCB。

在第一张图片中,您可以看到拆卸的最终结果 - 前面板面朝下,操作 PCB 位于左侧。

我们的编码器位于操作 PCB 上,靠近米色连接器。

第 7 步:拆焊和拆卸编码器
我们需要从操作 PCB 上拆下我们的编码器,首先是因为我们无论如何都想将其移除(并用我们的定制板替换),其次是因为我们想拆卸它以查看它发送的信号。

为此,您需要拆焊 4 个信号引脚(包括未使用的那个)和两侧的 2 个安装引脚。添加一些新焊料,然后用拆焊泵去除所有焊料是对我有用的技术。

要拆卸编码器,必须拉直将塑料底座保持在底部的 4 个金属翻盖。

在图片中,您可以看到我的编码器的损坏 - 一个塑料钻头,通过填充触点之间的空间使底部的旋转触点部分光滑,折断并损坏了连接到底座的薄金属触点(连接到信号 A 销),旋转部件沿其行进。这反过来完全弄乱了输出信号参数/形状。

第 8 步:确定编码器的规格

旋转编码器的基本特征可以通过简单的旋转来确定。它可以有棘爪(旋转时发出咔嗒声)或没有棘爪(不发出咔嗒声)。它可以是增量的(在两个方向上无限旋转),也可以是绝对的(像电位计一样的有限旋转)。它有一定的分辨率(它在一圈内发送的信号数量),这可以由通常的点击次数决定(除非它是无点击的......)。我们还可以检查它有哪些引脚,并从 PCB 上的标记中阅读它们的描述。

对我们来说,最重要的是要知道:

编码器的类型(增量或绝对);
分辨率(每转多少增量/减量);
它发送的信号类型;
它如何连接到 PCB。
第一件事(类型)是微不足道的猜测 - 只需检查它是否无限期旋转。

如果我们有一个点击,第二个(分辨率)很容易知道,但不幸的是这个没有点击。

信号的类型和连接是相互关联的。通常,这些增量编码器使用 3 个引脚发送所谓的“正交”信号:A、B 和 GND。在我们的情况下没有什么不同,尽管出于某种原因它还有第四个未使用的引脚(这使得找到合适的替代品非常困难......)。它的工作方式是在一个周期内将 A、B 或任何东西连接到 GND。在一个方向它是“A,B,没有,A,B,没有”等等,在相反的方向它是:“B,A,没有,B,A,没有”等等。因此,系统的控制器知道我们旋转它的方向,并且可以记录每个增量/减量(每个“A,B,没有”或“B,A,没有”循环)。对于大多数编码器,A 和 B 信号会重叠一小段时间(在 A 和 B 之间有一段时间,两者都连接到 GND - 参见所附的信号图)。我不知道这种重叠对这个特定系统的运行有多重要'

那么通过查看和旋转编码器我们知道什么?

它是增量的;
它是无点击的(所以我们不知道分辨率);
它发送一个正交信号(虽然我们不知道 A 和 B 的重叠或分辨率);
它通过 4 个引脚连接,其中一个未使用,三个是增量式正交编码器的典型引脚:A、B、GND。
我们需要确定分辨率(每转发送多少“A,B,无”或“B,A,无”循环)和信号的细节(如果 A 和 B 重叠以及重叠多少)。

决议对我们来说并不是那么重要。知道我们想要循环多长时间是很有用的,这样连续按下按钮就会以方便的速度增加/减少音量,但这可以通过在我们的软件中调整时间来通过实验确定。信号的形状(基本上是 A 和 B 之间的重叠量,这是这里唯一的未知数)也可能不重要,但让我们尝试正确复制它。要知道这些,我们必须看看编码器的内部部分,而且方便的是,此时它已经被拆解了。

当您查看旋转部分时,您可以计算其底部的触点。您会看到每种类型有 24 个联系人,这意味着分辨率为 24 PPR。不过,最重要的信息是我们可以通过查看旋转部分来推断信号形状。见附图。每个循环有3个主要部分,其中一个循环在图中用红线标记。您可以看到 A 和 B 之间几乎没有重叠。这告诉我们如何使用微控制器模拟信号 -如果我们发送“A,B,没有”或“B,A,没有”的简单循环,取决于在方向上,这件事应该可以工作(似乎我们不需要在周期内生成同时连接到 GND 的 A 和 B 周期)。

第 9 步:设计电路板以替代编码器 - 一个简单的解决方案
让我们从一个简单的解决方案开始,它只有 2 个按钮来代替编码器(一个按钮用于“降低音量”,另一个用于“提高音量”)。

让我们尝试确定 Attiny 上这需要多少个 GPIO 引脚。2 个用于输出(用于音量控制的 A 和 B“编码器”信号)和 2 个用于输入(每个按钮 1 个) - 总共 4 个。但是我们可以减少这个数字吗?

请记住,我们计划添加一个蓝牙模块,这需要 2 个 GPIO 引脚(1 个用于串行输入,1 个用于串行输出),但我们总共只有 5 个引脚可供使用(并且我们已经分配了其中的 4 个) )。但有好消息。我们只能将 2 个按钮连接到一个引脚。如何?利用 Attiny 具有模拟输入的事实。如果我们巧妙地通过分压器连接按钮,输入将为我们感兴趣的 3 种状态记录不同的电压:未按下按钮、按下“降低音量”按钮、“按下音量提高按钮”。万岁,我们现在有 2 个空闲引脚用于蓝牙模块。

但是我们将如何为这件事提供动力呢?答案很简单,立体声的 PCB 使用 5V 逻辑,方便地与 Attiny 兼容。我们只需要在系统板上的某个地方找到 5V 线(通过查看编码器的连接,我们已经知道 GND 在哪里)。所以最后我们必须连接到立体声系统中的 4 个信号:5V rail、GND、vol A、vol B。

所附原理图中的内容:

  • 带有 2 个按钮的分压器,位于 GPIO A1(GPIO 2 配置为模拟输入)和 GND 之间;
  • GPIO 0 上的编码器信号 A;
  • GPIO 1 上的编码器信号 B;
  • 一个用于连接立体声的 4 针接头;
  • 去耦电容尽量靠近微控制器的 5V 和 GND 引脚放置,以确保其稳定运行。
  • 操作原则应如下:
  • 纽扣:
  • 当没有按下时,我们应该在 A1 引脚上注册 5V(或接近 1024 的值),
  • 当按下“降低音量”时,我们应该在 A1 引脚上注册 0V(或接近 0),因为它现在与 GND 短路,
  • 当按下“提高音量”时,我们应该在 A1 引脚上记录​​大约 2、5V(或关闭 512),因为现在电流流过分压器;
  • 信号:
  • 当没有按下任何按钮时(A1 上的大约 1024 值),我们应该将 GPIO 0 和 GPIO 1 都设置为高电平并保持这种状态(或低电平 - 在循环的哪个部分“冻结”并不重要" 只要它不改变);
  • 当按下“提高音量”时(A1 上的大约 512 值),我们应该发送一个循环:GPIO 0 低电平“一段时间”(将 vol A 连接到 GND),然后高电平并立即将 GPIO 1 低电平“一段时间”(将 vol B 连接到 GND),然后立即在“一段时间”内都处于高电平(不连接到 GND),然后重复;
  • “降低音量”应该和上面一样工作,只是 GPIO 0 LOW 和 GPIO 1 LOW 部分颠倒了;
  • 上述周期中的“一些时间”应该通过实验确定(我最终确定为 80 毫秒,所以 1 个完整周期需要 240 毫秒,但您可以自由调整)。

这应该可以解决问题并允许我们控制音量。

第 10 步:终极电路板设计
第一:蓝牙模块。解释 BT 模块的操作超出了本说明的范围,但它已经在许多很棒的教程中进行了介绍并且非常简单。基本上,我们必须通过用作 UART(串行)连接的 2 个引脚使用 SoftwareSerial Arduino 库(可以将任何 GPIO 引脚设置为串行)来连接它。然后我们必须从模块接收信号(ASCII 字符/字节),并根据我们接收到的字符/字节,使用上一步中描述的原则增加或减少音量。

不过,使用 BT 模块还有一个障碍需要克服。它可以由我们的 5V 线供电,但它的信号线是为 3、3V 逻辑设计的。有些人在 5V 下使用它,但不推荐这样做,从长远来看可能会损坏它。那么我们该怎么办?我们可以使用逻辑电平转换器,但对于我们的简单案例来说,它会非常笨重并且有点过度设计。事实上,我们唯一需要担心的引脚是 BT 模块上的 Rx,因为它接收来自 Attiny 的信号,并且这些信号不能超过 3、3V。Tx 很好,因为 Attiny 将注册模块设置为高的 3、3V 电平。

那么我们如何限制 HC-06 的 Rx 上的电压呢?当然使用另一个分压器。让我们在它之前接一个 1, 2k 欧姆的电阻器,在它和 GND 之间接一个 2, 2k 的电阻器,我们将得到我们想要的大约。3、3V逻辑电平。

但是如果我们想在上面添加一些 BLING 呢?闪亮的 LED 可能吗?不幸的是,我们没有未使用的 GPIO 引脚,但还有其他方法。一种方法是将一些 LED 并联连接到 A 和 B 信号,但我认为这会很无聊,所以为什么不换一种方式呢?如果我们的按钮分压器基于 LED 而不是电阻会怎样?这也将起作用,因为 LED 可以保证电压降。我们仍然需要添加一个电阻来限制 LED 上的电流,但这种分压器仍然可以工作,并且与基于电阻的分压器非常相似。

所以我们最终得到:

  • 将蓝牙模块连接到 GPIO 3 和 4 以进行串行通信,并连接到 5V 和 GND 以获取电源;
  • 在 HC-06 Rx 引脚上添加 2 个电阻器作为分压器,因此它接收正确的电压(大约 3、3V 而不是我们电路的正常 5V);
  • 用 LED 重新制作按钮分压器以增加BLING !(1 个电阻限制电流 + 2 个 LED 作为分压器 + 1 个 100k 欧姆电阻作为没有按下按钮的情况的上拉 - 由于 LED 的性质,这是必要的 - 没有它,5V A1 状态可能不稳定)。

第 11 步:准备立体声侧的连接
为了能够测试我们的解决方案,我们必须能够将我们的原型和最终装置连接到立体声系统。为此,我使用了 4 根公对公杜邦/跳线。我将其中的 3 个焊接到操作 PCB 上用于编码器(A、B、GND)的适当针孔,将第 4 个焊接到面板 PCB 上的 5V 电源线。我通过查看服务手册(附在前面的步骤中)中的一些示意图并使用万用表上的连续性模式确定它的连接位置来识别 5V 线。我试图选择一个方便的位置,靠近其余的电线和前面板上的音量旋钮开口。

第 12 步:对 Attiny 进行编程
要对 Attiny 进行编程,需要一个 AVR 编程器或一个可用作编程器的 Arduino 板(例如 Arduino Uno)。还需要安装了 Attiny 核心/库的 Arduino 软件/IDE。

  • 安装 Arduino IDE
  • 安装 Attiny 核心
  • 将“Arduino as ISP”草图上传到 Arduino (将用作 Attiny 的程序员)-草图可在“示例”中找到;
  • 设置 Attiny 核心的设置(我按照所附图片进行设置,Attiny 85,无引导加载程序,Arduino 作为 ISP );
  • 将 Attiny 连接到 Arduino,
  • 加载我的 Arduino 草图(附在下面)并使用 Arduino IDE 中的“上传”功能将其上传到 Attiny(并根据需要进行修改)。

第 13 步:测试解决方案 - 关于原型设计的说明
在这一点上,我们可能应该为我们的装置制作一个原型,看看它是否有效。对于最初的原型设计,我使用了一个普通的 Arduino Uno(为了方便)和一个面包板,我把原理图中的所有部件和连接都放在上面。我需要对代码进行的唯一更改是更改引脚编号,如下所示:

我还初始化了一个串行连接并使用 Arduino 串行监视器来调试代码的各个部分。但请记住,当您在音量增大/减小例程中添加Serial.print()命令时,您可能会影响信号的时序,从而影响音量按钮的体验.

在附带的图片中,您可以看到一些连接到立体声音响的原型(都带有 Arduino Uno 和 Attiny)。

第 14 步:将立体声重新组装在一起
当您的原型工作到您确定所有 4 根电线都正确连接到立体声系统时(您有 5V、GND 并且可以改变音量),您可以重新组装系统并使电线悬垂在音量之外前面板上的旋钮孔。这将是其余步骤所需的全部内容。

要重新组装系统,只需颠倒之前的步骤即可。将面板 PCB 放回原位,记住要轻柔并将刚性连接器重新连接到操作 PCB。通过将所有带状电缆推入适当的连接器来重新连接所有带状电缆,并记住连接器上的锁定机制,用于通向主 PCB 的黑色带状电缆。还要记住 PCB 和外壳上的所有螺钉。

如果您对此项目有任何想法、意见或问题,请在下方留言。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论