编码直流电机驱动器

来自Labplus盛思维基百科
Tangliufeng讨论 | 贡献2019年4月19日 (五) 14:11的版本 Arduino
跳转至: 导航搜索
blue:bit-编码直流电机

概述

Encoder DC Motor 提供两路的编码电机的驱动模块。提供三种工作模式:PWM模式、巡航模式和定位模式。

技术参数

  • 工作电压:VCC 3.3-5V
  • 两路的电机驱动
  • I2C数字信号输出
  • 模块尺寸:24x46x7.5mm

编码电机参数

引脚定义/接口说明

  • I2C接口
VCC 电源
SDA I2C数据
SCL I2C时钟
GND
  • 拨动开关,可选择模块的I2C地址,用于避免与其他I2C设备地址冲突。注意,重新选择I2C地址后,需要重新上电才能生效!
  • 编码电机接口


  • 触发信号的输入接口
VCC 电源
CH0 NA(未用)
CH1 触发信号输入
GND
  • 可调电位器:调节触发信号的触发电平

使用教程

  • 在程序编程中需要注意拨动开关地址和程序中的地址一致!
  • 驱动模式
    • pwm模式
    -通过调整PWM输出,调节电机的转速,-1023~1023
    • 巡航模式
    -在pwm模式基础上,增加了PID算法,可自动稳定在固定的转速。当外界的力量(比如电机的驱动电压变化,电机受到的阻力变大等)迫使转速改变时,程序会通过PWM调节,保持恒定输出。-1023~1023
    • 定位模式
    -可旋转指定位置,对控制步长有要求,较为有用。范围-1023~1023


Arduino

#include <Wire.h>
int reading = 0;
int reading0 = 0;
int reading1 = 0;
int reading2 = 0;
int reading3 = 0;
int reading4 = 0;
long trigger_begin;
long trigger_end; 
float  trigger_time;
void Get_Photogate_value(char address)  
{
  Wire.requestFrom(0x51, 5); 
  if (5 <= Wire.available())
  {
       reading0 = Wire.read();
       reading1 = Wire.read();
       reading2 = Wire.read();
       reading3 = Wire.read();
       reading4 = Wire.read();
       if(reading0==1)
       {
         trigger_begin = reading1*16777216  + reading2*65536 + reading3*256 + reading4;
         //Serial.println(1);
         //Serial.println(trigger_begin);
       } 
       if(reading0==0)
       {
         trigger_end = reading1*16777216  + reading2*65536 + reading3*256 + reading4;
         //Serial.println(0);
         //Serial.println(trigger_end);
         trigger_time = (float)(trigger_end - trigger_begin)/2041667;     //250000    2041667
         Serial.println(trigger_time);         
       }
  
}
void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
}

void loop()
{
  Get_Photogate_value(0x51);
}

掌控板

"""
由于编码电机模块存在此缺陷:当程序上电后,会有异常脉冲信号导致I2C总线挂机
临时解决方案:将SCL(P19)引脚上电后先拉低
"""
from machine import I2C,Pin 
p19=Pin(Pin.P19,Pin.OUT,value=0)
#

from mpython import *
import bluebit

motor = bluebit.EncoderMotor(0x10)

while True:
    print("PWM mode")
    motor.set_pwm(500,-500)         # pwm模式,M1 speed 500; M2 speed -500
    sleep(2)
    print("Cruise mode")
    motor.set_cruise(800,800)       # 巡航模式 M1,M2恒速800
    sleep(5)
    print("Position mode:500")
    motor.set_position(500,500)   # 定位模式 电机转到位置500
    sleep(3)
    print("Position mode:-100")
    motor.set_position(-100,-100) # 定位模式 电机转到位置-100
    sleep(2)

microbit

应用案例

FAQ

版本历史记录

Version Date 新增/删除/修复