STM32-输入捕获
目录输入捕获测量频率的方法主从触发模式一、输入捕获测频率程序注意事项二、PWMI模式测频率和占空比程序注意事项三、编码器测速程序注意事项输入捕获定义输入捕获模式下当通道输入引脚出现指定跳变时当前CNT的值会被锁存到CCR中可用于测量PWM波形的频率占空比脉冲间隔电平持续时间等参数每个高级定时器和通用定时器都有四个输入捕获通道可配置为PWMI模式同时测量频率和占空比可配合主从模式实现硬件全自动测量。测量频率的方法测量频率的方法有两种测频法、测周法测频法主要适用于测量高频信号测周法主要用于测量低频信号中界频率用来区分用来区分用哪种方法进行测量。主从触发模式主从触发模式可以通过对触发源的选择当程序中触发源触发时从模式中会执行对应配置的操作。一、输入捕获测频率这里使用测周法测频率使用输入捕获测在标准频率下一个周期的计数值进而计算出所测频率。由于没有信号发生器所以本实验生成一段PWM波形用PA0口输出至配置为输入捕获的PA6口在进行测频率。程序先对PWM模块进行编写PWM.c文件#include stm32f10x.h // Device header void PWM_Init(void)//对PWM进行初始化配置 { RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2 ,ENABLE); RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE); TIM_InternalClockConfig(TIM2); GPIO_InitTypeDef GPIO_InitSTruct; GPIO_InitSTruct.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitSTruct.GPIO_Pin GPIO_Pin_0; GPIO_InitSTruct.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init (GPIOA ,GPIO_InitSTruct); TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructer; TIM_TimeBaseInitStructer.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInitStructer.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInitStructer.TIM_Period 100 - 1; TIM_TimeBaseInitStructer.TIM_Prescaler 720 - 1; TIM_TimeBaseInitStructer.TIM_RepetitionCounter 0; TIM_TimeBaseInit(TIM2,TIM_TimeBaseInitStructer); TIM_OCInitTypeDef TIM_OCInitStructer; TIM_OCStructInit(TIM_OCInitStructer); TIM_OCInitStructer.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructer.TIM_OCPolarity TIM_OCPolarity_High; TIM_OCInitStructer.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructer.TIM_Pulse 0; TIM_OC1Init(TIM2,TIM_OCInitStructer); TIM_Cmd(TIM2 ,ENABLE); } //对CCR的值进行设定调节占空比 void PWM_SetCompare(uint16_t Compare) { TIM_SetCompare1 (TIM2 ,Compare); } //对预分频值进行设置调节PWM的频率 void Set_Prescaler(uint16_t Prescaler) { TIM_PrescalerConfig(TIM2,Prescaler,TIM_PSCReloadMode_Immediate); }PWM.c文件#ifndef _PWM_H #define _PWM_H void PWM_Init(void); void PWM_SetCompare(uint16_t Compare); void Set_Prescaler(uint16_t Prescaler); #endif再对输入捕获模块进行编写IC.c文件#include stm32f10x.h // Device header void IC_Init(void) { //打开时钟使能TIM3 RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3 ,ENABLE); //打开时钟使能GPIOA RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE); //选择内部时钟源 TIM_InternalClockConfig(TIM3 ); //对PA6进行配置这里配置的时上拉输入模式 GPIO_InitTypeDef GPIO_InitStructer; GPIO_InitStructer.GPIO_Mode GPIO_Mode_IPU; GPIO_InitStructer.GPIO_Pin GPIO_Pin_6; GPIO_InitStructer.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA ,GPIO_InitStructer); //对时基单元进行配置这里需要将预重装值拉到最大65536-1 TIM_TimeBaseInitTypeDef TIM_InitStructer; TIM_InitStructer.TIM_ClockDivision TIM_CKD_DIV1; TIM_InitStructer.TIM_CounterMode TIM_CounterMode_Up; TIM_InitStructer.TIM_Period 65536-1; TIM_InitStructer.TIM_Prescaler 72-1; TIM_InitStructer.TIM_RepetitionCounter 0; TIM_TimeBaseInit(TIM3 ,TIM_InitStructer); //对输入捕获单元进行初始化配置 TIM_ICInitTypeDef TIM_ICInitStructer; TIM_ICInitStructer.TIM_Channel TIM_Channel_1; TIM_ICInitStructer.TIM_ICFilter 0xF; TIM_ICInitStructer.TIM_ICPolarity TIM_ICPolarity_Rising; TIM_ICInitStructer.TIM_ICPrescaler TIM_ICPSC_DIV1; TIM_ICInitStructer.TIM_ICSelection TIM_ICSelection_DirectTI; TIM_ICInit(TIM3,TIM_ICInitStructer); //触发源选择 TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1); //对从模式进行配置 TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset); //打开定时器TIM3 TIM_Cmd (TIM3,ENABLE); }IC.h文件#ifndef _IC_H #define _IC_H void IC_Init(void ); #endif最后在主函数中调用各模块函数实现测频率main.c文件#include stm32f10x.h // Device header #include OLED.h #include PWM.h #include IC.h int main(void) { OLED_Init(); PWM_Init(); IC_Init ();//初始化各个模块 Set_Prescaler(720-1); //72M /(PSC1) /100 //这个值必须要给占空比默认为0方波未生成 PWM_SetCompare(50); //CCR / ARR1 OLED_ShowString (1,1,Freq:00000Hz);//显示提示字符串 while(1) { //标准频率72M / 72 1M标准频率 / 计数值 要测的频率 OLED_ShowNum (1,6,1000000/TIM_GetCapture1(TIM3),5); } }最终效果生成的PWM频率为1000Hz,最终测出频率为1001Hz,有1Hz的误差。注意事项可以手动消除这个误差将计数值加一在进行计算需要记住输入捕获的触发源选择是TIM_TS_TI1FP1从模式配置Resret二、PWMI模式测频率和占空比输入捕获模式下的通道一和通道二可以交叉输出或者直接输出可以使两个通道的输入捕获值输出到同一个输出通道上本实验就是TIM3通道一测频率TIM3通道二测占空比将两个的捕获结果都输出到TIM3通道一。程序先对PWM模块进行编写PWM.c文件#include stm32f10x.h // Device header void PWM_Init(void)//对PWM进行初始化配置 { RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2 ,ENABLE); RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE); TIM_InternalClockConfig(TIM2); GPIO_InitTypeDef GPIO_InitSTruct; GPIO_InitSTruct.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitSTruct.GPIO_Pin GPIO_Pin_0; GPIO_InitSTruct.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init (GPIOA ,GPIO_InitSTruct); TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructer; TIM_TimeBaseInitStructer.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInitStructer.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInitStructer.TIM_Period 100 - 1; TIM_TimeBaseInitStructer.TIM_Prescaler 720 - 1; TIM_TimeBaseInitStructer.TIM_RepetitionCounter 0; TIM_TimeBaseInit(TIM2,TIM_TimeBaseInitStructer); TIM_OCInitTypeDef TIM_OCInitStructer; TIM_OCStructInit(TIM_OCInitStructer); TIM_OCInitStructer.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructer.TIM_OCPolarity TIM_OCPolarity_High; TIM_OCInitStructer.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructer.TIM_Pulse 0; TIM_OC1Init(TIM2,TIM_OCInitStructer); TIM_Cmd(TIM2 ,ENABLE); } //对CCR的值进行设定调节占空比 void PWM_SetCompare(uint16_t Compare) { TIM_SetCompare1 (TIM2 ,Compare); } //对预分频值进行设置调节PWM的频率 void Set_Prescaler(uint16_t Prescaler) { TIM_PrescalerConfig(TIM2,Prescaler,TIM_PSCReloadMode_Immediate); }PWM.h文件#ifndef _PWM_H #define _PWM_H void PWM_Init(void); void PWM_SetCompare(uint16_t Compare); void Set_Prescaler(uint16_t Prescaler); #endif再对输入捕获模块进行编写IC.c文件#include stm32f10x.h // Device header void IC_Init(void) { //打开时钟使能TIM3 RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3 ,ENABLE); //打开时钟使能GPIOA RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE); //选择内部时钟源 TIM_InternalClockConfig(TIM3 ); //对PA6进行配置这里配置的时上拉输入模式 GPIO_InitTypeDef GPIO_InitStructer; GPIO_InitStructer.GPIO_Mode GPIO_Mode_IPU; GPIO_InitStructer.GPIO_Pin GPIO_Pin_6; GPIO_InitStructer.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA ,GPIO_InitStructer); //对时基单元进行配置这里需要将预重装值拉到最大65536-1 TIM_TimeBaseInitTypeDef TIM_InitStructer; TIM_InitStructer.TIM_ClockDivision TIM_CKD_DIV1; TIM_InitStructer.TIM_CounterMode TIM_CounterMode_Up; TIM_InitStructer.TIM_Period 65536-1; TIM_InitStructer.TIM_Prescaler 72-1; TIM_InitStructer.TIM_RepetitionCounter 0; TIM_TimeBaseInit(TIM3 ,TIM_InitStructer); //对输入捕获单元进行初始化配置 TIM_ICInitTypeDef TIM_ICInitStructer; TIM_ICInitStructer.TIM_Channel TIM_Channel_1; TIM_ICInitStructer.TIM_ICFilter 0xF; TIM_ICInitStructer.TIM_ICPolarity TIM_ICPolarity_Rising; TIM_ICInitStructer.TIM_ICPrescaler TIM_ICPSC_DIV1; TIM_ICInitStructer.TIM_ICSelection TIM_ICSelection_DirectTI; TIM_ICInit(TIM3,TIM_ICInitStructer); //使用PWMI对TIM3通道二进行配置 TIM_PWMIConfig(TIM3,TIM_ICInitStructer); //下面注释掉的这部分代码能实现的就是PWMI模式的功能 // TIM_ICInitStructer.TIM_Channel TIM_Channel_2; // TIM_ICInitStructer.TIM_ICFilter 0xF; // TIM_ICInitStructer.TIM_ICPolarity TIM_ICPolarity_Falling; // TIM_ICInitStructer.TIM_ICPrescaler TIM_ICPSC_DIV1; // TIM_ICInitStructer.TIM_ICSelection TIM_ICSelection_IndirectTI ; // TIM_ICInit(TIM3,TIM_ICInitStructer); //触发源选择 TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1); //对从模式进行配置 TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset); //打开定时器TIM3 TIM_Cmd (TIM3,ENABLE); }IC.h文件#ifndef _IC_H #define _IC_H void IC_Init(void ); #endif最后在主函数中调用各个模块函数实现PWMI模式下同时测频率和占空比main.c文件#include stm32f10x.h // Device header #include OLED.h #include PWM.h #include IC.h int main(void) { OLED_Init(); PWM_Init(); IC_Init ();//初始化各个模块 Set_Prescaler(720-1);//72M /(PSC1) /100 PWM_SetCompare(50);//CCR / ARR1 //这个值必须要给占空比默认为0方波未生成 OLED_ShowString (1,1,Freq:00000Hz);//显示提示字符串 OLED_ShowString (2,1,Duty:000%); while(1) { //显示所测频率 OLED_ShowNum (1,6,1000000/(TIM_GetCapture1(TIM3)1),5); //显示所测占空比 OLED_ShowNum (2,6,(TIM_GetCapture2(TIM3)1)*100/(TIM_GetCapture1(TIM3)1),3); } }最终效果测出频率为1000Hz;占空比为50%注意事项输入捕获默认是从上升沿开始捕获TIM3通道1从一个上升沿测到下一个上升沿测的是一个周期的计数值TIM3通道2从一个上升沿测到下一个下降沿测的是一个脉冲宽度的计数值占空比的计算用通道2计数值 / 通道1计数值三、编码器测速编码器接口可接收增量正交编码器的信号根据编码器旋转产生的正交信号脉冲自动控制CNT的自增或者自减从而指示编码器的位置、旋转方向和旋转速度。每个高级定时器和通用定时器都有一个编码器接口两个输入引脚借用了输入捕获的通道一和通道二。上面两个图分别是正转反转时A、B两相的状态和在不同有效边沿模式下如何计数的具体情况。上图为编码器基本结构图。程序先对定时器中断进行编写Timer.c文件定时1s#include stm32f10x.h // Device header void Timer_Init(void) { RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2 ,ENABLE); TIM_InternalClockConfig(TIM2); TIM_TimeBaseInitTypeDef TIM_TimeInitStructer; TIM_TimeInitStructer.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeInitStructer.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeInitStructer.TIM_Period 10000 - 1; TIM_TimeInitStructer.TIM_Prescaler 7200 - 1; TIM_TimeInitStructer.TIM_RepetitionCounter 0; TIM_TimeBaseInit(TIM2,TIM_TimeInitStructer); TIM_ClearITPendingBit(TIM2,TIM_IT_Update); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2); NVIC_InitTypeDef NVIC_InitStructer; NVIC_InitStructer.NVIC_IRQChannel TIM2_IRQn; NVIC_InitStructer.NVIC_IRQChannelCmd ENABLE; NVIC_InitStructer.NVIC_IRQChannelPreemptionPriority 1; NVIC_InitStructer.NVIC_IRQChannelSubPriority 1; NVIC_Init (NVIC_InitStructer); TIM_Cmd(TIM2,ENABLE ); } //void TIM2_IRQHandler(void) //{ // if(TIM_GetITStatus(TIM2,TIM_IT_Update) SET ) // { // // } // TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //}Timer.h文件#ifndef _TIMER_H_ #define _TIMER_H_ void Timer_Init(void); #endif在对编码器接口部分进行编写Encoder.c文件:#include stm32f10x.h // Device header void Encoder_Init(void) { //打开时钟使能TIM3 RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3 ,ENABLE); //打开时钟使能GPIOA RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE); //对PA6、PA7进行初始化配置 GPIO_InitTypeDef GPIO_InitStructer; GPIO_InitStructer.GPIO_Mode GPIO_Mode_IPU; GPIO_InitStructer.GPIO_PinGPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructer.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA ,GPIO_InitStructer); //对时基单元进行初始化配置需要将ARR拉到最大65536-1 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructer; TIM_TimeBaseInitStructer.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInitStructer.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInitStructer.TIM_Period 65536 - 1; TIM_TimeBaseInitStructer.TIM_Prescaler 1-1; TIM_TimeBaseInitStructer.TIM_RepetitionCounter 0; TIM_TimeBaseInit(TIM3 ,TIM_TimeBaseInitStructer); //对输入捕获通道1进行初始化配置 TIM_ICInitTypeDef TIM_ICInitStructer; TIM_ICStructInit(TIM_ICInitStructer);//对所有参数赋一个自定值 TIM_ICInitStructer.TIM_Channel TIM_Channel_1; TIM_ICInitStructer.TIM_ICFilter 0xF; TIM_ICInit(TIM3 ,TIM_ICInitStructer); //对输入捕获通道2进行初始化配置 TIM_ICInitStructer.TIM_Channel TIM_Channel_2; TIM_ICInitStructer.TIM_ICFilter 0xF; TIM_ICInit(TIM3 ,TIM_ICInitStructer); //对编码器接口进行配置这里的第二个参数是选择编码器工作模式 TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12, TIM_ICPolarity_Rising,TIM_ICPolarity_Rising); //打开定时器TIM3 TIM_Cmd (TIM3,ENABLE ); } //用于读取编码器的速度 int16_t Get_count(void ) { int16_t tmp TIM_GetCounter(TIM3); TIM_SetCounter (TIM3,0); return tmp ; }Encoder.h文件#ifndef _ENCODER_H #define _ENCODER_H void Encoder_Init(void ); int16_t Get_count(void ); #endif最后在主函数中调用各个模块的函数实现编码器测速的功能main.c文件#include stm32f10x.h // Device header #include OLED.h #include Timer.h #include Encoder.h int16_t num;//定义一个变量用于存储编码器测出的速度 int main(void) { OLED_Init(); Timer_Init(); Encoder_Init ();//各模块初始化 OLED_ShowString (1,1,CNT:);//显示提示字符串 while(1) { OLED_ShowSignedNum (1,5,num,5);//显示编码器实时速度有符号数 } } //定时器中断服务函数定时1s进入中断 void TIM2_IRQHandler(void) { if(TIM_GetITStatus(TIM2,TIM_IT_Update) SET ) { num Get_count ();//每一秒进入中断读取编码器速度值 } TIM_ClearITPendingBit(TIM2,TIM_IT_Update); }最终效果旋转编码器旋钮向左速度为负值向右速度为正值停止旋转速度变为0能够实时显示编码器。注意事项想要显示编码器的位置就直接读取CNT中的计数值不用清零想要是编码器的方向相反可以在代码中改变极性也可以直接交换硬件中A、B两相的连线编码器配置输入捕获通道时有许多参数用不到可以先使用函数对其所有参数赋一个自定义值。

