173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机sbc

htxw 2023-03-14 资讯中心 36 ℃

凌阳61单片机的优势以及其在语音识别方面上的优势?

凌阳单片机本身具备语音识别功能,不需要外扩语音识别模块,虽然具有一点点DSP功能,就能做到语音识别功能。如常见的语音控制机器人,语音控制小车等。

我们所说的音频是指频率在20 Hz~20 kHz的声音信号,分为:波形声音、语音和音乐三种,其中波形声音就是自然界中所有的声音,是声音数字化的基础。语音也可以表示为波形声音,但波形声音表示不出语言、语音学的内涵。语音是对讲话声音的一次抽象。是语言的载体,是人类社会特有的一种信息系统,是社会交际工具的符号。音乐与语音相比更规范一些,是符号化了的声音。但音乐不能对所有的声音进行符号化。乐谱是符号化声音的符号组,表示比单个符号更复杂的声音信息内容。

将模拟的(连续的)声音波形数字元化(离散化),以便利数字计算机进行处理的过程,主要包括采样和量化两个方面。

数字音频的质量取决于:采样频率和量化位数这两个重要参数。此外,声道的数目、相应的音频设备也是影响音频质量的原因

语音压缩编码中的数据量是指:数据量=(采样频率×量化位数)/8(字节数) ×声道数目。

压缩编码的目的:通过对资料的压缩,达到高效率存储和转换资料的结果,即在保证一定声音质量的条件下,以最小的资料率来表达和传送声音信息。

压缩编码的必要性:实际应用中,未经压缩编码的音频资料量很大,进行传输或存储是不现实的。 所以要通过对信号趋势的预测和冗余信息处理,进行资料的压缩,这样就可以使我们用较少的资源建立更多的信息。

举个例子,没有压缩过的CD品质的资料,一分钟的内容需要11MB的内存容量来存储。如果将原始资料进行压缩处理,在确保声音品质不失真的前提下,将数据压缩一半,5.5MB就可以完全还原效果。而在实际操作中,可以依需要来选择合适的算法。

常见的几种音频压缩编码:

1) 波形编码:将时间域信号直接变换为数字代码,力图使重建语音波形保持原语音信号的波形形状。波形编码的基本原理是在时间轴上对模拟语音按一定的速率抽样,然后将幅度样本分层量化,并用代码表示。译码是其反过程,将收到的数字序列经过译码和滤波恢复成模拟信号。

如:脉冲编码调制(Pulse Code Modulation,PCM)、差分脉冲编码调制(DPCM)、增量调制(DM)以及它们的各种改进型,如自适应差分脉冲编码调制(ADPCM)、自适应增量调制(ADM)、自适应传输编码(Adaptive Transfer Coding,ATC)和子带编码(SBC)等都属于波形编码技术。

波形编码特点:高话音质量、高码率,适于高保真音乐及语音。

2) 参数编码:参数编码又称为声源编码,是将信源信号在频率域或其它正交变换域提取特征参数,并将其变换成数字代码进行传输。译码为其反过程,将收到的数字序列经变换恢复特征参量,再根据特征参量重建语音信号。具体说,参数编码是通过对语音信号特征参数的提取和编码,力图使重建语音信号具有尽可能高的准确性,但重建信号的波形同原语音信号的波形可能会有相当大的差别。

如:线性预测编码(LPC)及其它各种改进型都属于参数编码。该编码比特率可压缩到2Kbit/s-4.8Kbit/s,甚至更低,但语音质量只能达到中等,特别是自然度较低。

参数编码特点:压缩比大,计算量大,音质不高,廉价!

3) 混合编码:混合编码使用参数编码技术和波形编码技术,计算机的发展为语音编码技术的研究提供了强有力的工具,大规模、超大规模集成电路的出现,则为语音编码的实现提供了基础。80年代以来,语音编码技术有了实质性的进展,产生了新一代的编码算法,这就是混合编码。它将波形编码和参数编码组合起来,克服了原有波形编码和参数编码的弱点,结合各自的长处,力图保持波形编码的高质量和参数编码的低速率。

如:多脉冲激励线性预测编码(MPLPC),规划脉冲激励线性预测编码(KPELPC),码本激励线性预测编码(CELP)等都是属于混合编码技术。其数据率和音质介于参数和波形编码之间。

总之,音频压缩技术之趋势有两个:

1)降低资料率,提高压缩比,用于廉价、低保真场合(如:电话)。

