最近爆火的电子血氧仪是什么原理?测的准吗?

嵌入式ARM 2023-01-09 12:01

继口罩、抗原、药品之后,最近电子血氧仪的价格也开始水涨船高。从一个多月前的100多元,暴涨到了300多元。

那么,这类家用的电子血氧仪是如何工作的呢?测量数据到底准不准?今天就带大家来分析一下。

一、血氧仪工作原理

血氧仪是一种监测脉搏、血氧饱和度等指标的医疗器械,常见的家用型血氧仪,主要有指夹式、腕表式等形式。

一般大家最关注的是血氧饱和度(oxygen saturation简写为SpO2),它是指在全部血容量中被结合O2容量占全部可结合的O2容量的百分比,是人体携带氧气能力的重要参考值。人体正常的SpO2应该不小于95%,长期低于93%时需要就医。

SpO2 一般由以下公式计算:

其中CHbO2是氧合血红蛋白浓度,CHb是还原血红蛋白浓度。

一方面,这两种血红蛋白对不同波长的光有不同的吸收度;另一方面,当动脉跳动时,动脉中的血液量会发生变化,可以区分出皮肤、肌肉、静脉血等对光的吸收影响(这些组织对光的吸收可以认为固定不变)。因此,利用两种不同波长的光,经透射或反射后,采集数据综合处理,就能计算出血氧饱和度。

现在市面上最常见的,都是光电式的血氧仪,如下图所示,有透射式和反射式两种实现方法。

常见的指夹式血氧仪就是透射式,智能手环或手表就是反射式,原理是差不多的。

而LED光源的选择,与血红蛋白对不同光波长的吸收率有关,下图是两种血红蛋白对不同波长的光的消光系数图:

可以看到,两种血红蛋白对波长为660nm左右光的吸收差别最大,而对波长为800nm左右光的吸收基本相等。

从理论上说,使用660nm和800nm波长的光作为光源是最合适的,但由于在800nm左右时,二者的消光系数斜率相差较大,光波长偏差一点就会引起较大的吸收率变化,这对LED的制造工艺要求太高。所以,工程实现时,一般不用800nm波长的LED,而选择波长为860nm~920nm的LED作为另一个光源,这个区间的消光系数斜率基本一样,而且变化平缓。

至此,硬件部分的实现我们已经了解大概了,其实核心就是要使用两个LED作为光源,一个660nm波长的红外光,一个900nm左右波长的红光。两束光分别通过透射(或反射)皮肤后,到达光电接收管,再采集光电接收管的值。

那么,采集到两个光源的值后,又该如何处理呢?这里由于有比较多的公式推导,我们直接略过,给出下面的公式:

这里的实现需要三步:

第一步,我们采集的两个LED光源的值,需要分离出直流分量和交流分量,也就是:红光的交流分量ACred、红光的直流分量DCred、红外光的交流分量ACired、红外光的直流分量DCired;

第二步,用采集到的四个值,计算出R;

第三步,用R计算SpO2,这个计算公式中a、b、c是三个需要校准的参数。需要大量的试验数据去拟合出来。

二、血氧仪的制作

有了以上的理论基础,我们可以自己动手DIY一个血氧仪。

Maxim公司有一款集成芯片,可以实现大部分的硬件功能,就是MAX30100、MAX30102系列芯片。MAX30100已停产,新设计中不推荐使用,MAX30102是新一代产品。

目前价格还没有太离谱:

MAX30102集成了一个660nm红光LED、880nm红外光LED、光电检测器,以及带环境光抑制的低噪声电子电路。芯片内部含18bit ADC采集电路。对外是I2C接口。基本上单芯片就能实现光源信号的采集。

要注意,MAX30102的输出值,只是两个LED光源的采集值。后续还需要软件去实现交流、直流分离,R的求解、SpO2的求解。顺带也可以求解出脉搏数据。

使用max30102很简单,用I2C接口访问,初始化代码如下:

