新闻详情

新闻详情

首页 / 资讯中心 / 详情

STM32 ADC+DMA+TIM协同采集:交流信号高精度采样实现

发布时间:2026/9/3 21:09:50来源:尧图网络
STM32 ADC+DMA+TIM协同采集:交流信号高精度采样实现
简介一套基于STM32与CubeMX的ADCDMATIM协同采集交流信号的完整工程面向嵌入式初学者与工业测控开发者解决多外设配合采样、降低CPU占用并精确控制采样周期的问题。压缩包共176个文件、大小约7.92MB既有HAL库驱动源码和CubeMX生成的初始化代码也包含.uvprojx与.ioc工程文件、.axf与.hex烧录文件以及.map/.lst等编译调试记录便于对照工程结构快速排查问题。已有4530人学习过该工程通过本工程可掌握TIM定时触发ADC转换、DMA自动搬运采样值到内存、CubeMX可视化配置外设等关键流程建议结合代码注释和中断服务程序体会完整采集链路。还可参考其采样时间、分辨率与DMA传输模式配置理解外设初始化顺序、时钟配置及常见问题定位思路为电力监测、信号分析、电机控制等测控系统设计提供可直接借鉴与二次开发的模板。1. 项目概述与整体设计思路1.1 为什么偏偏是ADCDMATIM这个组合做嵌入式开发的朋友应该都遇到过这种需求采集一路交流信号比如市电电压波形、电流互感器输出、或者某种传感器的交流小信号。如果只是偶尔采几次用轮询的方式打开ADC读一下就行了但真正做实操的人都知道交流信号采集最忌讳的就是偶尔读一下。交流信号的频率通常是50Hz或者更高一个周期内你需要均匀采足够多的点才能还原出波形、算出有效值或者做FFT分析。假如用最朴素的轮询法CPU要一直在循环里等待ADC转换完成然后手动把数据搬进数组这套流程跑下来采样间隔很难做到严格均匀中间一旦被中断打断波形就歪了。更难受的是整个CPU都被采样任务占满了其他功能基本没法跑。所以在这个项目里我选择用TIM定时器产生触发信号让ADC自己按规定节奏转换转换完成的数据由DMA直接搬运到内存数组。CPU全程不参与采样过程只在DMA传输完成或者传输到一半的时候收到一个中断通知再去处理这批数据就行。这套方案最大的价值就是采样节奏恒定、数据搬运零CPU开销、采样和数据处理可以流水线式并行是采集交流信号的最经典组合拳。1.2 这个项目能解决什么问题具体来说这个工程要完成的事情是把一路交流信号通过ADC连续采样采样点由定时器精确控制采样结果通过DMA直接存到内存缓冲区。我用的主控是STM32F103系列因为这是大家最熟悉的芯片网上资料最多、踩坑成本最低代码思路也完全可以平移到F4、G0、L4等系列。这套方案适合谁参考包括但不限于做电力仪表、漏电检测、功率计项目的开发者需要采集电压电流波形做电机控制的工程师要对相电流采样做FOC做音频采集的应用需要均匀采样音频信号做数据采集卡、信号分析仪的嵌入式爱好者。只要你的信号是周期的、连续的、需要均匀抽样的这套ADCDMATIM的组合都适用。工程里我会把采样率、缓冲区设计、数据校验这些关键参数的确定方法全部说清楚。2. 硬件电路准备交流信号进ADC之前要做的事2.1 交流信号不能直接怼进ADC引脚先泼一盆冷水STM32的ADC输入范围是0~3.3V参考电压为3.3V时而交流信号是有正有负的。如果直接把双极性的交流信号接到PA1引脚负半周不仅采不到还可能把ADC输入引脚弄坏轻则采样值失真重则芯片直接报废。所以硬件上必须做信号调理核心处理分三步第一步分压衰减。如果测量的是220V市电这类高电压信号必须先用电阻分压或电压互感器把信号幅值降到ADC可接受的范围。一般建议把信号峰峰值控制在3V以内留一点裕量防止过冲。第二步直流偏置抬升。ADC只能采0~3.3V所以要把以0V为中心的双极性交流信号整体抬升到1.65V为基准的范围内也就是把信号的零点平移。常见做法是用两个等值电阻把VCC分压成1.65V再用运放搭一个加法电路把信号叠加到1.65V的直流电平上。这样信号在正负周期都在ADC的量程内变化不会削底也不会削顶。第三步阻抗匹配与缓冲。交流信号源通常有内阻直接用分压电阻接到ADC引脚会有问题因为ADC采样电容在采样瞬间会从信号源抽取电荷如果信号源阻抗太高采样值就不准了。建议用运放搭一个电压跟随器把信号源和ADC隔离开。注意运放供电要注意轨到轨的问题。如果你的运放供电是0~3.3V输出范围本身就受限建议用供电范围较大的运放比如正负供电或5V供电确保输出不会削波。2.2 参考电压与采样保持时间很多人会忽略参考电压的问题。STM32F103的ADC参考电压默认接到VREF引脚如果PCB上VREF直接接的3.3V电源那么ADC满量程就是3.3V。但如果你的板子上的3.3V本身纹波很大交流信号采样结果就会叠加电源噪声波形上能看到明显的毛刺。有条件的话VREF引脚用一个单独的LDO或基准源供电。如果要求不高至少在VREF引脚就近放一个10uF100nF的去耦电容采样效果会明显改善。另外ADC还有一个采样保持时间的概念。STM32的ADC是逐次逼近型SAR架构内部有一个采样电容采样阶段开关闭合让电容电压跟随输入信号保持阶段开关断开ADC开始逐位比较。如果输入信号源阻抗大采样时间不够电容电压还没来得及稳定到输入电压转换结果自然偏向误差方向。交流信号频率越高、信号源阻抗越大需要的采样时间越长。CubeMX里可以配置采样周期数一般建议在满足采样率要求的前提下尽量把采样时间调大一点比如14个周期起步信号源阻抗大就用28.5个周期甚至更多。2.3 我实际用的最小验证电路在验证工程时我用的是一个极简方案信号发生器输出一个2Vpp、50Hz的正弦波经过电阻分压衰减到约1Vpp再叠加一个1.65V直流偏置送到PA1引脚。实际验证时直接不用运放也行因为信号发生器输出阻抗较低50Ω或600Ω驱动ADC足够。但如果你的信号源阻抗大还是建议按上面说的方法加电压跟随器。这个验证电路虽然简单但能把整个数据链路的逻辑跑通。在真实项目中信号调理部分的精度决定了整个采集系统的精度这块需要仔细打磨。3. 核心原理拆解TIM怎么触发ADCDMA怎么把数据搬走3.1 定时器触发ADC的完整链条在STM32里面ADC的启动方式有好几种软件触发写寄存器、外部引脚触发、定时器触发。本项目用定时器触发这是整套方案的重点之一。先理清执行链路定时器计数器溢出或比较匹配时会产生一个触发事件这个事件经过ADC的触发选择逻辑作为ADC的启动信号。ADC收到触发后开始转换转换完成后结果存入ADC数据寄存器同时产生DMA请求信号DMA控制器把数据从ADC的数据寄存器搬到内存数组搬运完成后再通知CPU。关键点在于定时器触发ADC转换这件事是完全由硬件完成的不需要软件干预。定时器的节奏决定采样间隔只要定时器配置得当两次采样之间的时间间隔就是严格恒定的不存在软件抖动问题。这正是交流信号波形采样所需要的特性——均匀采样。在STM32F103上ADC1的触发源可以选TIM1_CC4、TIM2_CC2、TIM3_TRGO、TIM4_CC4等。最常用的是用定时器的更新事件TRGO或者通道比较事件CCx来触发。用TRGO触发时只需要配置定时器向上计数溢出时输出TRGO事件ADC就自动开始转换。用通道比较触发时可以做到更灵活的采样点控制比如PWM的中心对齐采样这个后面再展开。3.2 采样率的计算与设置采样率怎么定这里必须要提一下奈奎斯特采样定理采样频率必须大于信号最高频率的两倍否则高频成分会折叠到低频产生混叠。但实际工程里两倍远远不够一般工程经验是至少5~10倍甚至更高具体看你要还原信号的什么特征。采样率由定时器参数决定。假设系统时钟是72MHz定时器预分频器PSC设为X自动重装载值ARR设为Y则触发频率为f_trigger 72MHz / (X1) / (Y1)举个例子目标采样率是10kHz那就要满足 (X1)*(Y1) 7200。可以取PSC71即分频72ARR99这样触发频率就是72MHz/72/10010kHz。需要注意实际的有效采样率还和ADC的采样时间、转换周期有关——如果ADC配置的采样周期加转换周期太长超过了定时器触发间隔就会出问题这个后面在常见问题里讲。在设计采样率时还要考虑数据量的问题。假设采样率10kHz每个采样点2字节12位ADC结果用半字存储一秒钟就是20KB数据这对MCU来说是可以接受的。但如果你要连续采几十秒内存就扛不住了所以一般用DMA的循环模式和半传输中断来做分块搬运边采边处理。3.3 DMA为什么要用循环Circular模式DMA有两种工作模式正常模式Normal和循环模式Circular。正常模式搬运完设定长度的数据就停止需要软件重新启动循环模式搬运完一轮后自动从头开始继续接收新的数据。采集交流信号这种连续流式的数据DMA必须用循环模式。原因很简单ADC一直在被定时器触发数据源源不断产生如果DMA搬运一次就停缓冲区很快就写满了后面的数据就只能溢出丢失。循环模式下DMA在缓冲区中反复写入就像在一个环形跑道上不停跑圈。CPU在需要处理数据时主要利用两个中断点半传输中断Half TransferDMA搬运到缓冲区中间位置时触发传输完成中断Transfer CompleteDMA搬运到缓冲区末尾并准备重新开始时触发。利用这两个中断点可以把缓冲区分成前后两个半区前半区在搬运时CPU处理后半区后半区在搬运时CPU处理前半区。前后交替处理既有流水线式的并行效率又不会出现数据覆盖问题。3.4 一个重要的经验教训DMA缓冲区大小设计缓冲区大小直接关系到数据处理的实时性和连续性。缓冲区太小CPU处理不过来中断间隔太短系统一直在跑中断缓冲区太大占了大量内存。我做过实际对比如果只是计算有效值RMS缓冲区256个点就够了10kHz采样率下对应25.6ms数据覆盖一个50Hz周期的1.28倍如果要做FFT做频谱分析缓冲区大小取决于FFT点数要求通常至少要1024点最好取2的整数次幂如果做完FFT还要做加窗处理缓冲区还要再放大一些。在DMA缓冲区设计上我的习惯是先用采样率除以数据更新频率算出这批数据能持续多长时间再反推缓冲区大小。比如要求每50ms更新一次RMS值采样率10kHz那缓冲区至少要500个点实际取1024留足余量。4. 代码实现全流程CubeMX配置 HAL库移植4.1 基于STM32CubeMX的整体配置我用的开发环境是STM32CubeMX Keil MDK选型STM32F103C8T6蓝色药丸板。这套流程在F103上跑通过换到其他系列只要对应修改即可。ADC1配置ModeADC1的IN1通道对应PA1引脚ADC参数里Resolution用12位默认Sampling Time采样周期数根据信号源阻抗选我这里设14.5周期ADC连续转换模式关闭ADC外部触发转换开启触发源选择Timer 3 Trigger Out事件具体触发源根据芯片型号对应ADC DMA访问开启开启Continuous Requests使能在部分STM32系列中需要打开才会持续产生DMA请求注意ADC的Continuous Conversion和外部触发是不兼容的选择。用了定时器触发ADC就不要再开连续转换模式了否则定时器触发反而会被忽略或产生混乱。这个是很多人配置时容易踩的坑。DMA配置DMA RequestADC1DirectionPeripheral To Memory外设到内存ModeCircular循环模式Data Width半字Half Word因为ADC结果是12位用半字存储就够了Memory Increment开启PriorityHigh优先级设高一点保证数据传输不被其他DMA请求打断DMA的数据宽度为什么用半字这是有讲究的。ADC数据寄存器是16位实际有效12位如果外设宽度设成字32位每次DMA搬运会读32位数据但实际外设寄存器只有16位有效高16位可能是无效数据会导致数据错位。半字宽度和外设寄存器宽度匹配搬运效率最高。定时器配置以TIM3为例配置为内部时钟输出触发事件TRGO作为ADC触发源Prescaler预分频71Counter Period自动重装载值99这样算出来触发频率是72MHz / (711) / (991) 10kHz在TIM3的Trigger Output TRGO中选择Update Event更新事件配置完成生成代码后CubeMX会自动生成MX_ADC1_Init、MX_DMA_Init、MX_TIM3_Init等初始化函数。4.2 HAL库关键代码解析初始化之后主函数里最重要的一段是启动采样链路。采样链路要按定时器 → ADC → DMA的顺序启动顺序错了会出问题int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_DMA_Init(); MX_ADC1_Init(); MX_TIM3_Init(); // 关键先启动ADC的DMA传输 HAL_ADC_Start_DMA(hadc1, (uint32_t *)adc_buffer, ADC_BUFFER_SIZE); // 再启动定时器定时器一旦启动就开始触发ADC HAL_TIM_Base_Start(htim3); while (1) { // 主循环可以干别的事采样在后台自动进行 // 数据在DMA中断回调中处理 } }顺序为什么这么重要如果先启动定时器定时器立刻就开始输出触发信号但此时ADC的DMA传输还没配置好ADC转换完成的数据没人搬运就会堆积在数据寄存器里后面的转换结果可能直接把前面的覆盖掉。先启动DMA传输等于先在内存里挖好坑然后定时器才开始蓄水数据来了有地方放。DMA中断的回调函数这样写void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { // 后半缓冲区数据就绪 process_adc_data(adc_buffer ADC_BUFFER_SIZE / 2, ADC_BUFFER_SIZE / 2); } void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc) { // 前半缓冲区数据就绪 process_adc_data(adc_buffer, ADC_BUFFER_SIZE / 2); }两个回调函数分别对应半传输完成和传输完成。在process_adc_data函数里写数据处理逻辑。很多人问为什么HAL库只调用了这两个回调因为HAL_ADC_Start_DMA启动的就是DMA循环传输循环模式下DMA的核心事件就这两个。ADC转换完成事件EOC反而不用监听因为数据已经被DMA搬走了CPU不需要关心每一次转换。4.3 数据处理从原始值到真实电压ADC采集到的是12位数字量范围0~4095。要换算成真实电压公式很简单电压 原始值 / 4095 * VREF如果VREF是3.3V那么原始值对应0~3.3V。但要注意因为信号是叠加在1.65V偏置上的交流信号所以真实信号值要减去偏置信号电压 (原始值 / 4095 * 3.3) - 1.65以50Hz交流信号为例一个采样周期内原始ADC值应该在1.65V附近上下波动经过减偏置之后得到正负交替的双极性波形。如果你想计算有效值RMS一个周期内的标准做法是float calculate_rms(uint16_t *data, uint32_t len) { float sum 0; for (uint32_t i 0; i len; i) { float voltage (float)data[i] / 4095.0f * 3.3f - 1.65f; sum voltage * voltage; } return sqrtf(sum / len); }如果你要做的分析对实时性要求不高可以在主循环里周期调用计算函数如果要求高就在DMA回调里做轻量处理重处理放主循环。4.4 补充一个实用技巧如何用DMA句柄关联外部变量很多初学者问数据到底在哪里这里必须说清楚DMA搬运的目标地址是一个全局数组比如#define ADC_BUFFER_SIZE 1024 __attribute__((aligned(4))) uint16_t adc_buffer[ADC_BUFFER_SIZE];声明数组时加上aligned(4)是为了保证4字节对齐避免DMA传输时因为地址未对齐出现总线错误或性能下降。数组定义成全局变量这样DMA中断回调中可以直接访问。如果定义成局部变量它位于栈上DMA是异步写入的栈地址在函数结束后可能被回收这是极为隐蔽的bug务必记住。数组的元素类型用uint16_t而不是uint32_t除了省内存之外还能保证后续对数据的处理逻辑更简单直观每个数组元素对应一个采样点索引清晰。5. 常见问题与排查技巧实录5.1 采样数据全是0或固定值这是我被问得最多的问题。现象是采集回来的数组里所有值都一样可能是0可能是4095也可能是某个固定值。排查顺序按这个走检查ADC引脚是否正确连接信号源很多时候是杜邦线松了或者信号源没开检查DMA是否真的搬运了数据——在调试模式下暂停程序查看adc_buffer内存区域检查ADC是否正确触发把HAL_ADC_Start_DMA和HAL_TIM_Base_Start的顺序反过来试试检查引脚复用功能配置PA1如果被其他外设占用或者没有配置为模拟输入ADC输入是收不到信号的。最容易忽略的一个是DMA中断回调里有没有打开中断使能。HAL库的DMA中断使能在HAL_ADC_Start_DMA内部已经打开了但要注意CubeMX生成代码中NVIC配置里DMA中断优先级必须正确设置否则回调函数永远不执行。5.2 采样波形有毛刺或数据跳变毛刺的来源主要有两个电源噪声ADC参考电压如果不干净采样结果会明显波动。解决办法前面讲过加强去耦、用单独基准源。实测下来用示波器看3.3V电源纹波超过50mV时采样波形上就能看到明显毛刺。采样时间不够信号源阻抗大、采样周期数太少采样电容来不及充满结果就会有随机误差。把采样时间从14.5周期改到28.5周期或者55.5周期试试。但要注意增大采样时间会降低最大采样率需要统筹计算。还有一种情况是DMA搬运过程中数据错位表现为波形看起来不连续有跳变点。这通常是因为缓冲区大小没有对齐或者数据处理时索引越界导致把相邻缓冲区的数据混在一起计算了。用半字宽度DMA时数组地址必须2字节对齐前面提到的aligned(4)可以一并解决。5.3 采样率不准确很多人在验证时发现实际采样率比计算值偏低。常见原因有两个ADC转换周期不够用定时器触发频率太高ADC一次转换还没完成下一次触发就到了。此时ADC会丢弃这次触发等下一个脉冲结果就是采样率不稳定、偶尔丢点。排查方法计算ADC一次转换需要的总周期数采样周期数固定转换周期数换算成时间再和定时器触发周期比较。以F103为例12位ADC固定转换周期约12.5个ADC时钟如果ADC时钟是12MHz一个周期约83ns。采样周期14.5个ADC时钟总周期27个总时间约2.25us。对应最大采样率约444kHz远高于我们的10kHz所以没问题。但如果ADC时钟配置不当比如ADC时钟太高逼近规格书极限就可能出问题。时钟树配置错误定时器时钟源的时钟频率没有算对。STM32F103的APB1定时器时钟在系统时钟为72MHz时实际是72MHzAPB1预分频为2时定时器时钟倍频到72MHz很多人误按36MHz计算算出来的采样率直接差一倍。5.4 DMA中断回调执行时间过长导致丢数据DMA回调函数里的处理代码不能太啰嗦。如果CPU在中断里执行太久比如在里面做浮点运算、FFT或者打印下一次半传输中断到来时上一次还没处理完就会产生中断嵌套或丢失触发。我的习惯是中断回调里只置一个标志位把耗时的数据处理搬到主循环里执行volatile uint8_t data_ready_half 0; volatile uint8_t data_ready_full 0; void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc) { data_ready_half 1; } void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { data_ready_full 1; }主循环里检测这两个标志再做真正的数据处理。这样中断回调的执行时间被压缩到微秒级不会影响DMA的实时性。5.5 常见问题速查表现象可能原因排查/解决办法采到的数据全为0信号没接上/引脚配置错检查接线、检查GPIO配置为模拟输入采到的数据全为4095信号超过量程/引脚悬空降低信号幅值、检查偏置电路数据大小一直不变DMA没启动/没触发检查HAL_ADC_Start_DMA是否调用、定时器是否启动波形有毛刺电源噪声大/采样时间不足加强电源滤波、增大采样周期数波形周期不对采样率计算错误检查PSC/ARR取值、检查时钟树回调函数不执行DMA中断未使能/优先级配置错误检查NVIC设置、检查DMA中断回调是否被重写6. 工程扩展建议与个人实操体会6.1 这套方案的扩展方向工程做完基础验证后可以根据实际需求在几个方向上扩展。如果你要做多通道交流信号采集比如三相电的电压电流检测只需要把ADC1的其他通道PA2、PA3等配进去用扫描模式Scan Mode配合定时器触发DMA缓冲区会按通道顺序存放数据。需要注意的是通道切换也需要时间Scan模式下采样率会随通道数增多而下降需要重新评估采样率是否够用。如果你要做变频信号采集信号频率不是固定的这时建议把触发源改成正交编码器或输入捕获让采样频率跟随信号频率变化保证每个周期采到的点数恒定。这个方案在电机控制里很常用。如果你要做FFT频谱分析缓冲区大小要选2的整数次幂1024/2048/4096数据处理时先在中断里把数据搬到一个临时数组再做FFT。注意FFT里的窗函数选择矩形窗适合周期信号的整周期截断汉宁窗适合非整周期截断这个要根据实际场景调。6.2 我在实际调试中的几点感受这套方案我做过很多次每次拿到新板子第一件事就是用100Hz方波或正弦波先跑通DMAADC链路确认波形还原正确后再进去做上层业务逻辑。数据采集底层的稳定性是上层算法可靠的前提这一步不能省。有个细节我印象特别深调试时用Keil的Watch窗口直接看adc_buffer数组如果能看到值在信号幅值范围内波动说明整个链路已经通了。但Watch窗口在暂停时会显示全部数组如果数组有1024个元素看着很吃力建议在Watch窗口里输入adc_buffer, 32只看前32个元素快速验证。另外务必用示波器看一下定时器的输出引脚比如TIM3_CH4的复用功能确认触发脉冲确实周期性地出现。有时候定时器配置看起来没错但实际没有波形输出这时候软件调得再久也是白搭。6.3 最后再分享一个实用小技巧交流信号采集的调试阶段最方便的信号源就是市电经过变压器降压后的波形但一定要接隔离变压器注意安全。没有信号源的情况下也可以用PWM经过RC低通滤波搭一个简易的信号发生器定时器输出一个可调频率的PWM经过两个电阻和一个电容的低通滤波后就变成交流正弦波信号了。这个方法不需要额外硬件纯粹用开发板就能验证你的采集链路非常实用。工程源码里的所有配置参数都是基于F103在72MHz主频下的实际参数你直接套用就能跑起来。如果要换芯片型号重点检查ADC的触发源映射表、DMA请求映射表、定时器时钟源频率这三处其他逻辑基本不用改。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

