第二讲:硬件平台选型——主控、传感器与执行机构的黄金三角

各位同学,咱们接着聊。上一讲我讲了分拣算法的整体框架,今天咱们把硬件这块掰开揉碎了讲。说实话,我在这个行当干了十几年,见过太多算法写得漂亮、但硬件选型翻车的案例。你想想看,算法再牛,跑在不对的硬件上,那就是个摆设。

2.1 主流MCU/MPU的选型思路

先说说主控芯片。分拣机对主控的要求其实很明确:实时性要强、接口要够、算力要匹配。我这些年用过的主流方案,基本就三个方向:STM32、i.MX系列、还有Zynq。咱们一个一个说。

2.1.1 STM32——性价比之王

STM32,尤其是H7系列,是我个人用得最多的。为什么?因为它够用,而且生态好。我在一个快递分拣项目里,用的就是STM32H743,主频480MHz,带双精度浮点单元。对于中等速度的分拣线——比如每分钟处理60-80件——完全够用。

关键参数:

  • 主频:最高480MHz(H7系列)
  • RAM:最高1MB(内部)
  • 外设:多路定时器、DMA、ADC、CAN、以太网
  • 价格:20-50元(批量)

但要注意,STM32的算力天花板很明显。如果你要做视觉引导的分拣,比如用摄像头识别包裹上的二维码,那STM32就有点吃力了。我试过用H7跑轻量级的OpenMV,帧率只能到15fps左右,再高就卡了。

避坑指南:我曾经在一个项目里,为了省成本选了STM32F4系列,结果发现DMA带宽不够,导致编码器数据丢包。后来换到H7才解决。所以,别只看主频,要看总线架构和DMA通道数

2.1.2 i.MX系列——算力与功耗的平衡点

i.MX系列,特别是i.MX RT系列,是我在需要更高算力时的首选。它本质上是跨界处理器——有MCU的实时性,又有MPU的算力。我有个项目是做高速分拣,每分钟要处理120件,用的就是i.MX RT1170,双核(Cortex-M7 + Cortex-M4),主频1GHz。

为什么选它?因为分拣算法里有个关键步骤——轨迹预测。这个计算量不小,用STM32算起来要好几毫秒,但i.MX RT1170可以在1毫秒内搞定。你想想看,对于高速分拣,每毫秒都很宝贵。

型号 核心 主频 典型应用场景
i.MX RT1050 单核 M7 600MHz 中速分拣(60-80件/分钟)
i.MX RT1170 双核 M7+M4 1GHz 高速分拣(120+件/分钟)
i.MX 8M Mini 四核 A53+M4 1.8GHz 带视觉的分拣系统

我的经验:如果你需要跑Linux来做上层调度,同时又要保证实时控制,i.MX 8M Mini是个好选择。但要注意,Linux的实时性不如裸机或RTOS,所以关键控制任务要放在M4核上跑

2.1.3 Zynq——终极性能方案

Zynq,说白了就是FPGA+ARM的合体。这个方案我一般只在最高端的项目里用——比如每分钟处理200件以上的超高速分拣,或者需要做实时图像处理的场景。

为什么?因为Zynq的FPGA部分可以硬件加速。举个例子,分拣算法里有个包裹轮廓提取的步骤,用ARM软件算要5毫秒,用FPGA硬件加速只要0.1毫秒。这差距,你品品。

但代价也很明显:开发难度大、成本高、功耗大。我建议,除非你的分拣速度超过150件/分钟,或者有复杂的视觉需求,否则别碰Zynq。杀鸡用牛刀,没必要。

2.2 传感器接口——信号链的起点

传感器这块,我重点讲三个:编码器、光电传感器、还有视觉传感器。这三样,基本覆盖了分拣机90%的感知需求。

2.2.1 编码器接口

编码器是分拣机的眼睛,用来检测包裹位置和速度。我习惯用差分信号编码器,抗干扰能力强。接口上,STM32和i.MX都支持正交编码器接口(QEI),直接接就行。

但有个坑:编码器的分辨率。我见过有人用1000线的编码器,结果在高速分拣时,脉冲频率太高,MCU的定时器根本来不及计数。怎么算?

// 编码器脉冲频率计算
// 假设:分拣速度 120件/分钟,传送带速度 2m/s
// 编码器分辨率 1000线,4倍频后 4000脉冲/转
// 滚轮直径 50mm,周长 0.157m
// 脉冲频率 = (2m/s / 0.157m) * 4000 = 50.9kHz

