首页/新闻资讯/正文详情

64路模拟量共用A/D的FPGA采集系统时序与存储链路拆解

发布时间:2026/11/3 14:28:26 来源:云帆数科 栏目:资讯中心
64路模拟量共用A/D的FPGA采集系统时序与存储链路拆解
简介这份文档是一份面向电子信息、自动化及相关专业本科生与FPGA初学者的毕业设计说明书主题为基于FPGA的数据采集系统可用于课程设计、毕业设计选题参考与硬件方案梳理。压缩包内共1个doc文件约526KB内容围绕多路信号采集与存储展开给出64路05V模拟信号、8路无源开关量及1路TTL/12V数字脉冲信号的采集需求并讨论信号采集、中心控制、存储器、接口电路等模块的整体设计。文档包含绪论、研究背景、整体设计方案与系统硬件设计等章节对模拟开关、A/D转换、电压跟随、FPGA控制逻辑及并口传输等环节有较完整的论述可帮助读者理解数据采集系统的架构与实现思路。目前已有638人学习适合需要参考毕设框架、撰写设计说明书或搭建FPGA采集系统原型的学习者。1. 64路模拟量共用一条A/D通道这套采集系统真正的瓶颈在那做数据采集的人第一反应往往是盯着A/D的采样率选型。可当64路05V模拟信号、8路无源开关量、1路TTL或0/12V脉冲要同时进一块板子并被一片FPGA统管时序时限制整体性能的常常不是A/D标称的1.5MSPS而是模拟开关切换后那几百纳秒的建立时间、光耦离散的电流传输比以及NAND Flash一次页编程要等的那几百微秒。这套基于FPGA的数据采集系统值得拆开看的地方在于它把“多路复用—量化—缓冲—掉电保存”整条链路压进同一套时钟里任何一环没对齐采回来的不是坏数据而是“看着完全正常、其实前后通道互相污染”的数据。把这条路走通比背下几颗芯片的参数有价值得多。2. 模拟前端64路信号凭什么能共用一套A/D2.1 跟随器与16选1开关先解决源阻抗再谈精度64路模拟输入不可能每路配一套采样保持和A/D成本、体积、功耗都不允许。工程上的通行做法是“分时复用”用多路模拟开关把64路信号轮流接到同一套A/D前端上。这套系统的前端顺序是电压跟随器—模拟开关—A/D第一级用四运放器件搭成跟随器第二级用4片16选1的CMOS模拟开关拼出64路最后进12位流水线A/D。跟随器在这里不是为了“放大”而是为了把信号源阻抗压下去。模拟开关的导通电阻典型值200Ω它和信号源内阻、后级寄生电容串在一起构成一个RC网络。源阻抗越大两件事同时恶化一是采样电容充电变慢通道切换后要等更久才能启动转换二是开关断开时的泄漏电流这颗器件典型20pA流过源阻抗会叠加出一个误差电压。源阻抗从几十千欧降到毫欧级这两个问题一起被摁住。四片16选1并联使用时同一时刻只使能一片其余三片处于高阻。这不只是为了“选路”更是为了控制总线上的寄生电容和漏电流总量——通道数越多断开通道的漏电流叠加越明显导通那一路受到的干扰也越大。这是选多路开关时容易被忽略的一条通道数量本身就是精度参数。2.2 通道建立时间切换后到底要等多久通道切换的瞬间模拟开关输出端的寄生电容、PCB走线电容和A/D采样保持电路的输入电容全都要重新充电到新的电压值。这个过程的快慢由时间常数 τ (Ron Rs) × C 决定而“充到多准”决定了要等几个τ。12位量化要求建立误差小于1/2 LSB也就是满量程的1/8192对应的等待倍数是 ln(8192) ≈ 9个τ。源阻抗 Rs导通电阻 Ron等效电容 C时间常数 τ12位建立时间约9τ10 kΩ200 Ω100 pF1.02 μs约 9.2 μs1 kΩ200 Ω100 pF0.12 μs约 1.1 μs加跟随器后 1 Ω200 Ω100 pF0.02 μs约 0.18 μs这张表说明了一个反直觉的结论加跟随器前后同样的开关、同样的A/D允许的通道切换速率差了将近50倍。如果不加跟随器64路轮询一遍光建立时间就要花掉近600μs采样率直接被压到1.7kSPS量级A/D的1.5MSPS完全用不上。所以“多路复用系统慢”往往不是A/D慢是前端没把源阻抗处理好。提示表中的100pF是估算值实际要把开关的输入输出电容、PCB走线电容和A/D采样保持的输入电容一起算进去板子做出来后用示波器看切换瞬间的振铃和爬升比纸上算更靠谱。2.3 FPGA怎么编排“换路—等待—转换”的节奏模拟前端的时序全部由FPGA给出片选两位、片内地址四位、A/D时钟一路。核心是一个四状态的小状态机顺序是切通道、等建立、发一次转换、取数入队。下面是这段控制逻辑的骨架注释里标了每一步为什么这么写。// 64路轮询切换 - 等待建立 - 触发一次转换 - 数据入FIFO localparam SETTLE_CYC 8d40; // 建立等待周期数按实测RC调整宁可多等 reg [5:0] ch; // 当前通道号 0..63 reg [3:0] settle_cnt; // 建立等待计数器 reg conv_req; // 单周期脉冲通知时钟模块发一个ADC时钟 reg [1:0] st; always (posedge clk_50m) begin case (st) S_SWITCH: begin mux_sel ch[5:4]; // 高2位选4片中的一片同一时刻只使能一片 mux_addr ch[3:0]; // 低4位选片内16路 settle_cnt 4d0; st S_SETTLE; end S_SETTLE: begin if (settle_cnt SETTLE_CYC) st S_CONV; // 等够时间才允许转换 else settle_cnt settle_cnt 1b1; end S_CONV: begin conv_req 1b1; // 打一拍给ADC时钟发生器 st S_WAIT; end S_WAIT: begin conv_req 1b0; if (adc_valid) begin // A/D流水线延迟结束后数据才有效 fifo_din {otr, adc_dout}; // 溢出标志与12位数据一起入队 ch ch 1b1; // 轮到下一路 st S_SWITCH; end end endcase endSETTLE_CYC是这段代码里唯一需要现场调的参数它对应2.2节算出来的建立时间除以系统时钟周期。调小了采到的是上一路残留的电压表现为相邻通道数据“串味”调大了只是牺牲采样率不会出错。调试阶段的稳妥做法是先把它设得足够大确认数据正确后再逐步压缩观察从哪一拍开始出现通道间相关性那个临界点就是真实建立时间的上界。adc_valid不是A/D直接给出的信号而是FPGA根据流水线延迟自己数的A/D从采样沿到数据出现在并行输出口中间隔了固定个时钟周期这个周期数在器件手册里叫pipeline delay必须用计数器还原否则拿到的永远是“上一次”的转换结果。3. 流水线A/D12位分辨率为什么要靠数字校正兜底3.1 子区式结构每级只转换一部分再把残差放大选型时对比过并行比较型、逐次逼近型、积分型、压频变换型、Σ-Δ型和流水线型几条路线。并行比较型最快但位数上不去、功耗大逐次逼近型在1MSPS量级性价比最好但速度再往上就吃力积分型和压频变换型精度高却只有百SPS量级Σ-Δ型分辨率能到24位代价是过采样带来的速度限制。系统需要12位、1MSPS以上、还要连续采集最后落在流水线型上。流水线型也叫子区式把一次N位转换拆成若干级每级只做一个低分辨率的粗转换然后把“输入减掉本级量化结果”的残差乘2放大交给下一级继续转换。关键点是每级都有自己的采样保持电路所以第一级把本次样本交给第二级之后立刻可以采下一个样本——这就是“流水线”三个字的由来转换延迟变长了但吞吐率等于时钟频率多个样本同时在各级里流动。粗转换必然带来比较器失调位数越少、每级步子迈得越大失调越致命。工程上的解法是给每级留冗余位常见做法是每级1.5位让后级的量化范围覆盖前级的误差最后在数字域把各级结果错位相加把比较器的失调“减掉”。这就是数字校正也是为什么12位器件在1.5MSPS下仍能给出11.3位有效位数、70dB信噪比的原因——剩下那零点几位被热噪声和量化以外的误差吃掉了。3.2 时钟抖动比位数更隐蔽的精度杀手流水线A/D对时钟质量极其敏感因为它的采样时刻由时钟沿直接决定。时钟沿的时间不确定性叫孔径抖动它引入的信噪比上限可以近似写成 SNR -20·log10(2π·f_in·t_jitter)。这个式子最反直觉的地方是输入信号频率越高、抖动的影响越大而抖动是绝对时间量与采样率无关。输入信号频率时钟抖动 100 ps 时的信噪比上限说明1 kHz约 124 dB远高于12位理论值74dB抖动可忽略100 kHz约 104 dB仍然不是瓶颈1 MHz约 84 dB开始接近12位器件的实际水平5 MHz约 70 dB已经吃掉全部精度余量12位理想量化信噪比是6.02×121.76 ≈ 74dB实测70dB的器件留给时钟抖动的预算其实很薄。所以在板级设计上A/D时钟不能随手从普通IO引出来要尽量走全局时钟网络、缩短走线、远离开关电源和NAND的写操作时序时钟的占空比也要控制因为流水线各级的建立时间都是按半个周期算的。3.3 数据对齐流水线延迟与采样窗口A/D输出的12位并行数据和超量程标志在时钟上升沿更新FPGA如果也在上升沿采正好撞在数据跳变的边缘上容易采到亚稳态。稳妥的做法是在下降沿取样相当于把采样点挪到数据眼图的正中间留出半个周期的建立保持余量。// A/D在时钟上升沿更新输出FPGA在下降沿取样避开跳变沿 reg [11:0] adc_dout_r; reg otr_r; always (negedge adc_clk) begin adc_dout_r adc_dout; // 12位并行数据 otr_r otr; // 超量程标志1表示输入超出量程映射范围 end // 流水线延迟计数数据对应的采样点要回退若干时钟具体值查手册 localparam PIPE_LAT 5d9; reg [4:0] lat_cnt; always (posedge adc_clk) begin if (lat_cnt PIPE_LAT) adc_valid 1b1; // 此后数据与通道号对齐 else lat_cnt lat_cnt 1b1; endPIPE_LAT必须和2.3节状态机里的adc_valid配合使用通道号在切换时就已经确定但对应的数据要过几个时钟才出来如果不等这个延迟就把当前通道号写进FIFO整批数据的通道标签会整体错位。这类错位的表现很有欺骗性——数据本身完全正常只是每一路都标成了别的路波形看上去毫无异常排查时极难定位。4. 存储链路NAND Flash页编程为什么必须靠FIFO兜着4.1 页、块与坏块存储器的存储结构存储选用的是128M×8位的NAND型闪存单电源3.3V供电掉电不丢数据。它的阵列组织是65536行页× 2112列其中2048字节是主数据区另外64字节是冗余区用来放ECC校验码和坏块标记。64页组成一个块一共1024块主数据容量128MB。NAND的几个硬性限制决定了写入时序的设计。第一写入单位是页擦除单位是块想改写一页必须先把它所在的整块擦掉所以“覆盖写”在NAND上是很昂贵的操作。第二页编程只能把位从1写成0不能从0写回1所以必须先擦后写。第三擦写寿命有限块擦除次数在万次量级且出厂就可能带坏块冗余区里的坏块标记必须在初始化时读出来写的时候绕开。选NAND而不是NOR是因为采集系统要的是连续大容量存储而不是就地执行代码。NOR的随机读快、可以直接跑程序但写入和擦除慢得多、单位容量成本高NAND单元密度高、写入和擦除都快一个数量级代价是必须通过I/O口分时传命令、地址和数据必须由控制器这里是FPGA来管理坏块和ECC。这个取舍在采集类设备里几乎是标准答案。4.2 命令与地址锁存四周期地址怎么写进去NAND只有8根I/O线命令、地址、数据全部复用这组线靠命令锁存使能和地址锁存使能两根信号区分当前传的是什么。写一页的完整顺序是发编程建立命令、发地址、连续灌数据、发编程执行命令、等状态引脚从低变高、读状态寄存器确认成功。地址需要四个周期两个周期给列地址页内偏移12位覆盖2112字节两个周期给行地址页号16位覆盖65536页。如果地址周期数少发或多发一个器件不会报错只会把数据写到错误的位置读到别处全是0xFF这种错误在调试时非常折磨人。// NAND页编程0x80建立 - 4周期地址 - 灌数据 - 0x10执行 - 等RB static void nand_write_page(uint32_t page, const uint8_t *buf, uint16_t len) { nand_cmd(0x80); // 编程建立命令 nand_addr(0x00); // 列地址低字节页内起始偏移 nand_addr(0x00); // 列地址高字节 nand_addr(page 0xFF); // 行地址低字节页号 nand_addr((page 8) 0xFF); // 行地址高字节页号高位 for (uint16_t i 0; i len; i) nand_data(buf[i]); // 数据在写使能上升沿被锁存 nand_cmd(0x10); // 真正启动页编程 while (nand_rb() 0); // 状态脚为低表示忙必须等到拉高 if (nand_read_status() 0x01) // 0x70读状态bit0为1表示编程失败 mark_bad_block(page / 64); // 换算成块号写入冗余区坏块表 }这段代码里最容易出事的是while (nand_rb() 0)这一行。页编程的典型耗时在几百微秒量级块擦除更长如果图省事用固定延时代替状态引脚轮询器件快的时候浪费带宽器件慢的时候直接丢页——而丢页往往不会立刻报错要等到回读整段数据时才发现中间缺了一块。4.3 跨时钟域缓冲与写均衡采集和存储的速率完全不匹配A/D按自己的时钟连续出数一旦启动就不等人NAND写一页要几百微秒中间还要穿插块擦除。两边必须用FIFO解耦FIFO的深度按“一次突发写满一页主数据”来定也就是至少能兜住2048字节外加冗余区的校验数据。FIFO的两端属于不同时钟域读写指针不能直接跨时钟域比较否则多比特同时跳变时会采到中间态。常见做法是把二进制指针转成格雷码再同步格雷码相邻值只变一位跨时钟域采样最多错一个计数不会出现指针乱跳// 写时钟域二进制写指针转格雷码后传出 always (posedge wr_clk) begin wr_ptr_bin wr_ptr_bin wr_en; wr_ptr_gray (wr_ptr_bin wr_en) ^ ((wr_ptr_bin wr_en) 1); end // 读时钟域格雷码两级同步后再转回二进制做空判断 always (posedge rd_clk) begin rg1 wr_ptr_gray; rg2 rg1; rg3 rg2; end按每路10kSPS、每样本2字节估算64路合计约1.28MB/sNAND连续写一页2KB按几百微秒算等效带宽在几MB/s量级看上去够用但块擦除、坏块跳过和ECC计算都会吃掉余量。这也是为什么采集类存储系统必须做“写均衡”把擦除操作尽量挪到写入间隙别让某一块被反复擦写提前报废。5. 排查记录让采集数据“看着正常”的五个坑5.1 串码模拟开关关断漏电与建立时间不足现象单通道注入已知电压相邻通道读数也跟着变化变化幅度不大几百毫伏但足以让整批数据失去可信度。原因有两个层面。一是建立等待周期设得太短开关刚切换、采样电容还没充到目标电压A/D就已经启动转换采到的是上一个通道的残余电压。二是多片模拟开关并联时断开通道的漏电流会流过导通通道的输出节点通道数越多叠加越明显。解决把建立等待先放大到明显偏大的值确认串码消失后再逐步压缩找到临界点后留一半余量。同时检查片选译码确保同一时刻只有一片使能其余片确实处于高阻而不是某个中间态。5.2 打坏IO钳位管的电阻功耗与结电容现象数字脉冲通道接12V信号后FPGA输入端偶尔损坏或者脉冲计数总是少几个。原因用3.3V稳压管做钳位思路没错但限流电阻的取值把功耗和边沿速度绑在了一起。电阻取大钳位管安全但和稳压管的结电容一起构成低通12V脉冲的边沿被磨圆高电平持续时间短的脉冲直接被滤掉电阻取小边沿好了稳压管在12V输入时的功耗又超标。解决先按稳压管允许功耗算出电阻下限再按最高脉冲频率下的边沿要求验证上限两个约束不重叠就换器件而不是硬凑。另外钳位后的信号最好再经一级施密特输入的反相器整形把缓慢或不规则的边沿重新变成陡峭的数字沿顺手起到驱动缓冲的作用。5.3 高电平拉不起来光耦CTR与限流电阻的取舍现象8路无源开关量在实验室通断正常接到现场后部分通道的高电平只有1V多逻辑识别成低电平状态全反。原因光耦的电流传输比分散性很大同一型号不同批次能差出几倍。限流电阻按典型CTR算输入电流够、输出三极管饱和换到低CTR的批次输出端拉电流不足负载电阻上分不到足够电压。此时输出既不是干净的高电平也不是干净的低电平后级反相器就进入亚稳态。解决按最小CTR而不是典型CTR反推限流电阻和负载电阻宁可输入电流大一点、多耗几毫安也要保证最差批次能饱和。然后整批做高低温通断测试把高电平电压记录下来低于后级输入门限的直接判不合格。5.4 丢页没有等RB拉高就发下一条命令现象连续采集几分钟后回读数据中间凭空少了一段长度正好是页的整数倍。原因页编程期间器件处于忙状态状态引脚为低。此时如果继续发命令或数据器件会忽略而控制器以为已经写入继续写下一页。等到回读时才发现中间那一页根本没写进去。更隐蔽的情况是写了但只写了半页前一半是旧数据后一半是新数据。解决所有写、擦操作后面强制轮询状态引脚不能有例外状态寄存器的失败位也要读读到失败就标记坏块并换页重写。这条规则后来形成习惯只要有忙状态引脚就先把它当唯一可信的完成信号固定延时可作保险绝不能作为唯一依据。5.5 偶发错位异步FIFO指针直接跨时钟域比较现象大部分数据正常偶尔有一帧的通道标签和数据对不上概率极低跑几小时才出现一次。原因FIFO的写指针是多个比特直接在读时钟域用两级触发器采样可能在指针进位的那一拍采到多个比特同时跳变的中间值得到一个不存在的指针值空满判断瞬间出错。解决指针改成格雷码跨时钟域再把同步后的格雷码转回二进制做比较。改完之后这个偶发问题不再出现。跨时钟域的问题特点就是这样不是每次都错而是概率性错靠复现很难定位只能从设计上保证“本来就错不了”。6. 集中控制的代价一片FPGA执行全部时序之后的取舍把64路模拟开关的片选地址、A/D的转换时钟、数字量的串并转换、开关量的采样、NAND的命令地址时序、PC接口的握手全部塞进一片FPGA收益很直接分立逻辑芯片搭这套时序光布线就够喝一壶而且改一个等待周期就要动板子用FPGA改的是代码一次编译就能验证。板面积、器件数量、可靠性都跟着改善调试时还能把内部信号引到引脚上用逻辑分析仪看。代价也很清楚做方案对比时我一般会摆成这样方案时序灵活性板级复杂度主要代价分立逻辑芯片低改时序等于改板高芯片多、走线多开发周期长不可重配置单片机软件控制中靠中断和延时低严格时序抖动大多路并行吃力单片FPGA集中控制高全部时序可编程低单点故障、时序收敛压力、功耗与开发门槛单点故障这一条最要命FPGA一挂采集、存储、通信全停而分立方案里某颗芯片坏了通常只影响一路。所以集中控制必须配套自检——上电先跑一遍内部自环用已知的测试数据走一遍FIFO和存储链路确认时序参数没被改坏调试时先降速把系统时钟压到十分之一跑通整条链路再逐步提速找出时序收敛的边界。这个习惯救过我好几次有一次改了建立等待参数高速下一切正常降速自检立刻暴露出某一路通道根本没被切到。从那以后我每次改完采集时序都要强制走一遍降速自环测试再谈性能。希望这套从多路复用到掉电存储的完整链路拆解能帮你在自己的采集系统里少绕几个弯。本文还有配套的精品资源点击获取

