ESP32-S3ADC外设.2-单次触发模式

原创 云深之无迹 2023-09-15 12:11

IDF写的还挺好,我觉得,这么多芯片可以缝缝补补的用一个SDK,牛的咧。

ESP32-S3 ADC外设

ESP32-S3 ADC外设.1-实例

这个是最常见的宏定义

单次触发的单元体

这个绝对是里面最常见的宏了

该宏定义接受以下参数:

  • a:要检查的条件表达式。

  • err_code:在条件为假时返回的错误代码。

  • goto_tag:条件为假时要跳转到的标签位置。

  • log_tag:用于记录日志的标签位置(可选)。

  • format:格式化字符串(可选)。

  • ...:可变参数列表(可选)。

该宏的作用是执行以下操作:

  1. 如果提供了 log_tag,则将其值打印到日志中。

  2. 检查条件 a 是否为假。如果为假,则执行以下操作:

  • 将错误代码赋值给变量 ret

  • 使用 goto_tag 跳转到指定标签位置。

这个宏通常用于在条件为假时进行错误处理或跳转到特定的代码块。


在这里是错误的代码的处理处

连着就2个

这是一个条件判断的宏定义,用于检查 init_configret_unit 是否为空指针。如果其中任何一个为空指针,则跳转到指定的标签位置 err,并打印错误信息 "invalid argument: null pointer"。

具体解释如下:

  • init_config && ret_unit:这是一个逻辑与操作,用于检查 init_config 和 ret_unit 是否都非空。如果两者都非空,则表达式的结果为真;否则为假。

  • ESP_ERR_INVALID_ARG:这是错误代码常量,表示参数无效的错误。

  • err:这是要跳转到的标签位置。

  • TAG:这是要打印日志的标签位置。

  • "invalid argument: null pointer":这是要打印的错误信息字符串。

init_configret_unit 为空指针时,执行以下操作:

  1. 如果提供了 TAG,则将其值打印到日志中。

  2. 将错误代码赋值给变量 ret

  3. 使用 err 跳转到指定标签位置。

这个宏的作用是在参数无效时进行错误处理,并将错误信息打印到日志中。


这是一个C语言的函数,名为heap_caps_calloc。这个函数用于在指定的内存堆上分配一块连续的、指定大小的内存空间,并初始化为0。

参数解析:

  • n:需要分配的元素数量。

  • size:每个元素的大小(以字节为单位)。

  • caps:内存分配器的容量属性。这通常用于指定内存分配器可以处理的最大对象大小。

函数执行流程:

  1. 调用heap_caps_calloc_base(n, size, caps)函数尝试在指定的内存堆上分配n * size字节的内存空间,并返回一个指向这块内存的指针。

  2. 如果分配失败(即ptr为NULL),并且size大于0,那么调用heap_caps_alloc_failed(size, caps, __func__)函数报告内存分配失败。

  3. 最后,返回分配的内存块的指针。


这是一个C语言的函数,名为heap_caps_calloc_base。这个函数用于在指定的内存堆上分配一块连续的、指定大小的内存空间,并初始化为0。

参数解析:

  • n:需要分配的元素数量。

  • size:每个元素的大小(以字节为单位)。

  • caps:内存分配器的容量属性。这通常用于指定内存分配器可以处理的最大对象大小。

函数执行流程:

  1. 首先,函数检查n * size是否会导致乘法溢出。如果会导致溢出,那么函数返回NULL,表示内存分配失败。

  2. 这是通过调用__builtin_mul_overflow(n, size, &size_bytes)来实现的,这个内建函数会检查乘法操作是否会导致溢出,如果会导致溢出,那么它会把溢出的大小存储在size_bytes中,并返回非零值。

  3. 如果n * size不会导致溢出,那么函数就使用calloc函数来分配内存。calloc函数接受两个参数:需要分配的元素数量和每个元素的大小,然后返回一个指向分配的内存的指针。

  4. 最后,函数返回calloc函数返回的指针。


让我们来看看这个函数的样子

这是一个C语言的函数,名为_calloc_r。这个函数是C标准库函数calloc的一个包装器,它用于在指定的内存堆上分配一块连续的、指定大小的内存空间,并初始化为0。

