使用说明(打印前删除本框):本文是报告正文内容,请复制到学校 Word 封面模板里,按要求套格式(正文小四号宋体、英文数字 Times New Roman、单倍行距、段前0.5行、首行缩进2字符;图题在图下、表题在表上、题五号字;代码小五/六号字、9~10磅固定行距)。封面的课题/指导老师/组号/姓名学号、以及实物照片、原理图与PCB截图需你们自己填入(占位处已标出)。报告控制在 30 页内。

蓝牙调光台灯(降压型)
电子技术课程设计报告

西南交通大学 2026 年短学期 组号 12

【封面/扉页需填写的信息(据学校模板填入 Word)】

目录

一、绪论 1.1 设计目的 1.2 设计要求
二、方案设计 2.1 总体设计(方案论证、系统框图、工作原理) 2.2 各子系统模块 2.3 主要器件
三、详细设计 3.1 各单元电路设计与参数计算 3.2 主要程序设计(流程图与思路)
四、测试及使用说明书 4.1 测试步骤(方法/要点/难点) 4.2 测试数据及结果 4.3 产品使用说明书
五、结论 5.1 方案特点及存在问题 5.2 功能扩展方案(理论讨论)
六、实习总结(学习心得)
附件 1 电路原理图 2 PCB 版图 3 实物照片 4 程序代码

一、绪论

1.1 设计目的

本课程设计以"降压型蓝牙调光台灯"为课题,目的是综合运用模拟电子、数字电子、单片机与电源变换的知识,完成一个从电源变换、恒流驱动、PWM 调光到蓝牙人机交互的完整嵌入式硬件系统。通过本设计,掌握以下能力:开关电源(同步降压 DC-DC)的选型与恒流化改造;LED 的恒流驱动与调光原理;低功耗蓝牙(BLE 5.0)主从通信与自定义 GATT 服务的实现;旋转编码器正交解码、按键消抖、软件定时等单片机常用外设编程;以及原理图/PCB 的工程化绘制、打样、焊接与实测调试的完整工程流程。

1.2 设计要求

课题的基本与提高要求整理如下表。本设计以基本要求为主,并实现了若干提高项。

项目要求本设计实现
供电USB-C 接口 5VUSB-C 6P 电源座 + 2×5.1kΩ CC 下拉取 5V
负载8 并白光 LED,总额定 1000mATLV62569 恒流约 1A(每颗约 125mA)
调光按键、旋钮 0~100%,手机 App 也可调PWM 调 EN 占空比;编码器旋钮调光;蓝牙 App 调光(三路统一)
开关按键、旋钮、App 开关按键/编码器按下/App 命令均可开关
延时关机一键延时,时间可设MCU 软件定时器实现
测试点输入/输出电压、LED 电流可测预留 Vin/Vout/采样电阻/3.3V/GND 测试焊盘 TP
MCU 安装核心板以排针/排座安装CH582F 核心板作元件,母排座插装
PCB2 层 FR4,边长≤10cm,丝印标课题/教师/学号,禁黄黑阻焊立创 EDA 绘制,蓝色阻焊,丝印齐全

二、方案设计

2.1 总体设计

2.1.1 方案论证

主控芯片。选用沁恒 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 打低边 MOSFETDC-DC 保持恒流,PWM 驱动串在 LED 回路的 N-MOSFET 通断可用较高频率(约 1kHz),闪烁不可见需增加 MOSFET;恒流下 MOSFET 关断相输出电容被顶高,导通瞬间有电流尖峰,需实测处理
③ 模拟(线性)调光连续调节 LED 电流(改变 FB 注入/基准)无频闪、无 EMI需电流采样放大器 + DAC,电路复杂,属提高项

综合"电路简单、成本低、易焊接调通、能拿基本分"的目标,本设计基本功能采用方案①(PWM 直接调 EN);同时在报告结论中给出方案②③的对比与改进思路(见第五章),作为提高与答辩讨论内容。

人机交互。本地用旋转编码器(EC11)连续调光、按下开关灯,两个轻触按键分别做电源开关与一键延时关机;远程用手机蓝牙 App 调光、开关、并实时回显当前亮度。三种输入源最终都汇聚到同一个"设置亮度"函数,保证本地与手机操作互不冲突、状态一致。

2.1.2 系统原理框图与工作原理

系统框图如图 2-1。5V 由 USB-C 输入,一路进 TLV62569 恒流驱动 8 并 LED,另一路经核心板板载 LDO 得到 3.3V 供 CH582F。CH582F 一方面用 PWM 控制 EN 实现调光/开关,另一方面接收编码器、按键与蓝牙 App 的指令,并在亮度变化时通过 BLE 通知(notify)把最新亮度回传给手机,实现双向同步。

