树莓派Stepper Motor HAT (B)教程

说明

提供树莓派和Jetson nano例程

特点

  • 基于树莓派接口设计,适用于Raspberry Pi Zero/Zero W/Zero WH/2B/3B/3B+
  • 板载两路HR8825电机驱动芯片,内置转换器,方便控制,可以驱动两个步进电机,
  • 可通过拨码开关选择六种不同的步进分辨率:全步,半步,1/4步,1/8步,1/16步和1/32步
  • 并可通过电位器调节输出电流, 最大支持2.5A电流输出。
  • 板载5V稳压芯片,输出可达3A电流,可直接给树莓派供电
  • 板载多种步进电机接口,方便规格步进电机接入

产品参数

  • 电机驱动电压:8.2V~28V
  • 电机驱动芯片:HR8825
  • 最大电流:2.5A
  • 产品尺寸:65mm × 56mm
  • 过孔直径:3.0mm

硬件资源


标号描述
VIN8.2~28V外部电源输入
5V5V电源
GND电源地
A1双极步进电机M1绕组A输出1端
A2双极步进电机M1绕组A输出2端
B1双极步进电机M1绕组B输出1端
B2双极步进电机M1绕组B输出2端
A3双极步进电机M2绕组A输出1端
A4双极步进电机M2绕组A输出2端
B3双极步进电机M2绕组B输出1端
B4双极步进电机M2绕组B输出2端

其中:
A1、A2、B1、B2:步进电机M1控制端口
A3、A4、B3、B4:步进电机M2控制端口
电源开关可以控制模块是否给树莓派供电
拨码开关S0-S5可以控制细分格式;
S0-S2控制步进电机1;
S3-S5控制步进电机2;
板载的两个电位器,可以控制输出电流

电源


电源部分采用MP1584稳压芯片,该芯片支持4.5V到28V的宽电压输入,输出电流达3A。虽然芯片支持最低4.5V的输入,但是由于给电机驱动芯片的工作电压也由VM供给,最少需要8.2V才能工作,因此实际上输入电压最好保持在8.2-28V。
电源DC头的规格是外径5.5 内径2.1的电源头,市面上较多的DC头都是这种规格,你可以使用9V2A或者12V2A的电源供电。

电机驱动

HR8825是一款双H桥电机驱动芯片,支持32细分,还集成了短路、过热、欠压及交叉传导保护电路,能够检测故障状况并迅速切断H桥,从而为电机和驱动芯片提供保护。

VM为输入电压,输入范围为:8.2V到45V,综合稳压芯片的输入范围,输入8.2V到28V。
nSLEEP需要保持高电平,否则芯片将直接进入睡眠模式,器件的 H 桥被禁止,电荷泵电路停止工作,V3P3 输出被禁止,同时内部所有时钟停止工作,所有的逻辑输入都被忽略。
nENBL管脚为使能管脚,输入低电平,H 桥输出使能,STEP上的上升沿被识别。输入高电平, H 桥被禁止,输出是高阻状态,STEP 输入被忽略。在不工作的情况下一定要失能,否则芯片将一直保持在使能状态,芯片与电机将一直处于高温状态!
STEP为步进时钟输入,DIR为方向控制输入,MODE0、MODE1、MODE2为细分输入。
12与13管脚为调节输出电流的大小,R9与R10为采样电阻0.2欧姆,根据数据手册上的公式:

Ichop = V(xREF)/(5*R(ISENSE))
把R(ISENSE) = 0.2代入公式
那么输出电流与电位器上的电压成正比:
I = Vref
若电机的扭力不够,可以通过调节板载的电位器来增加输出电流。

控制原理

H桥


HR8825一款双H桥电机驱动芯片, H桥是经典的控制电机电路,由于形状像字母”H”而得名。由四个三极管或者mosfet组成四竖,中间的一横接电机,要使电机转动,则需要对角线的一组导通。
当Q1、Q4导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经 Q4回到电源负极,电机正转,如上左图;
当Q2、Q3导通时,电流就从电源正极经Q3从左至右穿过电机,然后再经 Q2回到电源负极,电机正转,如上右图;
如果是双桥的话,那么就有了两组输出线,刚刚对应步进电机的四根线。

电机的转动原理

对于两项四线电机而言,其运动如下图所示:

根据安培定则可以知道,A组线圈电流左进右出时,那么定子将会产生磁场,靠内部的一侧为磁场北极,那么就会吸引电机上的转子,当四组线圈的电流按照一定关系时,产生一个旋转磁场,那么转子也就同步转动。假设一个电机只有四个定子,那么就对应下面的四个状态:
第一个状态:A组线圈电流左进右出,C组选区电流右进左出,此时为0度;
第二个状态:B组线圈电流上进下出,D组选区电流下进上出,转子从第一个状态旋转90度;
第三个状态:A组线圈电流右进左出,C组选区电流左进右出,转子从第二个状态旋转90度;
第四个状态:B组线圈电流下进上出,D组选区电流上进下出,转子从第三个状态旋转90度;
当从前一个状态变换到后一个状态称之为一步,当完成了四步的时候:这个电机就转了一圈了,这个电机的步距角就为90度。
但是现实中的电机,可能不止有4个定子,常见的42电机,57电机等都是50个定子(实际上只有48个定子,还有两个移除以此使每组定子形成一定的间距),它们的步距角为1.8度。
28BYJ-48是永磁式减速四相八拍步进电机,减速比为64,步距角为:5.625/64 度

微步细分

