2768|1

1万

帖子

25

TA的资源

版主

楼主
 

【麦昆试用】python编程(5) [复制链接]

 
麦昆上有两个减速电机,用来驱动小车的轮子,可以正反转和调速。电机是通过一个I2C转PWM芯片后,在由75V18驱动的。因为DF没有提供相关的资料,不知道是什么芯片。不过也没有关系,通过makecode程序,我们可以很快的就知道使用方法。


可以找到这样一个函数:

  1.     //% weight=90
  2.     //% blockId=motor_MotorRun block="Motor|%index|dir|%Dir|speed|%speed"
  3.     //% speed.min=0 speed.max=255
  4.     //% index.fieldEditor="gridpicker" index.fieldOptions.columns=2
  5.     //% direction.fieldEditor="gridpicker" direction.fieldOptions.columns=2
  6.     export function MotorRun(index: aMotors, direction:Dir, speed: number): void {
  7.         let buf = pins.createBuffer(3);
  8.         if (index==0){
  9.             buf[0]=0x00;
  10.         }
  11.         if (index==1){
  12.             buf[0]=0x02;
  13.         }
  14.         buf[1]=direction;
  15.         buf[2]=speed;
  16.         pins.i2cWriteBuffer(0x10, buf);
  17.     }
复制代码


这就是电机的驱动函数,从这里可以看出,I2C芯片的地址是0x10,发送的命令是3个字节:第一个字节代表了通道,0代表电机1,2代表电机2;第二个字节是方向,应该就是正反转了;第三个字节是速度,也就是PWM的占空比,范围是0-255。
知道了驱动方法,我们就可以编写python驱动函数:

  1. from microbit import *

  2. def moto1(speed=200):
  3.         buf = bytearray(3)
  4.         buf[0] = 0
  5.         buf[1] = [1, 0][speed>0]
  6.         buf[2] = abs(speed)%256
  7.         if buf[2]>0:buf[2]=max(buf[2], 20)
  8.         i2c.write(16, buf)

  9. def moto2(speed=200):
  10.         buf = bytearray(3)
  11.         buf[0] = 2
  12.         buf[1] = [1, 0][speed>0]
  13.         buf[2] = abs(speed)%256
  14.         if buf[2]>0:buf[2]=max(buf[2], 20)
  15.         i2c.write(16, buf)
复制代码


moto1函数中,只使用了一个参数speed,范围是-255到+255,正负号代表了正反转。0代表电机停止,不等于0代表电机转动。因为实测速度参数小于20时,电机可能无法启动,因此设置了最小速度为参数20。


此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处




点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

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

  1.     //% weight=90
  2.     //% blockId=servo_ServoRun block="Servo|%index|angle|%angle"
  3.     //% angle.min=0 angle.max=180
  4.     //% index.fieldEditor="gridpicker" index.fieldOptions.columns=2
  5.     export function ServoRun(index: aServos, angle: number): void {
  6.         let buf = pins.createBuffer(2);
  7.         if (index == 0) {
  8.             buf[0] = 0x14;
  9.         }
  10.         if (index == 1) {
  11.             buf[0] = 0x15;
  12.         }
  13.         buf[1] = angle;
  14.         pins.i2cWriteBuffer(0x10, buf);
  15.     }
复制代码



暂时还没有测试舵机功能,等有空在补上。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表