NanoDrive 手柄控制 LabVIEW 应用笔记(Mad City Labs)

来源:Mad City Labs《Application Note – Nano-Drive Control via a USB Game Pad》(2008),11 页文本型 PDF。属于共聚焦项目位移台(MCL Nano-Drive 纳米定位台)驱动包自带的 LabVIEW 编程应用笔记。

核心思路

Logitech 等绝大多数 USB 游戏手柄可通过驱动配置模拟键盘按键。因此一个响应键盘输入的 LabVIEW VI,天然就能被任何品牌手柄控制——不需要专门写 HID 手柄驱动。这是本笔记的全部工程杠杆点:用键盘抽象层解耦手柄与位移台控制。

VI 架构:六个进程(GamePadNanoControl.vi)

  1. 初始化并采集键盘数据(NI 官方 SubVI:Initialize Keyboard.vi → 获取 Device ID;Acquire Input Data.vi → 返回 U16 数组,元素 0 是第一个按下的键,多键同按时 1/2/3… 依次排列;用 Index Array 取元素 0)
  2. 初始化 Nano-Drive(NanoInit.vi:获取 Handle、各轴量程、AD/DA 分辨率 16/20-bit、标定数据;X/Y/Z 位置 unbundle 后经 Shift Register 传入面板显示)
  3. 键盘数据→运动命令翻译(Interpret Game Pad Command SubVI:7 个字符串控件让用户自定义按键映射;Read Game Pad Command SubVI:把 Motion # 编号解码为 Madlib.dll 可用的轴+方向参数)
  4. 驱动位移台运动(Nano Position Command SubVI:基于当前位置+方向决定目标位置;While 循环快速迭代计数形成加速度斜坡——按得越久移得越快)
  5. 更新位置显示(Case Structure 按活动轴更新对应面板显示;Shift Register 跨循环迭代保持位置数据)
  6. 安全退出(GamePadActive.vi:所有按键松开前 VI 不推进,松键后 TRUE 送 Stop Terminal;退出后 MCL_ReleaseHandle 释放位移台、Close Input Device.vi 释放键盘——设备引用必须成对开闭)

Madlib.dll 四个核心函数

函数作用
int MCL_InitHandle()获取单个 Nano-Drive 控制权,返回 handle 作设备标识
void MCL_ReleaseHandle(int handle)清理并释放控制权
int MCL_SingleWriteN(double position, unsigned int axis, int handle)命令指定轴移到目标位置,成功返回 0
MCL_SingleReadN(unsigned int axis, int handle)读取指定轴位置,返回值或错误码

可复用工程模式

  • 手柄→键盘→VI 的间接控制链,可迁移到任何”用消费级输入设备操控实验仪器”的场景(如用游戏手柄操控显微镜载物台)。
  • 加速度斜坡由循环迭代计数生成:无状态、无需定时器,简单可靠。
  • 按键释放门控(GamePadActive):防止按键粘连导致位移台持续运动的软保护,值得在一切手动点动(jog)控制里照抄。
  • LabVIEW 通用范式:Device ID/Handle 一路穿透循环、出口统一释放;Shift Register 携带跨迭代状态。

关联