Edward Emelianov 31ea5ae4ba -> kicad 8
2024-05-06 21:41:11 +03:00
..
2024-05-06 21:41:11 +03:00
2022-03-10 11:04:14 +03:00
2022-03-10 11:04:14 +03:00
2022-03-10 11:04:14 +03:00
2022-03-10 11:04:14 +03:00
2022-03-10 11:04:14 +03:00
2022-03-10 11:04:14 +03:00
2022-03-10 11:04:14 +03:00
2023-02-21 11:55:42 +03:00
2022-06-10 20:07:41 +03:00
2022-06-10 20:07:41 +03:00
2022-03-10 11:04:14 +03:00
2023-02-21 11:55:42 +03:00
2023-02-21 11:55:42 +03:00
2023-02-21 11:55:42 +03:00
2023-01-18 23:36:26 +03:00
2023-01-18 23:36:26 +03:00
2023-02-21 11:55:42 +03:00
2023-02-21 11:55:42 +03:00
2023-02-21 11:55:42 +03:00
2022-06-10 20:07:41 +03:00
2022-03-10 11:04:14 +03:00
2023-02-21 11:55:42 +03:00
2023-02-21 11:55:42 +03:00
2023-02-21 11:55:42 +03:00
2022-03-10 11:04:14 +03:00
2023-02-21 11:55:42 +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 (return time of last event & ERRCODE == buttonstate) buzzer - change buzzer state (1/0) esw - get end switches state (without number - all, by bytes) ext - external outputs (without number - all, by bytes; value= 0-off, 1-on, other-toggle) 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 setpos - set/get absolute position (in steps) 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 eraseflash - erase flash data storage 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 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 Commands list: 1 - echo given command back 2 - change relay state (1/0) 3 - change buzzer state (1/0) 4 - get ADC values 5 - get buttons state 6 - get end switches state 7 - get MCU T 8 - get MCU Vdd 9 - reset MCU 10 - get time from start 11 - pwm value 12 - external outputs 13 - save current configuration 14 - minimal encoder ticks per step 15 - maximal encoder ticks per step 16 - set/get microsteps settings 17 - set/get accel/decel (steps/s^2) 18 - set/get max speed (steps per sec) 19 - set/get min speed (steps per sec) 20 - get limiting speed for current microsteps 21 - set/get max steps (from zero) 22 - set/get max encoder's pulses per revolution 23 - set/get motorN flags 24 - end-switches reaction 25 - re-init motors after configuration changed 26 - move to/get absolute position (in steps) 27 - set relative steps, get remaining 28 - set relative steps @ lowest speed 29 - emergency stop motor (right now) 30 - smooth motor stopping 31 - emergency stop all motors 32 - find zero position & refresh counters 33 - get motor state 34 - set/get encoder's position 35 - set/get absolute position (in steps)

dumpconf userconf_addr=0x08006000// address from which userconf started userconf_idx=5 // "index of stored conf" userconf_sz=68 // "magick number" canspeed=100 // default CAN speed canid=170 // identifier (0xaa) microsteps0=32 // microsteps amount per step accel0=1500 // acceleration/deceleration (steps/s^2) maxspeed0=1501 // max motor speed (steps per second) minspeed0=20 // min motor speed (steps per second) maxsteps0=500000 // maximal amount of steps encperrev0=4000 // encoders' counts per revolution encperstepmin0=17 // min amount of encoder ticks per one step encperstepmax0=23 // max amount of encoder ticks per one step motflags0=0x2f // motor's flags eswreaction0=0 // end-switches reaction (esw_react) microsteps1=32 accel1=1500 maxspeed1=2000 minspeed1=20 maxsteps1=500000 encperrev1=4000 encperstepmin1=17 encperstepmax1=23 motflags1=0x2f eswreaction1=0 microsteps2=32 accel2=1500 maxspeed2=2500 minspeed2=20 maxsteps2=500000 encperrev2=4000 encperstepmin2=17 encperstepmax2=23 motflags2=0x2f eswreaction2=0

Motor flags: bit0 - reversing motor rotation bit1 - reversing encoder rotation bit2 - have encoder bit3 - clear power @ stop (don't hold motor when stopped) bit4 - inverse end-switches (Work @ high level when this flag activated) bit5 - keep current position (as servo motor)

Stepper states: STP_RELAX, // 0 - no moving STP_ACCEL, // 1 - start moving with acceleration STP_MOVE, // 2 - moving with constant speed STP_MVSLOW, // 3 - moving with slowest constant speed (end of moving) STP_DECEL, // 4 - moving with deceleration STP_STALL, // 5 - stalled STP_ERR // 6 - wrong/error state

ESW reaction:

ESW_IGNORE, // 0 - don't stop @ end-switch ESW_ANYSTOP, // 1 - stop @ esw in any moving direction ESW_STOPMINUS, // 2 - stop only in negative moving