You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.0 KiB
128 lines
4.0 KiB
===========================
|
|
Walkera WK-0701 transmitter
|
|
===========================
|
|
|
|
Walkera WK-0701 transmitter is supplied with a ready to fly Walkera
|
|
helicopters such as HM36, HM37, HM60. The walkera0701 module enables to use
|
|
this transmitter as joystick
|
|
|
|
Devel homepage and download:
|
|
http://zub.fei.tuke.sk/walkera-wk0701/
|
|
|
|
or use cogito:
|
|
cg-clone http://zub.fei.tuke.sk/GIT/walkera0701-joystick
|
|
|
|
|
|
Connecting to PC
|
|
================
|
|
|
|
At back side of transmitter S-video connector can be found. Modulation
|
|
pulses from processor to HF part can be found at pin 2 of this connector,
|
|
pin 3 is GND. Between pin 3 and CPU 5k6 resistor can be found. To get
|
|
modulation pulses to PC, signal pulses must be amplified.
|
|
|
|
Cable: (walkera TX to parport)
|
|
|
|
Walkera WK-0701 TX S-VIDEO connector::
|
|
|
|
(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
|
|
|
|
I use green LED and BC109 NPN transistor.
|
|
|
|
Software
|
|
========
|
|
|
|
Build kernel with walkera0701 module. Module walkera0701 need exclusive
|
|
access to parport, modules like lp must be unloaded before loading
|
|
walkera0701 module, check dmesg for error messages. Connect TX to PC by
|
|
cable and run jstest /dev/input/js0 to see values from TX. If no value can
|
|
be changed by TX "joystick", check output from /proc/interrupts. Value for
|
|
(usually irq7) parport must increase if TX is on.
|
|
|
|
|
|
|
|
Technical details
|
|
=================
|
|
|
|
Driver use interrupt from parport ACK input bit to measure pulse length
|
|
using hrtimers.
|
|
|
|
Frame format:
|
|
Based on walkera WK-0701 PCM Format description by Shaul Eizikovich.
|
|
(downloaded from http://www.smartpropoplus.com/Docs/Walkera_Wk-0701_PCM.pdf)
|
|
|
|
Signal pulses
|
|
-------------
|
|
|
|
::
|
|
|
|
(ANALOG)
|
|
SYNC BIN OCT
|
|
+---------+ +------+
|
|
| | | |
|
|
--+ +------+ +---
|
|
|
|
Frame
|
|
-----
|
|
|
|
::
|
|
|
|
SYNC , BIN1, OCT1, BIN2, OCT2 ... BIN24, OCT24, BIN25, next frame SYNC ..
|
|
|
|
pulse length
|
|
------------
|
|
|
|
::
|
|
|
|
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 bin+oct values + 1 bin value = 24*4+1 bits = 97 bits
|
|
|
|
(Warning, pulses on ACK are inverted by transistor, irq is raised up on sync
|
|
to bin change or octal value to bin change).
|
|
|
|
Binary data representations
|
|
---------------------------
|
|
|
|
One binary and octal value can be grouped to nibble. 24 nibbles + one binary
|
|
values can be sampled between sync pulses.
|
|
|
|
Values for first four channels (analog joystick values) can be found in
|
|
first 10 nibbles. Analog value is represented by one sign bit and 9 bit
|
|
absolute binary value. (10 bits per channel). Next nibble is checksum for
|
|
first ten nibbles.
|
|
|
|
Next nibbles 12 .. 21 represents four channels (not all channels can be
|
|
directly controlled from TX). Binary representations are the same as in first
|
|
four channels. In nibbles 22 and 23 is a special magic number. Nibble 24 is
|
|
checksum for nibbles 12..23.
|
|
|
|
After last octal value for nibble 24 and next sync pulse one additional
|
|
binary value can be sampled. This bit and magic number is not used in
|
|
software driver. Some details about this magic numbers can be found in
|
|
Walkera_Wk-0701_PCM.pdf.
|
|
|
|
Checksum calculation
|
|
--------------------
|
|
|
|
Summary of octal values in nibbles must be same as octal value in checksum
|
|
nibble (only first 3 bits are used). Binary value for checksum nibble is
|
|
calculated by sum of binary values in checked nibbles + sum of octal values
|
|
in checked nibbles divided by 8. Only bit 0 of this sum is used.
|
|
|