2)追求高保真度,复杂的压缩技术(如:CD)。

7.1.5 语音合成、辨识技术的介绍:

按照实现的功能来分,语音合成可分两个档次:

(1) 有限词汇的计算机语音输出

(2) 基于语音合成技术的文字语音转换(TTS:Text-to-Speech)

按照人类语言功能的不同层次,语音合成可分为三个层次:

(1) 从文字到语音的合成(Text-to-Speech)

(2) 从概念到语音的合成(Concept-to-Speech)

(3) 从意向到语音的合成(Intention-to-Speech)

早期只能辨认特定的使用者即特定语者(Speaker Dependent,SD)模式,使用者可针对特定语者辨认词汇(可由使用者自行定义,如人名声控拨号),作简单快速的训练纪录使用者的声音特性来加以辨认。随着技术的成熟,进入语音适应阶段SA(speaker  adaptation),使用者只要对于语音辨识核心,经过一段时间的口音训练后,即可拥有不错的辨识率。

2)非特定语者模式(Speaker Independent,SI),使用者无需训练即可使用,并进行辨认。任何人皆可随时使用此技术,不限定语者即男性、女性、小孩、老人皆可。

连续语音:

1)单字音辨认:为了确保每个字音可以正确地切割出来,必须一个字一个字分开来念,非常不自然,与我们平常说话的连续方式,还是有点不同。

2)整个句子辨识:只要按照你正常说话的速度,直接将要表达的说出来,中间并不需要停顿,这种方式是最直接最自然的,难度也最高,现阶段连续语音的辨识率及正确率,虽然效果还不错但仍需再提高。然而,中文字有太多的同音字,因此目前所有的中文语音辨识系统,几乎都是以词为依据,来判断正确的同音字。

可辨认词汇数量:

内建的词汇数据库的多寡,也直接影响其辨识能力。因此就语音辨识 的词汇数量来说亦可分为三种:

1)小词汇量(10-100)

2)中词汇量(100-1000)

3)无限词汇量(即听写机)

压缩分无损压缩和有损压缩。

无损压缩一般指:磁盘文件,压缩比低:2:1~4:1。

而有损压缩则是指:音/视频文件,压缩比可高达100:1。

凌阳音频压缩算法根据不同的压缩比分为以下几种 (具体可参见语音压缩工具一节内容):

SACM-A2000:压缩比为8:1,8:1.25,8:1.5

SACM-S480: 压缩比为80:3,80:4.5

SACM-S240: 压缩比为80:1.5

按音质排序:A2000S480S240

凌阳的SPCE061A是16位单片机,具有DSP功能,有很强的信息处理能力,最高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都无疑为语音的播放、录放、合成及辨识提供了条件。

凌阳压缩算法中SACM_A2000、SACM_S480、SACM_S240主要是用来放音,可用于语音提示,而DVR则用来录放音。对于音乐合成MS01,该算法较繁琐,而且需要具备音乐理论、配器法及和声学知识,所以对于特别爱好者可以到我们的网站去了解相关内容,这里只给出它的API函数介绍及程序代码的范例,仅供参考。

在前面我们已经介绍过语音辨识的一些相关的内容,在这里我们给出SPCE061的特定语者辨识SD(Speaker Dependent)的一个例子以供有兴趣者参考。SD即语音样板由单个人训练,也只能识别训练某人的语音命令,而他人的命令识别率较低或几乎不能识别。

同样语音辨识也将其一些功能作成模块,并通过API调用来实现这些功能,在这里我们为大家介绍一些常用的API函数,如果有兴趣者可以登陆我们的网站去获得更多的相关内容

初始化:

【API格式】C: int BSR_DeleteSDGroup(0);

ASM:F_BSR_DeleteSDGroup(0)

【功能说明】SRAM初始化。

【参 数】该参数是辨识的一个标识符,0代表选择SRAM,并初始化。

【返 回 值】当SRAM擦除成功返回0,否则,返回-1。

训练部分:

1) 【API格式】C:int BSR_Train (int CommandID, int TraindMode);

ASM:F_BSR_Train

【功能说明】训练函数。

【参 数】

CommandID:命令序号,范围从0x100到0x105,并且对于每组训练语句都是唯一的。

TraindMode:训练次数,要求使用者在应用之前训练一或两遍:

BSR_TRAIN_ONCE:要求训练一次。

BSR_TRAIN_TWICE要求训练两次。