+5V (USB-C 6P座, CC各5.1k下拉) USB-C 5V ──┬──────────────► TLV62569 ──► L ──► 8并白光LED ──► Rcs(采样) ──► GND (取电) │ (恒流~1A) ▲FB │ │ ▲EN └──[LMV321 增益~6 放大]──┘ (采样→FB恒流) │ │PWM(占空比=亮度) └──► 核心板板载LDO ──► CH582F(3.3V) ──┬── PWM(PB22/TMR3,200Hz) ─► EN (5V→3.3V) │ │ │ └── 亮度控制/开关 │ │ └── 旋转编码器 A/B/按下 (PB10/11/12) │ └───── 按键1开关(PB14) 按键2延时(PB15) └──────── BLE 5.0 ⇆ 手机App(读/写亮度·开关·notify)
图 2-1 系统原理框图

2.2 各子系统模块

模块功能关键器件/信号
电源输入USB-C 取 5V,去耦、可选防反接/TVSUSB-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)

2.3 主要器件

器件型号关键参数作用
MCUCH582FRISC-V 内核,BLE 5.0,QFN-28,3.3V,20 路 GPIO,带 TMR/PWM/ADC/UART主控 + 蓝牙从机
降压 DC-DCTLV625692A,Vin 2.5~5.5V,FB 0.6V±2%,1.5MHz,SOT-23恒流驱动 LED
运放LMV321单电源、轨到轨输入,SOT-23-5低边电流采样放大(增益约 6)
功率电感一体成型 2.2µH饱和电流≥2A,低 DCR降压储能
采样电阻Rcs0.1Ω 1%(1W)电流采样兼测试点
旋转编码器EC11带按键,20 脉冲/圈本地调光/开关
USB-C 座6P 电源型5V/最大 3A供电接口

三、详细设计

3.1 各单元电路设计与参数计算

3.1.1 电源电路

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。)

3.1.2 LED 恒流驱动电路(核心)与参数计算

恒流原理:在 8 并 LED 的回流路径低边串一个采样电阻 Rcs 到 GND,Rcs 上的压降正比于 LED 总电流。因该压降较小(毫伏级),用 LMV321 运放放大约 6 倍后送入 TLV62569 的 FB 引脚。芯片内部会把 FB 稳到基准 0.6V,即把"放大后的采样电压"稳到 0.6V,从而锁定 LED 电流:

FB = 0.6V = 增益 A × (I_LED × Rcs) ⇒ I_LED = 0.6V / (A × Rcs) 取 A = 6,要 I_LED = 1A: Rcs = 0.6 / (6 × 1) = 0.1Ω 采样电阻功耗:P = I² × Rcs = 1² × 0.1 = 0.1W → 选 0.25W/1% 即可

参数选取说明(本设计的一个关键改进):初版手绘原理图曾取 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 时的暂态恢复)。

3.1.3 PWM 调光电路

调光由 CH582F 的定时器 TMR3 从 PB22 输出 PWM,直接驱动 TLV62569 的 EN 引脚。EN 为高(PWM 高电平)时 DC-DC 工作、LED 点亮;EN 为低时关断、LED 熄灭。一个 PWM 周期内 LED 的平均电流 ∝ 占空比,故占空比 = 平均亮度

系统时钟 Fsys = 60MHz;设 PWM 频率 f = 200Hz PWM 周期计数 N = Fsys / f = 60×10⁶ / 200 = 300000 亮度 level(0~255) 对应占空比计数: duty = N × level / 255 // level=255 时 duty=N(满占空比→最亮)

频率选择的要点与难点:TLV62569 的 EN 存在约 800µs 的软启动时间,若 PWM 频率过高,EN 每次拉高后 DC-DC 还没建立稳定输出就又被拉低,亮度无法上去且非线性严重。故必须把频率压到 200Hz 附近(周期 5ms ≫ 800µs),保证每个导通相里输出能充分建立。代价是低亮度段可能有轻微频闪与非线性——这是本方案的固有折中(改进见第五章方案②)。

3.1.4 主控、蓝牙与人机输入电路

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。

3.2 主要程序设计

3.2.1 软件总体结构

