Co rtex
2M3架构上进行了多项改进 ,在提升性能的同
时 ,所有新功能都具有较低的功耗 , 其内核电压为 1. 8
V ,芯片电压为 3. 3 V ,可以选择睡眠模式 、
待机模式 ,
保证低功耗应用的要求 ;相对于 ARM 系列其他芯片 ,
STM32运行速度更快 ; 7个 TIM 最多可以产生 28个精
准的 PWM 信号 ,方便地用于步进电机控制 ;丰富的通
信模块便于与上位机进行通信
[ 4 ]
。
本系统要用到 3 台两相四线制步进电机 , 采用
2HB504MA 来驱动 。系统总体方案如图 1所示 。
图
1
系统总体方案
上位机发送控制指令 ,主控芯片接收指令并将其
转化为用于控制步进电机的 PWM 信号和方向信号 ,
然后通过步进电机驱动器对步进电机进行细分驱动 ,
细分后步进电机运行将更加平稳
[ 6, 9 ]
。其中控制一台
步进电机需要 STM32 产生 PWM 信号和方向控制信
号 ,并利用 HCPL0630进行光耦隔离后经三极管放大
输出 。通过光耦合器的隔离 ,电路具有良好的电绝缘
能力和抗干扰能力 。又由于光耦合器的输入端属于电
流型工作的低阻元件 ,因而具有很强的共模抑制能
力
[ 5 ]
。三极管放大采用开漏输出 ,方便线与逻辑功能
的实现 ,同时通过外接不同上拉电阻可以增加外围的
驱动能力 。
2
系统软件设计
2. 1 两步进电机同步运行控制方法
以两台步进电机为研究对象 ,上位机发送的命令
中包含完成两个目标位置移动所需的直线距离
L
1
、
L
2
。
两台步进电机所在子系统的机械传动等装置的转化系
数是常数
,
分别设为
q
1
、
q
2
。电机所需运行圈数设为
Q
1
、
Q
2
,则
Q
i
= L
i
q
i
( i = 1, 2)
驱动器细分倍数 、
电机运行总步数 、PWM 脉冲总
个数分别为
n
、
N
、
P
,则
P
i
= N
i
=
200 n
i
Q
i
=
200n
i
L
i
q
i
( i = 1, 2)
步进电机每一次目标位置的移动 ,都需要经过启
动 、
加速 、
高速 、
减速和制动过程 。速度大小是由 PWM
脉冲信号频率决定的 ,所以完成目标位置移动的过程
就是不断调整 PWM 脉冲信号频率的过程
[ 7, 8 ]
。
如果两台步进电机每次调整的 PWM 信号频率运
行的时间 Δ
t
相同 ,同时启动后的加速 、
高速 、
减速整个
过程经过相同的调整次数 ,则同时停止运转 。即 A 电
机各次调整后运行时间为 :Δ
t
11
,
Δ
t
12
,
…
,
Δ
t
1n
, B 电机
各次调整后运行时间为 :Δ
t
21
,
Δ
t
22
,
…
,
Δ
t
2n
,
使 Δ
t
11
=
Δ
t
21
,
…
,
Δ
t
1n
=Δ
t
2n
,则两电机可同步完成整个运动过
程 。
STM32定时器产生的 PWM 脉冲频率由时钟频率
f
、
预分频值
M
、
计数周期
T
决定 。时钟频率和计数周
期通常固定不变 ,而是通过修改预分频值来调整输出
脉冲频率 。
以其中一台电机为基准 ,根据需要给该电机依次
设定 6个预分频值来完成运动过程 ,其值为
M
1
σ
,
σ =
1
,
2
,
…
,
6。由
V
1
σ
=
f
(M
1
σ
+ 1
) ( T
+ 1
)
可求出各预分频
值对应的电机步速
V
1
σ
,
σ = 1
,
2
,
…
,
6。
每个步速运行下所走过的步数分别设置为
N
1
/
β
,
β= 8, 8, 2, 12, 12, 12。在各步速下运行时 ,步进电机走
过的步数占总步数的比重可以调整 。
进一步可得出
Δ
t
σ
=
N
1
/
β
V
1
σ
=
N
1
(M
1
σ
+
1) ( T + 1)
β
f
σ
=
1, 2,
…
,
6
第 2台步进电机每个步速运行下所走过的步数分
别设置为
N
2
/
β
,
β= 8, 8, 2, 12, 12, 12。
则由
Δ
t
σ
=
N
1
(M
1
σ
+
1) ( T + 1)
β
f
=
N
2
(M
2
σ
+
1) ( T + 1)
β
f
可得
M
2
σ
=
N
1
(M
1
σ
+
1)
N
2
-
1
σ
=
1, 2,
…
,
6
在程序设计中 ,通过计算并设定
M
1
σ
, M
2
σ
,
Δ
t
σ
,
即
可实现对步进电机的同步控制 。同样的方法也可以实
现对多台步进电机的同步控制 。
2. 2 程序流程控制
本系统中要求步进电机所控制的设备从初始位置
开始运行 。但由于突发情况的存在 ,步进电机的实际
位置相对于初始位置会有一定位移 。这就要求软件系
统中有回零功能 ,以控制步进电机拖动设备回到初始
位置 。 STM32主程序完成初始化后 ,通过硬件中断来
触发回零程序 。然后采用串口中断的方式不断接收上
位机指令 ,在中断服务程序中把指令中的距离信息
L
1
、
L
2
转化为电机运行步数
N
1
、
N
2
,
然后通过设定的
M
1
σ
,
求出
M
2
σ
、
Δ
t
σ
,
σ = 1
,
2
,
…
,
6
,
把
M
1
σ
、
M
2
σ
分别赋
给两个 TIM 并使能后产生两个 PWM 信号 ,且同时延
时 Δ
t
σ
,
用于控制电机速度的大小 。令
:
Δ
T
= ∑
6
σ
= 1
Δ
t
σ
,
电机运行 Δ
T
后
,
读取位置反馈信息并转化为电机实
际运行步数
,
与控制指令步数比较
,
进行偏差控制 。如
果偏差 Δ
L
1
、
Δ
L
2
超出规定值
,
则程序就会把 Δ
L
1
、
Δ
L
2
・
5
5
・
基于 STM32的多步进电机控制系统研究