13. 电机驱动模块接口¶
野火 TB6612FNG 电机驱动模块是双驱动电机模块,可以控制两个直流电机的正反转和转速,每个驱动有
两个逻辑输入引脚、一个 PWM 输入引脚和两个输出引脚,通过给两个逻辑输入引脚不同的电平来控制电
机的正反转,通过 PWM 输入引脚实现电机调速,STBY 待机引脚接低电平可以进入低功耗待机模式,内
置热关机电路和低电压检测电路。
鲁班猫扩展板板载一个电机驱动模块接口:
电机驱动模块接口支持板载5V或者外部12V给驱动模块VM供电,当接了12V电源,VM优先使用外部12V,去掉外部12V,VM则使用板载5V。可以通过拨码开关控制VM通断,拨到ON开启供电,拨到1断开供电:
电机驱动接口有两路PWM,分别是PWM0和PWM1:
以鲁班猫1为例,扩展板的PWM0和PWM1对应鲁班猫1的PWM9_M0、PWM10_M0:
执行如下命令修改/boot/uEnv/uEnv.txt,开启PWM9_M0、PWM10_M0插件:
1sudo vi /boot/uEnv/uEnv.txt
开启插件并重启开发板,登入系统后执行如下命令查看当前PWM设备:
1sudo cat /sys/kernel/debug/pwm
以上只开了PWM9_M0、PWM10_M0,如果还开了其他PWM,也是按大到小进行注册。上图是从下往上注册,也即先注册 屏幕背光 -> PWM9 -> PWM10。
1ls /sys/class/pwm/
根据注册顺序可知,PWM9是pwmchip1、PWM10是pwmchip2。
同时其他接口说明如下:
STBY:待机引脚,接低电平处于待机模式,接高电平开始工作,芯片内部默认下拉。
AIN1、AIN2、BIN1、BIN2:控制电机正反转。
以鲁班猫1为例,引脚对照说明如下:
电机驱动模块
扩展板
40pin
鲁班猫1
STBY
GPIO16
36
GPIO1_B0
AIN1
GPIO7
26
GPIO4_C4
AIN2
GPIO25
22
GPIO3_B0
BIN1
GPIO20
38
GPIO1_B1
BIN2
GPIO21
40
GPIO1_B2
将扩展板的AO1或BO1接电机正级,AO2或BO2接电机负极。
13.1. python代码测试¶
python测试代码为:lubancat_rk_code_storage/expansion_board/motor/motor.py
默认以鲁班猫1引脚为例,其他板根据实际修改motor.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28'''
filename : motor.py
'''
...
# motor controller gpionum
# A-D : 0-3
# number = group * 8 + x
# e.g. : B0 = 1 * 8 + 0 = 8
# C4 = 2 * 8 + 4 = 20
#
gpionum_motor_STBY = 8 # GPIO1_B0
gpionum_motor_AIN1 = 20 # GPIO4_C4
gpionum_motor_AIN2 = 8 # GPIO3_B0
gpionum_motor_BIN1 = 9 # GPIO1_B1
gpionum_motor_BIN2 = 10 # GPIO1_B2
# motor controller gpiochip
gpiochip_motor_STBY = "1" # gpiochip1
gpiochip_motor_AIN1 = "4" # gpiochip4
gpiochip_motor_AIN2 = "3" # gpiochip3
gpiochip_motor_BIN1 = "1" # gpiochip1
gpiochip_motor_BIN2 = "1" # gpiochip1
# motor controller pwmchip, pwm channel
motor_PWMA = PWM(1, 0) # pwmchip1, channel0
motor_PWMB = PWM(2, 0) # pwmchip2, channel0
...
将motor.py传到板卡,执行以下命令后台运行程序,并查看引脚状态:
1
2
3
4
5
6
7
8#后台运行
sudo python motor.py &
#查看PWM状态
cat /sys/kernel/debug/pwm
#查看引脚状态
cat /sys/kernel/debug/gpio
观察PWM和引脚状态如下:
将电机接到对应的接口,效果为电机会正反转转动:
13.2. c代码测试¶
C测试代码为:lubancat_rk_code_storage/expansion_board/motor/motor.c
默认以鲁班猫1引脚为例,其他板根据实际修改motor.c:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34/*
filename : motor.c
*/
...
/* gpiochip */
#define GPIOCHIP_MOTORCTRL_STBY "/dev/gpiochip1"
#define GPIOCHIP_MOTORCTRL_AIN1 "/dev/gpiochip4"
#define GPIOCHIP_MOTORCTRL_AIN2 "/dev/gpiochip3"
#define GPIOCHIP_MOTORCTRL_BIN1 "/dev/gpiochip1"
#define GPIOCHIP_MOTORCTRL_BIN2 "/dev/gpiochip1"
/* gpionum
*
* A-D : 0-3
* number = group * 8 + x
* e.g. : B0 = 1 * 8 + 0 = 8
* C4 = 2 * 8 + 4 = 20
*/
#define GPIONUM_MOTORCTRL_STBY (8)
#define GPIONUM_MOTORCTRL_AIN1 (20)
#define GPIONUM_MOTORCTRL_AIN2 (8)
#define GPIONUM_MOTORCTRL_BIN1 (9)
#define GPIONUM_MOTORCTRL_BIN2 (10)
/* pwmchip */
#define PWMCHIP_MOTORCTRL_PWMA "pwmchip1"
#define PWMCHANNEL_MOTORCTRL_PWMA "0"
#define PWMCHIP_MOTORCTRL_PWMB "pwmchip2"
#define PWMCHANNEL_MOTORCTRL_PWMB "0"
...
将motor.c传到板卡,执行以下命令编译运行程序:
1
2
3
4
5# 编译程序
sudo gcc -o motor motor.c -lgpiod
# 运行程序
sudo ./motor