参数解析:

  • struct _reent *r:一个指向_reent结构体的指针,这个结构体通常用于封装某些与环境相关的信息。在这个函数中,我们并没有使用到这个参数。

  • size_t nmemb:需要分配的元素数量。

  • size_t size:每个元素的大小(以字节为单位)。

函数执行流程:

  1. 首先,函数检查nmemb * size是否会导致乘法溢出。如果会导致溢出,那么函数返回NULL,表示内存分配失败。这是通过调用__builtin_mul_overflow(nmemb, size, &size_bytes)来实现的,这个内建函数会检查乘法操作是否会导致溢出,如果会导致溢出,那么它会把溢出的大小存储在size_bytes中,并返回非零值。

  2. 然后,函数调用heap_caps_malloc_default(size_bytes)来分配一块内存。这个函数接受一个参数,表示需要分配的字节数,然后返回一个指向分配的内存的指针。

  3. 如果内存分配成功(即result != NULL),函数使用bzero(result, size_bytes)来将这块内存的所有字节都设置为0。

  4. 最后,函数返回指向分配的内存的指针。

这是一个C语言的语句,它调用了之前定义的heap_caps_calloc函数来分配一块内存,并将这块内存的地址赋值给变量unit

参数解析:

  • 1:需要分配的元素数量。在这里,我们只分配一个元素,所以这个值是1。

  • sizeof(adc_oneshot_unit_ctx_t):每个元素的大小。这里,我们使用sizeof操作符来获取adc_oneshot_unit_ctx_t类型数据的大小(以字节为单位),然后把它作为calloc函数的第二个参数。这意味着我们想要分配一块能够存储一个adc_oneshot_unit_ctx_t类型数据的内存。

  • ADC_MEM_ALLOC_CAPS:内存分配器的容量属性。这通常用于指定内存分配器可以处理的最大对象大小。

  • 在这里,我们使用ADC_MEM_ALLOC_CAPS作为这个参数,表示我们希望使用能够处理最大对象大小为ADC_MEM_ALLOC_CAPS的内存分配器来分配这块内存。

函数执行流程:

  1. 调用heap_caps_calloc函数,传入参数1sizeof(adc_oneshot_unit_ctx_t)ADC_MEM_ALLOC_CAPS

  2. 如果分配成功,heap_caps_calloc函数会返回一个指向分配的内存的指针,我们将这个指针赋值给变量unit

  3. 如果分配失败,heap_caps_calloc函数会返回NULL,我们将不会得到任何结果。

看出来没有,每一个语句都要进行一次校验。

解析:

  1. _lock_acquire(&s_ctx.mutex);:这行代码获取名为s_ctx.mutex的互斥锁,以确保在初始化过程中只有一个线程可以访问该代码块。

  2. s_ctx.units[init_config->unit_id] = unit;:这行代码将unit指针存储在s_ctx.units数组中,数组索引为init_config->unit_id。这意味着根据配置中的单元ID,将特定的单元与上下文关联起来。

  3. _lock_release(&s_ctx.mutex);:这行代码释放之前获取的互斥锁,允许其他线程访问被保护的代码块。

  4. unit->unit_id = init_config->unit_id;:这行代码将单元的ID设置为配置中指定的单元ID,确保单元的唯一性。

  5. unit->ulp_mode = init_config->ulp_mode;:这行代码将单元的ULP(单位长度脉冲)模式设置为配置中指定的ULP模式,用于控制ADC的采样率。

总结:这段代码片段展示了一个使用互斥锁保护的ADC单触发模式的初始化过程,其中通过将单元ID和ULP模式与相应的配置关联起来来初始化单元。

这些都是内联函数

实现在C

这是一个C语言的代码片段,它定义了一个名为_lock_acquire的函数,该函数用于获取一个互斥锁。这个函数是兼容旧版newlib锁函数的。

解析:

  1. typedef int _lock_t;:这行代码定义了一个新的类型别名_lock_t,它是一个整数类型。

  2. void IRAM_ATTR _lock_acquire(_lock_t *lock):这行代码定义了一个函数_lock_acquire,它接受一个指向_lock_t类型的指针lock作为参数。IRAM_ATTR是一个编译器指令,表示这个函数是"in-ram"属性的,即它在编译时会被嵌入到程序的ROM中,而不是在运行时从外部存储器加载。

  3. { lock_acquire_generic(lock, portMAX_DELAY, queueQUEUE_TYPE_MUTEX); }:这行代码调用了lock_acquire_generic函数,尝试获取由lock指向的互斥锁。portMAX_DELAYqueueQUEUE_TYPE_MUTEX是传递给lock_acquire_generic函数的参数,它们可能是指定等待时间(以微秒为单位)和锁的类型(在这个例子中是互斥锁)。

