西南交通大学 2026 年短学期 组号 12
| 姓名 | 班级 | 学号 | 完成的主要内容 |
|---|---|---|---|
| ___ | ___ | ___ | 硬件电路设计、原理图/PCB 绘制与打样 |
| ___ | ___ | ___ | CH582F 固件开发(BLE/PWM/编码器/按键) |
| ___ | ___ | ___ | 手机 App、系统联调与测试、报告撰写 |
本课程设计以"降压型蓝牙调光台灯"为课题,目的是综合运用模拟电子、数字电子、单片机与电源变换的知识,完成一个从电源变换、恒流驱动、PWM 调光到蓝牙人机交互的完整嵌入式硬件系统。通过本设计,掌握以下能力:开关电源(同步降压 DC-DC)的选型与恒流化改造;LED 的恒流驱动与调光原理;低功耗蓝牙(BLE 5.0)主从通信与自定义 GATT 服务的实现;旋转编码器正交解码、按键消抖、软件定时等单片机常用外设编程;以及原理图/PCB 的工程化绘制、打样、焊接与实测调试的完整工程流程。
课题的基本与提高要求整理如下表。本设计以基本要求为主,并实现了若干提高项。
| 项目 | 要求 | 本设计实现 |
|---|---|---|
| 供电 | USB-C 接口 5V | USB-C 6P 电源座 + 2×5.1kΩ CC 下拉取 5V |
| 负载 | 8 并白光 LED,总额定 1000mA | TLV62569 恒流约 1A(每颗约 125mA) |
| 调光 | 按键、旋钮 0~100%,手机 App 也可调 | PWM 调 EN 占空比;编码器旋钮调光;蓝牙 App 调光(三路统一) |
| 开关 | 按键、旋钮、App 开关 | 按键/编码器按下/App 命令均可开关 |
| 延时关机 | 一键延时,时间可设 | MCU 软件定时器实现 |
| 测试点 | 输入/输出电压、LED 电流可测 | 预留 Vin/Vout/采样电阻/3.3V/GND 测试焊盘 TP |
| MCU 安装 | 核心板以排针/排座安装 | CH582F 核心板作元件,母排座插装 |
| PCB | 2 层 FR4,边长≤10cm,丝印标课题/教师/学号,禁黄黑阻焊 | 立创 EDA 绘制,蓝色阻焊,丝印齐全 |
主控芯片。选用沁恒 CH582F。它是一款 RISC-V 内核、集成 BLE 5.0 射频的低功耗蓝牙 MCU,自带定时器 PWM、GPIO 中断、ADC、UART 等外设,官方 SDK(openwch/ch583)提供现成的 BLE Peripheral 例程与 SimpleProfile 自定义服务,非常适合"单芯片同时做蓝牙从机与灯控"的场合,省去了外挂蓝牙模块,成本与体积都占优。设计中把 CH582F 做成核心板(自带晶振、下载电路),以母排座插到主板上,既满足"核心板以排座安装"的要求,也便于烧录调试。
电源与恒流。负载是 8 并白光 LED、总电流约 1A,输入 5V、LED 正向压降约 3V,属于降压场合,故选德州仪器 TLV62569 同步降压 DC-DC(2A 额定、输入 2.5~5.5V、FB 基准 0.6V、开关频率 1.5MHz、SOT-23 封装易焊)。LED 的 V-I 特性呈指数关系,微小的电压变化会引起电流剧烈变化,必须恒流驱动。TLV62569 本身是可调输出的稳压器,本设计把它改造成恒流源:在 LED 回流路径低边串采样电阻,用运放(LMV321,增益约 6)把采样电压放大后送到芯片 FB 引脚,芯片将 FB 稳到 0.6V,从而把 LED 电流锁定在设定值(详见 3.1)。
调光方案的比较与选择。调光有三条技术路线,各有取舍:
| 方案 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| ① PWM 打 EN(本设计采用) | MCU 用 PWM 直接控制 TLV62569 使能脚 EN,通断整个 DC-DC,占空比=平均亮度 | 不加任何功率器件、电路最简、成本最低;0% 占空比即彻底关灯 | TLV62569 的 EN 有约 800µs 软启动,PWM 频率必须低(本设计 200Hz),低亮度段线性度稍差、可能轻微频闪 |
| ② PWM 打低边 MOSFET | DC-DC 保持恒流,PWM 驱动串在 LED 回路的 N-MOSFET 通断 | 可用较高频率(约 1kHz),闪烁不可见 | 需增加 MOSFET;恒流下 MOSFET 关断相输出电容被顶高,导通瞬间有电流尖峰,需实测处理 |
| ③ 模拟(线性)调光 | 连续调节 LED 电流(改变 FB 注入/基准) | 无频闪、无 EMI | 需电流采样放大器 + DAC,电路复杂,属提高项 |
综合"电路简单、成本低、易焊接调通、能拿基本分"的目标,本设计基本功能采用方案①(PWM 直接调 EN);同时在报告结论中给出方案②③的对比与改进思路(见第五章),作为提高与答辩讨论内容。
人机交互。本地用旋转编码器(EC11)连续调光、按下开关灯,两个轻触按键分别做电源开关与一键延时关机;远程用手机蓝牙 App 调光、开关、并实时回显当前亮度。三种输入源最终都汇聚到同一个"设置亮度"函数,保证本地与手机操作互不冲突、状态一致。
系统框图如图 2-1。5V 由 USB-C 输入,一路进 TLV62569 恒流驱动 8 并 LED,另一路经核心板板载 LDO 得到 3.3V 供 CH582F。CH582F 一方面用 PWM 控制 EN 实现调光/开关,另一方面接收编码器、按键与蓝牙 App 的指令,并在亮度变化时通过 BLE 通知(notify)把最新亮度回传给手机,实现双向同步。
| 模块 | 功能 | 关键器件/信号 |
|---|---|---|
| 电源输入 | USB-C 取 5V,去耦、可选防反接/TVS | USB-C 6P 座、5.1kΩ×2、10µF/100nF |
| 3.3V 电源 | 给 MCU 提供 3.3V(LED 的 1A 不走此路) | 核心板板载 LDO(或外部 LDO 方案 A) |
| 恒流驱动 | 把降压 DC-DC 做成 1A 恒流源 | TLV62569、电感、Rcs、LMV321 |
| PWM 调光 | 调 EN 占空比改变平均亮度 | CH582F TMR3→PB22→EN |
| 主控与蓝牙 | 逻辑控制、BLE 从机通信 | CH582F(RISC-V+BLE5.0) |
| 本地输入 | 旋钮调光、按键开关/延时 | EC11 编码器、轻触按键×2 |
| 手机 App | 远程调光/开关/状态同步 | 安卓网页蓝牙(Web Bluetooth) |
| 器件 | 型号 | 关键参数 | 作用 |
|---|---|---|---|
| MCU | CH582F | RISC-V 内核,BLE 5.0,QFN-28,3.3V,20 路 GPIO,带 TMR/PWM/ADC/UART | 主控 + 蓝牙从机 |
| 降压 DC-DC | TLV62569 | 2A,Vin 2.5~5.5V,FB 0.6V±2%,1.5MHz,SOT-23 | 恒流驱动 LED |
| 运放 | LMV321 | 单电源、轨到轨输入,SOT-23-5 | 低边电流采样放大(增益约 6) |
| 功率电感 | 一体成型 2.2µH | 饱和电流≥2A,低 DCR | 降压储能 |
| 采样电阻 | Rcs | 0.1Ω 1%(1W) | 电流采样兼测试点 |
| 旋转编码器 | EC11 | 带按键,20 脉冲/圈 | 本地调光/开关 |
| USB-C 座 | 6P 电源型 | 5V/最大 3A | 供电接口 |
USB-C 采用 6 引脚电源型座(只取电、易焊)。要让支持 PD 的充电器/电脑口输出 5V,必须在两根 CC 线上各接 5.1kΩ 下拉到 GND,作为取电(Rd)标识;否则源端检测不到负载不供电。VBUS(A4/B9)并到 +5V,GND(A1/B12)并到地。输入端并 10µF + 100nF 去耦,可选串 SS34 防反接、并 SMAJ5.0A TVS 防浪涌以提高可靠性。
3.3V 由 CH582F 核心板板载 LDO(如 ME6216A33)从 5V 产生,仅供 MCU(数十 mA)。LED 的 1A 大电流绝不经过 LDO,只走 TLV62569 一路,避免烧毁 LDO。(若核心板无板载 LDO,则在主板加外部 LDO:ME6211C33/RT9013-3.3,5V→3.3V。)
恒流原理:在 8 并 LED 的回流路径低边串一个采样电阻 Rcs 到 GND,Rcs 上的压降正比于 LED 总电流。因该压降较小(毫伏级),用 LMV321 运放放大约 6 倍后送入 TLV62569 的 FB 引脚。芯片内部会把 FB 稳到基准 0.6V,即把"放大后的采样电压"稳到 0.6V,从而锁定 LED 电流:
参数选取说明(本设计的一个关键改进):初版手绘原理图曾取 Rcs=68mΩ,代入得 I_LED = 0.6/(6×0.068) ≈ 1.47A,超过 1000mA 额定,会使每颗 LED 电流偏大、发热与寿命变差。故本设计将采样电阻改为 0.1Ω,使额定电流精确落在 1A。若日后想改变最大电流,只需按 I=0.6/(A×Rcs) 重算 Rcs,或调整运放增益。
电压预算:输入 5V,LED Vf≈3.0V + 采样及运放头部裕量 < 5V,降压可行、余量充足。TLV62569 外围按 TI 典型应用:输入电容 4.7µF/10V X7R + 100nF、电感 2.2µH/≥2A、输出电容取小(4.7µF,利于 PWM 调 EN 时的暂态恢复)。
调光由 CH582F 的定时器 TMR3 从 PB22 输出 PWM,直接驱动 TLV62569 的 EN 引脚。EN 为高(PWM 高电平)时 DC-DC 工作、LED 点亮;EN 为低时关断、LED 熄灭。一个 PWM 周期内 LED 的平均电流 ∝ 占空比,故占空比 = 平均亮度。
频率选择的要点与难点:TLV62569 的 EN 存在约 800µs 的软启动时间,若 PWM 频率过高,EN 每次拉高后 DC-DC 还没建立稳定输出就又被拉低,亮度无法上去且非线性严重。故必须把频率压到 200Hz 附近(周期 5ms ≫ 800µs),保证每个导通相里输出能充分建立。代价是低亮度段可能有轻微频闪与非线性——这是本方案的固有折中(改进见第五章方案②)。
CH582F 核心板通过母排座插到主板。PB22 经 100Ω 串阻到 EN;编码器 A/B/按下接 PB10/PB11/PB12(各 10kΩ 上拉,A 相下降沿触发中断解码);按键 1(开关)、按键 2(延时)接 PB14/PB15(10kΩ 上拉、按键另一端接 GND、并 100nF 硬件消抖);PB7/PB4 引出调试串口排针。蓝牙射频由核心板自带,无需外围。所有 GPIO 均 3.3V 逻辑,严禁给任何引脚灌 5V。为满足测试要求,预留测试焊盘:TP1=+5V、TP2=Vout、TP3=Rcs(测电流)、TP4=3.3V、TP5=GND。
固件基于官方 openwch/ch583 的 BLE Peripheral 例程,用 MounRiver Studio 编译、WCHISPTool 经 USB 下载。软件分三层:底层驱动(PWM 初始化、GPIO/中断配置)、灯控逻辑(亮度设置、开关、延时关机、编码器解码、按键消抖)、蓝牙服务(复用 SimpleProfile 自定义 GATT 服务)。三种输入(编码器/按键/App)都调用同一个 Lamp_SetLevel(),亮度变化后统一通过 BLE notify 回传手机,保证一致性。BLE 自定义服务定义如下表:
| 特征 | UUID | 属性 | 含义 |
|---|---|---|---|
| 服务 | 0xFFF0 | — | 台灯服务 |
| CHAR1 | 0xFFF1 | 读+写 | 亮度 0~255(App 写=调光,读=当前值) |
| CHAR3 | 0xFFF3 | 写 | 开关(1=开,0=关) |
| CHAR4 | 0xFFF4 | 通知 | 亮度/开关变化时 notify 给 App |
(1)主流程与初始化(图 3-1)。上电后初始化时钟、PWM(TMR3→PB22,200Hz,初始占空 0=关灯)、GPIO 与中断(编码器、按键)、蓝牙协议栈与自定义服务,随后进入 tmos 事件循环。按键消抖与延时关机计时放在 10ms 周期任务里轮询。
(2)亮度设置 Lamp_SetLevel(图 3-2)。这是三路输入的汇聚点。入参 level(0~255):先限幅到 0~255;为 0 时关断 PWM(EN 拉低、灯灭);否则按 duty=周期×level/255 设置占空比、使能输出,并记住"关灯前亮度"用于开灯恢复;最后触发 BLE notify 上报最新亮度。
(3)编码器正交解码中断(图 3-3)。A 相下降沿触发中断,此刻读 B 相电平判方向:B=1 顺时针(增亮),B=0 逆时针(减亮),每格 ±13(0~255 满量程约 20 格),限幅后调用 Lamp_SetLevel。编码器按下则开关切换。
(4)按键消抖与延时关机(图 3-4,10ms 周期任务)。按键低电平连续若干次判为有效按下(消抖):按键 1 切换开关,按键 2 启动一键延时关机(例如 30 分钟,装入以 10ms 为单位的倒计时)。倒计时递减到 0 时自动关灯。
(5)BLE 读写回调。手机写 CHAR1(0xFFF1) → 调 Lamp_SetLevel(收到的字节 0~255) 调光;写 CHAR3(0xFFF3) → 非零开灯、零关灯;亮度变化后把最新值写回 CHAR1 并经 CHAR4 notify,App 界面即时同步。设计思路是"BLE 只负责收发数值、真正的动作全部委托给 Lamp_SetLevel",从而本地与远程逻辑复用、不重复。
下表为测试记录模板,请填入你们实测的数据(表中数值为设计预期/示例值,供参考)。
| 测试项 | 条件 | 预期值 | 实测值 |
|---|---|---|---|
| 输入电压 Vin | USB-C 5V | ≈5.0 V | ___ |
| MCU 电源 3.3V | — | 3.25~3.35 V | ___ |
| 满亮度 LED 电流 | 亮度 255(100%) | ≈1.0 A(U_Rcs≈0.10V) | ___ |
| 输出电压 Vout | 点亮时 | ≈3.0~3.6 V | ___ |
| PWM 频率 | — | ≈200 Hz | ___ |
| 亮度设定 | PWM 占空比 | LED 电流(预期) | 主观亮度 | 实测电流 |
|---|---|---|---|---|
| 0(关) | 0% | 0 A | 灭 | ___ |
| 64(25%) | ≈25% | ≈0.25 A | 暗 | ___ |
| 128(50%) | ≈50% | ≈0.50 A | 中 | ___ |
| 191(75%) | ≈75% | ≈0.75 A | 较亮 | ___ |
| 255(100%) | 100% | ≈1.0 A | 最亮 | ___ |
| 功能 | 测试方法 | 结果(预期) | 实测 |
|---|---|---|---|
| 编码器调光 | 顺/逆时针旋转 | 亮度平滑增/减 | ___ |
| 编码器/按键开关 | 按下 | 开↔关切换 | ___ |
| 一键延时关机 | 按键 2 | 设定时间后自动关 | ___ |
| 蓝牙调光 | App 滑条/输入 | LED 随动、App 同步回显 | ___ |
| 蓝牙搜索/连接 | App 连接 | 能搜到并连接 | ___ |
特点:①单芯片(CH582F)同时实现蓝牙从机与灯控,无需外挂蓝牙模块,成本低、体积小;②把通用降压 DC-DC 改造成恒流源,恒流精度由采样电阻与运放增益决定,参数可算可调;③PWM 直接调 EN,调光电路极简、零额外功率器件、0% 即彻底关断;④本地(编码器/按键)与远程(蓝牙 App)三路输入统一到同一亮度接口,状态经 notify 双向同步;⑤具备一键延时关机、亮度记忆(开灯恢复)等实用功能,并预留了完整测试点。
存在的问题:①受 TLV62569 的 EN 软启动(约 800µs)限制,PWM 频率只能取 200Hz,低亮度段线性度稍差、可能有轻微频闪;②恒流精度依赖 Rcs 与运放增益的一致性,需实测微调(初版 68mΩ 会导致电流达 1.47A 超额,已改为 0.1Ω 修正到 1A);③满流时采样电阻与走线有一定发热,需铺铜散热;④网页蓝牙依赖安卓且要求开启定位,跨平台性受限。
本次课程设计从一个课题要求出发,完整走了"方案论证—电路设计与参数计算—原理图/PCB 绘制—打样焊接—固件与 App 开发—联调测试"的工程流程,收获很大。
在硬件上,最深的体会是"LED 必须恒流"这一原理,以及如何把一颗通用的可调降压芯片通过采样电阻 + 运放送 FB 改造成恒流源——这让我们真正理解了 DC-DC 的反馈机制。参数计算环节(I=0.6/(A·Rcs))也让我们明白纸面公式与实物的差距:初版 68mΩ 会让电流超额到 1.47A,通过重新计算改为 0.1Ω 才回到 1A,"算完还要核、核完还要测"。
在软件上,我们学习了 CH582F 的定时器 PWM、GPIO 中断(编码器正交解码)、按键消抖、软件定时(延时关机),并第一次实现了 BLE 自定义 GATT 服务与手机的双向通信。把编码器、按键、蓝牙三种输入统一到一个亮度接口、再用 notify 回传同步,是一次很好的"接口抽象"与"逻辑复用"的训练。调光频率受 EN 软启动限制只能取 200Hz 这一折中,也让我们体会到软硬件是相互约束的、方案选择要综合权衡。
此外,PCB 布局(降压回路走最短最粗的环路、大电流敷铜、FB 远离开关节点)、丝印规范、打样下单等工程细节,也是课堂之外的宝贵经验。整个过程锻炼了我们查数据手册、分工协作、排查问题和实测验证的综合能力,为今后的电子系统设计打下了基础。
下为灯控核心 lamp.c/lamp.h(PWM 调光 + 编码器 + 按键 + 延时关机)与 BLE 回调关键片段。打印时用小五/六号字、9~10 磅固定行距,短行多的页可分两栏。
/* ===== lamp.h ===== */
#define BRIGHT_MAX 255 // 亮度 0~255
#define BRIGHT_STEP 13 // 编码器每格±13(0~255满量程约20格)
void Lamp_Init(void);
void Lamp_SetLevel(uint8_t level); // 设亮度0~255(0=关)
void Lamp_On(void); void Lamp_Off(void); void Lamp_Toggle(void);
void Lamp_StartDelayOff(uint16_t sec);
void Lamp_Poll(void); // 10ms周期:消抖/延时计时
/* ===== lamp.c 关键片段 ===== */
#define PWM_CYCLE 300000UL // Fsys60MHz / 200Hz = 300000
static uint8_t s_level=0, s_lastLevel=128;
void PWM_Init(void){ // TMR3→PB22, 高电平有效
GPIOB_ModeCfg(GPIO_Pin_22, GPIO_ModeOut_PP_5mA);
TMR3_PWMInit(High_Level, PWM_Times_1);
TMR3_PWMCycleCfg(PWM_CYCLE); // 周期→200Hz
TMR3_PWMActDataWidth(0); TMR3_Disable(); // 初始关灯
}
void Lamp_SetLevel(uint8_t level){ // 三路输入的汇聚点
if(level>BRIGHT_MAX) level=BRIGHT_MAX;
s_level=level;
if(level==0){ TMR3_PWMActDataWidth(0); TMR3_Disable(); } // 0=关灯
else{
uint32_t duty=(uint32_t)PWM_CYCLE*level/BRIGHT_MAX; // 占空比=亮度
TMR3_PWMActDataWidth(duty); TMR3_Enable();
s_lastLevel=level; // 记开灯恢复值
}
// 亮度变化→ BLE notify(CHAR4) 上报手机(见peripheral.c)
}
void Lamp_On(void){ Lamp_SetLevel(s_lastLevel?s_lastLevel:128); }
void Lamp_Off(void){ Lamp_SetLevel(0); }
void Lamp_Toggle(void){ if(s_level) Lamp_Off(); else Lamp_On(); }
/* 编码器正交解码中断: A相下降沿读B相判方向 */
void GPIOB_IRQHandler(void){
uint16_t f=GPIOB_ReadITFlagPort();
if(f&ENC_A_PIN){
uint8_t b=GPIOB_ReadPortPin(ENC_B_PIN)?1:0;
int16_t lv=s_level+(b?BRIGHT_STEP:-BRIGHT_STEP); // B=1增,B=0减
if(lv<0)lv=0; if(lv>BRIGHT_MAX)lv=BRIGHT_MAX;
Lamp_SetLevel((uint8_t)lv);
}
if(f&ENC_K_PIN) Lamp_Toggle(); // 按下=开关
GPIOB_ClearITFlagBit(f);
}
/* ===== BLE 写回调(peripheral.c simpleProfileChangeCB) ===== */
switch(paramID){
case SIMPLEPROFILE_CHAR1: Lamp_SetLevel(pValue[0]); // App写亮度0~255
break;
case SIMPLEPROFILE_CHAR3: if(pValue[0]) Lamp_On(); else Lamp_Off(); // 开关
break;
}
// 变化后回写CHAR1并notify(CHAR4),让App同步
(完整固件与手机 App 源码见项目工程文件。)
器件参数已核对 TI TLV62569 数据手册(SLVSDG1C)与 WCH CH582/583 数据手册;原理图/PCB 请在立创 EDA 照此绘制并实测调试。本报告正文供复制到学校 Word 模板套格式后打印。