16. Walkera WK-0701 发射器¶
Walkera WK-0701 发射器随 HM36、HM37、HM60 等即飞 Walkera 直升机一起提供。walkera0701 模块可以将此发射器用作操纵杆。
开发主页和下载:http://zub.fei.tuke.sk/walkera-wk0701/
或使用 cogito:cg-clone http://zub.fei.tuke.sk/GIT/walkera0701-joystick
16.1. 连接到 PC¶
在发射器的背面可以找到 S-video 连接器。从处理器到 HF 部分的调制脉冲可以在此连接器的引脚 2 上找到,引脚 3 是 GND。在引脚 3 和 CPU 之间可以找到 5k6 电阻。为了将调制脉冲传输到 PC,必须放大信号脉冲。
电缆:(Walkera TX 到并行端口)
Walkera WK-0701 TX S-VIDEO 连接器
(back side of TX)
__ __ S-video: canon25
/ |_| \ pin 2 (signal) NPN parport
/ O 4 3 O \ pin 3 (GND) LED ________________ 10 ACK
( O 2 1 O ) | C
\ ___ / 2 ________________________|\|_____|/
| [___] | |/| B |\
------- 3 __________________________________|________________ 25 GND
E
我使用绿色 LED 和 BC109 NPN 晶体管。
16.2. 软件¶
使用 walkera0701 模块构建内核。模块 walkera0701 需要独占访问并行端口,像 lp 这样的模块必须在加载 walkera0701 模块之前卸载,检查 dmesg 是否有错误消息。通过电缆将 TX 连接到 PC 并运行 jstest /dev/input/js0 以查看来自 TX 的值。如果 TX “操纵杆”无法更改任何值,请检查 /proc/interrupts 的输出。(通常是 irq7)并行端口的值必须在 TX 打开时增加。
16.3. 技术细节¶
驱动程序使用来自并行端口 ACK 输入位的中断,以使用 hrtimers 测量脉冲长度。
帧格式:基于 Shaul Eizikovich 提供的 Walkera WK-0701 PCM 格式描述。(从http://www.smartpropoplus.com/Docs/Walkera_Wk-0701_PCM.pdf下载)
16.3.1. 信号脉冲¶
(ANALOG)
SYNC BIN OCT
+---------+ +------+
| | | |
--+ +------+ +---
16.3.2. 帧¶
SYNC , BIN1, OCT1, BIN2, OCT2 ... BIN24, OCT24, BIN25, next frame SYNC ..
16.3.3. 脉冲长度¶
Binary values: Analog octal values:
288 uS Binary 0 318 uS 000
438 uS Binary 1 398 uS 001
478 uS 010
558 uS 011
638 uS 100
1306 uS SYNC 718 uS 101
798 uS 110
878 uS 111
24 个二进制 + 八进制值 + 1 个二进制值 = 24*4 + 1 位 = 97 位
(警告,ACK 上的脉冲被晶体管反转,当同步到二进制更改或八进制值更改为二进制时,会引发 irq。)
16.3.4. 二进制数据表示¶
一个二进制值和一个八进制值可以分组为一个半字节。可以在同步脉冲之间采样 24 个半字节 + 一个二进制值。
前四个通道(模拟操纵杆值)的值可以在前 10 个半字节中找到。模拟值由一个符号位和 9 位绝对二进制值表示。(每个通道 10 位)。下一个半字节是前十个半字节的校验和。
接下来的半字节 12 .. 21 表示四个通道(并非所有通道都可以直接从 TX 控制)。二进制表示与前四个通道相同。在半字节 22 和 23 中是一个特殊的幻数。半字节 24 是半字节 12..23 的校验和。
在半字节 24 的最后一个八进制值和下一个同步脉冲之后,可以采样一个额外的二进制值。此位和幻数未在软件驱动程序中使用。有关此幻数的一些详细信息可以在 Walkera_Wk-0701_PCM.pdf 中找到。
16.3.5. 校验和计算¶
半字节中八进制值的总和必须与校验和半字节中的八进制值相同(仅使用前 3 位)。校验和半字节的二进制值是通过检查半字节中的二进制值之和 + 检查半字节中的八进制值之和除以 8 来计算的。仅使用此总和的第 0 位。