【返 回 值】训练成功,返回0;没有声音返回-1;训练需要更多的语音数据来训练,返回-2;当环境太吵时,返回-3;当数据库满,返回-4;当两次输入命令不通,返回-5;当序号超出范围,返回-6。

【备 注】

① 在调用训练程序之前,确保识别器正确的初始化。

② 训练次数是2时,则两次一定会有差异,所以一定要保证两次训练结果接近

③ 为了增强可靠性,最好训练两次,否则辨识的命令就会倾向于噪音

④ 调用函数后,等待2秒开始训练,每条命令只有1 .3秒,也就是说,当训练命令超出1.3秒时,只有前1.3秒命令有效。

辨识部分:

1)【API格式】C: void BSR_InitRecognizer(int AudioSource)

ASM:F_BSR_InitRecognizer

【功能说明】辨识器初始化。

【参 数】 定义语音输入来源。通过MIC语音输入还是LINE_IN电压模拟量输入。

【返 回 值】无。

2)【API格式】C:int BSR_GetResult();

ASM:F_ BSR_GetResult

【返回值】=R1

【功能说明】辨识中获取数据。

【参 数】 无。

【返 回 值】

当无命令识别出来时,返回0;

识别器停止未初始化或识别未激活返回-1;

当识别不合格时返回-2;

当识别出来时返回命令的序号。

