【麦昆试用】python编程(5)
<div class='showpostmsg'>麦昆上有两个减速电机,用来驱动小车的轮子,可以正反转和调速。电机是通过一个I2C转PWM芯片后,在由75V18驱动的。因为DF没有提供相关的资料,不知道是什么芯片。不过也没有关系,通过makecode程序,我们可以很快的就知道使用方法。[*]首先打开麦昆的makecode扩展程序网址:https://github.com/DFRobot/pxt-maqueen
[*]然后打开里面的maqueen.ts文件https://github.com/DFRobot/pxt-maqueen/blob/master/maqueen.ts
可以找到这样一个函数:
//% 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=0x00;
}
if (index==1){
buf=0x02;
}
buf=direction;
buf=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
buf =
buf = abs(speed)%256
if buf>0:buf=max(buf, 20)
i2c.write(16, buf)
def moto2(speed=200):
buf = bytearray(3)
buf = 2
buf =
buf = abs(speed)%256
if buf>0:buf=max(buf, 20)
i2c.write(16, buf)
moto1函数中,只使用了一个参数speed,范围是-255到+255,正负号代表了正反转。0代表电机停止,不等于0代表电机转动。因为实测速度参数小于20时,电机可能无法启动,因此设置了最小速度为参数20。
此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 同样还可以找到一个舵机的驱动函数。
//% weight=90
//% blockId=servo_ServoRun block="Servo|%index|angle|%angle"
//% angle.min=0 angle.max=180
//% index.fieldEditor="gridpicker" index.fieldOptions.columns=2
export function ServoRun(index: aServos, angle: number): void {
let buf = pins.createBuffer(2);
if (index == 0) {
buf = 0x14;
}
if (index == 1) {
buf = 0x15;
}
buf = angle;
pins.i2cWriteBuffer(0x10, buf);
}
暂时还没有测试舵机功能,等有空在补上。
页:
[1]