mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-06 18:55:13 +03:00
125 lines
4.0 KiB
Markdown
125 lines
4.0 KiB
Markdown
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
|
|
|