MM32与DeepSeek的融合:一场MCU与AI的奇妙碰撞!

原创 嵌入式ARM 2025-02-18 12:01
一、DeepSeek基本介绍

2025春节期间,DeepSeek火得一塌糊涂,以至于不少业内人士都在蹭它的热度。

DeepSeek是由杭州深度求索人工智能基础技术研究有限公司开发的大型语言模型,不仅性能超过ChatGPT,其运行的成本还远低于它。目前,DeepSeek提供了两种使用方式:一是通过网页在线或是APP软件进行免费对话;二是通过API开放平台与DeepSeek服务器进行对接交互。

  • DeepSeek网页版:只需打开DeepSeek官网(https://www.deepseek.com),点击开始对话,就能跳转到DeepSeek网页版(https://chat.deepseek.com)与DeepSeek进行交流了。这个是免费使用的,当前使用的人比较多,经常会出现服务器忙的提示。

  • DeepSeek API开放平台:通过DeepSeek的API开放平台,可将DeepSeek应用到我们的应用程序中,通过接口调用与DeepSeek之间完成交互;在DeepSeek在线接口文档(https://api-docs.deepseek.com/zh-cn)中阐述了当前支持的开发方式,有CURL、PYTHON、GO、NODEJS、RUBY、CSHARP、PHP、JAVA、POWERSHELL等。
    在使用DeepSeek API开发平台之前,我们需要先注册一个DeepSeek账号,然后在API开放平台中创建一个API key,这个API key就是我们通过其它开发软件连接到DeepSeek的凭证。
    通过API开放平台使用DeepSeek是收费的,收费标准是根据每百万输出tokens来计费的;对于我们想体验一下通过API开放平台来操作DeepSeek的开发人员,DeepSeep赠送了10块钱的体验优惠,前期足够我们来熟悉了掌握DeepSeek的API开放平台开发了。

下面,我们以灵动MM32为例,将其与DeepSeek融合,为你带来前所未有的交互体验!

二、MM32与DeepSeek

想要MM32 MCU与DeepSeek之间实现交互,在接口层面,我们可以使用CURL方式,通过HTTP协议与DeepSeek的API开放平台完成;在硬件层面,我们需要扩展网络模块与MM32进行连接,达到联网的功能。

这里我们使用Air724这个4G模组,与MM32之间通过串口通讯,基于AT指令来进行联网、HTTP等功能的操作。

三、硬件连接

硬件连接如下图所示,将Air724接口的RXD与Mini-F5333开发板上Arduino接口的TXD进行连接,将Air724接口的TXD与Mini-F5333开发板上Arduino接口的RXD进行连接,将Air724接口的GND与Mini-F5333开发板上Arduino接口的GND进行连接,将Air724接口的RST与Mini-F5333开发板上Arduino接口的INT进行连接;同时,给Air724模块供12V电源,给Mini-F5333开发板供5V电源。


四、功能实现

首先是基于Mini-F5333开发板创建基础工程,实现板载LED灯和KEY按键检测,通过移植MultiButton开源软件实现按键处理操作;通过AT指令操作来实现Air724模组的初始化配置,在按下按键后,实现HTTP与DeepSeek的交互;在接收到DeepSeek反馈的数据后,通过cJSON来进行解析;处理过程和解析的结果通过SWD接口打印到电脑监视软件上(这边是通过移植SEGGER_RTT来实现打印的)。

具体的代码模块如下所示:


1、基础工程配置

#include "platform.h"#include "SEGGER_RTT.h"
volatile uint32_t PLATFORM_DelayTick = 0;
void PLATFORM_InitSysTick(void){ RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks);
if (SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000)) { while (1) { } }
NVIC_SetPriority(SysTick_IRQn, 0x0);}
void PLATFORM_ConfigDelay(void){ NVIC_InitTypeDef NVIC_InitStruct; TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStruct); TIM_TimeBaseStruct.TIM_Prescaler = (TIM_GetTIMxClock(TIM6) / 100000 - 1); TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStruct.TIM_Period = (100 - 1); TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_Div1; TIM_TimeBaseStruct.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStruct);
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
NVIC_InitStruct.NVIC_IRQChannel = TIM6_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct);
TIM_Cmd(TIM6, ENABLE);}
void PLATFORM_DelayMs(uint32_t Tick){ PLATFORM_DelayTick = Tick;
while (PLATFORM_DelayTick) { }}
void PLATFORM_InitConsole(void){ SEGGER_RTT_ConfigUpBuffer(0, "RTTUP", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);}
int fputc(int ch, FILE *f){ SEGGER_RTT_PutCharSkip(0, (char)ch);
return (ch);}
void PLATFORM_PrintClocks(void){ printf("\r\nBOARD : Mini-F5333"); printf("\r\nMCU : MM32F5333D7P"); printf("\r\n");
switch (RCC->CFGR & RCC_CFGR_SWS_Msk) { case 0x00: printf("\r\nHSI used as system clock source"); break;
case 0x04: printf("\r\nHSE used as system clock source"); break;
case 0x08: if (RCC->PLL1CFGR & RCC_PLL1CFGR_PLL1SRC_Msk) { printf("\r\nPLL1 (clocked by HSE) used as system clock source"); } else { printf("\r\nPLL1 (clocked by HSI) used as system clock source"); }
break;
case 0x0C: printf("\r\nLSI used as system clock source"); break;
default: break; }
RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks);
printf("\r\n"); printf("\r\nSYSCLK Frequency : %7.3f MHz", (double)RCC_Clocks.SYSCLK_Frequency / (double)1000000.0); printf("\r\nHCLK Frequency : %7.3f MHz", (double)RCC_Clocks.HCLK_Frequency / (double)1000000.0); printf("\r\nPCLK1 Frequency : %7.3f MHz", (double)RCC_Clocks.PCLK1_Frequency / (double)1000000.0); printf("\r\nPCLK2 Frequency : %7.3f MHz", (double)RCC_Clocks.PCLK2_Frequency / (double)1000000.0); printf("\r\n");}
void PLATFORM_Init(void){ PLATFORM_InitSysTick();
PLATFORM_ConfigDelay();
PLATFORM_InitConsole();
PLATFORM_PrintClocks();}
void TIM6_IRQHandler(void){ if (RESET != TIM_GetITStatus(TIM6, TIM_IT_Update)) { if (PLATFORM_DelayTick) { PLATFORM_DelayTick--; }
TIM_ClearITPendingBit(TIM6, TIM_IT_Update); }}


