Micropython 飞控 驱动 4.无刷电机

一、介绍
无刷电机是通过电调进行控制的,通过对PWM的调整控制电机转速
二、代码

# 控制电机函数

from pyb import Timer,Pin,ADC
import time

class Motor():
    # 电机pwm初始化
    def __init__(self,isInit=False):
        timerMotor_1 = Timer(3, freq=50)
        timerMotor_2 = Timer(4, freq=50)
        self.motor1 = timerMotor_1.channel(1, Timer.PWM, pin=Pin('B4'))
        self.motor2 = timerMotor_1.channel(2, Timer.PWM, pin=Pin('B5'))
        self.motor3 = timerMotor_2.channel(3, Timer.PWM, pin=Pin('B8'))
        self.motor4 = timerMotor_2.channel(4, Timer.PWM, pin=Pin('B9'))
        self.motors = [self.motor1,self.motor2,self.motor3,self.motor4]
        # self.x = ADC(Pin('X2'))
        # self.btn_stop = Pin('X4',Pin.IN)
        if not isInit:
            for moto in self.motors:
                self.MotoSet(moto)
            time.sleep(1)
        self.MotosPwmUpdate([0,0,0,0])
    # 电机初始化 设置最高油门和最低油门
    def MotoSet(self,moto):
        moto.pulse_width_percent(10)
        time.sleep(2)
        moto.pulse_width_percent(5)

    # pwm 更新函数 1
    # 可以用于调试单个电机
    def MotoPwmUpdate(self,n,pwm):
        if pwm < 0 or pwm > 100:
            return None
        self.motors[n].pulse_width_percent(5 + pwm*5/100)

    # pwm 更新函数 2
    # 用于实际飞行
    def MotosPwmUpdate(self,pwms):
        
        for moto,pwm in zip(self.motors,pwms):
            moto.pulse_width_percent(5 + pwm*5/100)

    # 电机停止转动
    # 用于紧急制动和测试
    def MotoStop(self):
        for moto in self.motors:
            moto.pulse_width_percent(5)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 伺服电机主要适用于那些需要角度不断变化并可以保持的控制系统,我们常见的的机械臂、多足机器人、摄像头云台等都可以用伺...
    vctea阅读 6,427评论 1 18
  • 直流电机是机器人行走机构的理想选择之一,我们通常使用直流电机来驱动机器人行走。在第5章和第6章您已经了解到如何用树...
    vctea阅读 13,756评论 8 28
  • 小时候,一家人每年最期盼的日子,就是过年的时候。每到过年,外地生活的儿女们,是一定要背着几大包年货,携家带口...
    江心慕白阅读 507评论 2 10
  • Hello World ! 英文字体很漂亮~ I like it ! See You ~ こにちは! 愛してる 残...
    9d072aea39ea阅读 173评论 0 0
  • 今天做一个需求:从顶部弹出一个视图,一段延时后该视图自动消失或者点击该视图使其消失。于是打算从顶部弹出一个butt...
    白菜松阅读 248评论 0 0