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)
- 初始化并采集键盘数据(NI 官方 SubVI:Initialize Keyboard.vi → 获取 Device ID;Acquire Input Data.vi → 返回 U16 数组,元素 0 是第一个按下的键,多键同按时 1/2/3… 依次排列;用 Index Array 取元素 0)
- 初始化 Nano-Drive(NanoInit.vi:获取 Handle、各轴量程、AD/DA 分辨率 16/20-bit、标定数据;X/Y/Z 位置 unbundle 后经 Shift Register 传入面板显示)
- 键盘数据→运动命令翻译(Interpret Game Pad Command SubVI:7 个字符串控件让用户自定义按键映射;Read Game Pad Command SubVI:把 Motion # 编号解码为 Madlib.dll 可用的轴+方向参数)
- 驱动位移台运动(Nano Position Command SubVI:基于当前位置+方向决定目标位置;While 循环快速迭代计数形成加速度斜坡——按得越久移得越快)
- 更新位置显示(Case Structure 按活动轴更新对应面板显示;Shift Register 跨循环迭代保持位置数据)
- 安全退出(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 携带跨迭代状态。
关联
- Nano-ZL纳米定位系统安装操作手册(同为 Mad City Labs 产品线)
- 共聚焦项目位移台选型与 MCL 驱动包相关笔记