tag 标签: 上海航芯

相关帖子
相关博文
  • 热度 8
    2022-4-7 18:47
    1054 次阅读|
    0 个评论
    随着新能源及电动汽车的迅速发展,能量密度比更高的锂 电池 得到了更多运用,而锂电池串联使用过程中,为了保证电池电压的一致性,必然会用到BMS来提升电池的使用性能和使用寿命。 上海航芯通用 MCU ACM32F0系列以其低功耗+1路 CAN +10万次擦写128K 片上Flash+125度高温支持;ACM32F4系列以其180MHz M33内核+Flash加速+10万次擦写512K片上Flash+2路CAN+125度高温支持,被广泛应用到BMS场景中。BMS的主要功能包括:电量管理、电压检测、电池均衡等。 电池均衡概述 电池均衡是通过对多节串联电池进行容量最大化处理,确保各个电池单元能量可用,以此来延长电池使用寿命的技术。电池均衡是指在一个系列电池组中对不同的电池使用差动 电流 。电池均衡器是电池管理系统中的一种功能组件,用于执行锂电池电动汽车和ESS应用中常见的电池均衡。 通常,电池组的各个单元具有不同的容量,并且处于不同的SOC水平(SoC是指个别电池随着充电和放电,相对于其最大容量的剩余容量)。如果没有重新分配,当容量最低的电池被放空时,放电必须停止,即使其他电池仍未被放空,这限制了电池组的能量输送能力。而平衡的电池是指一个电池组中的每节电池都具备相同的电荷状态 (SoC)。 在均衡的过程中,较高容量的电池经历了一个完整的充电/放电循环。如果没有电池均衡,容量最低的电池就是一个薄弱点,即使其他电池单元仍有许多电量剩余,整个电池组也只能在其最弱的电池单元完全放电之后才能充电。因此,对各电池单元进行平衡可以更大限度地提高电池组的容量,并确保其中所有能量均可利用,从而提高电池寿命。除了更大限度提高电池容量外,电池平衡功能还可防止电池单元过充和过放,从而确保电池安全运行。电池均衡是BMS的核心功能之一,此外还有温度 监控 、充电,以及其他有助于延长电池组寿命的功能。 电池均衡的必要性 当您需要将多个电池合在一起为设备供电时,则需要进行电池均衡。因为电池单元较为脆弱,如果充电或放电过多,就会死亡或损坏。对于具有不同SoC的电池,并开始使用它们时,它们的电压开始下降,直到其中存储的能量最少的电池达到电池的放电截止电压。那时,如果能量继续流经电池,它就会受到无法修复的损坏。如果尝试将这组电池充电到正确的组合电压,健康的电池会过度充电并因此受到损坏,因为它们将要吸收已经损坏的电池不再能够存储的能量。不均衡的锂电池在第一次尝试使用时就会损坏,这就是为什么需要电池均衡。 电池均衡的其他原因包括: 热失控 电池,尤其是锂电池,对过充和过放非常敏感。当内部热量的产生速度超过散失速度,就会导致热失控。温度升高会导致锂电池结构变化并在电极上形成表面膜,使锂电池衰减速度更快。另外,积热过多可能会导致电池平衡 开关 和 电阻 的损坏。通过使用电池均衡,电池组中的每个无缺陷电池应均衡到与其他无缺陷电池相同的相对容量。由于热量是导致热失控的主要因素之一,因此,除电池均衡器以外,还可以使用冷却系统,保持电池组处于室温环境,最大化的减少热量留存。 电池老化 当锂电池被过度充电,甚至略高于其推荐值时,电池的能量容量、效率、生命周期都会降低。电池老化主要是由以下原因引起的: 袋型电池中电极的机械退化或堆压损失。 阳极上固体电解质界面(SEI)的增长。当充电电压保持在3.92v/cell以下时,SEI被视为大多数基于石墨的锂电池容量损失的原因。 在正极形成电解质 氧化 (EO),可能导致容量突然损失。 由高充电率产生的阳极表面的镀锂。 电池组的不完全充电 电池以0.5到1.0倍率的恒定电流充电,电池电压随着充电的进行而上升,充满电后达到峰值,然后下降。考虑三个分别具有77Ah、77Ah和76Ah且100% SoC的电池,然后所有电池都被放电,并且SoC下降。很快能发现3号电池会首先耗尽能量,因为它的容量最低。 当给电池组通电,相同的电流流过电池时,电池3在充电过程中再次滞后,可以认为是完全充电,因为其他两个电池已完全充电。这意味着由于电池的自热导致电池不均衡,电池3的库仑效率 (CE) 较低。 电池组能量的不完全使用 消耗超过电池设计容量的电流或使电池 短路 ,最可能导致电池过早失效。在对电池组放电时,较弱的电池比健康电池放电更快,它们比其他电池更快达到最低电压。在电池运行过程中,提供定期的休息时间,使电池中的化学转换能够保持对电流的需求。 电池均衡的类型 主动均衡 主动电池均衡通常将能量从一个电池传输到另一个。即从高电压/高SoC的电池转移到低SoC的电池。主动均衡的目的是,如果您有一组容量较低的电池,您可以通过从电池组中的一个比另一个能量更高的电池转移能量来延长电池组的寿命或SoC。 主动电池均衡通过微型转换器 电路 高效地将能量从高电压的电池传递到低电压的电池,避免了热量导致的能量损耗。主动电池均衡方法有两种不同类别:电荷转移和能量转换。电荷转移用于主动地将电荷从一个电池传输到另一个电池,以实现相等的电池电压,能量转换是用 变压器 和 电感 在电池组的电池之间移动能量。 其他有源电池均衡电路通常基于 电容 、电感或变压器以及 电力电子 接口 ,这些需要: 基于 电容器 • 单个电容器,这种方法很简单,因为它使用单个电容器,而与电池中连接的电池数量无关。然而,这种方法需要大量的开关和对开关的智能控制。 • 多个电容器,这种方法将多个电容器连接到每个电池,通过多个电容器传输不相等的电池能量,它不需要电压 传感器 或闭环控制。 基于 电感器 或变压器 • 单/多电感,单电感的电池均衡电路体积小,成本低,而多电感的均衡速度快,电池均衡效率高。 • 单变压器,这种方法均衡速度快,磁损耗低。 • 多变压器,这种电池均衡器具有快速的均衡速度,然而,它需要一个昂贵且复杂的电路来防止变压器被淹没。 基于电力电子接口 • 反激/正激转换器,高压电池的能量存储在变压器中,该电池均衡器具有高可靠性。 • 全桥转换器,这种电池均衡器具有快速的均衡速度和高效率。 有源均衡器能够将大量电流从一个电池推到另一个电池。 主动均衡的优点: • 它提高了容量使用率,当一个系列中具有不同的电池容量时,它会表现出色。 • 它提高了能源效率,它通过将多余的能量转移到能量较低的电池中来节省能量,而不是燃烧电池中的多余能量。 • 寿命延长,它提高了电池的预期寿命。 • 快速均衡。 主动均衡的缺点: • 当能量从一个电池转移到另一个电池时,大约会损失10-20%的能量。 • 电荷只能从高位电池转移到低位电池。 • 尽管有源电池均衡器具有较高的能量效率,但其控制算法可能很复杂,并且其生产成本昂贵,因为每个电池都应与额外的电力电子接口连接。 被动均衡 通常把能量消耗型均衡定义为被动均衡,被动均衡运用电阻,将高电压或高电荷量电芯的能量消耗掉,以达到减小不同电芯之间差距的目的,是一种能量消耗性均衡。如果将电池串联在一起,并且某些电池的能量高于其他能量较低的电池,可以通过在电池上连接一个电阻来均衡顶部电池的燃烧能量,从而将能量释放到热量,以此来均衡电池组的能量。 被动均衡可使所有电池看起来具有相同的容量。有两种不同类别的无源电池均衡方法:固定分流电阻和开关分流电阻。 固定分流电阻电路通常连接到固定分流器,以防止其被过度充电。在 电阻器 的帮助下,无源均衡电路可以控制每个电池电压的极限值,而不会损坏电池。这些电阻器为均衡电池而消耗的能量可能会导致BMS的热损失。因此,这证明固定分流电阻器方法是一种低效的电池均衡电路。 开关分流电阻电池均衡电路是目前电池均衡中最常用的方法。该方法有连续模式和感应模式,在连续模式下,所有开关都被控制在同一时间开启或关闭。在感应模式下,每个电池都需要一个实时电压传感器。该电池均衡电路通过均衡电阻消耗了高能量。这种电池均衡电路适用于在充电或放电时需要低电流的电池系统。 被动均衡的优点: • 不必主动平衡电池组也依然能完美的工作。 • 电池单元在没有电量时不会有任何损耗,一旦电池充满,仅会在其有足够额能量时进行均衡操作。 • 它会让所有电池单元具有相同的SoC。 • 它提供了一种低成本的电池均衡方法。 • 它可以纠正电池与电池之间自放电电流的长期失配情况。 被动均衡的缺点: • 热管理不良。 • 它们在满SoC时不会进行均衡。仅在每个单元的顶部以95%左右保持均衡,这是因为电池容量不同时,会被强制燃烧掉多余的能量。 • 它的能量传输效率通常很低。电能在电阻器中以热量的形式耗散,电路也造成了开关损耗,换句话说,被动均衡电路会导致大量的能量损失。 • 它不会提高电池供电系统的运行时间。 上海空间 电源 研究所Wangbin Zhao提供的例子 多绕组变压器的主动均衡电路分为功率模块和控制模块。 电源模块 由电池单元、均衡变压器和开关 晶体管 ( MOSFET )组成。同时,模块也可以根据实际需要进行扩展。每节电池通过MOSFET与电池组串联,采用固定占空比的周期信号控制对电压较高的电池进行放电。控制模块包括 FPGA 控制单元、 AD 采样单元。每个电池电压信号通过一阶低通 滤波器 进入AD采样。将所有电池电压的AD采样信号处理后送到FPGA中,利用FPGA内部的均衡算法实现电池组的均衡控制。MOSFET的开关周期与均衡变压器峰值电流的关系如下: TS – 切换周期; TON – MOSFET的开启时间; TOFF – MOSFET的关断时间; Lpri – 初级磁化电感; Ipri-peak – 初级峰值电流; Ubat – 单节电池电压; Lsec – 第二磁化电感; Isec – peak-次峰电流; UOFF – 电池组总电压; 均衡变压器的设计关系到均衡电路的工作性能。因此,必须正确设计变压器参数。在电池组充电过程中,一旦主动均衡电路检测到某个电芯的电压过高,就会启动相应的均衡开关为该电芯放电。均衡变压器初级侧的平均放电电流为: 同理,可以得到均衡变压器二次电池的平均充电电流为: N——串联电池的数量; k——变压器初级和次级的匝数比; 分析方程(1)到(3),得出结论,在固定占空比控制方法下,均衡平均电流仅与变压器初级和次级绕组的匝数比、电池数量和电流峰值有关。 电池组所需的均衡电流是多少? 均衡电池是指在某些SoC上,所有电池都完全处于相同的SoC。均衡电池所需的电流取决于电池失衡的原因。它分为2类:总均衡、维护均衡。 总均衡 如果电池组在制造或维修时没有考虑到单个电池的初始SoC,平衡器可能会被期望完成总的平衡工作。在这种情况下,平衡电池组所需的最大时间长度取决于电池组的大小和平衡电流。所需的均衡电流与电池组的大小成正比,与所需的均衡时间成反比: 均衡电流 = 包装 尺寸 / 总均衡时间 对于一个100Ah有空有满的电池组来说,均衡电流为1A的BMS需要将近一周的时间来进行均衡。而一个均衡电流为10 mA BMS无法在其使用寿命内均衡 一个1000 Ah的电池组。或者说,如果希望BMS在合理的时间内均衡一个大容量且极不均衡的电池组,则需要它提供一个相对较高的均衡电流。 维护均衡 如果一个电池组开始时是均衡的,那么保持均衡将变得容易。如果所有电池的自放电泄漏相同,则不需要均衡;电池的SoC缓慢下降完全相同,因此电池组保持均衡。如果电池组中有一个电池单元其自放电泄漏电流为1mA或更多而其他电池单元的泄漏电流相同,则BMS从所有其他电池平均取1mA 或仅对该电池增加1mA,这被认为是平均均衡电流。 在很多应用中,BMS除了不断地漏电放电外,还无法做到无限均衡。因此,均衡电流必须更高,与BMS均衡电池组可用的时间成反比。 例如: 如果BMS可以持续均衡,均衡电流可以是1mA,而如果BMS每天只能均衡1小时,均衡电流应该是24mA,才能达到1mA的平均值。 更重要的是,如果BMS可以运行比所需最小值更多的均衡电流,则BMS可以: • 保持均衡始终开启,但降低其值以匹配电池自放电泄漏增量。 • 通过占空比打开和关闭均衡,平均而言,电流与电池的漏电流增量相匹配。 所需的均衡电流与泄漏电流的差和可用于均衡的时间百分比成正比: 均衡电流 = (最大漏电流 – 最小漏电流 ) / (每日均衡时间 / 24 ) 均衡电流是均衡器对满电量电池进行分流时的电流量,以求可同时继续允许相同的电流流入非满电池。正确的量取决于想要多快结束均衡。 结论 均衡补偿单个电池的SoC,而不是容量不均衡。电池组均衡的好处是,如果电池组在工厂均衡,BMS只需要处理均衡电流。这对于构建已经均衡的电池组更有意义,无需使用可以执行总均衡的BMS。 为了最大限度地减少电池电压漂移的影响,必须适当调节不均衡。任何均衡方案的目标都是让电池组以预期的性能水平运行并延长其有用容量。对于希望最小化成本并纠正电池之间自放电电流的长期失配的客户,被动均衡是最佳选择。 ​
  • 热度 10
    2022-3-21 19:34
    1098 次阅读|
    0 个评论
    本项目是以S PI Flash(如W25Q128等)存储元件作为存储单元, MCU 主控完成 USB 接口 通信并根据S CSI 协议实现U盘功能。其结构如下图所示: SPI Flash部分移植 SPI功能部分相对简单,ACM32F403的接口引脚和 STM32F103 的相同,可直接对接,按照ACM32F403的说明对SPI接口进行初始化,并对底层读写函数进行更改即可。 USB部分移植 1. STM32F 103代码结构 在ST的芯片上,USB的数据是由两个中断,USB_LP_ CAN 1_RX0_IRQHandler和USB_HP_CAN1_TX_IRQHandler来进行,其中高优先级中断(USB_HP_CAN1_TX_IRQHandler)用于处理同步(Isochronous)模式传输或双缓冲块(Bulk)传输模式下的正确传输事件,而低优先级中断(USB_LP_CAN1_RX0_IRQHandler)用于处理其他传输时间。ST的USB数据处理如下图所示: 由于USBFS协议的限制,一包数据中最多可携带64字节数据,因此,当存在大量数据需要进行传输(IN或OUT包)时,需要分批次进行传输。在ST的代码中,通过变量“Bot_State”来进行控制,以Re ad 10指令为例,其读数据流程可如下图所示: 需要注意的是,Read10指令解析完成之后(即上图左侧流程图)则进入数据传输阶段,此阶段是通过多次进入USB高优先级中断中,调用Read_Memory();来实现的。Read_Memory();函数内每次传输64字节数据。 2. ACM32F403代码移植要点 本文基于上海航芯官方USB例程进行移植,移植后的程序结构如下图所示: ACM32F403的USB是采用一个中断来进行数据处理。在官方例程中,USB的中断函数内判定接收数据类型,包括suspend,resume,reset,EP0_pack以及其他端点的接收数据。判定结束后,会调用USB_Monitor();函数来处理suspend,resume,reset以及EP0_pack数据。而其他端点数据会在usb_transfer_monitor();函数中进行解析,该函数由客户调用,一般在主函数的死循环中进行处理。在本文的移植中,主要需对USB的端点数据进行处理。 A. EP0_Pack EP0接收的setup数据会被存放在SE TI P_0_3_DATA和SETIP_4_7_DATA 寄存器 中 ,数据结构如下所示: SETIP_0_3_DATA &0xff; 8)&0xff; 16)&0xffff; SETIP_4_7_DATA&0xffff; 16)&0xffff; 该部分解析,可由用户在函数void usb_control_transfer(void)中添加需要的处理函数。该函数由航芯官方例程里提供。在做U Disk程序移植时,需添加GetMaxLun和Storage_Reset处理函数,如下图所示: B. EP1_Pack 在本文所述的代码中,ACM32F403采用EP1完成数据的收发工作。主要是完成对SCSI协议的解析工作。移植过程中,需要文件mass_mal.c、memory.c、scsi_data.c、usb_scsi.c、usb_bot.c及其头文件。本段主要就上述文件中代码需要改动的地方进行说明,部分参数需要重新定义, 读者 可自行解决。下表列出了ST和 Ai sino的USB收发功能函数,该部分移植时需要修改的主要部分: a. void Mass_Storage_In (void) 在ST的工程代码中该部分主要用于处理SCSI的读指令。由于全速USB一包数据最大支持64字节,因此,当需要传输的数据个数大于该数值时,则需要分包传输。在使用ACM32F403时,可直接传送需要的数据长度,内部会进行分包处理,因此,该函数可省略。 b. void Mass_Storage_Out (void) 该函数用于处理SCSI指令解析以及发送指令,需在usb_transfer_monitor()中调用,并将函数内部的接收数据部分更改为: “Data_Len = HAL_FSUSB_Receive_Data(Bulk_Data_Buff, 64, out_ep_index, 1);” c.void Transfer_Data_Request(uint8_t* Data_Pointer, uint16_t Data_Len) 将USB发送函数更改为ACM32F403对应的发送函数。在ST的工程中,该函数用于传输完数据后,进入BOT_DATA_IN_LAST状态,并在下一次的Mass_Storage_In()函数调用时,回复CSW指令。而本文的移植代码中,省略了Mass_Storage_In()函数,因此,可在该函数的尾部增加CSW发送指令: Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE); d.void Set_CSW (uint8_t CSW_Status, uint8_t Send_Per mi ssion) 将USB发送函数更改为ACM32F403对应的发送函数。 e.void Bot_Abort(uint8_t Direction) 该函数主要对收发端点的STALL状态进行处理,在ACM32F403的收发库函数中,对端点的STALL已做出相应控制,因此,该函数可省略。 f.void Read_Memory(uint8_t lun, uint32_t Memory_Offset, uint32_t Transfer_Length) Read_Memory函数用于收到PC端的IN包请求后将 存储器 中的数据读取并发送至PC端。而ACM32F403的USB发送库函数中,自行进行分包操作(一包最大数据为64字节),因此在数据缓冲区容量允许条件下,可直接发送完毕,该函数修改如下: { uint32_t Offset, Length; Offset = Memory_Offset * Mass_Block_Size ; Length = Transfer_Length * Mass_Block_Size ; CSW.dDataResidue = CBW.dDataLength; while(Transfer_Length --) { MAL_Read(lun , Offset , Data_Buffer, Mass_Block_Size ); Length = min(Mass_Block_Size , CSW.dDataResidue); Offset += Mass_Block_Size ; HAL_FSUSB_Send_Data((uint8_t *)(Data_Buffer), Length, in_ep_index); CSW.dDataResidue -= Length; } Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE); } g.void Wri te _Memory (uint8_t lun, uint32_t Memory_Offset, uint32_t Transfer_Length) 写数据指令完成后,将Bot_State 值更改为 BOT_IDLE。ST的工程代码中,变量“Bot_State”收发状态机的状态值,其值如下表所示: 而基于ACM32F403的U Disk工程,IN包可由函数HAL_FSUSB_Send_Data()在其内部进行分包处理,不需要额外逻辑,因此,移植后Bot_State仅需要在BOT_IDLE、BOT_DATA_OUT、BOT_ERROR之间转换,其他对Bot_State的控制可省略
  • 2022-3-2 20:32
    0 个评论
    智能指纹门锁定义: 智能指纹门锁是一种以人体指纹为识别载体和手段的智能锁具,它是计算机信息技术、电子技术、机械技术和现代五金工艺的完美结晶。指纹锁一般由电子识别与控制、机械联动系统两部分组成。指纹的唯一性和不可复制性决定了指纹锁是目前所有锁具中最为安全的锁种。 图片来源于网络 01芯片参数 ACM32FP0X 系列是一款支持多种低功耗模式的通用 MCU。集成 12 位 1.6 Msps 高精度 ADC 以及触控按键控制器,内置高性能定时器、多路 UART、LPUART、SPI、I2C 等丰富的通讯外设,内建 AES、TRNG等信息安全模块,支持多种低功耗模式,具有高整合度、高抗干扰、高可靠性的特点。本产品采用 ARM Cortex-M0 系列内核,最高工作频率 64MHz。 02智能门锁方案特点 分离方案 主控:采用集成TK的芯片ACM32FP0。 算法:采用金融级安全芯片 ACH512,或高性能算法芯片 ACM32FP4。 非接:采用 A32NQ32C3 读卡芯片。 支持指纹、按键、钥匙、非接、蓝牙等多种开锁方式。指纹、密码安全存储、敏感信息不外泄。 整机功耗:40uA。 提供整套门锁方案,支持二次开发 03方案整体框图