编码直流电机驱动器
来自Labplus盛思维基百科
Tangliufeng(讨论 | 贡献)2019年4月19日 (五) 10:59的版本
概述
Encoder DC Motor 提供两路的编码电机的驱动模块。提供三种工作模式:PWM模式、巡航模式和定位模式。
技术参数
- 工作电压:VCC 3.3-5V
- 两路的电机驱动
- I2C数字信号输出
- 模块尺寸:24x46x7.5mm
编码电机参数
引脚定义/接口说明
- I2C接口
VCC | 电源 |
SDA | I2C数据 |
SCL | I2C时钟 |
GND | 地 |
|
- 编码电机接口
- 触发信号的输入接口
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);
}
掌控板
- GitHub:bluebit for mPython library
- bluebit for mPython library API: https://mpython-lib.readthedocs.io/zh/master/bluebit/index.html
"""
由于编码电机模块存在此缺陷:当程序上电后,会有异常脉冲信号导致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 | 新增/删除/修复 |
---|---|---|