相关推荐

macOS 12下OpenClaw安装与配置全指南
macOS 12下OpenClaw安装与配置全指南

1. macOS 12系统下OpenClaw安装全攻略 在macOS 12 Monterey系统上部署OpenClaw工具链,需要特别注意系统版本兼容性和依赖管理。这个开源自动化平台对开发环境有特定要求,我将结合自己三次成功部署的经验,详细说明从环境准备到功能验证的全流程… · 2026/11/3 14:27:25

macOS 12部署OpenClaw:开发者自动化工具全指南
macOS 12部署OpenClaw:开发者自动化工具全指南

1. 项目概述 OpenClaw是一款面向开发者的多功能自动化工具,特别适合在macOS 12系统上部署使用。作为长期在macOS环境下工作的开发者,我发现很多同行在旧版系统上安装这类工具时经常遇到兼容性问题。本文将详细演示如何在macOS 12上完整部署OpenClaw的全过… · 2026/11/3 14:27:25

C#字符串转二进制流:编码选择、流操作与性能优化全解析
C#字符串转二进制流:编码选择、流操作与性能优化全解析

字符串和二进制流之间的转换,这个操作在C#里看起来不起眼,但真到用的时候,踩坑的人一抓一大把。我做数据采集和设备通信相关项目有些年头了,序列化、网络传输、文件落盘、协议封包这些场景里,字符串转二进制流几乎是每… · 2026/11/3 14:27:25

