dcexpert 发表于 2019-5-20 13:06

【麦昆试用】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>

dcexpert 发表于 2019-5-20 13:08

同样还可以找到一个舵机的驱动函数。

    //% 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]
查看完整版本: 【麦昆试用】python编程(5)