电机转动是因为线圈的有规律的通电,那么将会合成一个均匀分布的圆形旋转磁场,从而吸引转子转动。
根据这一原理,通过控制各相绕组中的电流,使它们按一定的规律上升或下降,即在零电流到最大电流之间形成多个稳定的中间电流状态,相应的合成磁场矢量的方向也将存在多个稳定的中间状态,只改变这个矢量方向,这样可以使电机能转的角度更小,转动的更加平滑。
以上面的四个定子的电机为例,如果细分一半,那么从第一个状态转到第二个状态急需要两步才能完成,因为第一个状态之后的那么状态,A线圈50%电流,B线圈50%的电流,将会产生一个45度的夹角的矢量磁场,从而吸引电机转子旋转45度,运行8步的时候,电机转完一圈。

HR8825驱动电机

HR8825只需要给脉冲数量就可以实现步进电机的旋转,按照前面的分析,并且不使用细分的情况下:
驱动42电机转一圈,需要多少个脉冲:
360 / 1.8 = 200
通过实验发现,42电机确实是转了一周
驱动28BYJ-48电机转一圈,需要多少个脉冲:
360 / 5.625 * 64 = 4096
那么确定是这样的吗?通过实验发现28BYJ-48转了两周。
28BYJ-48是四相电机,它支持单四拍、双四拍以及八拍三种工作方式,八拍的工作方式的步距角是单四拍与双四拍的一半,而使用HR8825驱动时,是使用的单四拍的工作方式,因此驱动28BYJ-48转一圈需要2048个脉冲。

细分设置

该模块支持最高32细分,可使用软件或者使用硬件控制。

  • 软件细分控制:

首先需要将背面的6个电阻进行焊接

程序上修改对应的命令,来启用对应的软件系统
python可通过'softward'来选择
c语言可以通过SOFTWARD来选择
且需要将拨码开关全部拨至1,软件控制才能生效。

  • 硬件细分控制:

在c程序中可以通过HARDWARD来选择
在python中可以通过'hardward'来选择

其中S0、S1、S2对应控制M1驱动器的的M0DE0、MODE1、MODE2,S3、S4、S5对应控制M2驱动器的M0DE0、MODE1、MODE2。具体的对应关系如下

注:示例程序需要将S0-S5全部拨至0,对应全步。
注:默认的细分全在1的位置,所以硬件的细分十分慢,可能看不到实验效果,最好可以调节至0。

电流设置

DRV8825的最大输出电流有2.5A.,可以通过调节下图的电位器来调节电流的大小

板载的Risense = 200mR,那么我们可以简化公式:Ichop = Vxref
因此Ichop与Vxref成正比,Vxref是电位器的电压,Ichop是输出电流。
电位器顺势针旋转电压变小,电位器逆时针旋转电压变大。若需要测量,则可以给模块插上电源,使用万用表,红表笔接触下面,黑表笔接触上面的矩形焊盘。

出厂设置的电位器处于正中间,是可以驱动大部分的电机的。
如果电机的最小相电流比这个大的,可能达不到理想状态,长时间工作可能会导致芯片烧毁。
请勿顺逆时针旋转到底,长时间工作可能会导致芯片烧毁。

树莓派使用

占用管脚

Stepper Motor HAT树莓派(BCM)
A1A2B1B2 dir13
A1A2B1B2 step19
A1A2B1B2 enable12
A1A2B1B2 mode16 17 20
A3A4B3B4 dir24
A3A4B3B4 step18
A3A4B3B4 Dir4
A3A4B3B4 mode21 22 27

安装库

BCM2835

#打开树莓派终端,并运行以下指令
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/

wiringPi

#打开树莓派终端,并运行以下指令
sudo apt-get install wiringpi
#对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错

#Bullseye分支系统使用如下命令:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# 运行gpio -v会出现2.60版本,如果没有出现说明安装出错
  • python
sudo apt-get update
sudo pip install RPi.GPIO

下载示例程序

sudo apt-get install p7zip-full
wget https://www.waveshare.net/w/upload/9/9d/Stepper_Motor_HAT_B_Code.7z
7z x Stepper_Motor_HAT_Code_B.7z -r -o./Stepper_Motor_HAT_Code_B
sudo chmod 777 -R Stepper_Motor_HAT_Code_B
cd Stepper_Motor_HAT_Code_B/Raspberry\ PI/

运行示例程序

提供三种程序,BCM2835、wiringPi、python
运行程序前做好以下几步:

  1. 树莓派使用独立供电
  2. 模块的DC口接入8.2V-28V电源,且开关打到ON
  3. 正确连接步进电机
  • BCM2835例程
cd bcm2835/
make clean
make
sudo ./motor
  • wiringPi例程
cd wiringpi/
make clean
make
sudo ./motor
  • python例程
cd python/
sudo python test.py

Jetson Nano使用

安装库

#python2
sudo apt-get install python-pip
sudo pip install Jetson.GPIO
sudo groupadd -f -r gpio
sudo usermod -a -G gpio your_user_name
sudo udevadm control --reload-rules && sudo udevadm trigger
#python3
sudo apt-get install python3-pip
sudo pip3 install Jetson.GPIO
sudo groupadd -f -r gpio
sudo usermod -a -G gpio your_user_name
sudo udevadm control --reload-rules && sudo udevadm trigger

下载示例程序

sudo apt-get install p7zip-full
wget https://www.waveshare.net/w/upload/9/9d/Stepper_Motor_HAT_B_Code.7z
7z x Stepper_Motor_HAT_Code_B.7z -r -o./Stepper_Motor_HAT_Code_B
sudo chmod 777 -R Stepper_Motor_HAT_Code_B
cd Stepper_Motor_HAT_Code_B/Jetson\ nano/

运行示例程序

提供三种程序:c、python2、python3

  • C例程
cd C/
make clean
make
sudo ./main
  • python2
cd python2/
sudo python main.py
  • python3
cd python3/
sudo python3 main.py