碳水不是敌人,代谢带宽才是:程序员如何选“最安全的碳水化合物” 2026/9/3 21:49:02

碳水不是敌人,代谢带宽才是:程序员如何选“最安全的碳水化合物”

有多少程序员有过这种经历:中午开完晨会,下楼吃了一碗热气腾腾的牛肉面,回到工位坐下,本想趁着下午精力把需求写完,结果代码还没看两行,眼皮就开始打架。屏幕上的代码像隔了一层水,脑子里的逻辑…

阅读更多 →
Redream v1.2.12高级版安卓配置教程:从BIOS到画面调优 2026/9/3 21:49:02

Redream v1.2.12高级版安卓配置教程:从BIOS到画面调优

最近整理安卓掌机设备时,把 Dreamcast 平台的老游戏重新翻了出来,发现很多玩家都在讨论 Redream 模拟器,尤其是 v1.2.12 高级版在安卓端的表现。我基于自己的实际配置经验和网上玩家反馈,把从安装、BIOS 设置、游戏目录添加到画面…

阅读更多 →
WD硬盘使用时间清零:SMART原理、固件级实操与避坑指南 2026/9/3 21:49:02

WD硬盘使用时间清零:SMART原理、固件级实操与避坑指南

简介:这款针对西部数据硬盘的使用时间清零工具,主要面向需要重置SMART累计工作时间的用户,适用于二手硬盘出售、更换或检测新旧程度等场景。它本质上只能改写SMART记录,无法改变硬盘实际磨损,因此仅能修改显示数据&…

