2022-02-12 01:25:37 +03:00
..
2021-10-22 22:34:16 +03:00
2021-10-22 22:34:16 +03:00
2021-10-22 22:34:16 +03:00
2021-10-22 22:34:16 +03:00
2021-10-22 22:34:16 +03:00
2021-11-16 00:28:20 +03:00
2021-11-16 00:28:20 +03:00
2022-02-12 01:25:37 +03:00
2022-02-12 01:25:37 +03:00
2021-10-22 22:34:16 +03:00
2021-10-22 22:34:16 +03:00
2021-11-14 21:07:37 +03:00
2021-10-22 22:34:16 +03:00

Loopback control of three stepper motors

Pinout

  • PA0 Enc2a (motor2 encoder)
  • PA1 Enc2b
  • PA2 CLK1 (motor1 clock)
  • PA3 ADC1 (ADC1 in, 0-3.3V)
  • PA4 CLK2 (motor2 clock)
  • PA5 ADC2 (ADC2 in, 0-3.3V)
  • PA6 CLK3 (motor3 clock)
  • PA7 PWM (opendrain PWM, up to 12V)
  • PA8 Enc1a (motor1 encoder)
  • PA9 Enc1b
  • PA10 BTN1 (user button 1)
  • PA11 USBDM
  • PA12 USBDP
  • PA13 BTN2 (user button 2)
  • PA14 BTN3 (user button 3)
  • PA15 BTN4 (user button 4)
  • PB0 ~EN1 (motor1 not enable)
  • PB1 DIR1 (motor1 direction)
  • PB2 ~EN2 (motor2 not enable)
  • PB3 Buzzer (external buzzer or other non-inductive opendrain load up to 12V)
  • PB4 Enc3a (motor3 encoder)
  • PB5 Enc3b
  • PB6 I2C SCL (external I2C bus, have internal pullups of 4.7kOhm to +3.3V)
  • PB7 I2C SDA
  • PB8 CAN Rx (external CAN bus, with local galvanic isolation
  • PB9 CAN Tx
  • PB10 DIR2 (motor2 direction)
  • PB11 ~EN3 (motor3 not enable)
  • PB12 DIR3 (motor3 direction)
  • PB13 Ext0 (3 external outputs: 5V, up to 20mA)
  • PB14 Ext1
  • PB15 Ext2
  • PC13 ESW1 (motor1 zero limit switch)
  • PC14 ESW2 (motor2 zero limit switch)
  • PC15 ESW3 (motor3 zero limit switch)
  • PF0 Relay (10A 250VAC, 10A 30VDC)

Connectors

ADC inputs connector, J1

  1. ADC1 (up to 3.3V)
  2. ADC2 (up to 3.3V)
  3. GND

Encoders connectors, J2-J4

  1. GND
  2. Encoder B phase
  3. Encoder A phase
  4. +5V (through resistor 22Ohm)

I2C connector, J5

  1. +3.3V
  2. SCL
  3. SDA
  4. GND

PWM connector, J6

  1. +3.3V
  2. +5V
  3. PWM GND (opendrain)

CAN bus connector, J7

  1. CANL (low signal)
  2. CANGND (common - not need for short lines)
  3. CANH (high signal)

External buttons connector (WARNING! NO ESD PROTECTION!), J8

  1. Button 1
  2. Button 2
  3. Button 3
  4. Button 4
  5. GND

External Hall sensors connector (zero limit switches), J9

  1. +3.3V (through resistor 47Ohm)
  2. Motor1 limit switch
  3. Motor2 limit switch
  4. Motor3 limit switch
  5. GND

Relay connector, J10

  1. Normally opened
  2. Common
  3. Normally closed

24V input power connector, J12

  1. GND
  2. +24V DC

24V motors power connector, J13

  1. GND
  2. +24V DC to motors' coils (reverse protected)

Stepper motors control signals connectors, J14-J16

  1. CLK (step signal)
  2. DIR (rotation direction)
  3. ~EN (not enable)
  4. GND

External 5V logic outputs connector (up to 20mA per each channel), J17

  1. Ext0
  2. Ext1
  3. Ext2
  4. GND

External buzzer (or other load) connector (opendrain, up to 12V), J18

  1. power (depending on JP1 jumper): 3.3V or 5.0V
  2. GND (opendrain)

Control points

  • TP1 5V
  • TP2 3.3V
  • TP3 NRST
  • TP4 GND

Firmware download

Activate "Jump to DFU" menu entry through USB protocol. Flash MCU by dfu-util.

USB protocol

https://github.com/eddyem/stm32samples/tree/master/F0-nolib/3steppersLB build#138 @ 2021-12-02 Common commands format is cmd[ N[ = val]] where N is command argument (0..127), val is its value Different commands: adc - get ADC values button - get buttons state buzzer - change buzzer state (1/0) esw - get end switches state ext - external outputs mcut - get MCU T mcuvdd - get MCU Vdd ping - echo given command back pwm - pwm value relay - change relay state (1/0) reset - reset MCU time - get time from start Confuguration: accel - set/get accel/decel (steps/s^2) encrev - set/get max encoder's pulses per revolution encstepmax - maximal encoder ticks per step encstepmin - minimal encoder ticks per step eswreact - end-switches reaction maxspeed - set/get max speed (steps per sec) maxsteps - set/get max steps (from zero) microsteps - set/get microsteps settings minspeed - set/get min speed (steps per sec) motflags - set/get motorN flags saveconf - save current configuration speedlimit - get limiting speed for current microsteps Motors' commands: abspos - set/get position (in steps) emerg - emergency stop all motors emstop - emergency stop motor (right now) encpos - set/get encoder's position gotoz - find zero position & refresh counters motreinit - re-init motors after configuration changed relpos - set relative steps, get remaining relslow - set relative steps @ lowest speed state - get motor state stop - smooth motor stopping USB-only commands: canid - get/set CAN ID canspeed - CAN bus speed delignlist - delete ignore list dfu - activate DFU mode dumperr - dump error codes dumpcmd - dump command codes dumpconf - dump current configuration filter - add/modify filter, format: bank# FIFO# mode(M/I) num0 [num1 [num2 [num3]]] getctr - get TIM1/2/3 counters ignbuf - print ignore buffer ignore - add ID to ignore list (max 10 IDs) listfilters - list all active filters pause - pause IN packets displaying resume - resume IN packets displaying send - send data over CAN: send ID byte0 .. byteN wd - check watchdog

CAN bus protocol

bytes descr 0 Lcmd - command code 1 Hcmd 2 par - command paremeter (steper, ADC channel number etc) 3 err - error code (only in answer) 4 Ldata - optional data in int32_t 5 6 7 Hdata

dumperr Find known command: dumperr Error codes: 0 - all OK 1 - wrong parameter's value 2 - wrong setter of parameter 3 - bad message length 4 - unknown command 5 - temporary can't run given command

dumpcmd Find known command: dumpcmd Commands list: 0 - Different commands: 1 - change relay state (1/0) 2 - change buzzer state (1/0) 3 - get ADC values 4 - get buttons state 5 - get end switches state 6 - get MCU T 7 - get MCU Vdd 8 - reset MCU 9 - get time from start 10 - pwm value 11 - external outputs 12 - save current configuration 13 - minimal encoder ticks per step 14 - maximal encoder ticks per step 15 - set/get microsteps settings 16 - set/get accel/decel (steps/s^2) 17 - set/get max speed (steps per sec) 18 - set/get min speed (steps per sec) 19 - get limiting speed for current microsteps 20 - set/get max steps (from zero) 21 - set/get max encoder's pulses per revolution 22 - set/get motorN flags 23 - end-switches reaction 24 - re-init motors after configuration changed 25 - set/get position (in steps) 26 - set relative steps, get remaining 27 - set relative steps @ lowest speed 28 - emergency stop motor (right now) 29 - smooth motor stopping 30 - emergency stop all motors 31 - find zero position & refresh counters 32 - get motor state 33 - set/get encoder's position