麦昆上有两个减速电机,用来驱动小车的轮子,可以正反转和调速。电机是通过一个I2C转PWM芯片后,在由75V18驱动的。因为DF没有提供相关的资料,不知道是什么芯片。不过也没有关系,通过makecode程序,我们可以很快的就知道使用方法。
可以找到这样一个函数:
- //% weight=90
- //% blockId=motor_MotorRun block="Motor|%index|dir|%Dir|speed|%speed"
- //% speed.min=0 speed.max=255
- //% index.fieldEditor="gridpicker" index.fieldOptions.columns=2
- //% direction.fieldEditor="gridpicker" direction.fieldOptions.columns=2
- export function MotorRun(index: aMotors, direction:Dir, speed: number): void {
- let buf = pins.createBuffer(3);
- if (index==0){
- buf[0]=0x00;
- }
- if (index==1){
- buf[0]=0x02;
- }
- buf[1]=direction;
- buf[2]=speed;
- pins.i2cWriteBuffer(0x10, buf);
- }
复制代码
这就是电机的驱动函数,从这里可以看出,I2C芯片的地址是0x10,发送的命令是3个字节:第一个字节代表了通道,0代表电机1,2代表电机2;第二个字节是方向,应该就是正反转了;第三个字节是速度,也就是PWM的占空比,范围是0-255。
知道了驱动方法,我们就可以编写python驱动函数:
- from microbit import *
- def moto1(speed=200):
- buf = bytearray(3)
- buf[0] = 0
- buf[1] = [1, 0][speed>0]
- buf[2] = abs(speed)%256
- if buf[2]>0:buf[2]=max(buf[2], 20)
- i2c.write(16, buf)
- def moto2(speed=200):
- buf = bytearray(3)
- buf[0] = 2
- buf[1] = [1, 0][speed>0]
- buf[2] = abs(speed)%256
- if buf[2]>0:buf[2]=max(buf[2], 20)
- i2c.write(16, buf)
复制代码
moto1函数中,只使用了一个参数speed,范围是-255到+255,正负号代表了正反转。0代表电机停止,不等于0代表电机转动。因为实测速度参数小于20时,电机可能无法启动,因此设置了最小速度为参数20。
此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处