O(1)空间复杂度下寻找缺失数字的原地标记算法
O(1)空间复杂度下寻找缺失数字的原地标记算法

1. 问题背景与核心思路这个问题看起来简单,但隐藏着几个关键约束条件:我们需要在O(n)时间复杂度和O(1)额外空间复杂度下,找出1到n范围内缺失的数字。这意味着我们不能简单地使用哈希表等额外数据结构,而必须充分利用给定的数组本身… · 2026/11/3 17:21:30

C/C++中break与continue的底层原理与应用场景
C/C++中break与continue的底层原理与应用场景

1. 循环控制语句的本质区别 在C/C编程中,break和continue是两种最常用的循环控制语句,它们看似简单却经常让初学者混淆。让我用一个生活中的场景来解释它们的核心差异: 想象你正在参加一场马拉松比赛: 当你说"我要退出比赛… · 2026/11/3 17:21:30

DeepSeek大模型学习路线:从API入门到本地部署与微调
DeepSeek大模型学习路线:从API入门到本地部署与微调

最近后台收到特别多留言,几乎都是同一个问题:"我想学大模型,到底从哪儿开始?" 市面上不缺教程,缺的是真正能跑通全流程的路线。短视频讲不清楚"什么是注意力机制",长篇文章又动不动甩给… · 2026/11/3 17:21:30