这个是属于我一样看不懂的东西,但是大概率是一个去取值复制

这是我上次写的单次触发结构体,真尼玛老母猪带胸罩,一套一套的

那么这个结构体就是给了一个新变量吧

这个ADC单次触发的内容?但是是这个是S_CTX的发源地

也就是最上面的这个结构体

这段代码定义了一个名为adc_oneshot_ctx_t的结构体,用于存储ADC(模数转换器)单触发模式的上下文信息。

解析:

  1. typedef struct adc_oneshot_ctx_t:这是一个类型定义,将结构体adc_oneshot_ctx_t定义为一个新的类型名,以便在后续的代码中引用。

  2. { _lock_t mutex; ... }:这是结构体的成员列表,列出了该结构体包含的所有成员变量。

  3. adc_oneshot_unit_ctx_t *units[SOC_ADC_PERIPH_NUM];:这是一个指向adc_oneshot_unit_ctx_t类型的指针数组,用于存储ADC单元的上下文信息。SOC_ADC_PERIPH_NUM是一个宏定义,表示ADC外设的数量。

  4. int apb_periph_ref_cnts;:这是一个整型变量,用于记录使用APB_SARADC外设的ADC单触发模式芯片的引用计数。

看这个,其实就是线程安全的写法

获取这个结构体里面的mutex

这段代码是将一个单元(unit)对象存储到s_ctx.units数组中,数组的索引由init_config->unit_id指定。

根据代码片段提供的信息,我们可以推断出以下内容:

  • s_ctx是一个全局变量或结构体的成员变量,它包含了与ADC单触发模式相关的上下文信息。

  • unitss_ctx中的一个成员变量,它是一个指针数组,用于存储ADC单元的上下文信息。

  • init_config是一个指向初始化配置结构体的指针,其中包含了要存储的单元的ID和相关配置信息。

  • unit_idinit_config中的一个成员变量,它指定了要存储的单元的ID。

  • unit是要存储的单元对象。

根据上述分析,该代码的作用是将单元对象存储到s_ctx.units数组中,以便在后续的操作中使用。

  1. unit->unit_id = init_config->unit_id;:这行代码将init_config中的unit_id值赋给unit对象的unit_id成员变量。

  2. unit->ulp_mode = init_config->ulp_mode;:这行代码将init_config中的ulp_mode值赋给unit对象的ulp_mode成员变量。

这段代码定义了一个名为clk_src的变量,类型为adc_oneshot_clk_src_t,并将其初始化为ADC_DIGI_CLK_SRC_DEFAULT


然后,代码检查init_config结构体中的clk_src成员变量是否存在有效的值。如果存在有效值,则将clk_src变量的值更新为init_config->clk_src


接着就是设置时钟以及看看没有设置成功

里面的这个代码呢是在每个芯片里面都有的

来看参数

第一个是soc的clk模块

这段代码定义了一个枚举类型soc_module_clk_t,用于表示不同的时钟源。以下是每个时钟源的含义:

  • SOC_MOD_CLK_CPU:CPU时钟可以从XTAL、PLL、RC_FAST或APLL中获取,通过配置soc_cpu_clk_src_t来指定。

  • SOC_MOD_CLK_RTC_FAST:RTC快速时钟可以从XTAL_D4或RC_FAST中获取,通过配置soc_rtc_fast_clk_src_t来指定。

  • SOC_MOD_CLK_RTC_SLOW:RTC慢速时钟可以从RC_SLOW、XTAL32K或RC_FAST_D256中获取,通过配置soc_rtc_slow_clk_src_t来指定。

  • SOC_MOD_CLK_APB:APB时钟高度依赖于CPU时钟源。

  • SOC_MOD_CLK_PLL_D2:PLL_D2时钟从PLL派生,具有固定的分频器为2。

  • SOC_MOD_CLK_PLL_F160M:PLL_F160M时钟从PLL派生,具有固定的频率为160MHz。

  • SOC_MOD_CLK_XTAL32K:XTAL32K时钟来自外部32kHz晶体,将时钟门控传递给外设。

  • SOC_MOD_CLK_RC_FAST:RC_FAST时钟来自内部8MHz rc振荡器,将时钟门控传递给外设。

  • SOC_MOD_CLK_RC_FAST_D256:RC_FAST_D256时钟来自内部8MHz rc振荡器,分频器为256,将时钟门控传递给外设。

  • SOC_MOD_CLK_XTAL:XTAL时钟来自外部晶体(2~40MHz)。

  • SOC_MOD_CLK_REF_TICK:REF_TICK从APB派生,即使APB频率改变,其频率也固定为1MHz。

  • SOC_MOD_CLK_APLL:APLL从PLL获取,其频率可以通过APLL配置寄存器进行配置。

  • SOC_MOD_CLK_INVALID:表示可用模块时钟源的结束。