2、LED驱动

#include "bsp_led.h"
void bsp_LedInit(void){ GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_10 ; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_WriteBit(GPIOB, GPIO_Pin_11, Bit_SET); GPIO_WriteBit(GPIOB, GPIO_Pin_10, Bit_SET); GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_SET); GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET);}
void bsp_LedToggle(uint8_t Index){ switch (Index) { case 1: if (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_11) == Bit_RESET) { GPIO_WriteBit(GPIOB, GPIO_Pin_11, Bit_SET); } else { GPIO_WriteBit(GPIOB, GPIO_Pin_11, Bit_RESET); } break;
case 2: if (GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_10) == Bit_RESET) { GPIO_WriteBit(GPIOB, GPIO_Pin_10, Bit_SET); } else { GPIO_WriteBit(GPIOB, GPIO_Pin_10, Bit_RESET); } break;
case 3: if (GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7) == Bit_RESET) { GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_SET); } else { GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_RESET); } break;
case 4: if (GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_6) == Bit_RESET) { GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET); } else { GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_RESET); } break;
default: break; }}


3、KEY驱动

#include "bsp_key.h"
void bsp_KeyInit(void){ GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStruct);}
uint8_t bsp_KeyReadPinLevel(uint8_t Index){ uint8_t PinLevel = 0;
switch (Index) { case 1: PinLevel = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_4); break;
case 2: PinLevel = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5); break;
case 3: PinLevel = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1); break;
case 4: PinLevel = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2); break;
default: break; }
return (PinLevel);}


4、按键应用

