新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于TI MSPM0L1306芯片的共享充电宝系统设计

基于TI MSPM0L1306芯片的共享充电宝系统设计

作者:郑思源 时间:2025-01-20 来源:EEPW 收藏

1   作者介绍

本文引用地址:https://www.eepw.com.cn/article/202501/466479.htm

我来自北京,硕士研究生,中级嵌入式工程师职称。毕业后一直从事嵌入式开发领域工作,涉及工业控制,网络通讯,人机界面等项目。虽多年工作经验,仍然热爱着嵌入式开发,也拥抱开源,乐于分享。

2   项目概要

本次设计是在做项目选型时了解到TI 公司L1306 芯片非常适合做为等小设备的主控芯片。于是,计划使用L1306 复刻系统。

系统主要有两个核心功能:一、充电、放电控制,包含PD协议;二、管理与计费;还有辅助功能:充、放电监测与保护功能;数据加密,解密与日志记录功能等。

在本次原型设计中,我们将利用L1306 的特性来快速、简洁的实现上述功能。

3   系统架构图

1737353084698247.png

4   功能特性

TI 公司的MSPM0L1306 芯片有着丰富的外设,其中优秀的数字通讯外设非常适合我们与外设器件进行数据交互,而强大的模拟外设不仅让我们的PCB 设计简单,也提高了应用的灵活性。下面我们简单列出我们本次实现的主要功能,再重点讲述一下,我们利用MSPM0L1306 芯片实现的高阶应用。

4.1 系统时钟

在本次项目设计中,我们考虑到共享充电宝是基于电池设备的原因,所以我们尽量降低MCU 的运行功耗。因此,我们将MSPM0L1306 的运行主频设定为4MHz,并使用内部OSC 以减少功耗及BOM 成本。

4.2 Uart串口

我们使用Uart 串口做为我们调试输出口,在调试阶段打印输出系统状态,以便我们分析,了解程序运行状态。在本次项目设计中,我们使用“9600-8-N-1”的串口配置参数。

4.3 Timer外设的PWM模式

为节省共享充电宝的LED 显示灯的数量,我们利用PWM 波调节LED 的状态,以便显示更多的状态给用户,增加用户体验。即,在亮、灭两种状态下,增加呼吸灯状态,以示当前在充、放电状态。

4.4 RTC实时时钟

共享充电宝需要有时基来计量当前使用时间,充电时间,放电时间等参数。我们在MSPM0L1306 芯片上使能LFOSC,其将产生32.768KHz 的时钟源激励RTC实时时钟。

4.5 CRC校验

CRC 校验算法,其在数据完整性检查方面是最广泛的应用。部署CRC 算法的实现几乎成为数据通讯的必选项,而在MSPM0L1306 芯片内,已经集成了CRC16和CRC32 两种硬件算法,可以省去我们软件实现,释放部分算力与代码空间。

4.6 AES加密解密算法

在共享充电宝系统中,计费系统是关键,也是非常重要的一环。计费失败导致的问题这里不多说,但每一个都“致命”级别的问题。而保障计费安全的一个有力措施就是对数据进行加密处理。复杂的AES 算法由MSPM0L1306的硬件模块来实现,将使得加密不再复杂,不再影响系统性能。

4.7 NVM模块

每个产品都要有一个唯一的产品序列号,我们共享充电宝亦如此。不再程序开发阶段写入的序列号,也就只能在出厂前写入。此时NVM 模块便起到关键作用。我们也借助NVM 模块,通过串口通道,将序列号写入产品中。

4.8 I2C通讯

I2C 通讯是一个低成本,低速率的通讯协议。其使用2 线制即可传输数据,主要应用于板上通讯。在我们本次设计系统里面,我们主控芯片MSPM0L1306 做主设备通过I2C 外设与PD 充放电模块从设备进行数据交互,获取当前充电、放电的状态,从而进行计费与统计功能。我们的I2C 外设配置速率为100Kbps。

4.9 I2C-SMBus通讯

SMBus 协议是I2C 协议的一个子集。其使用I2C 协议,但在其之上又进行了一层上层应用层的封装,可谓“青出于蓝,而胜于蓝”。

在本项目中的共享充电宝来说,其可以选择任意一个充电站,选择任意一个充电槽。所以,共享充电宝不可能以固定从地址的方式来接入充电站。这时,低成本的I2C 总线协议,再加上SMBus-ARP 协议则可以轻松解决这个技术难题。