相关新闻

最短路径问题【各顶点间的最短路径——Floyd算法(带权图、无权图)】

最短路径问题【各顶点间的最短路径——Floyd算法(带权图、无权图)】

文章目录核心思想算法实现注意Floyd 算法(弗洛伊德算法) 是解决 “多源最短路径” 问题的经典算法。它可以一次性求出图中 任意两个顶点之间的最短路径,并且 允许边权为负值(只要图中不含负权回路)。核心思想 Floyd算…

2026/8/21 6:54:36 阅读更多 →
STM32F103 + FreeRTOS 桌面温湿度闹钟项目全流程分享

STM32F103 + FreeRTOS 桌面温湿度闹钟项目全流程分享

一、项目概述本项目是基于 STM32F103C8T6​ 主控芯片,搭载 FreeRTOS​ 实时操作系统开发的一款桌面温湿度闹钟。项目集成了 DHT11 温湿度采集、DS1302 RTC 实时时钟、TC5020EJ LED 灯板显示、NV020D 音频提示以及按键、触摸和声控交互功能。项目摒弃了传统的裸机轮询…

2026/8/21 6:54:36 阅读更多 →
电梯内电瓶车数据集 YOLO26进行检测识别 并构建基于深度学习yolov8电瓶车检测系统

电梯内电瓶车数据集 YOLO26进行检测识别 并构建基于深度学习yolov8电瓶车检测系统

