本帖最后由 UNO 于 2021-11-10 09:43 编辑
一、扩展板介绍与使用PM-R3多功能扩展板的主要功能分为以下几个部分:
1. 双路直流电机驱动(TB6612FNG)TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流MOSFET—H桥结构,双通道电路输出,可同时驱动2个电机,也可控制单个双极步进电机;每个H桥能够提供持续1.2A、峰值3.2A的输出电流,电机电压输入范围为2.5V至13.5V,峰值电压被限制在15V。基于MOSFET—H桥比老式驱动器(如L298N)使用H桥更有效率,这使得更多的电流可以传送到电机,而不需要从逻辑电源中抽取。 下图是典型的“H”桥电路,采用下面这种电路,即可实现上面所说的电极翻转,从而达到电机的正反转。 a. 常态下,4个桥臂的开关保持开路状态,这时候电机两端悬空,没有电压。 b. 当1、4开关闭合,2、3开关打开,电流从1号开关流经电机,再从4号开关流出,这时候电机正转。 c. 当2、3开关闭合,1、4开关打开,电流从2号开关流经电机,再从3号开关流出,这时候电机反转。
通过上面的分析,我们只需要通过控制1、2、3、4号开关的打开与关闭,即可以实现对电机转向的控制。如果在改变开关的导通时间,就可以实现对电机转速的调节。 下图为扩展板采用的电机驱动原理图: 通过AIN1、AIN2可以控制MOTORA电机,通过BIN1、BIN2可以控制MOTORB电机,下面电机MOTORA、B的逻辑控制表:
当马达的输入信号同时为L或者为H时,电机都会失去电流而停止运行,但两种停止方式稍有不同。同为L时,电机自由停止,工作在快速衰减模式;同为H时,电机瞬间制动,工作在慢速衰减模式,相当于电极短路。
下面是两种不同衰减模式的工作示意图:
按照逻辑表给出的控制方式,控制一个电机需要3个I/O口,控制2个电机就需要6个I/O口,相对于微控制板,I/O口节约是很重要的,在这次的升级中,我们加入了双施密特触发器逆变器(SN74LVC2G14),通过芯片的引脚转换,我们可以获得跟多的I/O口。 该双路施密特触发器是为1.65V至5.5V VCC工作而设计的。SN74LVC2G14器件包含两个反相器,并执行布尔函数Y=A。该器件用作两个独立的反相器,但由于施密特动作,对于正向(VT+)和负向(VT-)信号,它可能具有不同的输入阈值电平。 该器件完全用于使用Ioff进行部分降压应用。Ioff电路禁用输出,防止当电源关闭时损坏设备的电流回流。原理如下图: *详细资料请查看芯片手册
由于TB6612电机驱动控制方向有2中情况高低(H,L)、低高(L,H),使用双施密特触发器逆变器(SN74LVC2G14),就可以使用一路信号控制两路信号,从而达到控制电机的正反转,而且可以将多余的2个端口分配到其它的模块上。实际运用中逻辑真值表:
DIRA(D4) | PWMA(D5) | DIRB(D7) | PWMB(D6) | AO1/AO2 | | | | | | | | | | | | | | | | |
下面为一个简单的电机驱动函数,工作在慢速衰减模式,用来设置电机转动方向与转动速度: [C] 纯文本查看 复制代码 void setMotor(int MOTORA,int MOTORB)
{
if(MOTORA>0) //判断方向,大于0表示正向
{
digitalWrite(DIRA,HIGH); //DIRA引脚置高
analogWrite(PWMA,MOTORA); //PWMA输入PWM信号
//PWM是高电平的占空比,这里需要取反,所以255 + MOTORA
}
else if //判断方向,小于0表示反向
{
digitalWrite(DIRA,LOW);
analogWrite(PWMA,- MOTORA); //PWM是高电平的占空比
//这里需要取反,这时MOTORA为负值,所以255 - MOTORA
}
else //等于0表示停止
{
digitalWrite(DIRA,LOW);
analogWrite(PWMA,LOW);
}
if(MOTORB>0) //判断方向,大于0表示正向
{
digitalWrite(DIRB,HIGH); //DIRB引脚置高
analogWrite(PWMB,MOTORB); //PWMB输入PWM信号
//PWM是高电平的占空比,这里需要取反,所以255 + MOTORB
}
else if //判断方向,小于0表示反向
{
digitalWrite(DIRB,LOW);
analogWrite(PWMB,- MOTORB); //PWM是高电平的占空比
//这里需要取反,这时MOTORB为负值,所以255 - MOTORB
}
else //等于0表示停止
{
digitalWrite(DIRB,LOW);
analogWrite(PWMB,LOW);
}
}
# setMotor(motorA,motorB)用来设置电机速度,例如setMotor(127,127)表示小车向前以半速行驶,255最大表示全速;setMotor(-127,-127)则表示小车向后以半速行驶,-255最大,表示全速.setMotor(0,0)则表示停车。
当然,还有一种更便捷的控制方式,不需要理解脚位的控制情况,我们将其封装好,直接正负和数值就可以使用,库示例代码如下: [C] 纯文本查看 复制代码 /***************************************************
Motor Test - PM-R3 Motor Drive
MA DIR-D4 PWM-D5;
MB DIR-D7 PWM-D6;
motor driver library: [url=https://github.com/YFROBOT-TM/Yfrobot-Motor-Driver-Library]https://github.com/YFROBOT-TM/Yfrobot-Motor-Driver-Library[/url]
YFROBOT ZL
08/13/2020
****************************************************/
#include <MotorDriver.h>
#define MOTORTYPE YF_PMR3
uint8_t SerialDebug = 1; // 串口打印调试 0-否 1-是
// these constants are used to allow you to make your motor configuration
// line up with function names like forward. Value can be 1 or -1
const int offseta = 1;
const int offsetb = 1;
// Initializing motors.
MotorDriver motorDriver = MotorDriver(MOTORTYPE);
void setup() {
Serial.begin(9600);
Serial.println("Motor Drive test!");
motorDriver.motorConfig(offseta, offsetb);
}
void loop() {
motorDriver.setMotor(255, 255); // 电机AB 全速正转
delay(500);
motorDriver.setMotor(0, 0); // 电机AB停止
delay(500);
motorDriver.setMotor(-255, -255); // 电机AB 全速反转
delay(500);
motorDriver.setMotor(0, 0); // 电机AB停止
delay(1000);
} 2. 蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件. 常用的蜂鸣器分为有源蜂鸣器与无源蜂鸣器,二者之间的区别从使用的角度而言,有源蜂鸣器内部带有振荡源,因此只需要通电即可发声;而无源蜂鸣器因为内部没有振荡源,必须通过外部的高低电平变化才能发声.相比而言,有源蜂鸣器使用简单,无源蜂鸣器则具有声音优美柔和的优点。 Arduino的IO口能够向外提供至少20mA的驱动电流,这对于驱动一只无源蜂鸣器来说显得绰绰有余,所以蜂鸣器的正极直接接到了数字引脚12上,此时无法作为输入使用。 用户可以使用蜂鸣器给机器人加上声光警报的功能,或者在代码完成初使化的时候,加入一小段音乐作为将要出发的指示。 下面的代码来自于官网,只选取了其中开头的一段乐,完整的代码例程可以在给出的链接中找到。 [C] 纯文本查看 复制代码 /**********************************************************
* Play Super Mario theme song with arduino and speaker
*
* circuit:
* 8-ohm speaker on digital pin 12
* reference:
* [url=http://arduino.cc/en/Tutorial/Tone]http://arduino.cc/en/Tutorial/Tone[/url]
**********************************************************/
int melody[]={330,330,330,262,330,392,196};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[]={8,4,4,8,4,2,2};
void setup() {
// iterate over the notes of the melody:
for (int thisNote = 0; thisNote < 7; thisNote++) {
// to calculate the note duration, take one second divided by the note type.
int noteDuration = 1000/noteDurations[thisNote];
tone(12, melody[thisNote],noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(12); // stop the tone playing:
}
}
void loop() {
} 蜂鸣器发声需要具备一定的乐理知识,这里不做过多说明,如果用户希望深入研究,可以在网上查询相关资料。
3. 供电模式扩展板有3种供电方式(推荐第一种): 第一种供电方式是电源从扩展板的VIN电源输入端子接入(如图方式)这时候电源通过扩展板的接线端子输入,并通过Vin连接到控制主板的Vin,主板再通过自身的5V稳压给控制单元件供电;此时输入的电源需要考虑3点: 1.电源输入电压不能大于电机电压; 2.电源输入电压不能大于单片机的工作电压; 3.电源输入电压不能大于驱动芯片的工作电压; 为确保各模块能正常工作,建议使用以下电压要求(特殊电机电压需要注意): 1.电源的输入电压在7.5-12V之间。 2.能够提供足够的功率。
第二种是电源从主板的DC电源座输入(如右图方式),请确保输入电源满足以下个要求: 1.电源电压须在7.5V-12V之间(如3S锂电); 2.能够提供足够功率; 注:当供电为12V时,我们不建议使用此方式作为供电模式,推荐使用第一种接线方式;电机为大功耗,输入电流较大,底部供电走线较长,影响整个板子的发热,排针引脚接触不牢固会导致供电不稳定。
第三种供电方式是主板和PM-R3分开单独供电 1.DC电源电压须在7.5V-12V之间; 2.接线端子电源根据电机参数选择合理的电压范围; 3.能够提供足够功率; 4.必须断开背部Vin引脚走线,使用尖锐物体划开,避免划到周围走线。
|