TI 新推出的MSPM0L1306 系列MCU 不仅支持SMBus 协议,而且支持到了SMBus 3.0,领先同行的MCU。看似又多了一个协议层,但我们具体实现步骤依然非常简单,仅需要根据共享充电宝的序列号来生成SMBus 协议下的UDID(128bit 数据)即可。当我们把共享充电宝插入充电槽后,MSPM0L1306 则主动向Host 发起Notify 命令,当充电站Host 接收到Notify 通知后,则按协议要求发起SMBus-ARP 流程,开始按步骤为共享充电宝分配当前从地址。当SMBus-ARP 流程完成后,充电宝则有自己的从地址(离开插槽失效),而充电站也记录下当前已经有共享充电宝插入,并分配了从地址。充电站之后则按此分配的从地址进行通讯。

在本项目中,我们还实现SMBus 协议命令中的BlockRead/Write 命令,用于充电站(Host)向共享充电宝获取和写入数据。

4.10 ADC,OPA,COMP模拟外设

共享充电宝在充、放电过程中,我们需要对其进行监测,监测充电宝当前的运行状态,保护其不超压,不过放,在短路、超压等情况发生下,快速切断连接;也要测量电流,用于统计充、放电量的数值。上述功能的实现,在MSPM0L1306 芯片下,其已经全部集成于一身,不需要增加外围器件。我们轻松使用12bit 的ADC 来测量电池电压,使用COMP 比较器快速响应过流,短路的情况发生;使用OPA 外设,轻松实现PD 协议下充电电压的范围变化而不影响测量精度。

5   系统实现

5.1 引脚分配

1737353041942728.png

5.2 软件架构

本项目软件架构相对简洁,主要分为两大部分:

一、充、放电状态监测;

二、与充电站通讯;

5.2.1 流程图

1737353067801622.png

5.2.1 核心数据结构

当共享充电宝返回充电站后,充电站需要收集共享充电宝的使用状态,如本次充电时长,本次充电电量,本次放电时长,本次放电电量,当前电池电压,当前电量,累计充电时长,累计充电电量,累计放电时长,累计放电电量等。我设计数据结构如下:

image.png

5.2.2 低功耗设计

在本项目中,低功耗设计有两种应用场景:一、工作状态下。当系统空闲时,进入sleep 状态,以节省功耗;二、在共享充电宝低电量情况,则MSPM0L1306 进入深度休眠。

5.3 核心代码

5.3.1 按键代码实现

image.png

image.png

5.3.2 Uart串口输出实现

image.png

image.png

5.3.3 LED呼吸灯

image.png

image.png

image.png

5.3.4 ADC采样

image.png

image.png

6   项目展示

6.1 扩展板

1737353114368498.png

6.2 成品实物图

image.png

7   经验分享

在开发过程中,我也遇到了一些困难,踩过一些坑。在这里也一并分享出来,希望对大家有所帮助。

7.1 板载调试器XDS110

TI 公司的XDS110 的名气非常大,但在MSPM0L1306 开发板上使用起来非常简单。我们只需要连接到电脑,看到任务管理器中已经枚举出来“XDS110”,打开Keil 软件后,在debug 标签页选择”CMSIS-DAP”选项即可连接调试。

所以,此XDS110 调试器,非彼XDS110。大家不要弄错哟!

补充说明:在MSPM0L1306 的官方QuickGuide 文档里面有特别提醒,只是我没有仔细看。

8   项目总结

我们突出分享I2C-SMBus,低功耗与模块外设这三个特性,主要是TI MSPM0L1306 芯片内部完美集成。我在电路设计时,无需再使用外围器件实现,节约了PCB 面积,减少了BOM 物料,直接CostDown 了项目成本,而且还带来了软件实现的灵活性。“何乐而不为呢?”

9   致谢

感谢TI 公司提供MSPM0L1306 开发板,让我提早试用,完成原型开发,这必将会节省我实际项目的开发时间,也会让我更加从容面对项目周期的压力。

感谢EEPW 论坛提供各种帮助,让我有机会分享我的小作品。

感谢其他在本原型开发过程中帮助我的人。再次感谢您的收听,收看。

(本文来源于《EEPW》



评论


相关推荐

技术专区

关闭