# 音箱控制面板功能说明 ## LED 功能分配 | 索引 | 引脚 | 类型 | 功能 | 说明 | |:----:|:----:|:----:|:----|:----| | 0 | PA1 | 反并联 | 低音音量段1(SW1) | LED1 | | 1 | PB7 | 反并联 | 低音音量段2(SW1) | LED2 | | 2 | PB6 | 反并联 | 低音音量段3(SW1) | LED3 | | 3 | PB5 | 反并联 | 低音音量段4(SW1) | LED4 | | 4 | PA0 | 反并联 | 低音音量段5(SW1) | LED5 | | 5 | PB2 | 反并联 | 主音量段6(SW2) | LED6 | | 6 | PB4 | 反并联 | 主音量段7(SW2) | LED7 | | 7 | PB3 | 反并联 | 主音量段8(SW2) | LED8 | | 8 | PA12 | 反并联 | 主音量段9(SW2) | LED9 | | 9 | PB1 | 反并联 | 主音量段10(SW2) | LED10 | | 10 | PA4 | 高电平点亮 | 输入源指示灯 | LED11 (AUX=常亮, BT=灭, BT断开=1s闪) | | 11 | PA8 | 反并联 | 电量灯1(正向)/灯2(反向) | LED12 | | 12 | PA11 | 反并联 | 电量灯3(正向)/灯4(反向) | LED13 | --- ## 电池电量 LED 状态表 ### 控制原理 每个物理引脚控制两颗反并联LED,通过时间槽(1ms周期)分时复用实现独立控制: - **槽A(前0.5ms)**: ODR=1 → 正向灯亮/反向灯灭 - **槽B(后0.5ms)**: 由 `g_batSlotState` 控制,要亮则 ODR=0,不亮则浮空输入(高阻态) ### 命名规则 | 代码/文档名 | 硬件 | 说明 | |:----------:|:----|:-----| | 灯1 | LED12正向(PA8=高) | 第1颗电量灯 | | 灯2 | LED12反向(PA8=低) | 第2颗电量灯 | | 灯3 | LED13正向(PA11=高) | 第3颗电量灯 | | 灯4 | LED13反向(PA11=低) | 第4颗电量灯 | `g_batSlotState[0]`=灯1, `[1]`=灯2, `[2]`=灯3, `[3]`=灯4 ### 段位划分 | 电量范围 | level | 亮的灯 | |:--------:|:-----:|:-------:| | 0% | 0 | 全灭 | | 1~24% | 1 | 灯1 | | 25~49% | 2 | 灯1+灯2 | | 50~74% | 3 | 灯1+灯2+灯3 | | 75~100% | 4 | 全亮 | ### 状态表 | 状态 | 灯1(LED12正) | 灯2(LED12反) | 灯3(LED13正) | 灯4(LED13反) | |:----|:-----------:|:-----------:|:-----------:|:-----------:| | 0% | ·灭 | ·灭 | ·灭 | ·灭 | | 1~24% 不充电 | ★常亮 | ·灭 | ·灭 | ·灭 | | 1~24% 充电 | ✦1s闪 | ·灭 | ·灭 | ·灭 | | 25~49% 不充电 | ★常亮 | ★常亮 | ·灭 | ·灭 | | 25~49% 充电 | ★常亮 | ✦1s闪 | ·灭 | ·灭 | | 50~74% 不充电 | ★常亮 | ★常亮 | ★常亮 | ·灭 | | 50~74% 充电 | ★常亮 | ★常亮 | ✦1s闪 | ·灭 | | ≥75% 不充电 | ★常亮 | ★常亮 | ★常亮 | ★常亮 | | ≥75% 充电未满 | ★常亮 | ★常亮 | ★常亮 | ✦1s闪 | | **充满(100%)** | **★常亮** | **★常亮** | **★常亮** | **★常亮** | | 充电异常 | ✦1s闪 | ·灭 | ·灭 | ·灭 | > **注**: 充满标志(`g_chgFull==1`)时不论是否在充电,4颗灯全亮常亮。 ### 闪烁周期 - 充电闪烁: **1s** (500个1ms周期亮 + 500个1ms周期灭) - 充电异常闪烁: **1s** --- ## 编码器功能 | 控件 | 引脚 | 功能 | 说明 | |:----|:----:|:----|:----| | SW_KEY | PF3 | 音源切换 | BT↔AUX循环,按下触发,松开生效 | | SW1编码器A | PA5 | 低音音量- | ITEM 0x0D | | SW1编码器B | PA6 | 低音音量+ | 旋转方向 | | SW2编码器A | PB0 | 主音量LR- | ITEM 0x0C | | SW2编码器B | PA7 | 主音量LR+ | 旋转方向 | | SW1_KEY | PB8 | 清除回连 | 长按5s触发,ITEM 0x05 | | SW2_KEY | PA15 | 快速静音 | PGA_MUTE,旋转编码器恢复 | ### 变速调节 编码器根据旋转速度自动调整步进值: | 速度 | 触发间隔 | 脉冲阈值 | 每次调节 | 适用场景 | |:----:|:--------:|:--------:|:--------:|:---------| | 慢 | >800ms | 4脉冲 | **1%** | 精细调节 | | 中 | 300~800ms | 2脉冲 | **2%** | 正常调节 | | 快 | <300ms | 1脉冲 | **3%** | 快速跨越 | ### 音量LED显示 音量范围 0~100% 映射为 10 段 LED 显示(每段10%): - LED1~LED5: 低音音量(倒序从LED5→LED1逐级点亮) - LED6~LED10: 主音量LR(倒序从LED10→LED6逐级点亮) - 每颗灯两级(正向+反向),10段=5颗反并联LED --- ## 通讯协议 (UART2, 115200 8N1) ### 帧格式 ``` AA CMD ITEM VALUE CRC (5字节固定长度) CRC = CMD ^ ITEM ^ VALUE ``` ### 命令类型 | CMD | 方向 | 说明 | |:---:|:----:|:----| | 0x01 | 面板→主板 | 读查询 | | 0x02 | 面板→主板 | 写设置 | | 0x81 | 主板→面板 | 上报 | | AA | 主板→面板 | 写成功ACK(单字节) | ### 写操作 | 用途 | 发送 | 成功回复 | |:----|:----|:---------| | 主音量 | `AA 02 0C PCT CRC` | `AA` | | 低音音量 | `AA 02 0D PCT CRC` | `AA` | | 切换蓝牙 | `AA 02 01 01 02` | `AA` | | 切换AUX | `AA 02 01 02 01` | `AA` | | PGA解除静音 | `AA 02 07 01 04` | `AA` | | PGA静音 | `AA 02 07 02 07` | `AA` | | 清除回连 | `AA 02 05 XX CRC` | `AA` | ### 变化上报 (5字节简写) | 触发 | 帧 | |:----|:----| | 输入源/蓝牙/音频变化 | `AA 81 ITEM VALUE CRC` | | 电量变化 | `AA 81 09 PCT CRC` | | 充电状态变化 | `AA 81 0B STATUS CRC` | | 主音量变化 | `AA 81 0C PCT CRC` | | 低音变化 | `AA 81 0D PCT CRC` | ### 开机/查询全部上报 (24字节) ``` AA 81 0B 01 [source] — 输入源 02 [bt_conn] — 蓝牙连接 03 [bt_audio] — 蓝牙音频 04 [dac_mute] — DAC静音 05 [reconn] — 回连状态 0C [vol_lr] — 主音量% 0D [vol_bass] — 低音音量% 07 [mute_sw] — 静音开关 09 [battery] — 电量% 0A [chg_full] — 充满状态 0B [chg_ing] — 充电中 [CRC] ``` ### 数据项定义 | ITEM | 名称 | 权限 | 值范围 | |:----:|:----|:----:|:-------| | 0x00 | 查询全部 | 只读 | — | | 0x01 | 输入源选择 | 读写 | 01=BT, 02=AUX | | 0x02 | 蓝牙连接状态 | 只读 | 01=已连接, 02=已断开 | | 0x03 | 蓝牙音频状态 | 只读 | 01=播放中, 02=已停止 | | 0x04 | DAC静音 | 读写 | 01=解除, 02=静音 | | 0x05 | 清除回连 | 只写 | 任意值 | | 0x07 | PGA静音开关 | 读写 | 01=解除, 02=静音 | | 0x09 | 电池电量 | 只读 | 0~100 | | 0x0A | 充电充满 | 只读 | 0=未充满, 1=已充满 | | 0x0B | 充电中 | 只读 | 0=未充电, 1=充电中, 0xFE=异常 | | 0x0C | 主音量LR | 读写 | 0~100 | | 0x0D | 低音音量 | 读写 | 0~100 | --- ## 上电流程 1. **全亮(3秒)**: 所有LED全亮,同时每秒发一次查询全部 2. **等待数据**: 收到主板上报后立即更新各LED显示 3. **进入主循环**: 正常处理编码器/按键/协议通信 4. **空闲查询**: 30秒无操作自动查询一次保持同步