mirror of
https://github.com/eddyem/stm32samples.git
synced 2026-02-28 03:44:30 +03:00
encoders works fine
This commit is contained in:
@@ -1,5 +1,124 @@
|
||||
Get data from 2 encoders by BISS-C protocol
|
||||
===========================================
|
||||
|
||||
This device works with two BISS-C encoders (resolution from 8 to 32 bit).
|
||||
|
||||
If you want to test readout from device, run `./testDev /dev/encoder_X0` or `./testDev /dev/encoder_X0`.
|
||||
|
||||
** Encoder cable pinout:
|
||||
|
||||
* 1 - NC or shield
|
||||
* 2 - CLK_A - positive of SSI clock out
|
||||
* 3 - CLC_B - negative of SSI clock out
|
||||
* 4 - NC or shield
|
||||
* 5 - +5V - 5V power for sensor (at least 250mA)
|
||||
* 6 - DATA_A - positive of data in
|
||||
* 7 - DATA_B - negative of data in
|
||||
* 8 - NC
|
||||
* 9 - Gnd - common ground
|
||||
|
||||
|
||||
** Device interfaces
|
||||
|
||||
After connection you will see device 0483:5740 with three CDC interfaces. Each interface
|
||||
have its own `iInterface` field, by default they are:
|
||||
|
||||
* encoder_cmd - configure/command/debugging interface
|
||||
* encoder_X - X sensor output
|
||||
* encoder_Y - Y sensor output
|
||||
|
||||
Add to udev-rules file `99-myHW.rules` which will create symlinks to each interface in `/dev/` directory.
|
||||
You can change all three `iInterface` values and store them in device' flash memory.
|
||||
|
||||
The readout of encoders depends on settings. If you save in flash `autom=1`, readout of both encoders
|
||||
will repeat each `amperiod` milliseconds. Also you always can ask for readout sending any '\n'-terminated
|
||||
data into encoder's interface or running commands `readenc`, `readX` or `readY` in command interface.
|
||||
|
||||
|
||||
** Protocol
|
||||
|
||||
The device have simple text protocol, each text string should be closed by '\n'.
|
||||
Base format is 'param [ = value]', where 'param' could be command to run some procedure
|
||||
or getter, 'value' is setter.
|
||||
|
||||
Answer for all getters is 'param=value'. Here are answers for setters and procedures:
|
||||
|
||||
* OK - all OK
|
||||
* FAIL - procedure failed to run
|
||||
* BADCMD - your entered wrong command
|
||||
* BADPAR - parameter of setter is out of allowable range
|
||||
|
||||
Some procedures (like 'help' or 'readenc') returns a lot of data after calling.
|
||||
|
||||
|
||||
*** Base commands on command interface
|
||||
|
||||
These are commands for directrly work with SPI interfaces:
|
||||
|
||||
* readenc - read both encoders once
|
||||
* readX - read X encoder once
|
||||
* readY - read Y encoder once
|
||||
* help - show full help
|
||||
* reset - reset MCU
|
||||
* spideinit - deinit SPI
|
||||
* spiinit - init SPI
|
||||
* spistat - get status of both SPI interfaces
|
||||
|
||||
|
||||
*** Configuration commands
|
||||
|
||||
This set of commands allows to change current configuration (remember: each time SPI configuration changes
|
||||
you need to run `spiinit`) and store it into flash memory.
|
||||
|
||||
* autom - turn on or off automonitoring
|
||||
* amperiod - period of monitoring, 1..255 milliseconds
|
||||
* BR - change SPI BR register (1 - 18MHz ... 7 - 281kHz)
|
||||
* CPHA - change CPHA value (0/1)
|
||||
* CPOL - change CPOL value (0/1)
|
||||
* dumpconf - dump current configuration
|
||||
* encbits - set encoder data bits amount (26/32)
|
||||
* encbufsz - change encoder auxiliary buffer size (8..32 bytes)
|
||||
* erasestorage - erase full storage or current page (=n)
|
||||
* maxzeros - maximal amount of zeros in preamble
|
||||
* minzeros - minimal amount of zeros in preamble
|
||||
* setiface1 - set name of first (command) interface
|
||||
* setiface2 - set name of second (axis X) interface
|
||||
* setiface3 - set name of third (axis Y) interface
|
||||
* storeconf - store configuration in flash memory
|
||||
|
||||
Here is example of default configuration ouput (`dumpconf`):
|
||||
|
||||
```
|
||||
userconf_sz=108
|
||||
currentconfidx=-1
|
||||
setiface1=
|
||||
setiface2=
|
||||
setiface3=
|
||||
autom=0
|
||||
amperiod=1
|
||||
BR=4
|
||||
CPHA=0
|
||||
CPOL=1
|
||||
encbits=26
|
||||
encbufsz=12
|
||||
maxzeros=50
|
||||
minzeros=4
|
||||
```
|
||||
|
||||
`userconf_sz` is some type of "magick sequence" to find start of last record in flash memory.
|
||||
`currentconfidx` shows number of record (-1 means that the storage is empty and you see default values).
|
||||
Empty field of `setifaceX` means default interface name.
|
||||
|
||||
|
||||
*** Debugging commands
|
||||
|
||||
Some of these commands could be usefull when you're trying to play with settings or want to measure maximal
|
||||
readout speed for encoders (when each reading starts immediately after parsing previous result).
|
||||
|
||||
* dummy - dummy integer setter/getter
|
||||
* fin - reinit flash (e.g. to restore last configuration)
|
||||
* sendx - send text string to X encoder's terminal
|
||||
* sendy - send text string to Y encoder's terminal
|
||||
* testx - test X-axis throughput
|
||||
* testy - test Y-axis throughput
|
||||
|
||||
tl;dr
|
||||
|
||||
Reference in New Issue
Block a user