Mad City Labs Nano-Drive 的 LabVIEW 编程教程(USB 纳定位台控制)

Mad City Labs(美国麦迪逊,纳米定位台厂商)官方 LabVIEW 教程,2013 版,163 页。教你从零用 LabVIEW 通过 MADlib.dll(Windows DLL 调用)控制 Nano-Drive USB 纳定位控制器:单点读写、扫描、波形采集、ISS 应变计反馈闭环。是共聚焦项目 MCL 位移台二次开发的操作级教程,与 MCL-Nano-Drive纳米定位控制器操作手册 和 MCL-NanoDrive诊断软件使用说明 互补(那两篇讲软件界面,本篇讲编程接口)。

核心概念:Handle(句柄)模型

  • Windows 下设备访问通过句柄:“想抓住设备就要抓住它的 Handle”。句柄本质是 Windows 地址, LabVIEW 中一律为 32 位有符号整数(轴号 axis 则是 32 位无符号整数)——Call Library Function Node 配置时类型必须严格对应(int32_t→Signed 32-bit、uint32_t→Unsigned),错一个类型调用即失败。
  • 句柄独占铁律:Init 子 VI 拿到的句柄即使 VI 停止运行仍被 LabVIEW 持有,会锁死其他程序对 Nano-Drive 的访问;出问题时唯一解法是退出 LabVIEW 强制释放。独立 VI 必须自带完整”获取→使用→出错处理→释放”链,子 VI 只负责局部逻辑。
  • 优雅初始化模式:MCL_InitHandleOrGetExisting —— 传入句柄为 0 时新建,非 0 时复用,用 Case 结构 + Equal 比较实现”standalone 才初始化/释放”。

常用 API 骨架(MADlib.dll)

int    MCL_InitHandle(void);                          // 取句柄
void   MCL_ReleaseHandle(int handle);                 // 释放单个
void   MCL_ReleaseAllHandles(void);                   // 释放全部
void   MCL_GrabAllHandles(void);                      // 抢占全部(其他程序占用时)
int    MCL_GetHandleBySerial(...)                     // 按序列号定位多轴设备
int    MCL_SingleWriteN(double pos, uint axis, int handle);  // 写位置(微米)
double MCL_SingleReadN(uint axis, int handle);        // 读传感器位置
int    MCL_Setup_LoadWaveFormN(axis, nPoints, ms, waveform[], handle);
int    MCL_Setup_ReadWaveFormN(axis, nPoints, ms, handle);
int    MCL_TriggerWaveformAcquisition(axis, nPoints, waveform, handle);
// 成功判定统一为返回值 == MCL_SUCCESS
  • 写位置 ≠ 直接改电压:写命令语义是微米,底层实为改 DAC(16 或 20 位);最小步进由 DAC 分辨率 × 行程范围决定。读同理是 ADC 读传感器。
  • 沉降等待铁律:写完必须等约 100ms 再读——100ms 无魔法,只是给阶越留稳定时间;纳定位台机械响应慢于控制电子,任何时候读数前都要确认”settled”。

波形采集(绕过 Windows 延迟)

  • 动机:Windows 非实时系统延迟约 1ms,LabVIEW 循环逐点 USB 读写达不到更快/更稳的时序。解法是把整段波形几百点一次性下载到控制器板载,再触发硬件输出。
  • 三板斧:MCL_Setup_LoadWaveFormN(灌入波形数组+采样间隔)→ MCL_Setup_ReadWaveFormN(同步配置采集)→ MCL_TriggerWaveformAcquisition(触发),完成后再批量读回。这是做锯齿扫描/正弦扫描的高性能路径。
  • 教程配套练习即 Chapter 5 的 Ramp Generator 子 VI(For Loop + Shift Register + Replace Array Subset 生成斜坡数组)驱动锯齿扫描。

ISS 应变计反馈闭环(Chapter 9+,直写 DAC 避伺服)

  • 普通位置模式里”传感器→伺服→DAC”闭环由固件跑;用 MCL_IssSetClock 把直写 DAC 数据接到反馈回路,可切换到 ISS 应变计反馈,绕过伺服环做开环直控——用于需要最高带宽/自定义控制律的场合。
  • 涉及 MCL_IssConfigurePolarity(灵敏度极性)、MCL_Trigger 等;教程示范写方波、测 ISS 响应。

LabVIEW 工程惯例(教程反复强调)

  • VI = Front Panel(Controls Palette 放控件/指示器)+ Block Diagram(Functions Palette 放函数);控制面板上没有”背板”。
  • Flat Sequence Structure 保证帧序执行(LabVIEW 默认数据流并发,读写时序敏感操作必须显式分帧),配合 Timer 实现延时帧。
  • 控件数据类型必须与 DLL API 声明逐一核对,参照附录 A(Madlib_*_*.doc API 手册内嵌附录)。

可行动点(对共聚焦项目)

  1. 若要在 LabVIEW/其他语言里自研 MCL 控制:照 handle 三态模型(Init→Use→Release)设计封装,句柄类型铁律是 C 接口 int32/uint32。
  2. 需要亚毫秒扫描轨迹时不要逐点 USB 写,走 LoadWaveFormN 批量下载 + 触发路径。
  3. 多程序争用设备时 MCL_GrabAllHandles 是逃生门,MCL_GetHandleBySerial 解决多台设备寻址。

关联