当前位置: 首页 > news >正文

蓝牙耳机开发--TWS蓝牙耳机双向通信充电盒设计

TWS蓝牙耳机智能充电盒设计

  • 充电盒硬件整体设计
    • 主控芯片(MCU)
    • 电源管理芯片(PMIC, POWER MANAGER IC)
    • 智能充电仓硬件设计框图
  • 充电盒软件整体设计
  • 充电盒软件代码片段
    • 用户定义
    • 初始化完成
    • 各模块定时处理

近年来以苹果公司发布的AirPods真无线耳机为开端,TWS/OWS耳机市场销量迎来了飞速的增长,与TWS耳机配套的充电仓也随着耳机的发展而快速发展。本文介绍一种单线双向串口通信的充电盒设计,只需要使用两个pogo pin顶针便可以与耳机接触进行串口通信,从而进行与耳机数据交换等复杂操作,使蓝牙耳机充电仓朝着更人性化、智能化方向发展,更加方便用户使用。

充电盒硬件整体设计

主控芯片(MCU)

  1. 充电盒主控使用昇生微电子 SS86F8 51内核架构通用微控制器MCU
  2. 8位增强型MCU,12KB Code Flash,128B EEPROM,192B Data RAM
  3. 3个16位定时器,可同时产生7路PWM
  4. 集成1个支持半双工通信的UART接口

电源管理芯片(PMIC, POWER MANAGER IC)

  1. 电源管理芯片使用昇生微SSP707。带IIC通信,多功能PMIC(电源管理IC)。
  2. 内置载波通信模块,支持数能同传的应用场景。
  3. 支持5/0V通信、PLC通信、ELP/ERP电压检测、轻载检测、通信电平转换等TWS相关特色功能。

智能充电仓硬件设计框图

硬件设计框图

充电盒软件整体设计

  1. 环境搭建:
    Keil C51, 昇生微SSW Flash Tool烧录工具

  2. 固件烧录
    使用4线烧录DCN, DAT, CLK, GND。可以分为在线烧录和离线烧录
    在线烧录使用昇生微在线烧录工具,接线连接到充电盒
    在线烧录工具界面
    点击连接,连接成功后电脑端显示芯片状态为连接后点击烧录
    烧录中界面
    离线烧录:
    离线烧录是指直接将固件部署到烧录器中,烧录器插入电脑后会识别成一个盘符。将编译好的固件bin文件放到烧录器盘符中。
    离线烧录
    烧录器使用4线接法连上底座。点击单击烧录器上的Update按键开始烧录。
    绿色指示灯闪烁即为开始烧录; 烧录成功会亮pass灯光, 并显示屏上显示。如下图蓝色灯光显示为烧录成功。
    烧录成功显示

  3. TWS智能充电盒DEMO代码目录结构
    app – 存放应用层代码 (通信逻辑 ui逻辑等)
    device – 驱动层代码 (按键驱动 霍尔传感器驱动 NTC驱动等)
    hal – 硬件抽象层代码 (GPIO TIMER UART IIC等)
    demo代码目录结构
    工程文件在app/prj/keil目录下打开keil工程
    keil工程文件
    使用keil C51进行代码编译 build或者rebuild
    keil编译界面

充电盒软件代码片段

main函数

用户定义

device-config-default.h文件包含了用户常用的宏定义
用户定义代码

  1. 按键定义:
    #define CONFIG_USING_KEY 1
    #define CONFIG_KEY_USING_SSP707X 1
    按键挂在SSP707X芯片引脚上; GET_KEY_STATUS() 发送IIC命令获取SSP707X是否按下

  2. 霍尔定义
    定义开关盖时是否使用霍尔,和定义霍尔使用的IO口。P0_7
    #define CONFIG_USING_HALL (1)
    #define CONFIG_HALL_IO (0x07)

  3. LED控制定义
    #define CONFIG_USING_SBLED 1
    #define USING_PWM5
    使用的是PWM2 PWM3 PWM4 PWM5 这4颗LED灯
    LED定义

  4. 电量显示
    #define CONFIG_USING_BATTERY 1

  5. IIC控制器
    #define CONFIG_USING_SI2C 1
    用来控制SSP707X