深度学习目标检测如何使用Yolov8训练电梯内电瓶车数据集进行检测识别 并构建基于深度学习yolov8电瓶车检测系统 电瓶车数据集 yolo目标检测 电梯内电瓶车检测 该数据集包含3933张图片,标签为bicycle好的,我们将使用YOLO(You Only Look Once&a…

2026/8/21 6:54:36 阅读更多 →

最新新闻

MA-VLCM:多模态融合如何革新多智能体策略价值评估

MA-VLCM:多模态融合如何革新多智能体策略价值评估

1. 从单智能体到多智能体:价值评估的范式转变在强化学习领域,评估一个策略的好坏,或者说预测一个状态或状态-动作对的长期回报,是核心任务之一。传统的价值函数,无论是状态价值函数V(s)还是动作价值函数Q(s, a)&#x…

2026/8/21 9:03:49 阅读更多 →
网络安全实战:漏洞扫描器对比——Nessus、OpenVAS、Nuclei 实战评测

网络安全实战:漏洞扫描器对比——Nessus、OpenVAS、Nuclei 实战评测

前言:在自动化的浪潮中寻找那把“尺子” 在渗透测试的项目周期里,有一个环节既让人爱,又让人恨,那就是“漏洞扫描”。爱它,是因为它确实能像收割机一样,快速收割掉那些低垂的果实——那些未打补丁的系统、弱…

2026/8/21 9:03:49 阅读更多 →
冒泡排序算法深度解析:从基础实现到优化策略与面试实战

冒泡排序算法深度解析:从基础实现到优化策略与面试实战

1. 项目概述:为什么我们还在聊冒泡排序?在算法面试和日常的编程基础讨论里,冒泡排序(Bubble Sort)大概是那个最常被提起,也最容易被“轻视”的算法。很多刚入门的朋友会觉得:“这不就是个两层循…

2026/8/21 9:03:49 阅读更多 →
开源Winapp2.ini规则库:打造精准免费的Windows系统清理方案

开源Winapp2.ini规则库:打造精准免费的Windows系统清理方案

在 Windows 系统长期使用后,系统盘空间被各种临时文件、缓存和软件残留占用是开发者和管理员经常遇到的痛点。手动清理不仅效率低下,而且容易误删重要文件。虽然市面上有 CCleaner 等知名工具,但其商业版本需要付费,且部分高级功能…

2026/8/21 9:03:49 阅读更多 →
ORB-SLAM3 MLPnPsolver::Refine()

ORB-SLAM3 MLPnPsolver::Refine()

下面是 MLPnPsolver::Refine() 函数的逐行注释,以及背后数学原理与公式说明。 首先理解函数的作用:在RANSAC过程中,当找到一个比较好的模型(内点数超过历史最佳),会用所有内点重新估计一次位姿,以得到更精确的解。这个过程通常叫做“局部优化”或“Refine”。这里用的是…

2026/8/21 9:03:49 阅读更多 →
独立游戏开发中AI工具合规应用与风险规避指南

独立游戏开发中AI工具合规应用与风险规避指南

最近和几个做独立游戏的朋友聊天,发现一个挺有意思的现象:大家聊起AI工具时,态度变得比以前复杂多了。以前是“哪个AI画图强?”“哪个AI写代码快?”,现在更多是“这个AI生成的内容,平台审核能过…

2026/8/21 9:02:49 阅读更多 →

日新闻

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

前言随着国家数字基础设施信创替代、关键技术自主可控战略持续深化,口岸智慧安防、边检智能管控领域正全面进入国产化、自主化、安全可控升级周期。当前国内机场边检旅客识别与定位体系长期依赖国外商用视觉算法、进口成像硬件、闭源通用计算平台,存在核…

2026/8/21 0:00:42 阅读更多 →
别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱当下数字化建设浪潮中,很多项目将三维可视化、视频贴图叠加的数字孪生等同于空间智能。传统数字孪生更多停留在三维场景复刻,擅长把物理世界“画出来、展示出来”,…

2026/8/21 0:00:42 阅读更多 →
105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40C到85C的影像质量一致性——ISP参数温漂补偿与产线标定策略 去年冬天在北方某车厂做A样评审,凌晨四点的黑河试验场,零下三十三度。客户拿了一台冷启动的车,中控屏上倒车影像全是雪花噪点,暗部细节直接糊成一片。我第一反应是sensor温度没上来,暗电流…

2026/8/21 0:00:42 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/20 6:11:08 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/21 0:14:22 阅读更多 →