【E2251】基于STM32F103精确控制42步进电机源码

2021-11-13 19:03:22      索炜达电子      1450     

项目编号:E2251

文件大小:2.32M

源码说明:带中文注释

开发环境:C编译器

简要概述:

利用STM32F103精确控制步进电机

一、用到的元器件

STM32F103C8T6

42步进电机(42SHDC4040-17B)

TB6600电机驱动器升级版


二、42步进电机

1.步进电机的基本知识

(1)拍数——每一次循环所包含的通电状态数(电机转过一个齿距角所需脉冲数)

(2)单拍制分配方式——状态数=相数

(3)双拍制分配方式——状态数=相数的两倍

(4)步距角 ——步进机通过一个电脉冲转子转过的角度

【E2251】基于STM32F103精确控制42步进电机源码

N:一个周期的运行拍数

Zr:转子齿数

拍数:N=km

m:相数

k=1单拍制

k=2双拍制

(5)转速

【E2251】基于STM32F103精确控制42步进电机源码

6)角度细分的原理


电磁力的大小与绕组通电电流的大小有关。

当通电相的电流并不马上升到位,而断电相的电流也非立即降为0时,它们所产生的磁场合力,会使转子有一个新的平衡位置,这个新的平衡位置是在原来的步距角范围内。

2. 42步进电机参数

无法查找到42SHDC4040-17B型号的详细资料,以通用42步进电机为例:

步距角 1.8°

步距角精度 ±5%

相数 2相

励磁方式 混合式

转子齿数 50

拍制 双拍制

其他参数:无

由步距角=1.8°推算出转子齿数为50,拍制为双拍制


3. 42步进电机速度与角度控制

电机的转速与脉冲频率成正比,电机转过的角度与脉冲数成正比。所以控制脉冲数和脉冲频率就可以精确调速。

理论上步进电机转速 = 频率 * 60 /((360/T)*x)

【E2251】基于STM32F103精确控制42步进电机源码

  • 转速单位: 转/ 分

  • 频率单位:赫兹

  • x 细分倍数

  • T 步距角
    例如,在本实验中,32细分;频率72000 赫兹;步距角1.8°;

【E2251】基于STM32F103精确控制42步进电机源码

三、TB6600电机驱动器升级版参数

TB6600步进电机驱动器升级版是一款专业的两相步进电机驱动,可实现正反转控制。通过S1,S2,S3 3位拨码开关选择7档细分控制(1,2/A,2/B,4,8,16,32,),通过S4,S5,S6 3位拨码开关选择8 档电流控制(0.5A,1A,1.5A,2A,2.5A,2.8A,3.0A,3.5A)。适合驱动57,42 型两相、四相混合式步进电机。


1.信号输入端

PUL+:脉冲信号输入正。( CP+ )

PUL-:脉冲信号输入负。( CP- )

DIR+:电机正、反转控制正。

DIR-:电机正、反转控制负。

EN+:电机脱机控制正。

EN-:电机脱机控制负。


共阳极接法:分别将PUL+,DIR+,EN+连接到控制系统的电源上, 如果此电源是+5V则可直接接入,如果此电源大于+5V,则须外部另加限流电阻R,保证给驱动器内部光藕提供8—15mA 的驱动电流。

共阴极接法:分别将 PUL-,DIR-,EN-连接到控制系统的地端;脉冲输入信号通过PUL+接入,方向信号通过DIR+接入,使能信号通过EN+接入。若需限流电阻,限流电阻R的接法取值与共阳极接法相同。

注:EN端可不接,EN有效时电机转子处于自由状态(脱机状态),这时可以手动转动电机转轴。

2.电机绕组连接

A+:连接电机绕组A+相。

A-:连接电机绕组A-相。

B+:连接电机绕组B+相。

B-:连接电机绕组B-相。


3.电源电压连接

VCC:电源正端“+”

GND:电源负端“-”

注意:DC直流范围:9-32V。不可以超过此范围,否则会无法正常工作甚至损坏驱动器.


4.拨码开关

【E2251】基于STM32F103精确控制42步进电机源码

电流大小设定

【E2251】基于STM32F103精确控制42步进电机源码

三、STM32F103

------说明:引脚部分在文章末尾有解释--------


1.引脚连接

A 0——PUL+

A 3——KEY1——V3

A12——DIR+

A11——EAN+

GND——EAN- ——KEY0


2.引脚功能

A0控制电机转速

A3控制按键

A9

A11

A11控制电机是否为锁死状态

A12控制电机正反转


3.定时器

1.本实验利用定时器TIM2和定时器TIM3构造一个主从定时器,TIM2作为主定时器控制电机的转速,TIM3作为从定时器控制电机的转动角度。

2.电机的转速和转角还与驱动器自身的细分数有关,但是驱动器细分数是通过影响电机的步距角来影响转速和转角,而TIM2和TIM3是控制步进电机的频率和脉冲数来控制转速转角

3.电机的转速和角度与定时器的关系(在不考虑电机自身的细分数下)


