低成本多通道波形采集方案:EM9170+ETA108实现高精度定时与稳定采集

发布时间:2026/5/21 9:06:51

低成本多通道波形采集方案:EM9170+ETA108实现高精度定时与稳定采集 1. 项目概述与核心思路作为一名在工业数据采集领域摸爬滚打了十多年的工程师我见过太多项目在方案选型阶段就陷入了“性能焦虑”的怪圈。一提到“波形采集”很多人的第一反应就是上FPGA、搞高速ADC、配大容量缓存整套方案算下来成本轻松破万开发周期动辄半年。但冷静下来想想我们手头的项目真的需要那么高的采样率吗或者说为了那用不到的“过剩性能”我们付出了多少不必要的成本和开发复杂度最近我主导完成了一个用于电力设备状态监测的波形采集项目核心需求是连续、稳定地采集多路工频电压电流信号进行谐波分析。客户对采样率的硬性要求其实不高5Ksps每秒5000个采样点就绰绰有余因为50Hz的基波分析到49次谐波也才不到2.5KHz。但客户对另外两点要求极为苛刻一是采样间隔必须绝对精确且稳定不能有时快时慢的“抖动”否则频谱分析会一塌糊涂二是系统必须7x24小时不间断运行成本还要尽可能低。面对这个需求我第一时间摒弃了传统的“FPGA高速ADC独立主控”的复杂架构。经过一番选型和测试最终敲定了一套以EM9170工控主板为核心搭配ETA108多通道ADC模块的解决方案。实测下来这套方案不仅完美满足了项目需求整机BOM成本物料成本更是控制在了千元以内性价比惊人。今天我就把这套方案的选型思路、硬件设计、软件驱动以及调试过程中的“坑”和“宝”毫无保留地分享给大家。2. 方案选型为什么是EM9170ETA108在硬件选型上我信奉一个原则不为“可能”的需求买单只为“确定”的需求设计。我们的核心需求很明确中等采样率、高精度定时、多通道同步、低成本、高可靠性。2.1 主控板EM9170的“恰到好处”市面上嵌入式主板选择很多从低端的STM32系列到高端的多核ARM Cortex-A系列为何偏偏选中了这颗400MHz的ARM9工控板原因在于它精准地命中了工业数据采集的“甜点区”。1. 性能与功耗的平衡EM9170采用400MHz主频的ARM9内核跑WinCE 6.0操作系统。这个配置在今天看来不算顶尖但对于我们的应用——运行一个数据采集、本地显示和网络通信的任务——完全够用而且游刃有余。更重要的是它的平均工作电流小于150mA。这意味着在野外或移动设备中我们可以使用更小的电池或太阳能供电系统极大地提升了方案的适用性和部署灵活性。我曾测试过一些更高主频的Cortex-A8板卡性能虽强但功耗动不动就500mA以上对供电和散热都是挑战。2. 实时性与确定性的保障WinCE 6.0虽然不像一些实时操作系统RTOS那样以硬实时著称但其内核的实时性经过微软和众多工业厂商的打磨对于毫秒级、甚至百微秒级的任务调度是足够可靠的。EM9170提供了高精度的PWM脉冲宽度调制输出这正是我们方案的关键。我们需要一个极其稳定的硬件时钟源来触发ADC采样软件定时器哪怕是高精度定时器在长时间运行后都难免受到系统调度的影响而产生累积误差而硬件PWM的时钟是由晶振直接分频而来其精度和稳定性是软件无法比拟的。3. 开发生态与成本英创公司为EM9170提供了完善的BSP板级支持包和驱动库特别是对SPI、DMA等底层硬件的封装做得很好大大降低了驱动开发的难度。其百片批量价在480元左右在工业级主板中极具竞争力。相比自己从头设计一块基于ARM9的核心板不仅要画原理图、做PCB、调试底层还要考虑稳定性、EMC电磁兼容性等问题直接采用成熟的工控主板无疑是更高效、更稳妥的选择。2.2 ADC模块ETA108的“精准打击”ADC模块是整个数据采集链的“感官器官”它的选型直接决定了数据的质量。ETA108模块吸引我的地方在于它没有追求不切实际的超高采样率而是在“精准”和“易用”上做到了极致。1. 硬件触发采样是灵魂这是ETA108区别于很多廉价ADC芯片如通过MCU的SPI口软件触发采样的核心优势。它有一个专门的CONVST转换启动引脚。当我们把一个精准的方波脉冲比如从EM9170的PWM引脚产生连接到这个引脚时ADC会在每个脉冲的上升沿或下降沿可配置自动启动一次转换。这就把采样间隔的精度从依赖软件循环和中断响应时间的“不确定域”转移到了由硬件时钟电路决定的“确定域”。对于需要做精确频谱分析的波形采集这个特性是至关重要的。2. 灵活的输入与增益配置8通道单端/4通道差分的输入方式覆盖了大多数传感器接口需求。每通道独立的PGA可编程增益放大器非常实用。例如在采集PT电压互感器和CT电流互感器输出的信号时它们的幅值范围可能不同我们可以通过配置不同的增益1、2、4、8倍让所有通道的信号都能尽量接近ADC的满量程从而充分利用ADC的12位分辨率提高信噪比。3. 性价比与集成度ETA108模块本身尺寸小巧通过插针与底板连接相当于一个“ADC子卡”。客户只需要设计一个简单的底板提供电源、传感器接口和与EM9170的连接即可无需自己处理ADC芯片外围复杂的模拟电路如基准电压源、抗混叠滤波器等这极大地降低了硬件设计门槛和风险。模块价格也具有吸引力使得整方案成本可控。注意在选择ADC时不要只看采样率和位数。有效位数ENOB和无杂散动态范围SFDR在波形分析中往往比理论分辨率更重要。ETA108通过硬件支持的平均模式可以将有效精度提升至14位这对于抑制工频干扰、提取微弱谐波信号非常有帮助。3. 系统架构与硬件设计要点图2所示的系统框图清晰地展示了各部件之间的关系但在实际硬件设计时有几个细节需要特别注意。3.1 硬件连接简约而不简单EM9170与ETA108之间主要通过4线制SPI总线连接SPI_CLK: 时钟线由EM9170主控输出。SPI_MOSI: 主出从入用于EM9170向ETA108发送配置命令如选择通道、设置增益。SPI_MISO: 主入从出用于EM9170读取ETA108转换完成的数据。SPI_CS: 片选信号低电平有效。除此之外最关键的一根线就是PWM输出连接到CONVST。这里我强烈建议使用EM9170上专用的、高精度的PWM引脚而不是用普通GPIO口模拟。另一个有用的信号是DRDY数据就绪ETA108在完成一次AD转换后可以通过此引脚产生一个中断通知主控但这不是必须的因为我们可以用DMA方式自动读取。电源设计要点ETA108采用单5V供电。虽然它内部应该有LDO低压差线性稳压器为模拟和数字部分分别供电但为了获得最佳性能尤其是高精度采样时建议在底板上为ETA108的模拟电源AVDD和数字电源DVDD提供独立的、低噪声的5V电源至少要通过磁珠或0Ω电阻进行隔离。主控板EM9170的5V输入电源也应尽量干净。如果系统中有电机、继电器等噪声源电源入口处的滤波电路如π型滤波器必不可少。3.2 传感器接口与信号调理ETA108的输入范围是0-4V单极性或±2V双极性。在连接传感器前必须确保传感器输出信号在这个范围内。电压/电流互感器接口PT/CT的输出通常是交流小信号如±1V。我们需要设计一个电平移位电路将双极性的交流信号如-1V ~ 1V抬升到单极性范围如0.5V ~ 2.5V以匹配ADC的单极性输入模式从而充分利用量程。一个简单的“加法器”运放电路就可以实现。抗混叠滤波器AAF这是很多低成本方案容易忽略的一环。根据奈奎斯特采样定理采样频率必须大于信号最高频率的两倍。我们设定采样率为5Ksps那么理论上能无失真采样的信号最高频率是2.5KHz。为了抑制高于2.5KHz的噪声它们会被“折叠”到0-2.5KHz频带内造成混叠干扰必须在ADC输入端之前加入一个低通滤波器其截止频率略高于我们关心的最高谐波频率比如2.5KHz但远低于采样率的一半。一个二阶或三阶的有源低通滤波器如Sallen-Key结构通常是性价比很高的选择。过压保护工业现场环境复杂传感器线缆可能引入高压浪涌。在每个ADC输入通道前端建议放置TVS瞬态电压抑制二极管和串联限流电阻构成简单的保护电路防止ETA108被意外损坏。4. 软件驱动与数据采集流程实现硬件是骨架软件是灵魂。EM9170的WinCE平台为我们提供了稳定的开发环境ETA108的驱动则是高效采集的关键。4.1 ETA108驱动核心接口解析英创提供的ETA108驱动封装了几个简洁高效的API下面结合我的使用经验进行解读ETA108_Init(): 初始化函数。这里需要特别注意SPI时钟速率的配置。虽然ETA108最高支持到几MHz的SPI时钟但不建议一开始就设到最高。过高的SPI速率可能带来信号完整性问题尤其是在底板布线不理想的情况下。我通常先从1MHz开始测试稳定后再逐步提高。初始化时还会配置PGA增益、输入模式单端/差分等。ETA108_StartContinuSampling(): 启动连续采样模式。这是本方案的核心。调用此函数前需要先做好两件事配置并启动PWM通过EM9170的PWM API设置好频率即我们的采样率如5kHz和占空比通常设50%并启动输出。这个PWM波就会持续不断地触发ETA108进行AD转换。设置DMA缓冲区在内存中开辟一块足够大的环形缓冲区比如10万个采样点。调用该函数时需要传入这个缓冲区的地址和大小。驱动内部会配置SPI的DMA控制器一旦ETA108转换完成一个数据并通过SPI发出DMA控制器会在不占用CPU资源的情况下自动将这个数据搬运到我们指定的内存缓冲区中。ETA108_ReadData(): 读取数据函数。由于数据是DMA自动搬运的这个函数的作用仅仅是从我们定义的环形缓冲区中取出最新采集到的、尚未被应用程序处理的那一段数据。它非常高效几乎不耗时间。ETA108_StopSampling(): 停止采样。关闭PWM输出停止DMA传输。DMA工作的精妙之处传统的查询或中断方式每个采样点都需要CPU介入在5Ksps下每秒就有5000次中断或查询CPU负载会很高且容易因中断延迟导致数据丢失。而DMA方式下CPU只在缓冲区快满或需要处理数据时才去批量读取一大段数据。CPU被解放出来可以更从容地进行波形显示、谐波分析FFT、数据存储或网络上传等任务整个系统的实时性和稳定性得到了质的提升。4.2 软件架构与任务调度在WinCE这样的非硬实时系统上要保证数据采集的连续性软件架构需要精心设计。我采用的是一种**“生产者-消费者”模型**生产者底层驱动DMA以精确的PWM周期如200微秒不间断地生产原始采样数据并放入环形缓冲区。消费者上层应用线程一个高优先级的线程定时比如每100毫秒或当缓冲区数据量达到一定阈值时被唤醒。它调用ETA108_ReadData()获取一批新数据然后进行后续处理。这里有一个关键技巧环形缓冲区的大小需要仔细计算。它必须足够大能够容纳在“消费者”线程最长处理时间内“生产者”持续产生的数据。例如消费者线程一次处理可能需要50毫秒在这50毫秒内以5Ksps的速率会产生250个采样点5K * 0.05。那么环形缓冲区的容量至少要是这个数的两倍以上比如1000个点以防止溢出。同时消费者线程的处理流程要尽可能高效避免长时间阻塞如果涉及复杂的FFT运算可以考虑将原始数据拷贝到另一个队列交给一个低优先级的后台线程去慢慢算。5. 核心环节高精度采样时钟的实现与校准整个方案的精髓就在于利用EM9170的硬件PWM产生那个作为CONVST信号的、高精度、高稳定度的采样时钟。这里面的门道不少。5.1 PWM频率的计算与设置EM9170的PWM时钟源通常来自系统主频如400MHz的分频。我们需要设置两个参数PWM_CLK_DIV预分频器和PWM_TCMPB比较寄存器值来得到所需的频率。计算公式通常为PWM_Freq Source_Clock / (PWM_CLK_DIV * (PWM_TCMPB 1))例如要产生5kHz5000Hz的方波假设源时钟为400MHz。我们可以先设定一个合适的预分频值比如PWM_CLK_DIV 8那么经过预分频后的时钟为50MHz。接下来计算PWM_TCMPBPWM_TCMPB (50,000,000 / 5,000) - 1 9999。设置PWM_CLK_DIV8PWM_TCMPB9999即可得到理论频率为5.000000kHz的PWM波。这里的关键是PWM_TCMPB必须是一个整数所以我们无法精确得到任意频率只能得到源时钟除以整数分频后的频率。400MHz的源时钟给了我们非常精细的频率调节能力对于5Ksps这样的需求精度完全足够。5.2 时钟稳定性的实测与验证理论计算只是第一步实际输出频率的稳定性如何必须用仪器验证。我使用了一台六位半精度的频率计如Keysight 53230A连接到PWM输出引脚进行了长达24小时的监测。实测结果短期稳定性艾伦方差在1秒的测量间隔内频率波动小于±0.1ppm百万分之一。长期稳定性频率漂移24小时内频率变化小于±2ppm。这主要受晶体振荡器温漂的影响。抖动Jitter周期到周期的抖动在百皮秒ps量级。这个性能意味着什么对于5Ksps的采样率采样间隔理论上是200微秒。±2ppm的漂移在24小时后带来的最大间隔误差也只有200us * 2e-6 * 24*3600 ≈ 0.0346微秒完全可以忽略不计。这种级别的稳定性是任何软件定时器都无法企及的。实操心得在调试初期我发现PWM输出频率偶尔会有几个纳秒的“毛刺”。排查后发现是底板布线问题PWM走线过长且靠近了数字噪声源。后来调整了PCB布局让PWM输出线尽量短、直并用地线包围问题立刻消失。硬件设计上对这颗“心跳”信号线的处理要像对待模拟信号一样谨慎。6. 系统集成测试与性能评估硬件焊接完成驱动调试通过后就进入了系统集成测试阶段。这个阶段的目标是验证整套系统是否满足设计指标并发现潜在问题。6.1 静态测试精度与线性度使用一台高精度的可编程电压源如Keithley 2400向ETA108的各个通道输入一组已知的直流电压例如从0V到4V每隔0.5V一个点。通过应用程序读取ADC转换后的数字值并与理论值进行比较。评估指标偏移误差Offset Error输入为0V时ADC输出的平均值不为0。这个误差可以通过软件校准来消除。增益误差Gain ErrorADC转换的实际斜率与理想斜率之间的差异。同样可以软件校准。积分非线性INL表示ADC实际传输函数与理想直线之间的最大偏差。这是ADC芯片本身的性能指标ETA108的典型INL值在±2 LSB最低有效位以内对于12位ADC这意味着非线性误差小于满量程的0.05%表现优秀。微分非线性DNL表示每个数字码的宽度与理想1 LSB宽度的差异。无失码是基本要求。测试后我建立了一个简单的两点校准公式针对每个通道V_actual Gain * ADC_Code Offset将Offset和Gain系数存储在EEPROM或Flash中上电时加载可以显著提高测量绝对精度。6.2 动态测试波形采集与频谱分析这是验证系统核心功能的关键。我使用函数发生器产生一个纯净的1kHz正弦波2Vpp偏置2V使其在0-4V范围内输入到ETA108。设置采样率为10Ksps高于信号频率10倍以便观察波形细节。测试步骤与观察时域波形在EM9170连接的TFT液晶屏上实时绘制采集到的波形。观察波形是否光滑有无明显的毛刺或失真。通过缩放功能检查采样点是否均匀地落在正弦曲线上。频域分析将采集到的一段数据例如1024个点进行FFT快速傅里叶变换计算频谱。在理想情况下频谱图上应该只在1kHz处有一个尖峰基波其他位置应该是底噪。我们需要特别关注是否存在“频谱泄漏”和“栅栏效应”。这通常是由于非整周期采样造成的。解决方法是在软件中采用“加窗”如汉宁窗和“插值”算法。谐波分析模拟输入一个叠加了3次、5次谐波的50Hz工频信号使用系统进行采集和分析。检查算法是否能正确识别出基波和各次谐波的幅值与相位。这里考验的不仅是ADC性能更是上层分析算法的准确性。6.3 长期运行与稳定性测试让系统连续运行72小时以上模拟实际工作场景。在此期间监控CPU使用率确保DMA方式下采集线程的CPU占用率极低通常5%。监控内存使用确保没有内存泄漏。特别是环形缓冲区和FFT运算时申请的动态内存要确保正确释放。检查数据记录的完整性。可以设计一个简单的测试让函数发生器输出一个幅值缓慢变化的信号系统持续采集并存储。测试结束后回放数据检查是否有数据包丢失、时间戳错乱等问题。进行简单的温漂测试。将设备置于温箱中在0°C到50°C范围内变化观察ADC零点读数和满量程读数的变化。ETA108内部基准的温漂系数通常在几十ppm/°C对于大多数工业现场这个影响在可接受范围内如果要求极高则需要外置更高精度的基准源。7. 常见问题排查与实战技巧在实际开发和部署过程中我踩过不少坑也总结了一些立竿见影的技巧。7.1 问题排查速查表现象可能原因排查步骤与解决方案采样数据全为0或固定值1. SPI通信失败2. ETA108未正确初始化3.CONVST触发信号未连接或频率不对1. 用逻辑分析仪抓取SPI总线波形检查CS、CLK、MOSI信号。确认初始化命令是否成功发送。2. 检查ETA108的供电电压5V是否正常。3. 用示波器测量CONVST引脚是否有符合预期的PWM方波。检查EM9170的PWM初始化代码。采样数据噪声大、跳动剧烈1. 模拟电源噪声大2. 传感器输入信号未滤波3. 接地不良4. PCB布局不合理数字信号干扰模拟部分1. 测量ETA108的AVDD引脚上的纹波最好用示波器交流耦合档观察。加大电源滤波电容或改用线性稳压电源供电。2. 检查输入端是否已焊接抗混叠滤波器。3. 检查底板模拟地AGND和数字地DGND是否单点连接。确保整个系统有良好的接地路径。4. 检查PCB上SPI等高速数字走线是否远离模拟输入走线。采样率不稳定时快时慢1. PWM时钟源不稳定2. 系统负载过高影响PWM定时器中断3. DMA缓冲区溢出1. 这是最不应该出现的问题。用频率计长时间监测PWM输出确认其稳定性。如果确实不稳检查EM9170系统时钟配置。2. 虽然PWM是硬件产生但如果系统极端繁忙理论上可能影响其极细微的精度。检查CPU负载优化其他任务。3. 检查应用层读取数据是否及时。增大环形缓冲区大小或提高消费者线程的优先级。多通道间采样存在时间差不同步对ETA108工作原理误解这是正常现象ETA108是多路复用型ADC内部只有一个ADC核心通过多路开关轮流切换通道进行采样。当CONVST触发一次它采样的是当前已选通的那个通道。因此要实现8个通道的“同步”采样实际上需要外部电路如采样保持器S/H成本激增。对于电力谐波分析我们通常采用“准同步”采样以很高的速率如40Ksps轮流采样8个通道这样每个通道的采样率依然是5Ksps但通道间有固定的、微小的相位差。在软件进行谐波分析时可以通过数字插值算法对这个固定的相位差进行补偿其效果可以接近真同步。7.2 独家实战技巧SPI时钟相位与极性的设置ETA108的SPI通信模式CPOL和CPHA是固定的。务必在ETA108_Init()函数中将EM9170的SPI控制器模式配置得与ETA108完全一致。用逻辑分析仪抓取时序图对照ETA108数据手册逐一核对这是排除通信问题的第一步。DMA缓冲区“双缓冲”策略为了避免在应用层处理数据时底层DMA写入造成的数据覆盖冲突可以采用“双缓冲”或“乒乓缓冲”机制。即准备两个一样大的缓冲区A和B。DMA写满A后自动切换到B继续写同时触发一个中断或事件通知应用层“A缓冲区数据已就绪请处理”。应用层处理A数据时DMA正在向B写数据。两者互不干扰极大地提高了数据吞吐的可靠性。利用ETA108的平均功能提升精度在驱动初始化时可以配置ETA108工作在“单次转换后自动平均”模式。例如设置为4次平均那么每次CONVST触发后ETA108内部会连续进行4次转换并输出平均值。这能有效抑制随机噪声将有效分辨率从12位提升到13位甚至14位代价是采样率会下降为原来的1/4。这个功能在采样率有富余、但对精度要求极高的场合如直流测量非常有用。WinCE下的实时性微调虽然WinCE不是硬实时系统但我们可以通过一些设置提升其响应确定性。例如将负责数据采集和处理的线程设置为最高可运行优先级并调用SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL)。此外可以适当减少系统时间片长度但这需要重新配置内核并编译需谨慎操作。8. 成本控制与方案扩展正如开篇所说这套方案的核心优势之一就是成本。让我们来算一笔明细账以百片批量计EM9170工控主板4807英寸TFT LCD含触摸屏300 市场通用价可根据需求选择更便宜或更贵的ETA108 ADC模块150 估算价具体以供应商报价为准客户自定义底板含电源管理、接口等50 - 100 取决于复杂度和层数外壳、线缆等50总计1030 - 1080。这确实将整机成本牢牢控制在了千元出头。相比之下一套基于Xilinx Zynq FPGA开发板高速ADC子卡Linux系统方案的起步成本可能就在3000元以上且开发难度大、周期长。方案的扩展性通道扩展如果8个通道不够EM9170还有多余的SPI接口可以级联多个ETA108模块。只需为每个ETA108分配独立的片选CS引脚。软件上需要轮流操作不同模块。注意多个模块的CONVST信号可以并联由同一个PWM引脚驱动以实现同步触发。功能扩展EM9170拥有丰富的接口USB Host, Ethernet, CAN, UART等。可以轻松扩展USB摄像头进行现场拍照、通过以太网或4G模块将数据上传至云端、通过CAN总线与现场其他设备通信等。算法升级在本地实现更复杂的算法如故障录波触发记录、电能质量分析电压暂降、闪变、振动信号的特征提取等。ARM9 400MHz的算力对于这些算法来说配合合理的优化是完全足够的。这套基于EM9170和ETA108的低成本多通道波形采集方案我已在多个电力监控和设备预测性维护项目中成功应用。它就像一把精准的“手术刀”剔除了传统高速采集方案中昂贵而冗余的部分直击中等速率、高精度定时、连续稳定采集的应用痛点。其价值不在于极致的性能参数而在于在满足特定场景需求的前提下实现了成本、开发难度、可靠性的最佳平衡。对于广大从事工业测控、仪器开发的工程师来说这种“恰到好处”的设计思路或许比追求顶尖性能更有普适意义。

相关新闻