` 【备 注】 该函数用于启动辨识,BSR_GetResult();

3)【API格式】C: void BSR_StopRecognizer(void);

ASM:F_ BSR_StopRecognizer

【功能说明】停止辨识。

【参 数】无。

【返 回 值】 无。

【备 注】该函数是用于停止识别,当调用此函数时,FIQ_TMA中断将关闭。

中断部分:

【API格式】 ASM:_BSR_InitRecognizer

【功能说明】 在中断中调用,并通过中断将语音信号送DAC通道播放。

【参 数】无。

【返 回 值】无。

【备 注】

① 该函数在中断FIQ_TMA中调用

② 当主程序调用BSR_InitRecognizer时,辨识器便打开8K采样率的FIQ_TMA中断并开始将采样的语音数据填入辨识器的数据队列中。

③ 应用程序需要设置一下程序段在FIQ_TMA中:

.PUBLIC _FIQ

.EXTERNAL _BSR_FIQ_Routine //定义全局变量

.TEXT

_FIQ:

PUSH R1,R4 to [SP] //寄存器入栈保护

R1 = [P_INT_Ctrl]

CALL _BSR_FIQ_Routine //调用子程序

R1 = 0x2000 //清中断标志位

[P_INT_Clear] = R1

POP R1,R4 from [SP]; //寄存器组出栈

RETI

END

以下是特定人辨识的一个范例:

在程序中我们通过三条语句的训练演示特定人连续音识别,其中第一条语句为触发名称。另外两条为命令,训练完毕开始辨识当识别出触发名称后,开始发布命令,则会听到自己设置的应答,具体命令如下:

****************训练******************************************

提示音 输入语音

--------------------------------------------------------------------------------------------------------

"请输入触发名称" "警卫"

"请输入第一条命令" "开枪"

"请输入第二条命令" "你在干什么?"

"请再说一遍"(以上提示音每说完一遍出现此命令)

"没有听到任何声音"(当没有检测到声音时出现此命令)

"两次输入名称不相同"(当两次输入的名称不同时出现此命令)

"两次输入命令不相同"(当两次输入的命令有差异时出现此命令)

"准备就绪,请开始辨识"(以上三条语句全部训练成功时,进入识别)

*****************识别**********************************************************************

发布命令 应答

----------------------------------------------------------------------------------------------------------

"警卫" "在"/"长官"

"开枪" "枪声"

"你在干什么?" "我在巡逻"/"我在休息"/"我在等人"

注意:在每次提示音结束后2-3秒再输入命令或当上次应答结束2-3秒后再发布命令

#INCLUDE "bsrsd.h"

#DEFINE NAME_ID 0x100

#DEFINE COMMAND_ONE_ID 0x101

#DEFINE COMMAND_TWO_ID 0x102

#DEFINE RSP_INTR 0

#DEFINE RSP_NAME 1

#DEFINE RSP_FIRE 2

#DEFINE RSP_GUARD 3

#DEFINE RSP_AGAIN 4

#DEFINE RSP_NOVOICE 5

#DEFINE RSP_NAMEDIFF 6

#DEFINE RSP_CMDDIFF 7

#DEFINE RSP_STAR 8

#DEFINE RSP_MASTER 9

#DEFINE RSP_HERE 10

#DEFINE RSP_GUNSHOT 0

#DEFINE RSP_PATROL 11

#DEFINE RSP_READY 12

#DEFINE RSP_COPY 13

#DEFINE RSP_NOISY 14

//..................全程变量..................……………………………………………………………………….

int gActivated = 0;

//该变量用于检测是否有触发命令,当有识别出语句为触发名称则该位置1

int gTriggerRespond[] = {RSP_MASTER, RSP_HERE, RSP_MASTER};

//第一条命令应答

int gComm2Respond[] = {RSP_PATROL, RSP_READY, RSP_COPY};

//第二条命令应答

extern void ClearWatchDog();

int PlayFlag = 0;

void PlayRespond2(int Result)

//枪声放音子程序

{

BSR_StopRecognizer();

SACM_A2000_Initial(1);

SACM_A2000_Play(Result, 3, 3);

while((SACM_A2000_Status()0x0001) != 0)

{

SACM_A2000_ServiceLoop();

ClearWatchDog();

}

SACM_A2000_Stop();

BSR_InitRecognizer(BSR_MIC);

BSR_EnableCPUIndicator();

}

void PlayRespond(int Result) //放音子程序

{

BSR_StopRecognizer();

SACM_S480_Initial(1);

SACM_S480_Play(Result, 3, 3);

while((SACM_S480_Status()0x0001) != 0)

{

SACM_S480_ServiceLoop();

ClearWatchDog();

}

SACM_S480_Stop();

BSR_InitRecognizer(BSR_MIC);

BSR_EnableCPUIndicator(); //启动实时监控

}

int TrainWord(int WordID, int RespondID) //命令训练

{

int res;

PlayRespond(RespondID);

while(1)

{

res = BSR_Train(WordID,BSR_TRAIN_TWICE);

if(res == 0) break;

switch(res)

{

case -1: //没有检测出声音

PlayRespond(RSP_NOVOICE);

return -1;

case -2: //需要重新训练一遍

PlayRespond(RSP_AGAIN);

break;

case -3: //环境太吵

PlayRespond(RSP_NOISY);

return -1;

case -4: //数据库满

return -1;

case -5: //检测出声音不同

if(WordID == NAME_ID)

PlayRespond(RSP_NAMEDIFF); //两次输入名称不同

else

PlayRespond(RSP_CMDDIFF);//两次输入命令不同

return -1;

case -6: //序号错误

return -1;

}

}

return 0;

}

int main()

{

int res, timeCnt=0, random_no=0;

BSR_DeleteSDGroup(0); // 初始化存储器为RAM

PlayRespond(RSP_INTR); //播放开始训练的提示音

//..........训练名称..............................

while(TrainWord(NAME_ID,1) != 0) ;

//..........训练第一条命令.......................

while(TrainWord(COMMAND_ONE_ID,2) != 0) ;

//..........训练第二条命令.......................

while(TrainWord(COMMAND_TWO_ID,3) != 0) ;

//..........开始识别命令.........................

BSR_InitRecognizer(BSR_MIC); //辨识器初始化

BSR_EnableCPUIndicator();

PlayRespond(RSP_STAR); // 播放开始辨识的提示音

while(1)

{

random_no ++;

if(random_no = 3) random_no = 0;

res = BSR_GetResult();

if(res 0) //识别出命令

{

if(gActivated)

{

timeCnt = 0;

switch(res)

{

case NAME_ID:

PlayRespond(gTriggerRespond[random_no]);

break;

case COMMAND_ONE_ID:

PlayFlag = 1;

PlayRespond2(RSP_GUNSHOT);

PlayFlag = 0;

gActivated = 0;

break;

case COMMAND_TWO_ID:

PlayRespond(gComm2Respond[random_no]);

gActivated = 0;

}

}

else

{

if(res == NAME_ID)

{PlayRespond(gTriggerRespond[random_no]);

gActivated = 1;

timeCnt = 0;

}

}

}

else if (gActivated)

{

if (++timeCnt 450) //超出定时

{PlayRespond(RSP_NOVOICE); //在设定时间内没有检测出声音

gActivated = 0;

timeCnt = 0;

}

}

}

}

中断程序:

.PUBLIC _FIQ

.EXTERNAL _BSR_FIQ_Routine

.EXTERNAL __gIsStopRecog //变量值 = 0 辨识器忙

// = 1 辨识器停止

.PUBLIC _BREAK,_IRQ0, _IRQ1, _IRQ2, _IRQ3, _IRQ4, _IRQ5, _IRQ6, _IRQ7

.EXTERNAL _PlayFlag

.INCLUDE s480.inc;

.INCLUDE A2000.inc;

.INCLUDE resource.inc

.INCLUDE hardware.inc

.TEXT

_FIQ:

push R1,R4 to [SP]

R1 = [P_INT_Ctrl]

R1 = 0x2000

jz ?notTimerA //当不为TIQ_TMA,则转

R1 = [__gIsStopRecog]

jnz ?BSR_NotBusy

//[__gIsStopRecog]为1则转至放音处理

call _BSR_FIQ_Routine //为0,调用辨识子程序

jmp ?BSR_Busy //返回中断

?BSR_NotBusy: //放音处理

R2 = [_PlayFlag]

jnz ?Play2000 //[_PlayFlag]为1则是播放2000

call F_FIQ_Service_SACM_S480; //为0,播放480

jmp ?BSR_Busy //返回中断

?Play2000: //2000播放子程序

call F_FIQ_Service_SACM_A2000;

?BSR_Busy: //返回中断

R1 = 0x2000

[P_INT_Clear] = R1

pop R1,R4 from [SP];

reti;

?notTimerA:

R1 = 0x8800;

[P_INT_Clear] = R1;

pop R1,R4 from [SP];

reti;

.END

单片机……在只有八位RAM的单片机中两个十六进制数相减!高手指点!汇编语句实现!谢了

用两个寄存器分别保存一个数的高位和低位,相减时低位减低位,高位减高位,但关键是低位相减时要用SUBS,如果不够减它将会标记状态寄存器里面的借位;高位减高位时用SBC,它会把状态寄存器里面的借位一起减去。印象中好像就是这样实现的,如果不行你可以查一下ARM汇编相关的书

ab543c是什么芯片

ab543c是/BMS芯片单车用量达到12颗,到2025年,其市场规模将达3亿美元。

BMS(Battery management system)应用领域广阔,消费类下游市场是其最主要的应用,如手机、平板、笔记本等。但近几年,电动汽车起势迅猛,高压、高容量密度、快充等特性对BMS提出了更高的要求,也带动单车BMIC(电池管理芯片)需求翻倍增长。

根据财通证券测算,2021年,全球新能源汽车领域BMIC市场规模约2.81亿美元,预计2026年将达到15.13亿美元,CAGR为40.07%,较手机BMIC市场规模的CAGR(1.92%),翻了20倍。

阅读本文,你将了解以下内容:

1. BMS的上车史

2. BMS的芯片成分

3. BMS芯片的玩家们

01

BMS概念与来历

BMS即电池管理系统(Battery management system)。顾名思义是管理电动汽车动力电池的一套系统。BMS扮演着整车电池系统的管家角色,主要功能是采样测量和评估管理,这两大功能由电池控制器单元(BatteryControl Unit,BCU)和电池管理单元(BatteryManagementUnit,BMU)构成。

作为汽车三电系统之一,电池占整车成本的30%-40%左右,因此BMS对整车也是极其重要的一部分。但BMS也并不是电动汽车时代下的产物,它也跟随着电池技术的发展以及应用场景的复杂度不同而变化着。

从铜锌电池到铅酸电池,再到现在的锂电池或钠离子电池,电池技术在近几十年取得了长足的进步。早期的电池如镍镉电池,往往以单体电池的形式出现,所以对电池的状态不需要严加看管。

但到后面,电池以多节串联的形式出现后,问题就来了:每节电池的特性存在差异,电池之间的电量均衡也存在差异。

“两人三足”大家都玩过吧,很考验团队配合能力,总有猪队友步子迈大了,三天两头鼻青脸肿,时间久了,身子垮了,人心散了,还能跑得动吗?

换作电池也是一样,最终结果会导致某节电池经常处于过充或过放的状态,整体电池组的寿命大打折扣,因此人们便手动定期进行检查电池的一致性。

传统意义上的手工活耗时费力并且无法做到实时监控,所以现代意义上的BMS由此诞生。现代BMS功能也是由俭入奢,从早期简单的电压、温度、电流等基本参数监控外,慢慢发展至多个功能如实时监控、电池均衡管理、防过充及过放等。

BMS系统可以划分为硬件、底层软件和应用层软件三大部分,硬件部分包含BMIC、传感器等;底层软件基于汽车开放系统结构(AUTOSAR)将BMS划分为多个区块,实现对不同硬件进行配置;应用层软件主要功能包括充电管理、电池状态估算、均衡控制、故障管理等。

虽然IC占整体动力电池成本的5%左右,但现在电动汽车动力电池讲究高能量密度与高可靠性,如特斯拉采用的18650电池,由7000多节电芯以串联+并联方式构成,如此多数量的电芯之间参数也不尽相同,对BMS更是提出了艰难的要求。

特斯拉Model S依靠一颗TI的电池监控和保护芯片BQ76PL536实现了18650电池的管理,但BMIC可不止这些。

02

BMS里藏着哪些芯片?

在了解BMS芯片之前,我们先来了解下BMS的架构。

BMS拓扑架构分为集中式与分布式。大家一看到集中式是不是认为这是主流?那就错了。

集中式BMS结构紧凑,成本低,但线束多,通道数量有限,一般用于容量低、系统体积小且低压的场景中,比如电动两轮车、机器人、智能家居等。

集中式结构示意图

分布式BMS结构可以理解为主+从的关系,从控单元负责采集电池数据,均衡功能等,主控单元处理数据,判断电池运行情况,进行充电管理、热管理、故障管理等,并且与外部车载控制器等进行实时通信。

分布式结构示意图

电动汽车动力电池向高能量密度、高压及大体积方向发展,在混动和纯电动汽车上主要采用的是分布式BMS架构,如BMW i3/i8/X1、特斯拉Model S/X、比亚迪秦等。虽然控制复杂、成本较高,但胜在灵活性强、线束少。

基于分布式BMS结构,我们将芯片进行分类:

数据采集部分

AFE(模拟前端):AFE泛指电池监测芯片,主要配合各种传感器采集电芯电压、温度等信息,仅具有参数监测功能。此外,AFE一般集成被动均衡技术。这里提一下什么是电池均衡,如前文所述,一般高串数电池组中,每个电池的电压、电量会有所不同,为了保障之间的电量均衡,所以采取主动均衡或被动均衡。

被动均衡通过无源器件将电量多的电芯通过电阻发热消耗掉多余电量,而主动均衡是将多余电量进行转移,实现电芯间的能量流动。被动均衡成本低,可靠性高但增加系统损耗。主动均衡所需元器件较多,成本高,但利于降低系统损耗。

电量计量芯片:采集电池信息,并采用特定算法对电池的SOC(荷电状态,即剩余电量)和SOH(电池健康状态,即老化程度)等参数进行估算,并将结果传送给控制芯片。

控制部分

电池保护芯片:监测电池充放电情况,包括过压、过流、过热等,一旦发现异常情况可以及时切断电路,保护电池系统的安全。目前,部分计量和充电芯片会集成电池保护功能。

充电管理芯片:主要负责充放电管理。根据锂电特性自动进行预充、恒流充电、恒压充电。充电管理芯片使电压、电流达到可控状态,可以有效的控制充电的各个阶段的充电状态,保护电池 过放电、过压、过充、过温,最终有利于电池的寿命延续。

充电管理芯片根据工作模式不同可以分为开关、线性、开关电容。开关型适用于大电流应用,且具灵活性,常用的快充方案都是采用开关型;线性一般应用于小功率充电场景,如便携电子设备;开关电容型充电效率高,但架构受限,一般与开关型搭配使用。

MCU:负责继电器控制、SOC/SOH估算、电池数据收集、存储等。需要满足AEC-Q100、ISO26262等认证。相较于消费级及工规MCU,车规级MCU壁垒更高,对可靠性、一致性、安全性、稳定性有着硬性要求。

通信部分

数字隔离器件:在BMS系统中,SOX(包含SOC、SOH等)算法一般在MCU中执行,因此在AFE与MCU间通常采用数字隔离器件来进行通信。

图为菊花链结构,来源:ADI

目前主流通讯架构为菊花链架构,每个AFE之间互相连接,然后通过一颗隔离通讯芯片连接到MCU,减少了通讯芯片的数量。相对于CAN总线,菊花链架构的优点在于一旦中间断开,后面的AFE芯片仍可以继续通讯。

以下是小鹏BMS采样板、特斯拉Model S采样板和通用Ultium无线BMS中所用到的一些具体芯片信息:

小鹏G3 BMS采样板如下图:

采用AFE+隔离+单片机+CAN的结构,电芯采样部分采用的AFE芯片是ADI LTC6811-1,隔离通讯器件采用的是ADI LTC6820。单片机采用的是NXP S9S12G128F0MLF,SBC芯片采用的是NXP UJA1167,内部集成高速CAN和LDO。

特斯拉Model S采样板如下图:

AFE芯片采用的是TI BQ75PL536A,数字隔离器件采用的是Silicon Labs(芯科科技)SI8642ED,MCU采用的是Silicon Labs C8051F543。

通用无线BMS系统电路板如下图:

目前提供无线BMS解决方案的主要有德州仪器和ADI两家,上图使用的是ADI的方案,由伟世通提供设计和制造。无线BMS系统中,感知单元获取电池基本信息,通过2.4GHz通信传送至控制模块中。

该系统中的核心芯片是ADI ADRF8850和TI TPS3850。ADRF8850是低功耗集成片上系统(SoC)其中包括一个2.4 GHz的ISM频段无线电和一个嵌入式微控制器单元(MCU)子系统。ADRF8850在电池单元监测芯片和电池管理系统(BMS)控制器之间提供无线通信。TPS3850是TI的电源和看门狗芯片。

TI在无线BMS系统中提供的芯片是SimpleLink™ CC2662R-Q1和BQ79616-Q1,前者是无线MCU,后者是电池监控器和均衡器,两者均满足ASIL-D等级。

03

BMS芯片的玩家们

BMIC的研发横跨电、热、化学等多学科,被业内冠以“模拟芯片的皇冠”的称号。

其中AFE的主要供应商有ADI、TI、ST、NXP、瑞萨等,ADI的产品主要来自收购的Linear Technology和美信,瑞萨的产品主要来自收购的Intersil。MCU的主要供应商有NXP、ST、TI、英飞凌等,目前国内也有不少MCU厂商都在积极布局车规级产品,比如兆易创新、芯旺微等。数字隔离器件的主要供应商有TI、ADI、Silicon Labs等。

部分AFE芯片信息 来源:安信证券(截至2022年4月)

国内BMS相关芯片企业如下:

来源:安信证券

整体来看,国产芯片在汽车动力电池领域仍在初步布局阶段,BMIC长期被 TI、ADI等欧美企业垄断。

这其中主要原因在于车规级芯片认证要求严苛,技术门槛高。车规级认证规范包括AEC-Q100、ISO 26262和IATF 16949等。其中,ISO26262是汽车芯片功能安全认证。汽车功能安全从ASIL-A到ASIL-D分为四个等级,A最低,主要用在车身控制等与行驶安全关联度较低的系统中;D最高,主要用发动机等与行驶安全息息相关的系统中。功能安全要求较高,电路和系统设计难度较大,是目前车规芯片验证耗时最长的环节之一。另一方面,模拟器件利润较低,企业投产布局多持谨慎态度。

04

结 语

BMS的下游应用领域主要包括消费电子、汽车动力电池、储能。其中,动力电池是BMS最大的应用领域,2020年份额达到54%。但是汽车动力电池相较于其他应用领域,要求绝对的高可靠性、安全性,因此BMS在汽车领域虽然有更为广阔的市场空间,但也更具有挑战性。

芯片技术是BMS产业链的核心,据财通证券测算,2021年全球新能源车领域 BMIC市场规模约2.81亿美元,预计2026年将达到15.13亿美元,2021-2026年CAGR=40.07%。伴随着新能源汽车的发展,以及车用芯片的持续紧缺,我国BMS芯片需求持续增长,国产替代正当时。

单片机汇编...如何将两个8 bit的寄存器,一个高八位,一个低八位,实现BCD化啊?

转成10进吗?

这个很简单

假设R1 是高 R2是低

loop:

mov a,r2

sub a,1h 低位-1

mov a,r1

sbc a,0h 高位带标志减0

snz c 借位跳走结束

jmp END

mov a,1h 没借位将+1并10进制寄存器(daa)

add a,AL

DAA AL

MOV A,0H

ADC A,AH

DAA AH

JMP LOOP

END:

此时的AL AH是十进制数 如果数大可以在增加寄存器

单片机sbc的介绍到此就结束了,感谢您耐心阅读,谢谢。

本文标签:单片机sbc

<