多摩川绝对式编码器读取:STM32与RS485通信实现及伺服调试避坑指南

简介:基于STM32F429的多摩川TS5668N21编码器读取程序完整源码包,面向工业自动化、电机控制与精密定位领域的嵌入式软硬件开发者。工程围绕ADM485(RS-485)半双工通信协议展开,涵盖STM32CubeMX引脚分配、时钟树与UART参数配置,RTS方向控制位设置,以及A/B相正交解码计数、Z相零位重置和霍尔信号检测逻辑;代码针对编码器上电初始化时间与多任务环境中的脉冲丢失风险,加入了等待稳定与中断锁存机制。压缩包共263个文件,以h/c源文件(核心驱动与硬件抽象层库代码)、s汇编启动文件、o目标文件、axf/hex烧录产物及uvprojx工程配置为主,整体大小4.79MB,目录结构清晰,导入Keil后可直接编译并部署至STM32F429开发板实测。方案采用官方硬件抽象层库编写,枚举状态清晰,便于二次开发与平台迁移。已有4833人学习浏览,适合需要快速复用多摩川编码器读取方案、借鉴ADM485协议在STM32上的UART实现,或排查正交解码与脉冲丢失问题的开发者。

1. 多摩川编码器读取:伺服调试台上那个“绝对位置”终于不丢了

在机器人关节模组的调试现场,增量编码器最让人头疼的莫过于断电后再上电,机械臂的零点位置全部丢失,每次都得手动寻零。换上多摩川绝对式编码器后,位置信息被存进编码器内部的齿轮组和圈数寄存器,掉电不丢数据,上电即读即用。这篇笔记讲的就是基于 STM32 读取多摩川 TS5668N21 编码器的完整方案,覆盖了硬件接线、串行协议解析、核心代码逐段拆解,以及我在实际调试中踩过的三个大坑——位置数据乱跳、多圈计数值归零、CRC 校验失败。适合正在做伺服驱动、关节模组或运动控制平台,手里刚好有一颗多摩川编码器,想快速跑通读取逻辑的开发者。

2. 硬件链路与通信协议:TS5668N21 的帧格式和 RS485 收发电路

2.1 引脚定义与差分信号接线方案

TS5668N21 是典型的绝对式多圈编码器,单圈 17 位分辨率,多圈 16 位,输出接口走 RS485 差分串行协议。它不像增量编码器那样输出 A/Z/B 脉冲,而是通过两根差分线(DATA+ 和 DATA-)以半双工方式返回绝对位置数据。STM32 的 UART 引脚是单端 TTL 电平,没法直接和差分总线对接,所以中间必须加一颗 RS485 收发器。我这边用的是 MAX3488,3.3V 供电,最高支持 10Mbps,完全覆盖 TS5668N21 的 2.5Mbps 通信速率。接线方式如下:

  • DATA+ 接收发器 A 端(非反相输入)
  • DATA- 接收发器 B 端(反相输入)
  • 收发器 RO 接到 STM32 的 RX 引脚(PA10)
  • 收发器 DI 接到 STM32 的 TX 引脚(PA9)
  • 收发器 RE/DE 合并后接一个 GPIO(PA8),用于控制收发方向

RS485 是半双工总线,同一时刻只能发送或接收。发送命令帧之前要把 DE 拉高,命令发完后必须立刻把 DE 拉低,不然编码器返回的数据会被自己的发送电路短路掉。这个方向切换的时序如果控制不好,轻则丢帧,重则引发总线冲突,后面避坑章节会专门展开。

2.2 串行通信协议帧结构拆解

多摩川编码器的串行协议是固定的主从问答模式:主机(STM32)发一帧命令,编码器返回一帧数据。命令帧通常是一个字节,例如 0x00 代表“读绝对位置”,有的型号还支持 0x01 读加速度、0x02 读转速等扩展命令。TS5668N21 的标准响应帧结构是 48 位数据,拆开来看:

位段长度含义
单圈位置高 4 位4 bit圈内角度最高有效位
单圈位置低 13 位13 bit圈内角度低有效位,与高 4 位合并成 17 位
多圈计数值16 bit断电不丢失的圈数,范围 0~65535
校验字节8 bitCRC-8,校验前面 40 位数据

这里有个容易误读的地方:单圈 17 位不是均匀分布在 0~131071 之间,前 4 位和后 13 位在字节流里不是连续排列的。接收端要把 40 位完整数据拼成一个 uint64_t,再按位段掩码提取。CRC-8 的生成多项式是 0x31(x^8 + x^5 + x^4 + 1),初始值为 0xFF,和常见的 CRC-8/MAXIM 不一样,实现时不要直接抄网上的表驱动代码,多项式算错的话每一帧都会校验失败。

2.3 波特率、帧间隔与采样时序

TS5668N21 支持两种主流波特率:2.5Mbps 和 1Mbps。2.5Mbps 下单帧响应时间大约 20 微秒,适合对位置采样频率要求高的场景,比如伺服电流环的前馈;1Mbps 的兼容性更好,很多第三方调试工具默认用这个速率。我实际用 2.5Mbps,STM32F405 的 USART 时钟经过分频后刚好能配出较接近的波特率,误差在 0.2% 以内,通信很稳。

命令帧发送完毕后,编码器大约需要 15~20 微秒准备数据,这个等待时间在 GPIO 翻转之后要用延时函数卡住,不能直接进接收等待。否则会把编码器还在准备数据的空闲电平误判成帧起始位,导致整帧移位。具体时序是我拿示波器实测的,这在代码注释里有标注。

3. 核心代码逐段拆解:从 UART 接收中断到单圈角度解析

3.1 UART 底层配置:DMA 空闲中断接收 6 字节

TS5668N21 的响应帧固定 6 个字节(40 位数据 + 8 位 CRC),长度不变,这是用 DMA + 空闲中断接收的理想场景。初始化代码如下:

void tamagawa_uart_init(void) { // 使能 USART1 时钟和 GPIOA 时钟 __HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); // PA9 = TX, PA10 = RX, 复用功能 AF7 GPIO_InitTypeDef gpio = {0}; gpio.Pin = GPIO_PIN_9 | GPIO_PIN_10; gpio.Mode = GPIO_MODE_AF_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_VERY_HIGH; gpio.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(GPIOA, &gpio); // 2.5Mbps 波特率,8 位数据位,无校验,1 位停止位 UART_HandleTypeDef huart = {0}; huart.Instance = USART1; huart.Init.BaudRate = 2500000; huart.Init.WordLength = UART_WORDLENGTH_8B; huart.Init.StopBits = UART_STOPBITS_1; huart.Init.Parity = UART_PARITY_NONE; huart.Init.Mode = UART_MODE_TX_RX; huart.Init.HwFlowCtl = UART_HWCONTROL_NONE; HAL_UART_Init(&huart); // 配置 DMA 接收,USART1_RX 对应 DMA2 通道 7 或 DMA1 通道,按芯片型号查表 __HAL_LINKDMA(&huart, hdmarx, hdma_uart_rx); HAL_UART_Receive_DMA(&huart, rx_buffer, 6); // 使能空闲中断(HAL 库需要在底层回调里做) __HAL_UART_ENABLE_IT(&huart, UART_IT_IDLE); }

代码里最关键的还是波特率计算。2.5Mbps 在 F4 系列上用的是 84MHz 的 APB2 时钟源,USARTDIV = 84000000 / 4000000 = 21,最终分频得到 2.5Mbps。如果换成 72MHz 主频的 F1 系列,2.5Mbps 配出来误差接近 1.4%,那就建议改用 1Mbps 档位。这个参数在移植到别的型号开发板时要特别注意。

方向控制 GPIO 的初始化很简单,就是普通推挽输出,初始状态拉低,保证默认处于接收态。我习惯了把方向控制放在发送函数里做掉,而不是单独暴露出去,避免上层调用者漏拉引脚。

3.2 帧接收状态机与 CRC 校验实现

DMA 接收满 6 字节后触发 DMA 传输完成中断,但更稳定的做法是用空闲中断来判断一帧结束。因为编码器响应帧之间有一个明显的总线空闲期,即使 DMA 只收到 5 个字节也算作一帧结束,方便发现断帧异常。空闲中断的响应逻辑如下:

void USART1_IRQHandler(void) { if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE)) { __HAL_UART_CLEAR_IDLEFLAG(&huart1); HAL_UART_DMAStop(&huart1); // 停掉当前 DMA,防止数据覆盖 uint8_t len = 6 - __HAL_DMA_GET_COUNTER(huart1.hdmarx); // 实际收到的字节数 if (len == 6) { frame_complete_flag = 1; // 6 字节完整帧,交给解析函数处理 memcpy(temp_frame, rx_buffer, 6); } else { error_count++; // 断帧计数,用于通信质量统计 } HAL_UART_Receive_DMA(&huart1, rx_buffer, 6); // 重新挂载 DMA } }

这段代码的逻辑说明:DMA 计数器在接收启动时是 6,每收一个字节减一,所以6 - 剩余值就是实际接收长度。如果编码器返回的数据没有填满 6 字节,说明帧对齐出了问题,此时自增 error_count 用于统计通信丢帧率。要特别注意的是,DMA 停止和重新挂载之间不能有被其他中断打断的窗口期,否则总线上的下一条命令响应会覆盖未读走的数据。我习惯在这个中断里直接关全局中断 1~2 个周期,代价极小,换的是稳定性。

帧解析函数负责拼接数据并校验 CRC:

uint8_t tamagawa_parse_frame(uint8_t *frame, uint32_t *single_turn, int32_t *multi_turn) { // 1. 拼出 40 位有效数据 + 8 位 CRC,共 48 位 uint64_t raw = 0; for (int i = 0; i < 6; i++) { raw = (raw << 8) | frame[i]; } // 2. 取出 CRC8,和前面的 40 位分开 uint8_t crc = raw & 0xFF; uint64_t data = raw >> 8; // 高 40 位是有效数据 // 3. CRC 校验(多项式 0x31,初始值 0xFF) uint8_t calc = 0xFF; for (int i = 0; i < 5; i++) { calc = calc ^ (frame[i]); for (int bit = 0; bit < 8; bit++) { if (calc & 0x80) { calc = (calc << 1) ^ 0x31; } else { calc = calc << 1; } } } if (calc != crc) { crc_error_count++; return 0; // 校验失败,丢弃该帧 } // 4. 按位段提取单圈 17 位和多圈 16 位 // data 高 4 位是单圈的第 13~16 位,data 低 13 位是单圈的低位 *single_turn = (uint32_t)((data >> 27) & 0x0F) << 13; // 高 4 位 *single_turn |= (uint32_t)(data & 0x1FFF); // 低 13 位 *multi_turn = (int32_t)((data >> 13) & 0x7FFF); // 16 位中的低 15 位 if (data & (1ULL << 28)) { *multi_turn |= 0x8000; // 补高位,得到完整 16 位,注意符号 } return 1; }

参数说明:single_turn 输出 0~131071 的圈内位置码,相当于把一圈 360 度切成了 131072 份;multi_turn 输出带符号圈数,正数代表正向转过的圈数。这里的位段偏移是我对着数据手册的位序图逐 bit 核对过的,不同型号的编码器(比如 TS5700 系列)位段分布会不一样,复用代码前务必再查手册。

3.3 单圈位置到机械角度的换算与坐标系归一化

拿到 17 位原始码之后,如果直接把 raw 值当角度用,后续做位置环就很别扭。需要换算成统一的 0~360.0 度浮点数,或者换算成以 1/1000 度为单位的整数。换算公式很简单:

float tamagawa_angle_deg(uint32_t single_turn) { // 17 位分辨率,每 LSB 对应的角度 const float lsb_deg = 360.0f / 131072.0f; return (float)single_turn * lsb_deg; }

浮点计算在 F4 上有 FPU 加速,每帧一次换算的开销可以忽略,但在 F1 系列上就要考虑用定点算法替代,否则会拖慢中断处理时间。实际工程里我更推荐输出整数角度值,单位是 0.001 度,计算方法为single_turn * 360000 / 131072,用 64 位中间变量存一次乘法的中间结果,避免 int32 溢出。

这一层换算被单独封装成一个函数,除了做除法,还负责把角度映射到 [0, 360) 区间内,消除掉编码器零点与机械零点的固定偏移。偏移量通常在设备出厂标定时写入 EEPROM,换算函数里直接减掉就行。

4. 调试记录与避坑指南:定位“读出来数据乱跳”的三个真凶

4.1 现象:电机静止,位置数据在几个相邻码值之间抖动

伺服电机静止时,编码器输出理论上应该是恒定的单圈位置码,但实际调试时发现数据会在相差几十个 LSB 的范围内来回跳。一开始怀疑是编码器本身精度问题,用示波器量了 DATA+ / DATA- 的差分波形,发现信号幅值只有 0.8V 左右,明显偏低。

原因:RS485 总线末端没有接 120 欧姆匹配电阻,信号在线上反射,导致波特率 2.5Mbps 下数据眼图闭合。解决方式是收发器 A/B 之间并联一颗 120 欧姆电阻,同时尽量缩短编码器线缆长度,我这边从 12 米减到 5 米后抖动立刻消失。还有一点容易被忽略:手拧的接线端子如果接触电阻偏大,同样会造成信号衰减,最好压接端子或者干脆焊接。

4.2 现象:掉电再上电,多圈计数归零

绝对式编码器的卖点就是掉电不丢圈数,但我遇到过一次断电重启后 multi_turn 变成 0 的情况,而且只发生在快速正反转切换之后。

原因排查到最后发现,问题不是编码器丢数据,而是我的读取时序不对。编码器内部的多圈计数在断电前如果正处于更新窗口的临界点,位置数据的多圈段会被读成中间状态。解决方式是在关闭伺服电源前,先把编码器的“预置”命令发一遍(0x03),让内部计数状态机稳定下来,再断电就再也没复现过归零问题。这个预置命令本质上是把多圈计数值锁定到当前机械位置对应的寄存器里,属于出厂校准的一部分。

4.3 现象:CRC 校验总是失败

换上另一颗同型号编码器后,一帧都过不了校验,示波器看波形又完全正常。

原因出在波特率匹配上。新编码器的固件版本默认为 1Mbps,而我这边 STM32 配置的是 2.5Mbps。RS485 的差分电平在两种波特率下波形都正常,所以示波器看不出异常,但数据位采样率完全不同。解决方式是读编码器铭牌上的速率标识,然后用调试工具先发一遍设置波特率的命令(0x05),把编码器切到 2.5Mbps 后重新上电,CRC 校验立刻恢复正常。

4.4 排查工具:用逻辑分析仪离线解析帧结构

如果怀疑协议解析问题,最直接的办法是用逻辑分析仪抓 DATA+ 引脚的单端电平——注意 RS485 是差分信号,逻辑分析仪只能接 A 端对 GND 的电压,波特率设为 2.5Mbps 就能还原出 UART 帧。拿到原始波形后,在解析软件里对照 0x00 命令和返回的 6 字节,逐 bit 核对位段分布,就能确定是协议理解错误还是代码位掩码写错。

5. 工程化拓展:多圈计数同步、零位标定与超速保护机制

5.1 多圈计数值的软件同步策略

TS5668N21 的多圈计数是编码器内部维护的,理论上读取出来就是真实值,但实际使用中存在一个时序问题:如果单圈位置恰好跨过 0 度时读取多圈,内部的多圈递增和位置读取是异步的,可能读到“位置接近 0 但圈数还没加 1”的组合。解决方式是连续读两帧,如果第一帧的单圈值接近 360 度,第二帧接近 0 度,并且圈数没有递增,就手动给 multi_turn 加 1。这个补偿逻辑在高速旋转场景下很重要,否则伺服做位置闭环时会有累计误差。

代码实现上其实就是一个简单的分支判断:

if (first_angle > 350.0f && second_angle < 10.0f) { multi_turn_adjust++; // 软件同步补偿 }

实际项目中我会把这个补偿值写进一个环形缓冲,而不是直接修改编码器返回的原始圈数,这样出现极端情况时还能回溯排查。

5.2 机械零点标定的完整流程

设备每次装配后,机械零点和编码器零点之间必然有固定偏差。标定流程如下:

  1. 手动转动电机到机械零位(通常用治具顶住定位销)
  2. 读取此刻的单圈角度值,记为 zero_offset
  3. 把 zero_offset 写入 STM32 的 EEPROM 或者 Flash 模拟存储区
  4. 每次上电初始化时读回 zero_offset,在角度换算函数里减去

这个标定值建议存两份,一份放 STM32,一份放编码器的 EEPROM 扩展区(如果有)。单一存储介质失效时,另一份还能兜底。我踩过的坑是只存了 STM32 侧,结果刷固件时不小心擦了 Flash,整个零点丢了,又重新装了一轮机械治具。

5.3 通信故障保护与看门狗策略

编码器通信线在运动设备上属于高风险环节,插头松动、线缆折断随时可能发生。我这边加了双重保护:第一层是软看门狗,每次收到合法帧就清零一个计数器,如果 5ms 内没有收到任何合法帧,立刻将电机状态切换为报错停,不让位置环继续输出;第二层是错误帧统计,CRC 错误连续超过 10 次就触发报警码 0xE100,提示产线检查编码器线缆。

看门狗定时器用的是硬件 IWDG,超时时间设 50ms。注意 IWDG 一旦启动就不可停止,必须在主循环里定期喂狗,不能放在中断里喂,否则死循环时中断还能继续跑,看门狗永远不生效。这个是我早期项目里真实的血泪教训。

6. 二次开发思路:从单机读取程序改造成带预测滤波的伺服位置前端

6.1 提高有效读取频率的关键手段

TS5668N21 在 2.5Mbps 下完整响应周期约 150 微秒,折算下来每秒最多读 6600 帧,理论上完全满足 1kHz 位置环的采样需求。但实际程序如果每帧之间通过阻塞延时等待响应,有效频率会掉到 2kHz 以下。优化方向是把发送和接收彻底解耦:命令发送用定时器触发的 DMA 完成,接收则完全走空闲中断,主循环只消费最新的一帧数据。

我一般会在主循环里只处理最新帧,不追求每一帧都处理。位置环的控制周期是 1ms,编码器响应的真实刷新在 0.15ms 到 0.2ms 之间,这期间多读的 5~6 帧数据可以用于滤波和预测,而不是全丢。

6.2 一阶低通滤波与速度前馈预测

编码器原始角度值直接进入位置环,噪声会通过微分放大,表现在电流上就是高频抖动。常见的做法是叠加一阶低通滤波:

float angle_filtered = alpha * angle_new + (1.0f - alpha) * angle_old;

alpha 系数取 0.2~0.4,具体要看机械刚性和负载。刚才提到的高频读取显得特别有价值:位置环每次运行前可以先做速度估计,再按速度预测出下一拍的角度,补偿掉控制周期内的采样延迟。做法是先取最近两帧的角度差除以时间戳差得到角速度,再用predicted_angle = angle_now + speed * control_period做前馈。

速度前馈能显著降低跟踪误差。我用这个方案做转台伺服联动的时候,1kHz 位置环的追踪误差从 0.3 度降到了 0.05 度以内。

6.3 从查询模式升级到中断驱动的事件订阅机制

如果项目里不止一个编码器,或者同一颗编码器数据要同时供给位置环和速度环,那建议升级成事件订阅机制。接收中断解析出新位置后,写入一个双缓冲的 ring buffer,不同控制环各自读取自己关心的数据切片。核心原则是不要让 UART 接收中断做除了解帧以外的任何计算,angle 换算和过滤全放到主循环。这样即使角度换算逻辑改坏了,通信链路本身还是稳定的,便于定位故障边界。

改造到这一步,这颗多摩川编码器基本就完全融入伺服系统了。我个人后来每次接新编码器,都会强制自己走一遍这套流程:先画帧结构图,再看逻辑分析仪波形,最后才写代码——顺序反了,后面大概率要返工换线重查。希望这次拆解能帮你少走几步弯路,欢迎下载源码照着跑一遍再改。

本文还有配套的精品资源,点击获取

相关新闻

汇编ADC指令详解:从进位标志CF到多字节加法的底层原理

汇编ADC指令详解:从进位标志CF到多字节加法的底层原理

学汇编一段时间后&#xff0c;大家基本都会遇到ADC这条指令。说实话&#xff0c;这条指令在指令表里毫不起眼&#xff0c;最多被解释成一句"带进位加法"&#xff0c;但真到了实战里&#xff0c;你会发现它远比表面复杂&#xff1a;写大数加法要用它&#xff0c;调试进…

2026/10/20 20:23:58 阅读更多 →
降AI率实操指南:从原理到工具,教你打造真人感文本

降AI率实操指南:从原理到工具,教你打造真人感文本

1. 先弄明白“降AI率”到底在降什么最近不少同学来找我&#xff0c;张口就是“哥&#xff0c;有没有降AI率的工具推荐&#xff1f;”。一开始我以为是小众需求&#xff0c;结果问了一圈才发现&#xff0c;这事已经成了很多人的刚需。无论是交课程论文、写实训报告&#xff0c;还…

2026/10/20 20:23:58 阅读更多 →
大模型知识更新利器:RAG检索增强生成原理与实战指南

大模型知识更新利器:RAG检索增强生成原理与实战指南

大模型知识更新的老难题&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;确实是我近两年见过最实用的解法。它给大模型开了一场“开卷考试”&#xff0c;让模型不再凭记忆硬答&#xff0c;而是先翻书、再答题&#xff0c;从根上…

2026/10/20 20:23:58 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年&#xff0c;我大部分时间都在跟浏览器标签页打交道&#xff0c;直到第一次把桌面应用跑起来&#xff0c;才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词&#xff0c;最开始是在某段时间频繁出现在同事的讨论里&#xff0c;一个用HTML…

2026/10/21 9:32:40 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档&#xff0c;主要面向智能锁安装人员、终端用户及售后维护者&#xff0c;帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件&#xff0c;大小4.37MB&#xff0c;内容结构清晰&#xff…

2026/10/21 9:32:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统&#xff0c;整车要求空载跑到8m/s&#xff0c;电机转速已经拉到额定点&#xff0c;驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令&#xff0c;转速纹丝不动&#xff0c;三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/21 9:32:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年&#xff0c;用它写过嵌入式驱动、做过游戏服务端&#xff0c;也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词&#xff0c;我其实挺感慨的——这门语言的难点从来不是语法多&#xff0c;而是知识点之间的耦合太深…

2026/10/21 9:32:40 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书以PDF格式发布&#xff0c;适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开&#xff0c;先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能&#xff0c;再给出完整安装步骤&…

2026/10/21 9:32:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历&#xff1a;翻开源码注释、论文摘要或者一份专业报告&#xff0c;每个字都认识&#xff0c;连在一起却像天书。想找人聊聊&#xff0c;身边要么没人懂&#xff0c;要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型&#xff0c;几秒钟之后&a…

2026/10/21 9:31:32 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/22 1:47:45 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/21 21:32:28 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:50:56 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 16:24:48 阅读更多 →