mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-06 10:45:11 +03:00
Readme.md finished for current protocol
This commit is contained in:
parent
b10fb37c58
commit
3e86556206
@ -420,42 +420,157 @@ Dump motors' state codes (for getter `stateN`):
|
||||
|
||||
### emstop[N] (29 with `N` and 31 without)
|
||||
Emergency stop Nth motor or all (if `N` absent). Returns `OK` or error text.
|
||||
### eraseflash [=N] (38)
|
||||
Erase flash data storage (full or only N'th page of it). Use this option only if you have problems
|
||||
when try to save current configuration.
|
||||
### eswN (6) G
|
||||
Get end-switches state. Return two bits (for limit switches 0 and 1): 1 means "active", 0 - "passive".
|
||||
If you use SPI-based driver, only one switch available, so return will be 1-bit.
|
||||
### eswreactN (24) GS
|
||||
End-switches reaction: 0 - ignore, 1 - stop on any limit switch (both 0 and 1; moving will be available only backwards),
|
||||
2 - stop only on switch 0. You can modify this values on-the-fly (but only when steppers aren't moving). This can be usefull,
|
||||
for example, to rotate filter turret into given position using switch 1 to both as limit switch and position stopper.
|
||||
But even in state 0 (ignore) active state of both switches estimates as error and you won't be able to move motor.
|
||||
### gotoN (26) GS
|
||||
Move motor to given absolute position.
|
||||
### gotozN (32)
|
||||
Find zero position & refresh counters. The motor would rotate in reverse direction until limit switch 0 acts or amount of
|
||||
steps (parameter `maxsteps` of configuration) is exhausted.
|
||||
### gpioconfN* GS
|
||||
GPIO configuration (0 - PUin, 1 - PPout, 2 - ODout), N=0..2.
|
||||
### gpio[N]* (12) GS
|
||||
GPIO values, N=0..2. Without `N` run for all GPIOs (each byte is state: 0/1).
|
||||
By default GPIOs are pulled up inputs.
|
||||
### help
|
||||
Show this help.
|
||||
### maxspeedN (18) GS
|
||||
Maximal motor speed (steps per sec). Depends on current microstep configuration. As speed depends on Nth motor's timer settings,
|
||||
you can't give any value you want. Speed recalculated through ARR value:
|
||||
|
||||
"eraseflash [=N] (38) erase flash data storage (full or only N'th page of it)\n"
|
||||
"esw[N] (6) G end-switches state\n"
|
||||
"eswreactN (24) GS end-switches reaction (0 - ignore, 1 - stop@any, 2 - stop@zero)\n"
|
||||
"gotoN (26) GS move motor to given absolute position\n"
|
||||
"gotozN (32) find zero position & refresh counters\n"
|
||||
"gpioconfN* - GS GPIO configuration (0 - PUin, 1 - PPout, 2 - ODout), N=0..2\n"
|
||||
"gpioN* (12) GS GPIO values, N=0..2\n"
|
||||
help
|
||||
"maxspeedN (18) GS max speed (steps per sec)\n"
|
||||
"maxstepsN (21) GS max steps (from zero ESW)\n"
|
||||
"mcut (7) G MCU T\n"
|
||||
"mcuvdd (8) G MCU Vdd\n"
|
||||
"microstepsN (16) GS microsteps settings (2^0..2^9)\n"
|
||||
"minspeedN (19) min speed (steps per sec)\n"
|
||||
"motcurrentN (46) GS motor current (1..32 for 1/32..32/32 of max current)\n"
|
||||
"motflagsN (23) motorN flags\n"
|
||||
"motmul* (36) GS external multiplexer status (<0 - disable, 0..7 - enable and set address)\n"
|
||||
"motno (44) GS motor number for next `pdn` commands\n"
|
||||
"motreinit (25) re-init motors after configuration changed\n"
|
||||
"pdnN (43) GS read/write TMC2209 registers over uart @ motor0\n"
|
||||
"ping (1)- echo given command back\n"
|
||||
"relposN (27) GS relative move (get remaining)\n"
|
||||
"relslowN (28) GS like 'relpos' but with slowest speed\n"
|
||||
"reset (9) software reset\n"
|
||||
"saveconf (13) save current configuration\n"
|
||||
"screen* - GS screen enable (1) or disable (0)\n"
|
||||
"speedlimit (20) G limiting speed for current microsteps setting\n"
|
||||
"stateN (33) G motor state (0-relax, 1-accel, 2-move, 3-mvslow, 4-decel, 5-stall, 6-err)\n"
|
||||
"stopN (30) stop motor with deceleration\n"
|
||||
"time (10) G time from start (ms)\n"
|
||||
"tmcbus* - GS TMC control bus (0 - USART, 1 - SPI)\n"
|
||||
"udata* (39) GS data by usart in slave mode (text strings, '\\n'-terminated)\n"
|
||||
"usartstatus* (40) GS status of USART1 (0 - off, 1 - master, 2 - slave)\n"
|
||||
"vdrive (41) G approx voltage on Vdrive\n"
|
||||
"vfive (42) G approx voltage on 5V bus\n"
|
||||
ARR = 26MHz / microsteps / (speed - 1).
|
||||
|
||||
Minimal value of ARR is 99 (260kHz), maximal is 0xffff (600Hz). And after that actual speed value calculated:
|
||||
|
||||
speed = 26MHz / microsteps / (ARR + 1).
|
||||
|
||||
And it can't be greater than 0xffff. So if your motor really can make, let's say, 32000 steps per second, you can run it only
|
||||
for microstepping not more than 2.
|
||||
### maxstepsN (21) GS
|
||||
Maximal steps amount (from zero ESW) for given motor. This is limiting positive position and amount of steps to make when
|
||||
searching of zero limit switch.
|
||||
### mcut (7) G
|
||||
Temperature of MCU in thousandths of degC.
|
||||
### mcuvdd (8) G
|
||||
MCU Vdd value.
|
||||
### microstepsN (16) GS
|
||||
Microsteps settings (2^0..2^9). Read `maxspeed` about relationship of maximal speed and microsteppings.
|
||||
### minspeedN (19) GS
|
||||
Minimal motor speed (steps per sec), this is the starting speed of motor's ramp and default speed for `relslow` command,
|
||||
so don't try to make it too large.
|
||||
### motcurrentN (46) GS
|
||||
Maximal motor current (1..32 for 1/32..32/32 of max current) for TMC drivers. In case of simplest drivers like DRV8825
|
||||
you should set current using varistor on driver's board.
|
||||
### motflagsN (23) GS
|
||||
Nth motor flags. To understand bit fields of these flags use `dumpmotflags`.
|
||||
### motmul * (36) GS
|
||||
external multiplexer status (<0 - disable, 0..7 - enable and set address).
|
||||
### motno (44) GS
|
||||
Motor number for next `pdn` commands (if you want to run custom commands by hands or in a batch).
|
||||
### motreinit (25)
|
||||
Re-init motors after configuration changed. Some changes will run this automatically.
|
||||
### pdnN (43) GS
|
||||
Read/write TMC2209 (and other UART-based drivers) registers over uart @ motor number `motno`.
|
||||
For `pdnN=X` `N` is register number, `X` is data to write into it. Due to protocol's particulars
|
||||
you can't work with registers with address more than 126 (0x7e).
|
||||
### ping (1)
|
||||
Echo given command back. For CAN bus return original packet, for USB - given argumemt and parameter (but checking parameter).
|
||||
### relposN (27) GS
|
||||
Relative (with ramp) move for given amount of steps (get remaining steps for getter).
|
||||
### relslowN (28) GS
|
||||
Like `relpos` but with constant slowest speed (you can change it with `minspeed`).
|
||||
### reset (9)
|
||||
Software reset.
|
||||
### saveconf (13)
|
||||
Save current configuration into MCU flash memory.
|
||||
### screen* GS
|
||||
Enable (1) or disable (0) screen.
|
||||
### speedlimit (20) G
|
||||
Get limiting speed for current microsteps setting.
|
||||
### stateN (33) G
|
||||
Get Nth motor state (`dumpstates`: 0-relax, 1-accel, 2-move, 3-mvslow, 4-decel, 5-stall, 6-err).
|
||||
### stopN (30)
|
||||
Stop Nth motor with deceleration (moving by ramp).
|
||||
### time (10) G
|
||||
Get time from start (ms).
|
||||
### tmcbus * GS
|
||||
TMC control bus (0 - USART, 1 - SPI), unuseful command; use `motflags` instead.
|
||||
### udata* (39) GS
|
||||
Data by usart in slave mode (text strings, '\\n'-terminated).
|
||||
### usartstatus* (40)
|
||||
GS status of USART1 (0 - off, 1 - master, 2 - slave).
|
||||
### vdrive (41) G
|
||||
Approximate voltage on Vdrive input, millivolts.
|
||||
### vfive (42) G
|
||||
Approximate voltage on 5V bus, millivolts.
|
||||
|
||||
## CAN bus
|
||||
Default CAN ID is 1.
|
||||
Default CAN ID is 1.
|
||||
Protocol use variable length incoming messages: from 2 bytes for simplest commands to all 8 bytes for common.
|
||||
Bytes (in time order):
|
||||
|
||||
- **0**, **1** - little-endian command code.
|
||||
- **2** - parameter number (0..126), 127 means "no parameter", elder bit (0x80) is a setter flag (without it
|
||||
all rest part of message ignored).
|
||||
- **3** - (only in packets from controller) error code.
|
||||
- **4**...**8** - little-endian data.
|
||||
|
||||
Command codes described in USB answer for `dumpcmd`:
|
||||
|
||||
1 - ping
|
||||
4 - adc
|
||||
5 - button
|
||||
6 - esw
|
||||
7 - mcut
|
||||
8 - mcuvdd
|
||||
9 - reset
|
||||
10 - time
|
||||
12 - gpio
|
||||
13 - saveconf
|
||||
16 - microsteps
|
||||
17 - accel
|
||||
18 - maxspeed
|
||||
19 - minspeed
|
||||
20 - speedlimit
|
||||
21 - maxsteps
|
||||
23 - motflags
|
||||
24 - eswreact
|
||||
25 - motreinit
|
||||
26 - goto
|
||||
27 - relpos
|
||||
28 - relslow
|
||||
29 - emstop N
|
||||
30 - stop
|
||||
31 - emstop all
|
||||
32 - gotoz
|
||||
33 - state
|
||||
35 - abspos
|
||||
36 - motmul
|
||||
37 - diagn
|
||||
38 - eraseflash
|
||||
39 - udata
|
||||
40 - usartstatus
|
||||
41 - vdrive
|
||||
42 - vfive
|
||||
43 - pdn
|
||||
44 - motno
|
||||
45 - drvtype
|
||||
|
||||
Error codes (`dumperr`):
|
||||
|
||||
0 - OK
|
||||
1 - BADPAR
|
||||
2 - BADVAL
|
||||
3 - WRONGLEN
|
||||
4 - BADCMD
|
||||
5 - CANTRUN
|
||||
|
||||
|
||||
@ -194,7 +194,7 @@ TRUE_INLINE void iwdg_setup(){
|
||||
static void setup_mpwm(int i){
|
||||
volatile TIM_TypeDef *TIM = mottimers[i];
|
||||
TIM->CR1 = TIM_CR1_ARPE; // buffered ARR
|
||||
TIM->PSC = MOTORTIM_PSC; // 16MHz
|
||||
TIM->PSC = MOTORTIM_PSC; // 26MHz
|
||||
// PWM mode 1 (active -> inactive)
|
||||
uint8_t n = mottchannels[i];
|
||||
switch(n){
|
||||
|
||||
Binary file not shown.
@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 13.0.2, 2024-08-15T16:49:30. -->
|
||||
<!-- Written by QtCreator 14.0.1, 2024-08-20T17:24:19. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
<value type="QByteArray">{cf63021e-ef53-49b0-b03b-2f2570cdf3b6}</value>
|
||||
<value type="QByteArray">{7bd84e39-ca37-46d3-be9d-99ebea85bc0d}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
@ -39,9 +39,9 @@
|
||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||
<value type="int" key="EditorConfiguration.PreferAfterWhitespaceComments">0</value>
|
||||
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
|
||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">false</value>
|
||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">1</value>
|
||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||
@ -50,10 +50,10 @@
|
||||
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
|
||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">false</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
|
||||
<value type="bool" key="EditorConfiguration.inEntireDocument">true</value>
|
||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
|
||||
<value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
|
||||
</valuemap>
|
||||
@ -69,14 +69,16 @@
|
||||
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
|
||||
</valuemap>
|
||||
<value type="bool" key="AutoTest.ApplyFilter">false</value>
|
||||
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
|
||||
<valuelist type="QVariantList" key="AutoTest.PathFilters"/>
|
||||
<value type="int" key="AutoTest.RunAfterBuild">0</value>
|
||||
<value type="bool" key="AutoTest.UseGlobal">true</value>
|
||||
<valuemap type="QVariantMap" key="ClangTools">
|
||||
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
|
||||
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
|
||||
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
|
||||
<value type="int" key="ClangTools.ParallelJobs">4</value>
|
||||
<value type="int" key="ClangTools.ParallelJobs">8</value>
|
||||
<value type="bool" key="ClangTools.PreferConfigFile">true</value>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
|
||||
@ -91,12 +93,12 @@
|
||||
<value type="QString" key="DeviceType">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{91347f2c-5221-46a7-80b1-0a054ca02f79}</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{65a14f9e-e008-4c1b-89df-4eaa4774b6e3}</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/eddy/Docs/SAO/ELECTRONICS/STM32/F3-srcs/Multistepper</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/Big/Data/00__Electronics/STM32/F303-nolib/Multistepper</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
|
||||
@ -106,8 +108,8 @@
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
@ -119,8 +121,8 @@
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
@ -128,15 +130,15 @@
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">По умолчанию</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Default</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericBuildConfiguration</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||
|
||||
@ -488,7 +488,7 @@ static int canusb_function(uint32_t hash, char *args){
|
||||
const char *n = getnum(args, &N);
|
||||
if(n != args){ // get parameter
|
||||
if(N >= CANMESG_NOPAR){
|
||||
USND("Wrong parameter value");
|
||||
USB_sendstr(errtxt[ERR_BADPAR]); newline();
|
||||
return RET_GOOD;
|
||||
}
|
||||
par = (uint8_t) N;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user