阅读更多 →
基于STM32F103的JLINK V9.4调试器DIY:原理与制作全攻略 2026/9/3 21:49:02

基于STM32F103的JLINK V9.4调试器DIY:原理与制作全攻略

简介:JLINK-V9.4嵌入式开发工具完整资料包,面向单片机与嵌入式开发者,整合了硬件设计、固件升级与使用教学三个核心维度。资源共68个文件、58.12MB,涵盖PCB设计相关文件(原理图、PCB库、PCB工程)、固件升级…

阅读更多 →
2026年信创协作平台怎么选?BeeWorks视角下的落地判断 2026/9/3 21:49:02

2026年信创协作平台怎么选?BeeWorks视角下的落地判断

2026 年,信创协作平台的选型已经不只是“换国产软件”的问题,而是要看它能不能真的进入企业核心办公系统。对政企、国企、科研、金融和制造类组织来说,协同管理软件是高频入口,能不能适配国产环境、能不能私有化部署、能不能接住业…

阅读更多 →
基于YOLO26的单目测距与测速管线解析:从检测到误差控制的工程实践 2026/9/3 21:46:02

基于YOLO26的单目测距与测速管线解析:从检测到误差控制的工程实践

如果你在一个视觉项目里遇到过这样的需求——用普通摄像头识别出前方的人和车,还想顺便知道对方离你有多远、是正在靠近还是远离,甚至希望算出一个大概的运动速度——那么“单目测距与测速”这个方向迟早会找上你。基于 YOLO26 的单目测距与测速感知开源…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