2. pyboard控制TB6612FNG驱动板驱动双路直流电机¶
2.1. TB6612FNG驱动板说明¶
该模块相对于传统的L298N效率上提高很多,体积上也大幅度减少,在额定范围内,芯片基本不发热。 TB6612FNG每通道输出最高1.2 A的连续驱动电流,启动峰值电流达2A/3.2 A(连续脉冲/单脉冲); 4种电机控制模式:正转/反转/制动/停止;PWM支持频率高达100 kHz;
驱动板TB6612FNG,可以驱动两路直流电机,注意调整驱动板与电机的接线,因为不同的接线决定不同的转向。 每路驱动由IN1,IN2,PWM决定控制参数,IN1,IN2不同的状态决定电机的启停和转向,pwm决定转速,STBY口接单片机的IO口拉低(置零)电机进入休眠功能全部停止。
动力主电路: VM 接12V以内电源 GND 接电源负极 控制电路: STBY 置一为工作状态,置零为休眠状态 INx和pwm引脚接TTL电平,pyb板子引脚为3.3v工作电平是可以控制这些控制引脚的,VCC可以接3.3v也可以接5v,都是兼容的。
驱动1路 PWMA调速 AIN1:AIN2 00停止 01正转 10反正 11制动 驱动2路 BIN1:BIN2 00停止 01正转 10反正 11制动
2.2. 硬件接线¶
X1–>PWMA,X2–>AIN1,X3–>AIN2,X4–>PWMB,X5–>BIN1,X6–>BIN2,3V3–>VCC,GND–>GND
2.3. 测试代码¶
将代码替换复制到main.py中,硬件复位或者在REPL串口调试窗口中按 CTRL+D,软启动,重新运行,倾斜和放正电机动作,按USR按键退出测试循环,可以再次使用REPL串口。 代码如下
# -*- coding: utf-8 -*-
# @Time : 2019/05/26
# @Author : WU HENG
# @File : main.py
# @程序原理:通过板载加速度传感器,角度检查X,Y轴,通过倾斜和放正,分别负责打开关闭两路PWM通道
# 这两路PWM通道分别控制两路直流电机的速度,有pwm输出时pwm占空比固定为80%,无pwm输
# 出时为0。负载方向的IN1,IN2分别固定为1,0转向固定。
# @外设模块:TB6612FNG电机驱动模块,TB6612FNG的STBY接接高电平,不用引脚控制
# @接线引脚:X1-->PWMA,X2-->AIN1,X3-->AIN2,X4-->PWMB,X5-->BIN1,X6-->BIN2,3V3-->VCC,GND-->GND
# @实验现象:首先运行两边流水灯,进入循环,实现电机控制,倾斜或放正,按USR按键,退出循环,就可以使用repl调试了
from pyb import Timer
from pyb import Switch
from pyb import Accel
from pyb import LED
from pyb import Pin
accel = pyb.Accel() #创建加速度传感器对象
SENSITIVITY = 10 #创建加速度传感器的阈值设定对象
sw = Switch() #创建板载开关对象
pwm1 = pyb.Timer(2, freq=1000) #第一路pwm频率为1k,X1
AIN1 = Pin('X2', Pin.OUT_PP)
AIN1.high() #第一路AIN1为高,X2
AIN2 = Pin('X3', Pin.OUT_PP)
AIN2.low() #第一路AIN2为低,X3
pwm2 = pyb.Timer(5, freq=1000) #第二路pwm频率为1k,X4
BIN1 = Pin('X5', Pin.OUT_PP)
BIN1.high() #第二路BIN1为高,X5
BIN2 = Pin('X6', Pin.OUT_PP)
BIN2.low() #第二路BIN2为高,X6
# LED 循环点亮熄灭子函数
def LED_loop_test():
for i in range(1, 5):
pyb.LED(i).on()
pyb.delay(100)
pyb.LED(i).off()
pyb.delay(100)
LED_loop_test() #执行一次LED循环点亮函数
LED_loop_test()
while True:
#x轴倾斜LED2亮起打开第一路PWM,y轴倾斜LED4亮起,打开第二路PMW
x = accel.x()
if abs(x) > SENSITIVITY:
LED(2).on()
tchannel1 = pwm1.channel(1, Timer.PWM,pin=pyb.Pin.board.X1, pulse_width_percent=80)#占空比为80%
else:
LED(2).off()
tchannel1 = pwm1.channel(1, Timer.PWM,pin=pyb.Pin.board.X1, pulse_width_percent=0)#占空比为0%
y = accel.y()
if abs(y) > SENSITIVITY:
LED(4).on()
tchannel2 = pwm2.channel(4, Timer.PWM,pin=pyb.Pin.board.X4, pulse_width_percent=80)#占空比为80%
else:
LED(4).off()
tchannel2 = pwm2.channel(4, Timer.PWM,pin=pyb.Pin.board.X4, pulse_width_percent=0)#占空比为0%
pyb.delay(100) #延时
if sw.value()==1:#当按键按下时跳出循环这时候可以使用串口的REPL功能调试了,因为在循环中无法使用串口功能顺便检查了按键是否管用
break
LED_loop_test()#再运行一遍闪灯程序表明结束测试,可以使用REPL调试了