这个枚举类型用于在系统中确定和配置各个模块的时钟源。

这段代码定义了一个枚举类型esp_clk_tree_src_freq_precision_t,用于表示不同的时钟源精度。以下是每个精度的含义:

  • ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED:从驱动程序缓存的数据中获取值;如果数据为0,则执行校准操作。

  • ESP_CLK_TREE_SRC_FREQ_PRECISION_APPROX:获取其近似频率值。

  • ESP_CLK_TREE_SRC_FREQ_PRECISION_EXACT:始终执行校准操作。

  • ESP_CLK_TREE_SRC_FREQ_PRECISION_INVALID:无效的精度级别。

这个枚举类型用于在系统中确定和配置各个模块的时钟源精度。

其实着才开始配置最后一个,ULP

随意看吧

大概就是所有结构体都要抛头露面

终于来了初始化了

这段代码定义了一个名为adc_oneshot_hal_ctx_t的结构体,用于表示ADC(模数转换器)的单次触发模式的硬件抽象层(HAL)上下文。

以下是每个成员的解释:

  • dev:ADC SoC(系统级芯片)层的句柄,用于与ADC SoC进行交互。

  • unit:表示ADC单元的变量。

  • work_mode:表示ADC的工作模式,可能是连续模式、单次触发模式等。

  • chan_configs:表示每个ADC通道的配置数组。

  • clk_src:表示时钟源的选择。

  • clk_src_freq_hz:表示时钟源的频率,以Hz为单位

ADC的初始化

这段代码片段展示了一个名为adc1_handle的变量,类型为adc_oneshot_unit_handle_t。它被用于存储ADC(模数转换器)单元的句柄。

接下来,代码定义了一个名为init_config1的结构体变量,类型为adc_oneshot_unit_init_cfg_t。这个结构体包含了ADC单元的配置信息。在这个例子中,unit_id成员被设置为ADC_UNIT_1,表示当前配置的是第一个ADC单元。

这段代码的作用是初始化ADC单元1,并将其句柄存储在adc1_handle变量中。

设置 ADC 的初始配置后,使用adc_oneshot_new_unit()准备好的adc_oneshot_unit_init_cfg_t如果分配成功,该函数将返回 ADC 单元句柄。

通道的设置

扩展通道的时候衰减系数

位宽

狠狠的注入

折腾这么久就是为了这个read,我可真想死

写完就跑

一个好的函数从参数开始

搞对象都没有这么费劲

进入现场,保护一下

下面就是要转换了

函数接受三个参数:

  • handle:指向adc_oneshot_unit_handle_t类型的指针,表示ADC单元的句柄。

  • chan:表示要读取的ADC通道。

  • out_raw:指向整数类型的指针,用于存储转换结果的原始值。

函数返回一个esp_err_t类型的错误码,表示操作的结果。如果操作成功,返回ESP_OK;否则,返回相应的错误码。

函数的具体实现如下:

  1. 首先,检查输入参数的有效性。如果handleout_raw为空指针,或者chan超出了有效范围,将返回相应的错误码。

  2. 然后,尝试获取ADC单元的锁。如果获取失败,返回ESP_ERR_TIMEOUT

  3. 进入临界区,使用rtc_spinlock进行保护。

  4. 调用adc_oneshot_hal_setup函数,设置ADC单元的相关参数。

  5. 如果支持ADC校准功能(版本1),则获取当前通道的衰减值,并初始化ADC硬件校准。

  6. 调用adc_oneshot_hal_convert函数,执行实际的ADC转换操作,并将结果存储在out_raw中。

  7. 退出临界区,释放ADC单元的锁。

  8. 根据转换结果的有效性,返回相应的错误码。