设TIM2的定时周期(即重装值)为nPDTemp2,预分频值为OCPolarity2

 TIM3的定时周期(即重装值)为nPDTemp3,预分频值为OCPolarity3,

则单片机产生一个脉冲所需要的时间为:

【E2251】基于STM32F103精确控制42步进电机源码

4.在32细分的情况下电机1rad/s和转1°需要的重装值为nPDTemp2=11.25,nPDTemp3=17.7778。

目录│文件列表:

 └ 步进电机程序—串口控制速度角度

    │ reade me.txt

    ├ CMSIS

    │  │ core_cm3.c

    │  │ core_cm3.h

    │  │ stm32f10x.h

    │  │ system_stm32f10x.c

    │  │ system_stm32f10x.h

    │  └ startup

    │     │ startup_stm32f10x_cl.s

    │     │ startup_stm32f10x_hd.s

    │     │ startup_stm32f10x_hd_vl.s

    │     │ startup_stm32f10x_ld.s

    │     │ startup_stm32f10x_ld_vl.s

    │     │ startup_stm32f10x_md.s

    │     │ startup_stm32f10x_md_vl.s

    │     └ startup_stm32f10x_xl.s

    ├ FWlib

    │  ├ inc

    │  │  │ misc.h

    │  │  │ stm32f10x_adc.h

    │  │  │ stm32f10x_bkp.h

    │  │  │ stm32f10x_can.h

    │  │  │ stm32f10x_cec.h

    │  │  │ stm32f10x_crc.h

    │  │  │ stm32f10x_dac.h

    │  │  │ stm32f10x_dbgmcu.h

    │  │  │ stm32f10x_dma.h

    │  │  │ stm32f10x_exti.h

    │  │  │ stm32f10x_flash.h

    │  │  │ stm32f10x_fsmc.h

    │  │  │ stm32f10x_gpio.h

    │  │  │ stm32f10x_i2c.h

    │  │  │ stm32f10x_iwdg.h

    │  │  │ stm32f10x_pwr.h

    │  │  │ stm32f10x_rcc.h

    │  │  │ stm32f10x_rtc.h

    │  │  │ stm32f10x_sdio.h

    │  │  │ stm32f10x_spi.h

    │  │  │ stm32f10x_tim.h

    │  │  │ stm32f10x_usart.h

    │  │  └ stm32f10x_wwdg.h

    │  └ src

    │     │ misc.c

    │     │ stm32f10x_adc.c

    │     │ stm32f10x_bkp.c

    │     │ stm32f10x_can.c

    │     │ stm32f10x_cec.c

    │     │ stm32f10x_crc.c

    │     │ stm32f10x_dac.c

    │     │ stm32f10x_dbgmcu.c

    │     │ stm32f10x_dma.c

    │     │ stm32f10x_exti.c

    │     │ stm32f10x_flash.c

    │     │ stm32f10x_fsmc.c

    │     │ stm32f10x_gpio.c

    │     │ stm32f10x_i2c.c

    │     │ stm32f10x_iwdg.c

    │     │ stm32f10x_pwr.c

    │     │ stm32f10x_rcc.c

    │     │ stm32f10x_rtc.c

    │     │ stm32f10x_sdio.c

    │     │ stm32f10x_spi.c

    │     │ stm32f10x_tim.c

    │     │ stm32f10x_usart.c

    │     └ stm32f10x_wwdg.c

    ├ Listing

    │  │ startup_stm32f10x_hd.lst

    │  └ STM32-DEMO.map

    ├ Output

    │  │ core_cm3.crf

    │  │ core_cm3.d

    │  │ core_cm3.o

    │  │ delay.crf

    │  │ delay.d

    │  │ delay.o

    │  │ ExtDll.iex

    │  │ led.crf

    │  │ led.d

    │  │ led.__i

    │  │ lowercomputer_v2.d

    │  │ main.crf

    │  │ main.d

    │  │ main.o

    │  │ misc.crf

    │  │ misc.d

    │  │ misc.o

    │  │ nvic.crf

    │  │ nvic.d

    │  │ nvic.o

    │  │ shangweiji.d

    │  │ startup_stm32f10x_hd.d

    │  │ startup_stm32f10x_hd.o

    │  │ STM32-DEMO.axf

    │  │ STM32-DEMO.build_log.htm

    │  │ STM32-DEMO.hex

    │  │ STM32-DEMO.htm

    │  │ STM32-DEMO.lnp

    │  │ STM32-DEMO.plg

    │  │ STM32-DEMO.sct

    │  │ STM32-DEMO.tra

    │  │ STM32-DEMO_sct.Bak

    │  │ STM32-DEMO_USART1-DEMO.dep

    │  │ stm32f10x_adc.crf

    │  │ stm32f10x_adc.d

    │  │ stm32f10x_adc.o

    │  │ stm32f10x_bkp.crf

    │  │ stm32f10x_bkp.d

    │  │ stm32f10x_bkp.o

    │  │ stm32f10x_can.crf

    │  │ stm32f10x_can.d

    │  │ stm32f10x_can.o

    │  │ stm32f10x_cec.crf

    │  │ stm32f10x_cec.d

    │  │ stm32f10x_cec.o

    │  │ stm32f10x_crc.crf

    │  │ stm32f10x_crc.d

    │  │ stm32f10x_crc.o

    │  │ stm32f10x_dac.crf

    │  │ stm32f10x_dac.d

    │  │ stm32f10x_dac.o

    │  │ stm32f10x_dbgmcu.crf

    │  │ stm32f10x_dbgmcu.d

    │  │ stm32f10x_dbgmcu.o

    │  │ stm32f10x_dma.crf

    │  │ stm32f10x_dma.d

    │  │ stm32f10x_dma.o

    │  │ stm32f10x_exti.crf

    │  │ stm32f10x_exti.d

    │  │ stm32f10x_exti.o

    │  │ stm32f10x_flash.crf

    │  │ stm32f10x_flash.d

    │  │ stm32f10x_flash.o

    │  │ stm32f10x_fsmc.crf

    │  │ stm32f10x_fsmc.d

    │  │ stm32f10x_fsmc.o

    │  │ stm32f10x_gpio.crf

    │  │ stm32f10x_gpio.d

    │  │ stm32f10x_gpio.o

    │  │ stm32f10x_i2c.crf

    │  │ stm32f10x_i2c.d

    │  │ stm32f10x_i2c.o

    │  │ stm32f10x_it.crf

    │  │ stm32f10x_it.d

    │  │ stm32f10x_it.o

    │  │ stm32f10x_iwdg.crf

    │  │ stm32f10x_iwdg.d

    │  │ stm32f10x_iwdg.o

    │  │ stm32f10x_pwr.crf

    │  │ stm32f10x_pwr.d

    │  │ stm32f10x_pwr.o

    │  │ stm32f10x_rcc.crf

    │  │ stm32f10x_rcc.d

    │  │ stm32f10x_rcc.o

    │  │ stm32f10x_rtc.crf

    │  │ stm32f10x_rtc.d

    │  │ stm32f10x_rtc.o

    │  │ stm32f10x_sdio.crf

    │  │ stm32f10x_sdio.d

    │  │ stm32f10x_sdio.o

    │  │ stm32f10x_spi.crf

    │  │ stm32f10x_spi.d

    │  │ stm32f10x_spi.o

    │  │ stm32f10x_tim.crf

    │  │ stm32f10x_tim.d

    │  │ stm32f10x_tim.o

    │  │ stm32f10x_usart.crf

    │  │ stm32f10x_usart.d

    │  │ stm32f10x_usart.o

    │  │ stm32f10x_wwdg.crf

    │  │ stm32f10x_wwdg.d

    │  │ stm32f10x_wwdg.o

    │  │ sys.crf

    │  │ sys.d

    │  │ sys.o

    │  │ system_stm32f10x.crf

    │  │ system_stm32f10x.d

    │  │ system_stm32f10x.o

    │  │ timer.crf

    │  │ timer.d

    │  │ timer.o

    │  │ usart1.crf

    │  │ usart1.d

    │  └ usart1.o

    └ USER

       │ delay.c

       │ delay.h

       │ EventRecorderStub.scvd

       │ JLink Regs CM3.txt

       │ JLinkLog.txt

       │ JLinkSettings.ini

       │ main.c

       │ main.h

       │ nvic.c

       │ nvic.h

       │ STM32-DEMO.plg

       │ STM32-DEMO.uvgui.Administrator

       │ STM32-DEMO.uvgui.CGH

       │ STM32-DEMO.uvgui.flyleaf

       │ STM32-DEMO.uvguix.Administrator

       │ STM32-DEMO.uvguix.jl_mlh

       │ STM32-DEMO.uvgui_Administrator.bak

       │ STM32-DEMO.uvgui_CGH.bak

       │ STM32-DEMO.uvgui_flyleaf.bak

       │ STM32-DEMO.uvopt

       │ STM32-DEMO.uvoptx

       │ STM32-DEMO.uvproj.saved_uv4

       │ STM32-DEMO.uvprojx

       │ STM32-DEMO_LED-DEMO.dep

       │ STM32-DEMO_Target 1.dep

       │ STM32-DEMO_USART1-DEMO.dep

       │ STM32-DEMO_uvopt.bak

       │ STM32-DEMO_uvproj.bak

       │ stm32f10x_conf.h

       │ stm32f10x_it.c

       │ stm32f10x_it.h

       │ sys.c

       │ sys.cpp

       │ sys.h

       │ timer.c

       │ timer.h

       │ usart1.c

       │ usart1.h

       └ DebugConfig

          │ USART1-DEMO_STM32F103C8_1.0.0.dbgconf

          └ USART1-DEMO_STM32F103VE_1.0.0.dbgconf

TAG42步进电机
  • 10 次
  • 10 分