Stepper Motor HAT
| |||||||||||||||
| |||||||||||||||
说明
提供树莓派和Jetson nano例程
特点
- 基于树莓派接口设计,适用于Raspberry Pi Zero/Zero W/Zero WH/2B/3B/3B+/4B/5
- 板载两路DRV8825电机驱动芯片,内置转换器,方便控制,可以驱动两个步进电机,
- 可通过拨码开关选择六种不同的步进分辨率:全步,半步,1/4步,1/8步,1/16步和1/32步
- 并可通过电位器调节输出电流, 最大支持2.5A电流输出。
- 板载5V稳压芯片,输出可达3A电流,可直接给树莓派供电
- 板载多种步进电机接口,方便规格步进电机接入
产品参数
- 电机驱动电压:8.2V~28V
- 电机驱动芯片:DRV8825
- 最大电流:2.5A
- 产品尺寸:65mm × 56mm
- 过孔直径:3.0mm
硬件资源
标号 | 描述 |
VIN | 8.2~28V外部电源输入 |
5V | 5V电源 |
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控制端口
电源开关可以控制模块是否给树莓派供电
拨码开关D0-D5可以控制细分格式;
D0-D2控制步进电机1;
D3-D5控制步进电机2;
板载的两个电位器,可以控制输出电流
电源
电源部分采用MP1584稳压芯片,该芯片支持4.5V到28V的宽电压输入,输出电流达3A。虽然芯片支持最低4.5V的输入,但是由于给电机驱动芯片的工作电压也由VM供给,最少需要8.2V才能工作,因此实际上输入电压最好保持在8.2-28V。
电源DC头的规格是外径5.5 内径2.1的电源头,市面上较多的DC头都是这种规格,你可以使用9V2A或者12V2A的电源供电。
电机驱动
DRV8825是一款双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管脚为调节输出电流的大小,R13与R16为采样电阻0.2欧姆,根据数据手册上的公式(数据手册:page11):
Ichop = V(xREF)/(5*R(ISENSE))
把R(ISENSE) = 0.2代入公式
那么输出电流与电位器上的电压成正比:
I = Vref
若电机的扭力不够,可以通过调节板载的电位器来增加输出电流。
控制原理
H桥
DRV8825一款双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步的时候,电机转完一圈。
DRV8825驱动电机
DRV8825只需要给脉冲数量就可以实现步进电机的旋转,按照前面的分析,并且不使用细分的情况下:
驱动42电机转一圈,需要多少个脉冲:
360 / 1.8 = 200
通过实验发现,42电机确实是转了一周
驱动28BYJ-48电机转一圈,需要多少个脉冲:
360 / 5.625 * 64 = 4096
那么确定是这样的吗?通过实验发现28BYJ-48转了两周。
28BYJ-48是四相电机,它支持单四拍、双四拍以及八拍三种工作方式,八拍的工作方式的步距角是单四拍与双四拍的一半,而使用DRV8825驱动时,是使用的单四拍的工作方式,因此驱动28BYJ-48转一圈需要2048个脉冲。
细分设置
该模块支持最高32细分,可使用软件或者使用硬件控制。
- 软件细分控制:
首先需要将背面的6个电阻进行焊接
程序上修改对应的命令,来启用对应的软件系统
python可通过'softward'来选择
c语言可以通过SOFTWARD来选择
且需要将拨码开关全部拨至1,软件控制才能生效。
- 硬件细分控制:
在c程序中可以通过HARDWARD来选择
在python中可以通过'hardward'来选择
其中D0、D1、D2对应控制M1驱动器的的M0DE0、MODE1、MODE2,D3、D4、D5对应控制M2驱动器的M0DE0、MODE1、MODE2。具体的对应关系如下
详见datasheet page13
注:示例程序需要将D0-D5全部拨至0,对应全步。
注:默认的细分全在1的位置,所以硬件的细分十分慢,可能看不到实验效果,最好可以调节至0。
电流设置
DRV8825的最大输出电流有2.5A.,可以通过调节下图的电位器来调节电流的大小
详见datasheet page12
板载的Risense = 200mR,那么我们可以简化公式:Ichop = Vxref
因此Ichop与Vxref成正比,Vxref是电位器的电压,Ichop是输出电流。
电位器顺势针旋转电压变小,电位器逆时针旋转电压变大。若需要测量,则可以给模块插上电源,使用万用表,红表笔接触下面,黑表笔接触上面的矩形焊盘。
出厂设置的电位器处于正中间,是可以驱动大部分的电机的。
如果电机的最小相电流比这个大的,可能达不到理想状态,长时间工作可能会导致芯片烧毁。
请勿顺逆时针旋转到底,长时间工作可能会导致芯片烧毁。
树莓派使用
占用管脚
Stepper Motor HAT | 树莓派(BCM) |
A1A2B1B2 dir | 13 |
A1A2B1B2 step | 19 |
A1A2B1B2 enable | 12 |
A1A2B1B2 mode | 16 17 20 |
A3A4B3B4 dir | 24 |
A3A4B3B4 step | 18 |
A3A4B3B4 Dir | 4 |
A3A4B3B4 mode | 21 22 27 |
安装库
如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用,python库可以不安装,直接运行程序即可
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
#打开树莓派终端,并运行以下指令 cd 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.70版本,如果没有出现说明安装出错
lgpio
wget https://github.com/joan2937/lg/archive/master.zip unzip master.zip cd lg-master sudo make install # 更多的可以参考官网:https://github.com/gpiozero/lg
python
#python2 sudo apt-get update sudo pip install RPi.GPIO
#python3 sudo apt-get update sudo pip3 install RPi.GPIO
python-gpiozero
sudo apt-get update # python3 sudo apt install python3-gpiozero # python2 sudo apt install python-gpiozero
下载示例程序
wget https://www.waveshare.net/w/upload/4/45/Stepper_Motor_HAT_Code.zip unzip Stepper_Motor_HAT_Code.zip sudo chmod 777 -R Stepper_Motor_HAT_Code cd Stepper_Motor_HAT_Code/Raspberry\ PI/
如果您的购买日期早于2021.01.05,请执行下面的:
sudo apt-get install p7zip-full wget http://www.waveshare.net/w/upload/8/8c/Stepper_Motor_HAT_Code.7z 7z x Stepper_Motor_HAT_Code.7z -r -o./Stepper_Motor_HAT_Code sudo chmod 777 -R Stepper_Motor_HAT_Code cd Stepper_Motor_HAT_Code/Raspberry\ PI/
区别在于,新版本使用的是高电平使能,这样在树莓派不对使能GPIO进行初始化及让期输出高电平时电机就不会工作。
运行示例程序
提供五种程序,BCM2835、wiringPi、python、lgpio、python-gpiozero
其中:lgpio、python-gpiozero支持树莓派所有版本,BCM2835、wiringPi、python不支持Pi5
运行程序前做好以下几步:
- 树莓派使用独立供电
- 模块的DC口接入8.2V-28V电源,且开关打到ON
- 正确连接步进电机
- BCM2835例程、wiringPi例程、lgpio例程
cd bcm2835/ make clean make sudo ./motor
- python例程、python-gpiozero例程
#python2 cd python/ sudo python test.py
#python3 cd python/ sudo python3 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
下载示例程序
新版本(购买日期晚于2021.01.05,板子有Rev2.1字样):
wget https://www.waveshare.net/w/upload/4/45/Stepper_Motor_HAT_Code.zip unzip Stepper_Motor_HAT_Code.zip sudo chmod 777 -R Stepper_Motor_HAT_Code cd Stepper_Motor_HAT_Code/Jetson\ nano/
如果您的购买日期早于2021.01.05,请执行下面的:
sudo apt-get install p7zip-full wget http://www.waveshare.net/w/upload/8/8c/Stepper_Motor_HAT_Code.7z 7z x Stepper_Motor_HAT_Code.7z -r -o./Stepper_Motor_HAT_Code sudo chmod 777 -R Stepper_Motor_HAT_Code cd Stepper_Motor_HAT_Code/Jetson\ nano/
区别在于,新版本使用的是高电平使能,这样在树莓派不驱动已经不配置好树莓派GPIO的状态的时候驱动板不会工作。
运行示例程序
提供三种程序: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
FAQ
1.确认树莓派的所有管脚均是好的,没有被管脚被烧;
2.确认叠加其他的模块是否会引起管脚冲突;
3.确认您的电机是哪种型号,默认的例程一个通道是驱动28BJY-48(通道2),一个是驱动nema23,nema14这种1.8度的步进电机(通道1),如果都是1.8的步进电机需要把通道2的延时改成通道1的延时。因为是默认使用GPIO高低电平切换来模拟PWM,不同的电机对PWM的频率不一样。
1.检查config.txt确认没有其他的管脚占用
2.换个不要插其他的模块,只插一个Stepper Motor HAT
3.确认树莓派的驱动管脚都是好的,别有什么管脚是烧了的
1.很大的概率是带不动电机,建议电机的相电流不要超过2.5A,超过了不加风扇散热风险很大,可能会烧毁驱动芯片。
2.默认的电流小了,是尝试改变电位器的阻值
3.可以使用更大输出的电源适配器,我们提供的电源适配器输出功率比较小,如果带大负载的电机可能无法驱动。
开环控制,开环与闭环的根本区别就在于会不会反馈当前运行的状态信号,开环没有反馈信号所以只按顺序执行,而闭环反馈信号,则根据信号步进电机驱动器采取相应的动作措施或信号反馈给控制器开环控制。