固件基于官方 openwch/ch583 的 BLE Peripheral 例程,用 MounRiver Studio 编译、WCHISPTool 经 USB 下载。软件分三层:底层驱动(PWM 初始化、GPIO/中断配置)、灯控逻辑(亮度设置、开关、延时关机、编码器解码、按键消抖)、蓝牙服务(复用 SimpleProfile 自定义 GATT 服务)。三种输入(编码器/按键/App)都调用同一个 Lamp_SetLevel(),亮度变化后统一通过 BLE notify 回传手机,保证一致性。BLE 自定义服务定义如下表:

特征UUID属性含义
服务0xFFF0台灯服务
CHAR10xFFF1读+写亮度 0~255(App 写=调光,读=当前值)
CHAR30xFFF3开关(1=开,0=关)
CHAR40xFFF4通知亮度/开关变化时 notify 给 App

3.2.2 主要流程图及说明

(1)主流程与初始化(图 3-1)。上电后初始化时钟、PWM(TMR3→PB22,200Hz,初始占空 0=关灯)、GPIO 与中断(编码器、按键)、蓝牙协议栈与自定义服务,随后进入 tmos 事件循环。按键消抖与延时关机计时放在 10ms 周期任务里轮询。

┌───────────┐ │ 上电/复位 │ └─────┬─────┘ ▼ 系统时钟初始化(60MHz) ▼ PWM_Init: TMR3→PB22, 周期=300000(200Hz), 占空0(关灯) ▼ GPIO/中断: 编码器PB10/11/12上拉+A相中断; 按键PB14/15上拉+中断 ▼ BLE协议栈初始化 + 注册SimpleProfile(0xFFF0服务) ▼ 开广播(设备名 Simple Peripheral), 等待手机连接 ▼ ┌────────── tmos 事件循环 ──────────┐ │ · BLE事件(连接/读写回调) │ │ · 每10ms: 按键消抖 + 延时关机计时 │ │ · 编码器/按键中断异步触发调光/开关 │ └──────────────────────────────────┘
图 3-1 主流程/初始化流程图

(2)亮度设置 Lamp_SetLevel(图 3-2)。这是三路输入的汇聚点。入参 level(0~255):先限幅到 0~255;为 0 时关断 PWM(EN 拉低、灯灭);否则按 duty=周期×level/255 设置占空比、使能输出,并记住"关灯前亮度"用于开灯恢复;最后触发 BLE notify 上报最新亮度。

Lamp_SetLevel(level): 若 level>255 → level=255 (限幅) 记录 s_level = level ┌── level==0 ? │ 是→ 占空比=0, 关断PWM(EN低), 灯灭 │ 否→ duty = 周期×level/255 │ 设置占空比, 使能PWM(EN按占空比通断) │ s_lastLevel = level (存"开灯恢复值") └────────────────────────────── 亮度已变 → BLE notify(CHAR4) 上报手机
图 3-2 亮度设置流程图

(3)编码器正交解码中断(图 3-3)。A 相下降沿触发中断,此刻读 B 相电平判方向:B=1 顺时针(增亮),B=0 逆时针(减亮),每格 ±13(0~255 满量程约 20 格),限幅后调用 Lamp_SetLevel。编码器按下则开关切换。

GPIOB中断: ┌── 是A相边沿? │ 读B相: B=1→ lv=level+13 ; B=0→ lv=level-13 │ 限幅 0~255 → Lamp_SetLevel(lv) ├── 是编码器按下? → Lamp_Toggle()(开↔关) └── 清中断标志
图 3-3 编码器解码中断流程图

(4)按键消抖与延时关机(图 3-4,10ms 周期任务)。按键低电平连续若干次判为有效按下(消抖):按键 1 切换开关,按键 2 启动一键延时关机(例如 30 分钟,装入以 10ms 为单位的倒计时)。倒计时递减到 0 时自动关灯。

Lamp_Poll() //每10ms: 读按键电平, 连续N次低=有效按下 ┌ 按键1按下 → Lamp_Toggle() ├ 按键2按下 → 延时计时 = 设定秒×100 (10ms单位) └ 若延时计时>0: 计时--; 减到0 → Lamp_Off()
图 3-4 按键消抖/延时关机流程图

(5)BLE 读写回调。手机写 CHAR1(0xFFF1) → 调 Lamp_SetLevel(收到的字节 0~255) 调光;写 CHAR3(0xFFF3) → 非零开灯、零关灯;亮度变化后把最新值写回 CHAR1 并经 CHAR4 notify,App 界面即时同步。设计思路是"BLE 只负责收发数值、真正的动作全部委托给 Lamp_SetLevel",从而本地与远程逻辑复用、不重复。

四、测试及使用说明书

