YFROBOT创客社区

标题: PM-R3多功能扩展板 [打印本页]

作者: UNO    时间: 2021-11-9 17:17
标题: PM-R3多功能扩展板
本帖最后由 UNO 于 2021-11-10 09:43 编辑

[attach]2479[/attach]

一、扩展板介绍与使用
PM-R3多功能扩展板的主要功能分为以下几个部分:
[attach]2480[/attach]

1. 双路直流电机驱动TB6612FNG)
TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流MOSFET—H桥结构,双通道电路输出,可同时驱动2个电机,也可控制单个双极步进电机;每个H桥能够提供持续1.2A、峰值3.2A的输出电流,电机电压输入范围为2.5V至13.5V,峰值电压被限制在15V。基于MOSFET—H桥比老式驱动器(如L298N)使用H桥更有效率,这使得更多的电流可以传送到电机,而不需要从逻辑电源中抽取。
下图是典型的“H”桥电路,采用下面这种电路,即可实现上面所说的电极翻转,从而达到电机的正反转。
[attach]2481[/attach]
a. 常态下,4个桥臂的开关保持开路状态,这时候电机两端悬空,没有电压。
b. 1、4开关闭合,2、3开关打开,电流从1号开关流经电机,再从4号开关流出,这时候电机正转。
c. 2、3开关闭合,1、4开关打开,电流从2号开关流经电机,再从3号开关流出,这时候电机反转。

通过上面的分析,我们只需要通过控制1、2、3、4号开关的打开与关闭,即可以实现对电机转向的控制。如果在改变开关的导通时间,就可以实现对电机转速的调节。
下图为扩展板采用的电机驱动原理图:
[attach]2482[/attach]
通过AIN1、AIN2可以控制MOTORA电机,通过BIN1、BIN2可以控制MOTORB电机,下面电机MOTORA、B的逻辑控制表:

Input
Output
IN1
IN2
PWM
STBY
OUT1
OUT2
Mode
H
H
H/L
H
L
L
Short break
L
H
H
H
L
H
CCW
L
H
L
L
Short break
H
L
H
H
H
L
CW
L
H
L
L
Short break
L
L
H
H
OFF(High impedance)
Stop
H/L
H/L
H/L
L
OFF(High impedance)
Standby
当马达的输入信号同时为L或者为H时,电机都会失去电流而停止运行,但两种停止方式稍有不同。同为L时,电机自由停止,工作在快速衰减模式;同为H时,电机瞬间制动,工作在慢速衰减模式,相当于电极短路。

下面是两种不同衰减模式的工作示意图:
[attach]2483[/attach]

按照逻辑表给出的控制方式,控制一个电机需要3个I/O口,控制2个电机就需要6个I/O口,相对于微控制板,I/O口节约是很重要的,在这次的升级中,我们加入了双施密特触发器逆变器(SN74LVC2G14),通过芯片的引脚转换,我们可以获得跟多的I/O口。
该双路施密特触发器是为1.65V至5.5V VCC工作而设计的。SN74LVC2G14器件包含两个反相器,并执行布尔函数Y=A。该器件用作两个独立的反相器,但由于施密特动作,对于正向(VT+)和负向(VT-)信号,它可能具有不同的输入阈值电平。
该器件完全用于使用Ioff进行部分降压应用。Ioff电路禁用输出,防止当电源关闭时损坏设备的电流回流。原理如下图:
[attach]2484[/attach][attach]2485[/attach]
[attach]2492[/attach]
Pin Functions:
PIN
I/O
DESCRIPTION
NAME
NO.
1A
1
I
Gate 1 logic signal
1Y
6
O
Gate 1 inverted signal
2A
3
I
Gate 2 logic signal
2Y
4
O
Gate 2 inverted signal
GND
2
Ground
VCC
5
Supply / Power Pin
*详细资料请查看芯片手册

由于TB6612电机驱动控制方向有2中情况高低(H,L)、低高(L,H),使用双施密特触发器逆变器(SN74LVC2G14),就可以使用一路信号控制两路信号,从而达到控制电机的正反转,而且可以将多余的2个端口分配到其它的模块上。实际运用中逻辑真值表:

DIRAD4
PWMAD5
DIRBD7
PWMBD6
AO1/AO2
H
H
H
H
正转
L
H
L
H
反转
X
L
X
L
刹车
X为任意电平

下面为一个简单的电机驱动函数,工作在慢速衰减模式,用来设置电机转动方向与转动速度:
[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: https://github.com/YFROBOT-TM/Yfrobot-Motor-Driver-Library

  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:
* http://arduino.cc/en/Tutorial/Tone
**********************************************************/
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种供电方式(推荐第一种):
[attach]2489[/attach]
第一种供电方式是电源从扩展板的VIN电源输入端子接入(如图方式)这时候电源通过扩展板的接线端子输入,并通过Vin连接到控制主板的Vin,主板再通过自身的5V稳压给控制单元件供电;此时输入的电源需要考虑3点:
1.电源输入电压不能大于电机电压;
2.电源输入电压不能大于单片机的工作电压;
3.电源输入电压不能大于驱动芯片的工作电压;
为确保各模块能正常工作,建议使用以下电压要求(特殊电机电压需要注意):
1.电源的输入电压在7.5-12V之间。
2.能够提供足够的功率。

[attach]2490[/attach]
第二种是电源从主板的DC电源座输入(如右图方式),请确保输入电源满足以下个要求:
1.电源电压须在7.5V-12V之间(如3S锂电);
2.能够提供足够功率;
注:当供电为12V时,我们不建议使用此方式作为供电模式,推荐使用第一种接线方式;电机为大功耗,输入电流较大,底部供电走线较长,影响整个板子的发热,排针引脚接触不牢固会导致供电不稳定。

[attach]2491[/attach]
第三种供电方式是主板和PM-R3分开单独供电
1.DC电源电压须在7.5V-12V之间;
2.接线端子电源根据电机参数选择合理的电压范围;
3.能够提供足够功率;
4.必须断开背部Vin引脚走线,使用尖锐物体划开,避免划到周围走线。






欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) Powered by Discuz! X3.1