从大模型到AI Agent:智能体训练、工作流编排与内容生成落地观察
从大模型到AI Agent:智能体训练、工作流编排与内容生成落地观察

最近在做AI资讯梳理的时候,后台收到不少朋友私信,问得最多的就是“每天那么多AI新闻,到底哪些值得看”“那些项目名听着高大上,又该怎么判断它是不是真落地”。正好借着整理9月下旬这波AI行业动态的机会,我把自己的信息… · 2026/11/3 17:21:30

Maven 4重构解析:核心架构升级与性能优化
Maven 4重构解析:核心架构升级与性能优化

1. Maven 4重构背景与核心价值2004年诞生的Maven作为Java生态的构建工具标杆,已经服务开发者整整15年。这次官宣的Maven 4被定位为"彻底重构"(Complete Rewrite),其变革力度远超常规版本迭代。从官方披露的信息来看&… · 2026/11/3 17:21:30

鸿蒙旧机型升级翻车实录:存储校验失败、应用闪退与回退策略
鸿蒙旧机型升级翻车实录:存储校验失败、应用闪退与回退策略

1. 一次升级引发的连锁反应:事情到底卡在哪手里这台备用机是华为al00系列的旧机型,平时拿来跑测试、看日志、偶尔当热点机用,系统一直停在鸿蒙2.0的某个早期版本。前阵子看到推送提示有新版本,想着备用机嘛,升就升了&a… · 2026/11/3 17:20:29

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

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

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

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

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

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

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码