#include "key.h"#include "bsp_key.h"#include "multi_button.h"
struct Button K1;struct Button K2;struct Button K3;struct Button K4;
volatile uint8_t KeyRegisterFlag = 0;volatile uint8_t KeyHttpPostFlag = 0;
void KEY_PressUpHandler(void *btn){ struct Button *handle = (struct Button *)btn;
switch (handle->button_id) { case 1: printf("\r\nK1"); break;
case 2: printf("\r\nK2"); break;
case 3: printf("\r\nK3"); break;
case 4: printf("\r\nK4"); KeyHttpPostFlag = 1; break;
default: break; }}
void KEY_Init(void){ button_init(&K1, bsp_KeyReadPinLevel, Bit_SET, 1); button_init(&K2, bsp_KeyReadPinLevel, Bit_RESET, 2); button_init(&K3, bsp_KeyReadPinLevel, Bit_RESET, 3); button_init(&K4, bsp_KeyReadPinLevel, Bit_RESET, 4);
button_attach(&K1, PRESS_UP, KEY_PressUpHandler); button_attach(&K2, PRESS_UP, KEY_PressUpHandler); button_attach(&K3, PRESS_UP, KEY_PressUpHandler); button_attach(&K4, PRESS_UP, KEY_PressUpHandler);
button_start(&K1); button_start(&K2); button_start(&K3); button_start(&K4);
KeyRegisterFlag = 1;}
void SysTick_Handler(void){ if (KeyRegisterFlag) { button_ticks(); }}


5、Air724驱动

#include "bsp_air724.h"#include "platform.h"
uint8_t Air724_RxBuffer[2048];uint16_t Air724_RxLength = 0;char deepseek_Buffer[2048];
void bsp_Air724InitUART(void){ GPIO_InitTypeDef GPIO_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; UART_InitTypeDef UART_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
UART_StructInit(&UART_InitStruct); UART_InitStruct.BaudRate = 115200; UART_InitStruct.WordLength = UART_WordLength_8b; UART_InitStruct.StopBits = UART_StopBits_1; UART_InitStruct.Parity = UART_Parity_No; UART_InitStruct.HWFlowControl = UART_HWFlowControl_None; UART_InitStruct.Mode = UART_Mode_Rx | UART_Mode_Tx; UART_Init(UART4, &UART_InitStruct);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource0, GPIO_AF_8); GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_8);
GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &GPIO_InitStruct);
UART_ITConfig(UART4, UART_IT_RX, ENABLE);
NVIC_InitStruct.NVIC_IRQChannel = UART4_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct);
UART_Cmd(UART4, ENABLE);}
void bsp_Air724RxIrqHandler(uint8_t Data){ printf("%c", Data);
Air724_RxBuffer[Air724_RxLength] = Data;
Air724_RxLength += 1; Air724_RxLength %= 2048;}
void bsp_Air724InitGPIO(void){ GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOI, ENABLE);
GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOI, &GPIO_InitStruct);
GPIO_WriteBit(GPIOI, GPIO_Pin_0, Bit_SET);}
void bsp_Air724Reset(void){ GPIO_WriteBit(GPIOI, GPIO_Pin_0, Bit_SET); PLATFORM_DelayMs(100);
GPIO_WriteBit(GPIOI, GPIO_Pin_0, Bit_RESET); PLATFORM_DelayMs(100);}
void bsp_Air724ClearRxBuffer(void){ Air724_RxLength = 0;
for (uint16_t i = 0; i < 2048; i++) { Air724_RxBuffer[i] = 0; }}
void bsp_Air724Init(void){ bsp_Air724InitUART();
bsp_Air724InitGPIO();
bsp_Air724ClearRxBuffer();}
void bsp_Air724SendData(uint8_t Data){ UART_SendData(UART4, Data);
while (RESET == UART_GetFlagStatus(UART4, UART_FLAG_TXC)) { }}
uint32_t bsp_Air724SendCommandBlocking(char *Command, char *Response, uint32_t Timeout){ if (Command != NULL) { while (*Command != '\0') { bsp_Air724SendData(*Command++); }
bsp_Air724SendData(0x0D); bsp_Air724SendData(0x0A); }
if (Timeout != 0) { bsp_Air724ClearRxBuffer();
while (Timeout--) { if (strstr((char *)Air724_RxBuffer, Response) != NULL) { return (Timeout); }
PLATFORM_DelayMs(1); } }
return (0);}
void bsp_Air724InputDataNonBlocking(char *Data){ if (Data != NULL) { while (*Data != '\0') { bsp_Air724SendData(*Data++); }
bsp_Air724SendData(0x1A); }}


6、HTTP初始化