初始化完成

初始化完成之后,初始化时定时器开起来之后,各模块会开始循环处理。在定时器会做10ms、100ms、1s的定时标志,在main中while(1)里面处理各个定时标志的处理。
定时处理

各模块定时处理

10ms定时处理
以10ms标志处理为例子,各模块10ms调用一下模块内部处理,使用event_set_ui_state 设置ui_state标志位,给到其他模块根据ui_state标志位做相对应的处理。

  1. 10ms key 按键处理
    void key_handle_10ms(void)
    判断按下则key_0_pressed_cnt++; 松手key_0_pressed_cnt=0
    按键情况:
  • 短按
    key_0_pressed_cnt>5&& key_0_pressed_cnt< CONFIG_KEY_SHORT_PRESS_CNT
    event_set_ui_state(EVENT_STATE_UI_KEY_CLICK)
  • 长按
    key_0_pressed_cnt== CONFIG_KEY_LONG_PRESS_CNT
    event_set_ui_state(EVENT_STATE_UI_EAR_PAIRING)
  • 加长按
    key_0_pressed_cnt== CONFIG_KEY_LLONG_PRESS_CNT
    event_set_ui_state(EVENT_STATE_UI_EAR_RESTORE)
  1. 10ms hall处理
    void hall_handle_10ms(void)
    IS_HALL_ON() 获取霍尔传感器IO口状态, 带debounce
    event_set_ui_state(EVENT_STATE_UI_HALL_OFF)
    event_set_ui_state(EVENT_STATE_UI_HALL_ON)

  2. 10ms USB插入(DC IN处理)
    void pm_dcin_handle_10ms(void)
    判断是否有USB插入
    event_set_ui_state(EVENT_STATE_UI_DCIN_IN))
    event_set_ui_state(EVENT_STATE_UI_DCIN_OUT)

  3. 10ms dfu处理

  4. 10ms 通信模块处理
    void comm_handle_10ms(void)
    通信时会判断前面hall状态改变事件, 按键事件, 轻载过载事件
    根据comm_tmr_cnt处理不同的事情 comm_tmr_cnt每隔10ms 会做自增++动作
    10ms通信模块处理
    10ms通信模块处理:
    10ms通信模块处理2

  5. 10ms ui模块处理
    void displays_handle_10ms(void)
    UI模块拿到其他模块设置的ui_state LED灯光显示处理:设置led闪灯的pattern
    10ms UI模块处理

  6. 10ms sbled模块处理
    根据UI模块设置的LED的pattern进行灯光闪烁。
    10ms sled模块处理

相关文章:

  • 滑动窗口模板
  • 《系统分析师-第三阶段—总结(六)》
  • Android Studio学习记录1
  • 软件测试全流程与主流测试方法详解:从理论到实战
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • 云服务器被黑客攻击应急响应与加固指南(上)
  • Swiper 在 Vue 中的使用指南
  • 用Python做有趣的AI项目5:AI 画画机器人(图像风格迁移)
  • Atcoder Help 有关Atcoder 的介绍-1 涨分规则
  • docker安装Canal1.1.5,MySQL5.7踩坑
  • 企业架构之旅(2):解锁TOGAF ADM
  • OpenCV-Python (官方)中文教程(部分一)_Day16
  • MicroPython for ESP32 舵机控制详解
  • 【学习笔记】软件测试流程-测试设计阶段
  • 全地形车市场
  • FPGA-DDS信号发生器
  • watch 监视器
  • 【大语言模型开发】BPE算法(Byte-Pair)
  • 可调用对象(5)-bind函数适配器
  • 卫星互联网安全:机遇、挑战与未来方向
  • 绿地控股:今年一季度营业收入356亿元,中高层管理人员带头降薪
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日
  • 连演三场,歌剧《义勇军进行曲》在上海西岸大剧院上演
  • 第1现场|无军用物资!伊朗港口爆炸已遇难40人伤1200人
  • 央行副行长:增强外汇市场韧性,坚决对市场顺周期行为进行纠偏
  • “70后”通化市委书记孙简已任吉林省政府领导