max30102_Bus_Write(REG_INTR_ENABLE_1,0xc0);  // INTR settingmax30102_Bus_Write(REG_INTR_ENABLE_2,0x00);max30102_Bus_Write(REG_FIFO_WR_PTR,0x00);    //FIFO_WR_PTR[4:0]max30102_Bus_Write(REG_OVF_COUNTER,0x00);    //OVF_COUNTER[4:0]max30102_Bus_Write(REG_FIFO_RD_PTR,0x00);    //FIFO_RD_PTR[4:0]max30102_Bus_Write(REG_FIFO_CONFIG,0x0f);    //sample avg = 1, fifo rollover=false, fifo almost full = 17max30102_Bus_Write(REG_MODE_CONFIG,0x03);    //0x02 for Red only, 0x03 for SpO2 mode 0x07 multimode LEDmax30102_Bus_Write(REG_SPO2_CONFIG,0x27);    // SPO2_ADC range = 4096nA, SPO2 sample rate (100 Hz), LED pulseWidth (400uS)  max30102_Bus_Write(REG_LED1_PA,0x24);     //Choose value for ~ 7mA for LED1max30102_Bus_Write(REG_LED2_PA,0x24);     // Choose value for ~ 7mA for LED2max30102_Bus_Write(REG_PILOT_PA,0x7f);     // Choose value for ~ 25mA for Pilot LED
主函数中循环调用fifo读取函数,用于获取LED光源的采集值:
void maxim_max30102_read_fifo(uint32_t *pun_red_led, uint32_t *pun_ir_led){  uint32_t un_temp;  unsigned char uch_temp;  char ach_i2c_data[6];  *pun_red_led=0;  *pun_ir_led=0;
//read and clear status register maxim_max30102_read_reg(REG_INTR_STATUS_1, &uch_temp); maxim_max30102_read_reg(REG_INTR_STATUS_2, &uch_temp);
IIC_ReadBytes(I2C_WRITE_ADDR,REG_FIFO_DATA,(u8 *)ach_i2c_data,6);
un_temp=(unsigned char) ach_i2c_data[0]; un_temp<<=16; *pun_red_led+=un_temp; un_temp=(unsigned char) ach_i2c_data[1]; un_temp<<=8; *pun_red_led+=un_temp; un_temp=(unsigned char) ach_i2c_data[2]; *pun_red_led+=un_temp;
un_temp=(unsigned char) ach_i2c_data[3]; un_temp<<=16; *pun_ir_led+=un_temp; un_temp=(unsigned char) ach_i2c_data[4]; un_temp<<=8; *pun_ir_led+=un_temp; un_temp=(unsigned char) ach_i2c_data[5]; *pun_ir_led+=un_temp; *pun_red_led&=0x03FFFF; //Mask MSB [23:18] *pun_ir_led&=0x03FFFF; //Mask MSB [23:18]}

采集值最好经过滤波,以减少噪声的干扰。

之后,再分离出交流、直流分量,求出R和SpO2即可,核心是这个函数:

void maxim_heart_rate_and_oxygen_saturation(uint32_t *pun_ir_buffer,  int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid,                               int32_t *pn_heart_rate, int8_t  *pch_hr_valid){    uint32_t un_ir_mean ,un_only_once ;    int32_t k ,n_i_ratio_count;    int32_t i, s, m, n_exact_ir_valley_locs_count ,n_middle_idx;    int32_t n_th1, n_npks,n_c_min;          int32_t an_ir_valley_locs[15] ;    int32_t an_exact_ir_valley_locs[15] ;    int32_t an_dx_peak_locs[15] ;    int32_t n_peak_interval_sum;
int32_t n_y_ac, n_x_ac; int32_t n_spo2_calc; int32_t n_y_dc_max, n_x_dc_max; int32_t n_y_dc_max_idx, n_x_dc_max_idx; int32_t an_ratio[5],n_ratio_average; int32_t n_nume, n_denom ; // remove DC of ir signal un_ir_mean =0; for (k=0 ; k un_ir_mean =un_ir_mean/n_ir_buffer_length ; for (k=0 ; k
// 4 pt Moving Average for(k=0; k< BUFFER_SIZE-MA4_SIZE; k++){ n_denom= ( an_x[k]+an_x[k+1]+ an_x[k+2]+ an_x[k+3]); an_x[k]= n_denom/(int32_t)4; }
    // get difference of smoothed IR signal     for( k=0; k an_dx[k]= (an_x[k+1]- an_x[k]);
// 2-pt Moving Average to an_dx for(k=0; k< BUFFER_SIZE-MA4_SIZE-2; k++){ an_dx[k] = ( an_dx[k]+an_dx[k+1])/2 ; }
// hamming window // flip wave form so that we can detect valley with peak detector for ( i=0 ; i s= 0; for( k=i; k s -= an_dx[k] *auw_hamm[k-i] ; } an_dx[i]= s/ (int32_t)1146; // divide by sum of auw_hamm     }
n_th1=0; // threshold calculation for ( k=0 ; k n_th1 += ((an_dx[k]>0)? an_dx[k] : ((int32_t)0-an_dx[k])) ; } n_th1= n_th1/ ( BUFFER_SIZE-HAMMING_SIZE); // peak location is acutally index for sharpest location of raw signal since we flipped the signal maxim_find_peaks( an_dx_peak_locs, &n_npks, an_dx, BUFFER_SIZE-HAMMING_SIZE, n_th1, 8, 5 );//peak_height, peak_distance, max_num_peaks
n_peak_interval_sum =0; if (n_npks>=2){ for (k=1; k n_peak_interval_sum += (an_dx_peak_locs[k]-an_dx_peak_locs[k -1]); n_peak_interval_sum=n_peak_interval_sum/(n_npks-1); *pn_heart_rate=(int32_t)(6000/n_peak_interval_sum);// beats per minutes *pch_hr_valid = 1; } else { *pn_heart_rate = -999; *pch_hr_valid = 0; }
for ( k=0 ; k        an_ir_valley_locs[k]=an_dx_peak_locs[k]+HAMMING_SIZE/2; 
// raw value : RED(=y) and IR(=X) // we need to assess DC and AC value of ir and red PPG. for (k=0 ; k an_x[k] = pun_ir_buffer[k] ; an_y[k] = pun_red_buffer[k] ; }
// find precise min near an_ir_valley_locs n_exact_ir_valley_locs_count =0; for(k=0 ; k un_only_once =1; m=an_ir_valley_locs[k]; n_c_min= 16777216;//2^24; if (m+5 < BUFFER_SIZE-HAMMING_SIZE && m-5 >0){ for(i= m-5;i if (an_x[i] if (un_only_once >0){ un_only_once =0; } n_c_min= an_x[i] ; an_exact_ir_valley_locs[k]=i; } if (un_only_once ==0) n_exact_ir_valley_locs_count ++ ; } } if (n_exact_ir_valley_locs_count <2 ){ *pn_spo2 = -999 ; // do not use SPO2 since signal ratio is out of range *pch_spo2_valid = 0; return; } // 4 pt MA for(k=0; k< BUFFER_SIZE-MA4_SIZE; k++){ an_x[k]=( an_x[k]+an_x[k+1]+ an_x[k+2]+ an_x[k+3])/(int32_t)4; an_y[k]=( an_y[k]+an_y[k+1]+ an_y[k+2]+ an_y[k+3])/(int32_t)4; }
//using an_exact_ir_valley_locs , find ir-red DC andir-red AC for SPO2 calibration ratio //finding AC/DC maximum of raw ir * red between two valley locations n_ratio_average =0; n_i_ratio_count =0;
for(k=0; k< 5; k++) an_ratio[k]=0; for (k=0; k< n_exact_ir_valley_locs_count; k++){ if (an_exact_ir_valley_locs[k] > BUFFER_SIZE ){ *pn_spo2 = -999 ; // do not use SPO2 since valley loc is out of range *pch_spo2_valid = 0; return; } } // find max between two valley locations // and use ratio betwen AC compoent of Ir & Red and DC compoent of Ir & Red for SPO2
for (k=0; k< n_exact_ir_valley_locs_count-1; k++){ n_y_dc_max= -16777216 ; n_x_dc_max= - 16777216; if (an_exact_ir_valley_locs[k+1]-an_exact_ir_valley_locs[k] >10){ for (i=an_exact_ir_valley_locs[k]; i< an_exact_ir_valley_locs[k+1]; i++){ if (an_x[i]> n_x_dc_max) {n_x_dc_max =an_x[i];n_x_dc_max_idx =i; } if (an_y[i]> n_y_dc_max) {n_y_dc_max =an_y[i];n_y_dc_max_idx=i;} } n_y_ac= (an_y[an_exact_ir_valley_locs[k+1]] - an_y[an_exact_ir_valley_locs[k] ] )*(n_y_dc_max_idx -an_exact_ir_valley_locs[k]); //red n_y_ac= an_y[an_exact_ir_valley_locs[k]] + n_y_ac/ (an_exact_ir_valley_locs[k+1] - an_exact_ir_valley_locs[k]) ;

n_y_ac= an_y[n_y_dc_max_idx] - n_y_ac; // subracting linear DC compoenents from raw n_x_ac= (an_x[an_exact_ir_valley_locs[k+1]] - an_x[an_exact_ir_valley_locs[k] ] )*(n_x_dc_max_idx -an_exact_ir_valley_locs[k]); // ir n_x_ac= an_x[an_exact_ir_valley_locs[k]] + n_x_ac/ (an_exact_ir_valley_locs[k+1] - an_exact_ir_valley_locs[k]); n_x_ac= an_x[n_y_dc_max_idx] - n_x_ac; // subracting linear DC compoenents from raw n_nume=( n_y_ac *n_x_dc_max)>>7 ; //prepare X100 to preserve floating value n_denom= ( n_x_ac *n_y_dc_max)>>7; if (n_denom>0 && n_i_ratio_count <5 && n_nume != 0) { an_ratio[n_i_ratio_count]= (n_nume*20)/n_denom ; //formular is ( n_y_ac *n_x_dc_max) / ( n_x_ac *n_y_dc_max) ; ///*************************n_nume原来是*100************************// n_i_ratio_count++; } } }
maxim_sort_ascend(an_ratio, n_i_ratio_count); n_middle_idx= n_i_ratio_count/2;
if (n_middle_idx >1) n_ratio_average =( an_ratio[n_middle_idx-1] +an_ratio[n_middle_idx])/2; // use median else n_ratio_average = an_ratio[n_middle_idx ];
if( n_ratio_average>2 && n_ratio_average <184){ n_spo2_calc= uch_spo2_table[n_ratio_average] ; *pn_spo2 = n_spo2_calc ; *pch_spo2_valid = 1;// float_SPO2 = -45.060*n_ratio_average* n_ratio_average/10000 + 30.354 *n_ratio_average/100 + 94.845 ; // for comparison with table } else{ *pn_spo2 = -999 ; // do not use SPO2 since signal ratio is out of range *pch_spo2_valid = 0; }}
需要注意的是,这里使用的函数是SpO2 = -45.060*R*R+ 30.354*R+ 94.845,采用了查表法求解。
这个函数执行完后,变量n_heart_rate中存储的是心率,变量n_sp02存储的就是血氧饱和度。最后将血氧饱和度值显示出来就行了。

三、血氧仪测量准不准?

在实现过程中,SpO2与R的关系的系数是非常难确定的,需要大量的试验数据来拟合,见下图,是maxim公司应用文档中的拟合过程:
(每种颜色是一组测试结果,黄色叉是去除掉的偏离比较大的野值)
可以发现,有些测量数据的方差是相当大的,很多数据偏离了拟合后的曲线很远。maxim公司建议在校准时,需要不断剔除偏离较大的数据,均方根误差(RMES)需要在3.5%以内。
最终给出一组值:
可是,在另一篇maxim公司的应用文档中,又给出了SpO2 = 104-17*R这个公式,其中0.4
为什么这两公式相差这么大?
通过查阅一些论文发现,对于R值与血氧饱和度的公式并不固定,SpO2可以表示为R的一个高次的多项式函数,由于正常人体测出的R值都较小,人们一般关注的是R值小于1的情况,大于1已经是明显的不健康情况。所以,在计算SpO2时常常会去掉高次项,采用一阶函数或者二阶函数来拟合。
又由于SpO2的测量方法本身误差较大,所以测量数据不同时,拟合出来的参数就大相径庭了。
这里还收集了几个论文中拟合出的R值与SpO2之间的函数关系:
  • SpO2 = -45.060*R*R+ 30.354*R+ 94.845

  • SpO2 = -7.6*R*- 20.7*R+ 112.2,(0.5

  • SpO2 = -86.47*R*R+ 77.21*R+ 81.68,(0.4

  • SpO2 = -20*x+107.2,(0.36
把这几个函数的图形绘制在同一张图中:
可以看到,在R为0.4~1.0这个区间里,这些函数的值大体上相差不大,变化趋势也基本一样。而且这些参数,一般都是以正常人的数据来拟合的。所以,在正常血氧的范围内,可以认为用这种方法来测量血氧饱和度基本靠谱。而当血氧饱和度偏离正常值时,误差会显著增大。
当然,这需要建立在光源的采集数据准确的前提下,也就是R值准确的时候。
而现实是,在采集光源的数据时,会有环境光干扰、工频干扰、各种噪声干扰;即使滤除了这些噪声,还会有如下图这种低频的漂移。此时,要准确提取出光源的直流分量、交流分量是非常困难的。
因此,如果信号处理的算法不好,就会把微弱的噪声、漂移等等干扰识别为脉搏引起的光强变化,网上出现的各种能测出香肠的血氧和脉搏的笑话也就不足为奇了。
综合来看,此类血氧仪作为健康监测的参考手段之一是可以的,但数据准确性存疑。所以,以它来判断身体是否健康是万万不能的!
好了,本节内容就分享到这里了,希望这篇文章能对大家有所帮助。

END

来源:小白白学电子

版权归原作者所有,如有侵权,请联系删除。

推荐阅读
曾经对程序员最好的公司,倒下了…
一款活跃了17年的开发工具,好用到起飞~
单片机只会调库和复制别人的代码是什么水平?

→点关注,不迷路←

嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 122浏览
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 145浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 159浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 658浏览
  • 日前,商务部等部门办公厅印发《手机、平板、智能手表(手环)购新补贴实施方案》明确,个人消费者购买手机、平板、智能手表(手环)3类数码产品(单件销售价格不超过6000元),可享受购新补贴。每人每类可补贴1件,每件补贴比例为减去生产、流通环节及移动运营商所有优惠后最终销售价格的15%,每件最高不超过500元。目前,京东已经做好了承接手机、平板等数码产品国补优惠的落地准备工作,未来随着各省市关于手机、平板等品类的国补开启,京东将第一时间率先上线,满足消费者的换新升级需求。为保障国补的真实有效发放,基于
    华尔街科技眼 2025-01-17 10:44 238浏览
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 203浏览
  • 故障现象 一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机的气缸编号 故障诊断接车后试车,发动机怠速运转平稳,但只要换挡起步,稍微踩下一点加速踏板,就能感觉到车身明显抖动。用故障检测仪检测,发动机控制模块(ECM)无故障代码存储,且无失火数据流。用虹科Pico汽车示波器测量气缸1点火信号(COP点火信号)和曲轴位置传感器信
    虹科Pico汽车示波器 2025-01-23 10:46 74浏览
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 134浏览
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 210浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 194浏览
  • 随着消费者对汽车驾乘体验的要求不断攀升,汽车照明系统作为确保道路安全、提升驾驶体验以及实现车辆与环境交互的重要组成,日益受到业界的高度重视。近日,2024 DVN(上海)国际汽车照明研讨会圆满落幕。作为照明与传感创新的全球领导者,艾迈斯欧司朗受邀参与主题演讲,并现场展示了其多项前沿技术。本届研讨会汇聚来自全球各地400余名汽车、照明、光源及Tier 2供应商的专业人士及专家共聚一堂。在研讨会第一环节中,艾迈斯欧司朗系统解决方案工程副总裁 Joachim Reill以深厚的专业素养,主持该环节多位
    艾迈斯欧司朗 2025-01-16 20:51 326浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 609浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 175浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 321浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