// 这个频率,大部分MCU的定时器都能处理
// 但如果编码器分辨率提高到5000线,频率就变成254.7kHz
// 这时候就要考虑用DMA或者硬件捕获了

我曾经踩过的坑:在一个项目里,我用了2000线的编码器,结果发现STM32的定时器在高速模式下会丢脉冲。后来查手册才发现,定时器的最大输入频率受限于APB总线时钟。所以,选编码器前,先算好脉冲频率,再查MCU的数据手册

2.2.2 光电传感器

光电传感器用来检测包裹到位。这个看似简单,但接口方式有讲究。我建议用PNP型常开的光电传感器,信号电平是24V,需要经过电平转换才能接到MCU的GPIO。

为什么强调这个?因为有些新手直接拿24V信号接3.3V的MCU,结果就是烧引脚。嗯,我刚开始也干过这事,烧了两块板子才长记性。

正确的做法是:

  • 用光耦隔离(比如PC817)
  • 或者用电平转换芯片(比如74LVC4245)
  • 或者直接用带隔离的IO模块

2.2.3 视觉传感器

视觉传感器这块,我主要用两种:

  • 智能相机:比如Keyence、康耐视的,自带处理器,输出结果通过以太网或串口发给主控
  • 普通摄像头:比如OV2640,需要主控自己处理图像

我个人更推荐智能相机,因为省心。你想想看,主控本来就要跑分拣算法,再让它处理图像,压力太大了。智能相机直接输出包裹的坐标和条码信息,主控只管执行就行。

2.3 执行机构驱动——最后一公里的关键

执行机构,说白了就是推杆、气嘴、或者机械臂。驱动方式主要有三种:步进电机、伺服电机、还有气动元件。

2.3.1 步进电机驱动

步进电机便宜、控制简单,适合精度要求不高的分拣。我一般用两相混合式步进电机,配合A4988或TMC2209驱动芯片。

控制方式就是发脉冲:

// 步进电机控制示例
// 假设:步进电机步距角1.8°,驱动器16细分
// 每转脉冲数 = 360 / 1.8 * 16 = 3200脉冲/转

// 控制推杆移动10mm
// 丝杠导程5mm,需要转2圈
// 脉冲数 = 3200 * 2 = 6400脉冲

// 用定时器输出PWM
TIM3->ARR = 1000;  // 自动重装载值
TIM3->CCR1 = 500;  // 占空比50%
// 输出6400个脉冲后停止

我的习惯:步进电机在低速时容易震动,我一般会做S形加减速。启动时慢慢加速,停止时慢慢减速,这样动作更平滑,也不容易丢步。

2.3.2 伺服电机驱动

伺服电机贵,但精度高、响应快。高速分拣机我基本都用伺服。接口上,主流伺服驱动器都支持脉冲+方向或者CANopen协议。

我个人更推荐CANopen,因为可以读取伺服的状态——比如当前位置、电流、温度。这些信息对调试很有帮助。我有个项目,就是通过CANopen发现伺服电机过热,及时调整了分拣频率,避免了停机。

2.3.3 气动元件驱动

气动元件,比如气缸、气嘴,适合轻载、高速的推料动作。驱动方式很简单,用电磁阀控制气路通断就行。电磁阀的驱动电流一般比较大(几百毫安),不能直接接MCU的GPIO,需要加MOS管或继电器

这里有个细节:电磁阀在断电时会产生反向电动势,会烧MOS管。所以一定要加续流二极管。嗯,这个我吃过亏,烧过三个MOS管才记住。

2.4 硬件选型的综合建议

说了这么多,我给大家一个简单的选型思路:

  1. 先定速度:每分钟处理多少件?60件以下,STM32够用;60-120件,i.MX RT系列;120件以上,考虑Zynq
  2. 再看传感器:需要视觉吗?需要的话,优先选智能相机
  3. 最后定执行机构:精度要求高用伺服,要求不高用步进,轻载高速用气动

记住一句话:没有最好的硬件,只有最合适的方案。我见过有人用Zynq做低速分拣,结果开发周期长了三倍,成本翻了两番。何必呢?

好了,这一讲就到这里。下一讲咱们聊聊实时操作系统在分拣算法中的应用,这可是个重头戏。到时候见。