差不多就是这样,获取参数以后来判断,在操作系统的监督下进行一个安全的操作,然后就释放资源。

这个就是转换函数,感觉又是一篇文章,死了

这段代码是一个函数定义,函数名为adc_oneshot_hal_convert。它的作用是执行ADC(模数转换器)的单次转换操作,并返回转换结果的有效性。

函数接受两个参数:

  • hal:指向adc_oneshot_hal_ctx_t类型的指针,表示ADC单元的上下文信息。

  • out_raw:指向整数类型的指针,用于存储转换结果的原始值。

函数返回一个布尔值,表示操作的结果。如果操作成功,返回true;否则,返回false

函数的具体实现如下:

  1. 首先,根据hal->unit的值确定要使用的ADC通道。如果hal->unit等于ADC_UNIT_1,则使用通道1;否则,使用通道2。

  2. 清除指定通道的事件标志位。

  3. 禁用所有ADC单元。

  4. 启用指定的ADC通道。

  5. 启动ADC单元的单次转换操作,设置时钟源频率为hal->clk_src_freq_hz

  6. 等待直到指定通道的事件被触发。

  7. 读取转换结果的原始值,并将其存储在out_raw中。

  8. 如果ADC单元的数量为2(即SOC_ADC_PERIPH_NUM == 2),则对转换结果进行进一步的校验。如果校验失败,将out_raw设置为-1。

  9. 再次禁用所有ADC单元。

  10. 返回转换结果的有效性(valid

看着简单,但是实现确实复杂

最终的数据在这里获取

@brief宏强制在外设寄存器上进行32位读取

@注:这个宏只能在xxx结构体的注册域上调用。当前实现读入uint32_t类型。

最后居然是怎么个东西

在寄存器上干活了

也可以开启这个功能

说实话我没有看懂

不用你操心的原因是因为别人已经操心过了

这些地方是ADC的封装处

ADC 数字控制器模式配置

ADC数字控制器(DMA模式)输出数据格式。用于分析采集到的ADC(DMA)数据。

上面我说不明白的结构体在文档里面都有


写程序试试呢?

评论 (0)
  • 导读:2025年1月6日,在 ChatGPT 诞生两周年之际,OpenAI 的核心人物 Sam Altman 回顾了一段波澜壮阔且充满挑战的历程。九年前,怀揣着对通用人工智能(AGI)的坚定信念,OpenAI 踏上征程。彼时,质疑声不绝于耳,多数人认为这毫无成功的可能。但他们未曾动摇,毅然投身这一充满未知的领域。直至 2022 年 ChatGPT 的推出,如同在科技领域投入巨石,引发轩然大波,开启了前所未有的发展态势。然而,荣耀背后是难以想象的艰难。围绕新技术构建公司,犹如在黑暗中摸索前行,每一
    用户1739588245528 2025-02-15 11:03 149浏览
  •                           春天来了,我们中国的传统节日--春节到了,随着国家富强,人们民族文化自信心的增强,这个中国年过的还挺热闹,挺红火。一段山村过新年的快乐时光,即兴而发赋了两首新诗。《渔家乐·山村新春》白发垂髫同喜乐,新春佳节意情奢。烟花璀璨腾空起,山村美景醉心涯。晓雾轻笼林野静,晚云淡抹岫峰斜。自然恩赐千般好,福满人间岁月嘉
    广州铁金刚 2025-02-17 15:59 102浏览
  •         电磁铁作为一种能够利用电流产生磁性的装置,在现代社会的生产和生活中发挥着越来越重要的作用。其应用范围广泛,不仅局限于工业制造领域,还深入到交通运输、医疗健康以及我们的日常生活之中。一、电磁铁在工业制造中的应用       在工业制造领域,电磁铁的应用可谓是举足轻重。它们被广泛应用于各种机械设备和生产线中,起着自动化控制、物料搬运等关键作用。例如,在重型机械中,电磁铁用于吸附和移动大型金属构件
    锦正茂科技 2025-02-18 10:05 33浏览
  • 近日,紫光展锐蜂窝物联网芯片V8850荣获国密一级认证,标志着展锐V8850在安全能力方面获得权威认可,位居行业领先水平。这是紫光展锐继短距物联网芯片V5663在2020获得ARM PSA Level 2认证,蜂窝物联网芯片V8811在2021年获得ARM PSA Level 1 认证后,第三次荣获安全行业权威认证。荣获国密一级安全认证,意味着紫光展锐V8850能支持智能支付、共享经济、定位追踪、安防监控、智能表计、工业DTU、公网对讲,以及车载通信终端设备上的国密升级改造,可为移动支付、短信
    紫光展锐 2025-02-14 19:26 75浏览
  •  电磁铁的磁芯材质:软铁还是硬铁电磁铁的磁芯通常采用软铁材质,因其具有高磁导率和低矫顽力,使得电磁铁能够在通电时迅速产生强磁场,断电后磁场又能迅速消失。一、电磁铁与磁芯材质电磁铁是一种利用电流产生磁场的装置。其核心部件——磁芯,对电磁铁的性能有着至关重要的影响。在选择磁芯材质时,需要考虑多种因素,如磁导率、矫顽力、饱和磁化强度等。这些因素直接关系到电磁铁的工作效率、响应速度和能耗等方面。二、软铁与硬铁的特性软铁和硬铁是两种常见的磁性材料。软铁具有高磁导率和低矫顽力的特点,这意味着它容易
    锦正茂科技 2025-02-18 10:32 29浏览
  • 文心一言免费对于创业来说是一个很大的机遇,加油!虽然是一个很大的挑战,但是好处还是很大的。文心一言的免费开放为创业者提供了一个低成本甚至零成本使用先进人工智能技术的机会。在以往,创业者若想在项目中融入AI技术,往往需要支付高昂的研发或授权费用。而现在,他们可以直接利用文心一言的强大功能,如语言理解、生成能力、深度搜索等,来构建自己的产品或服务,从而显著降低创业成本。文心一言的全面免费开放为创业者提供了广阔的创新空间。创业者可以基于文心一言开发出各种创新的应用和服务,满足市场的多样化需求。例如,利
    curton 2025-02-14 13:37 311浏览
  • 概述        TC10 为OPEN Alliance 中的一个技术委员会小组,专注于研究基于车载以太网的休眠唤醒机制,旨在为汽车应用场景提供灵活的休眠唤醒解决方案。该小组提出的休眠唤醒规范(《TC10 Sleep/Wake-up Specification》,以下简称TC10规范)作为对IEEE 802.3系列规范的补充,详细定义了以太网PHY的休眠唤醒过程、新增服务原语和接口、时间参数、指令描述等内容。目前,TC10已经发布了适配10Ba
    经纬恒润 2025-02-18 14:30 45浏览
  • 清晨,闹钟准时响起,窗帘自动拉开,床灯随之亮起,音箱中则自动传出每日的早间新闻,从而唤醒熟睡中的你,而这只是智能家居中的冰山一角。作为人类群体追求更高生活品质的居住空间,智能家居正飞速普及至我们的日常生活之中,极大地提升了生活的便利性与舒适度。然而,随着单品智能向全屋智能的快速发展,不同智能家居设备的工作电压与通信频率等运行参数存在差异,它们共同运行在一个智能家居系统之中,其所产生的电气噪声与电磁干扰会互相影响,并形成潜在的安全隐患。例如,电气噪声可能导致线路过热,增加电气火灾的发生风险;电磁干
    华普微HOPERF 2025-02-18 10:48 37浏览
  • 在设备间通信日益增长的需求中,对于十几米甚至更长距离的高速外设数据传输变得尤为重要。RS-232C接口,凭借其仅需简单的接收、发送及地线配置,以及成本效益高的双绞线连接,凭借其卓越性能,成为了连接通信接口芯片的关键纽带。为了在这种长距离高速通信场景下实现线路的可靠隔离,并有效抵御外部噪声对通信信号的干扰,虽然上一期介绍的晶体管类型输出系列光耦能够满足100kbps速率的隔离传输需求,但面对更高的速率稳定性和性能要求,业界更倾向于采用速率可达300Kbps的KL6N138和KL6N139达林顿高速
    晶台光耦 2025-02-14 13:40 62浏览
  • 2025,新一轮汽车行业“战争”开始,但这一次不是过往的“价格战”,而是新一轮的“智驾战”。近期,比亚迪董事长兼总裁王传福在比亚迪智能化战略发布会上表示:“比亚迪将全系搭载“天神之眼”高阶智驾系统,其中首批21款车型将陆续上市,包括秦家族、元家族、宋家族、海豹家族等。”具体来看,20万元以上、15万元至20万元、10万元至15万元级别的车型将全系标配“天神之眼”。10万元以下的车型多数将搭载“天神之眼”,包括海鸥、海豹05DM-i和第二代秦PLUS DM-i。智驾不是什么新鲜技术,但是在比亚迪之
    刘旷 2025-02-18 10:19 38浏览
  •  探针台是半导体测试领域的重要设备,用于支撑和固定待测芯片,以便进行jing确的电气测试。在使用过程中,探针台可能会出现位置偏移,这时就需要进行复位操作。下面,我们将详细介绍探针台复位的zui简单三个步骤。  一、确定复位基准点复位操作的di一步是确定复位基准点。通常,探针台会配备有明确的复位标记或感应点。用户需要仔细查找并确认这些标记,确保复位操作的准确性。找到基准点后,将探针台移动到该位置附近,准备进行下一步操作。二、执行复位动作在确认基准点后,接下来需要执行复
    锦正茂科技 2025-02-15 09:36 93浏览
  • 《哪吒2》票房破百亿背后的科技密码:解码中国动画产业的技术跃迁与制造底气2024年夏季,国产动画电影《哪吒2》以雷霆之势席卷全球院线,不仅成为中国影史第二部票房突破百亿的现象级作品,更以多项技术突破刷新行业纪录。这些成就背后,不仅是中国动画工业的崛起,更是中国科技创新与高端制造业协同突破的缩影。作为深耕PCB行业多年的捷多邦小编,今天带您从技术视角,解读这场银幕奇迹背后的制造密码。一、从“数字造神”到“算力革命”:动画技术背后的硬核突破《哪吒2》的视觉革命始于AI工业化管道的深度应用。影片中大量
    捷多邦 2025-02-15 17:57 437浏览
  • 嘿,大家好!在高压电子世界里摸爬滚打的朋友们,你们有没有遇到过这样的难题?那就是,如何选择适合高压环境的光颉精密电阻? 这可不是一个简单的问题,毕竟在高压环境下,电阻不仅要顶得住电压的“压力”,还得保证精度和稳定性,这要求可真不低。想想看,如果选错了电阻,就像给跑车装了个自行车轮,那能行吗?肯定不行!轻则电路性能大打折扣,重则电阻直接“罢工”,甚至引发更严重的后果。所以说,在高压应用中,选择一款靠谱的光颉精密电阻,那可是至关重要的。别担心,今天咱们就来好好聊聊,如何选择适合高压环境的光
    贞光科技 2025-02-18 17:28 46浏览
  • 随着国内市场的逐渐稳固,华为将目光投向了广阔的海外市场,开启了一段充满挑战与机遇的国际化征程。然而,华为在拓展海外市场时,遭遇了重重困难。文化差异带来的挑战不同国家和地区有着不同的文化背景、商业习惯和价值观,这使得华为在与当地客户、合作伙伴沟通和合作时面临诸多障碍。在欧洲,一些客户对产品的认证标准和售后服务有着非常严格的要求,并且注重商务活动中的礼仪和沟通方式。在机上欧洲通信市场竞争激烈,爱立信、诺基亚等本土企业在技术、品牌和市场份额上具有优势。而且欧洲各国的通信标准和监管政策不同,华为需要满足
    韭菜财经 2025-02-18 14:11 77浏览
  • 电磁铁通电时会产生磁场,磁力随电流增强而增强,表现出吸引铁磁性物质的特性。电磁铁是一种能够产生磁场的装置,其特性在于可以通过通电来控制磁场的产生和消失。那么,当电磁铁通电时,它具体会表现出哪些特性和现象呢?一、产生磁场通电是电磁铁产生磁场的关键。当电流通过电磁铁的线圈时,线圈周围就会产生磁场。这个磁场与电流的大小和方向密切相关,电流越大,产生的磁场也越强。同时,磁场的方向可以通过改变电流的方向来改变,这是电磁铁灵活性的重要体现。二、磁力变化随着电流的增强,电磁铁产生的磁力也会相应增强。这种磁力的
    锦正茂科技 2025-02-15 09:59 113浏览
我要评论
0
0