提供树莓派和Jetson nano例程
标号 | 描述 |
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
若电机的扭力不够,可以通过调节板载的电位器来增加输出电流。
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只需要给脉冲数量就可以实现步进电机的旋转,按照前面的分析,并且不使用细分的情况下:
驱动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 |
- wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
- tar zxvf bcm2835-1.60.tar.gz
- cd bcm2835-1.60/
- sudo ./configure && sudo make && sudo make check && sudo make install
- # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
- 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版本,如果没有出现说明安装出错
- sudo apt-get update
- sudo pip install RPi.GPIO
下载示例程序,解压到指定目录:
- 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/
提供三种程序,BCM2835、wiringPi、python
运行程序前做好以下几步:
- cd bcm2835/
- make clean
- make
- sudo ./motor
- cd wiringpi/
- make clean
- make
- sudo ./motor
- cd python/
- sudo python test.py
- #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 -y
- wget http://www.waveshare.net/w/upload/8/8c/Stepper_Motor_HAT_Code.7z
- 7zr 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/
提供三种程序:c、python2、python3
- cd C/
- make clean
- make
- sudo ./main
- cd python2/
- sudo python main.py
- cd python3/
- sudo python3 main.py