4.1 测试步骤(方法、要点、难点)

  1. 电源上电测试:USB-C 接 5V,先不焊 LED 支路(或断开),万用表测 TP1=+5V、TP4=3.3V 是否正常。要点:确认 CC 下拉焊好、充电器确实出 5V;难点:若 3.3V 无输出,检查核心板供电方式(板载 LDO 还是外部 LDO,勿两者同时供电打架)。
  2. 恒流测试:接入 LED 支路,App/编码器把亮度设为 100%(满占空),万用表测采样电阻 Rcs 两端电压 U,算电流 I = U / 0.1Ω,应约 1A。要点:Rcs 就是电流测试点;难点:若电流偏差大,核对 Rcs 阻值与运放增益是否与计算一致。
  3. PWM 调光测试:示波器接 EN 或 Rcs,观察不同亮度下 PWM 占空比变化及输出波形;确认 0% 关灯、100% 最亮,中间线性变化。难点:低亮度段可能有轻微频闪/非线性(EN 软启动所致),记录现象。
  4. 编码器/按键测试:旋转编码器观察亮度连续增减、按下开关灯;按键 1 开关、按键 2 一键延时关机(观察设定时间后自动灭)。
  5. 蓝牙联调:手机打开 App,连接台灯(默认名 Simple Peripheral),拖动滑条/输入百分比调光、开关,观察 LED 响应与 App 状态回显是否同步。要点:安卓网页蓝牙需同时打开手机蓝牙与定位/位置服务并授予位置权限,否则搜不到设备。

4.2 测试数据及实验结果

下表为测试记录模板,请填入你们实测的数据(表中数值为设计预期/示例值,供参考)。

测试项条件预期值实测值
输入电压 VinUSB-C 5V≈5.0 V___
MCU 电源 3.3V3.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 连接能搜到并连接___

4.3 产品使用说明书

  1. 供电:用 USB-C 数据线接 5V 电源(手机充电器/电脑 USB 口)。
  2. 本地操作:旋转编码器旋钮连续调节亮度;按下旋钮开/关灯;按键 1 开关灯;按键 2 启动一键延时关机(到时自动熄灭)。
  3. 手机控制(安卓):用安卓手机的 Chrome/Edge 打开 App 页面(网页蓝牙,iOS 不支持)。先打开手机蓝牙和定位/位置服务,点"连接台灯",在弹出的设备列表里选台灯(默认名 Simple Peripheral)。连上后可用滑条或百分比输入框调光、"开/关灯"按钮控制,界面亮度与实物实时同步。
  4. 常见问题:搜不到设备——检查蓝牙与定位是否都已打开、是否授予 Chrome 位置权限、台灯是否已上电;连接失败——确认选的是台灯那一项。

五、结论

5.1 本方案的特点及存在的问题

特点:①单芯片(CH582F)同时实现蓝牙从机与灯控,无需外挂蓝牙模块,成本低、体积小;②把通用降压 DC-DC 改造成恒流源,恒流精度由采样电阻与运放增益决定,参数可算可调;③PWM 直接调 EN,调光电路极简、零额外功率器件、0% 即彻底关断;④本地(编码器/按键)与远程(蓝牙 App)三路输入统一到同一亮度接口,状态经 notify 双向同步;⑤具备一键延时关机、亮度记忆(开灯恢复)等实用功能,并预留了完整测试点。

存在的问题:①受 TLV62569 的 EN 软启动(约 800µs)限制,PWM 频率只能取 200Hz,低亮度段线性度稍差、可能有轻微频闪;②恒流精度依赖 Rcs 与运放增益的一致性,需实测微调(初版 68mΩ 会导致电流达 1.47A 超额,已改为 0.1Ω 修正到 1A);③满流时采样电阻与走线有一定发热,需铺铜散热;④网页蓝牙依赖安卓且要求开启定位,跨平台性受限。

5.2 功能扩展方案(理论讨论)

六、实习总结(学习心得)

本次课程设计从一个课题要求出发,完整走了"方案论证—电路设计与参数计算—原理图/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 远离开关节点)、丝印规范、打样下单等工程细节,也是课堂之外的宝贵经验。整个过程锻炼了我们查数据手册、分工协作、排查问题和实测验证的综合能力,为今后的电子系统设计打下了基础。

附件

附件 1 电路原理图

【此处插入立创 EDA 导出的完整原理图截图,标注器件型号与元件参数,务必清晰】

附件 2 PCB 版图

【此处插入 PCB 顶层/底层布线图,走线需看清】

附件 3 实物照片

【此处插入电路成品双面照片:明亮、清晰、背景简单、变形少】

附件 4 程序代码(节选核心模块;完整代码见工程)

下为灯控核心 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 模板套格式后打印。