void HTTP_Init(void){    bsp_Air724Reset();
bsp_Air724SendCommandBlocking(NULL, "RDY", 10000); bsp_Air724SendCommandBlocking(NULL, "+NITZ", 10000);
PLATFORM_DelayMs(500);
bsp_Air724SendCommandBlocking("AT", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+CPIN?", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+CGATT?", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+SAPBR=3,1,\"APN\",\"\"", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+SAPBR=1,1", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+SAPBR=2,1", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+CGNSPWR=1", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+CSQ", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+CGNSAID=31,1,1,1", "OK", 10000);}


7、HTTP与DeepSeek交互

char POST_DATA[] = "{\    \"model\": \"deepseek-chat\",\    \"messages\": [{\"role\": \"user\", \"content\": \"who are you?\"}],\    \"stream\": false\}";
void HTTP_Post(void){ char Command[200];
bsp_Air724SendCommandBlocking("AT+HTTPINIT", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+HTTPSSL=1", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+HTTPPARA=\"CID\",1", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+HTTPPARA=\"URL\",\"https://api.deepseek.com/chat/completions\"", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+HTTPPARA=\"CONTENT\",\"application/json\"", "OK", 10000);
bsp_Air724SendCommandBlocking("AT+HTTPPARA=\"USERDATA\",\"Authorization:Bearer API key\"", "OK", 10000);
memset(Command, 0, sizeof(Command)); sprintf(Command, "AT+HTTPDATA=%d,10000", strlen(POST_DATA));
bsp_Air724SendCommandBlocking(Command, "DOWNLOAD", 30000);
printf("\r\n%s", POST_DATA);
bsp_Air724InputDataNonBlocking(POST_DATA);
bsp_Air724SendCommandBlocking("AT+HTTPACTION=1", "OK", 30000);
bsp_Air724SendCommandBlocking(NULL, "+HTTPACTION: 1,200,", 30000);
bsp_Air724SendCommandBlocking("AT+HTTPREAD", "OK", 30000);
bsp_Air724RxHandler();
bsp_Air724SendCommandBlocking("AT+HTTPTERM", "OK", 10000);}


8、DeepSeek数据处理

#include "cJSON.h"
void bsp_Air724RxHandler(void){ uint16_t Count = 0; uint16_t Group = 0;
memset(deepseek_Buffer, 0, sizeof(deepseek_Buffer));
for (uint16_t i = 0; i < Air724_RxLength; i++) { if (Air724_RxBuffer[i] == '{') { Group++; }
if (Group) { deepseek_Buffer[Count++] = Air724_RxBuffer[i]; }
if (Air724_RxBuffer[i] == '}') { if(Group) Group--; } }
printf("\r\n--------------------------------------------------------------------------------");
cJSON *cjson = cJSON_Parse(deepseek_Buffer);
char *json_data = cJSON_Print(cjson);
if (cjson == NULL) { printf("\r\ncjson error!!!"); } else { printf("\r\n%s", json_data); }
printf("\r\n--------------------------------------------------------------------------------");
printf("\r\n");}


五、运行结果

MCU向DeepSeek发送了“who are you?”的提问,如下图所示,DeepSeek进行了回答“I’m an AI language model created by OpenAI……”


六、附件


好了,以上就是今天分享的所有内容了,如果有需要下载原图、代码,以及更多内容的小伙伴,请点击底部“阅读原文”进行查看

END

本文系21ic论坛网友xld0932原创,如需转载,请注明出处。


推荐阅读
盘点我常用的嵌入式开发工具
有人用DeepSeek写了一个串口助手,然后...
传稚辉君开设分公司,高薪招聘嵌入式开发!

→点关注,不迷路←

嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论 (0)
  • PCIe 5.0应用环境逐步成形,潜在风险却蠢蠢欲动?随着人工智能、云端运算蓬勃发展,系统对于高速数据传输的需求不断上升,PCI Express(PCIe)成为服务器应用最广的传输技术,尤其在高效能运算HPC(High Performance Computing)及AI服务器几乎皆导入了最新的PCIe 5.0规格,使得数据传输的双向吞吐量达到了128GB/s,让这两类的服务器能够发挥最大的效能。不过随着PCIe 5.0的频率达到16GHz,PCB板因为高频而导致讯号衰减加剧的特性,使得厂商面临很
    百佳泰测试实验室 2025-03-20 13:47 137浏览
  • 4月8-11日,第91届中国国际医疗器械博览会(CMEF)将在国家会展中心(上海)举办。这场全球瞩目的医疗科技盛宴以“创新科技,智领未来”为主题,旨在全方位展示医疗科技的最新成果,与来自全球的行业同仁一道,为全球医疗健康领域带来一场科技与商贸交融的产业“盛宴”。飞凌嵌入式作为专业的嵌入式技术解决方案提供商,一直致力于为医疗器械行业提供丰富的、高可靠性的嵌入式硬件主控解决方案。届时,飞凌嵌入式将为来自全球的观众带来适用于IVD、医疗影像、生命体征监测等医疗设备的嵌入式板卡、显控一体屏产品以及多款动
    飞凌嵌入式 2025-03-20 11:46 45浏览
  • 本文内容来自微信公众号【工程师进阶笔记】,以工程师的第一视角分析了飞凌嵌入式OK3506J-S开发板的产品优势,感谢原作者温老师的专业分享。前两周,有一位老朋友联系我,他想找人开发一款数据采集器,用来采集工业现场的设备数据,并且可以根据不同的业务场景,通过不同的接口把这些数据分发出去。我把他提的需求总结了一下,这款产品方案大概有以下功能接口,妥妥地一款工业网关,在网上也能找到很多类似的产品方案,为啥他不直接买来用?再跟朋友深入地聊了一下,他之所以联系我,是因为看到我在公众号介绍过一款由飞凌嵌入式
    飞凌嵌入式 2025-03-20 11:51 146浏览
  • 贞光科技代理的品牌-光颉科技高精密薄膜电阻凭借0.01%的超高精度,在AI服务器电源模块中实现了精确电压分配、优化功率因数和减少热损耗,显著提升系统能效和可靠性。在当今的数字时代,人工智能(AI)服务器已成为数据中心的核心。随着AI应用的激增,服务器的性能和能效需求也在不断提高。电源模块作为服务器的关键组件,其性能直接影响整个系统的效率和可靠性。本文将探讨光颉科技高精密薄膜电阻,特别是其0.01%的精度,如何在AI服务器电源模块中提升能效。电源模块在AI服务器中的重要性电源模块负责将输入电源转换
    贞光科技 2025-03-20 16:55 191浏览
  • 流感季急诊室外彻夜排起的长队,手机屏幕里不断闪烁的重症数据,深夜此起彼伏的剧烈咳嗽声——当病毒以更狡猾的姿态席卷全球,守护健康的战争早已从医院前移到每个人的身上。在医学界公认的「72小时黄金预警期」里,可穿戴设备闪烁的光芒正穿透皮肤组织,持续捕捉血氧浓度、心率变异性和体温波动数据。这不是科幻电影的末日警报,而是光电传感器发出的生命预警,当体温监测精度精确到±0.0℃,当动态血氧检测突破运动伪影干扰……科技正在重新定义健康监护的时空边界。从智能手表到耳机,再到智能戒指和智能衣物,这些小巧的设备通过
    艾迈斯欧司朗 2025-03-20 15:45 216浏览
  • 为有效降低人为疏失导致交通事故发生的发生率,各大汽车制造厂及系统厂近年来持续开发「先进驾驶辅助系统」ADAS, Advanced Driver Assistance Systems。在众多车辆安全辅助系统之中,「紧急刹车辅助系统」功能(AEB, Autonomous Emergency Braking)对于行车安全性的提升便有着相当大的帮助。AEB透过镜头影像模块与毫米波雷达感测前方目标,可在发生碰撞前警示或自动刹车以降低车辆损伤以及乘员伤害。面临的挑战以本次分享的客户个案为例,该车厂客户预计在
    百佳泰测试实验室 2025-03-20 15:07 142浏览
  • 故障现象 一辆2024款路虎发现运动版车,搭载2.0 L发动机,累计行驶里程约为5 000 km。车主反映,使用遥控器无法解锁车门,随后使用机械钥匙打开车门,踩下制动踏板,按压起动按钮,仪表盘提示“将智能钥匙放在图示位置,然后按下起动按钮”(图1)。 图1 故障车的仪表盘提示采用上述应急起动方法,发动机能够起动着机。上述故障现象已出现过多次,过一段时间又会恢复正常,这次故障出现要求将车辆拖入店内进行彻底检修。 故障诊断 车辆进店后进行试车,车辆一切功能又恢复正常。经过反复测试
    虹科Pico汽车示波器 2025-03-20 10:17 101浏览
  • 近日,保定飞凌嵌入式技术有限公司(以下简称“飞凌嵌入式”)携手瑞芯微电子股份有限公司(以下简称“瑞芯微”)正式加入2025年全国大学生嵌入式芯片与系统设计竞赛(以下简称“嵌入式大赛”),并在应用赛道中设立专属赛题。本次嵌入式大赛,双方选用基于瑞芯微RK3588芯片设计的ELF 2开发板作为参赛平台,旨在通过此次合作,促进产教融合,共同推动嵌入式系统创新人才的培养。全国大学生嵌入式芯片与系统设计竞赛是一项A类电子设计竞赛,同时也是被教育部列入白名单的赛事,由中国电子学会主办,是学生保研、求职的公认
    飞凌嵌入式 2025-03-20 11:53 113浏览
  • 在电子制造领域,PCB(印刷电路板)的使用寿命直接决定了产品的长期稳定性和可靠性。捷多邦作为全球领先的PCB制造商,始终将质量放在首位,致力于为客户提供高可靠性、高性能的PCB解决方案。以下是捷多邦如何确保PCB使用寿命超过20年的核心技术与优势。 1. ​高品质原材料:从源头保障耐用性捷多邦采用国际认证的优质基材,如FR4、高频材料和高TG板材,确保PCB在高温、高湿等极端环境下的稳定性。通过严格的原材料筛选和入库检验,捷多邦从源头控制质量,避免因材料缺陷导致的失效问题。 
    捷多邦 2025-03-20 11:22 113浏览
  •         在当今电子设备高度集成的时代,电路保护显得尤为重要。TVS管(瞬态电压抑制二极管)和压敏电阻作为一种高效的电路保护器件,被广泛应用于各种电子设备中,用以吸收突波,抑制瞬态过电压,从而保护后续电路免受损坏。而箝位电压,作为TVS管和压敏电阻的核心参数之一,直接关系到其保护性能的优劣。箝位电压的定义        箝位电压指瞬态保护器件(如TVS二极管、压敏电阻)在遭遇过压时,将电路电压限制在安全范围内的
    广电计量 2025-03-20 14:05 118浏览
  • 如同任何对我们工作方式的改变,新的工作方式必然会遇到许多必须面对的挑战。如果不解决组织在实施精益六西格玛过程中面临的障碍以及如何克服它们的问题,那么关于精益六西格玛的讨论就不算完整。以下列举了组织在成功实施精益六西格玛时常见的几个障碍,以及克服它们的方法:1)对精益六西格玛方法论缺乏理解。抵触情绪通常源于对精益六西格玛方法论的不了解,以及不相信它能真正发挥作用。这种情况在所有层级的人员中都会出现,包括管理层。虽然教育培训可以帮助改善这一问题,但成功的项目往往是打消疑虑的最佳方式。归根结底,这是一
    优思学院 2025-03-20 12:35 131浏览
  • 全球领先的光学解决方案供应商艾迈斯欧司朗(SIX:AMS)近日宣布,凭借AS1163独立智能驱动器(SAID)成为中国领先的智能集成系统产品汽车制造商宁波福尔达智能科技股份有限公司(“福尔达”)环境动态照明应用的关键供应商。此次合作标志着汽车技术发展的一个重要时刻,充分展现了AS1163在优化动态照明应用系统成本方面的多功能性和先进性能。该产品支持传感器集成,拥有专为车顶照明设计的超薄外形,并能提升车内照明系统的性能。AS1163是一款先进的智能LED驱动器,能够与开放系统协议(OSP)网络无缝
    艾迈斯欧司朗 2025-03-20 14:26 132浏览
  • 家电“以旧换新”政策的覆盖范围已从传统的八大类家电(冰箱、洗衣机、电视、空调、电脑、热水器、家用灶具、吸油烟机)扩展至各地根据本地特色和需求定制的“8+N”新品类。这一政策的补贴再叠加各大电商平台的优惠,家电销售规模显著增长,消费潜力得到进一步释放。晶尊微方案为升级换代的智能家电提供了高效且稳定的触摸感应和水位检测功能,使得操作更加便捷和可靠!主要体现在:水位检测1健康家电:养生壶、温奶器、加湿器的缺水保护安全2清洁电器:洗地机、扫地机器人的低液位和溢液提醒3宠物家电:宠物饮水机的缺水提醒/满水
    ICMAN 2025-03-20 15:23 186浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