gada888 发表于 2019-4-29 21:01:18

用ESP32和MicroPython来控制电机

本帖最后由 gada888 于 2019-4-29 21:05 编辑

MicroPython是Python的精简版,但保留了python的基本特色。是学习python的工具之一。本项目是DC 电机正反转各一次。烧录软件用的是uPyCraft。软件用法见本人另一个帖子使用ESP32 和 micropython点亮RGB LED

本案例用了ESP32 和 L298N电机驱动。以及一个直流电机。6V的。电机正负极直接要连一个104电容的。本人偷了个懒,没用电容。

这是连线图。IO13连ENA。IO12连INT1.IO14连INT2.ESP32是用USB线连了电脑。图上没画USB线。需要注意。电池用的DFRobot的7.4V锂电池。

图上不是两节电池,是4节1.5V电池。

一共2段程序,一个是电机驱动库,另一个是电机主程序。

# made by gada888

from dcmotor import DCMotor
from machine import Pin, PWM
from time import sleep

frequency = 15000

pin1 = Pin(12, Pin.OUT)
pin2 = Pin(14, Pin.OUT)
enable = PWM(Pin(13), frequency)

dc_motor = DCMotor(pin1, pin2, enable)

dc_motor.forward(50)
sleep(2)
dc_motor.stop()
sleep(1)
dc_motor.backwards(100)
sleep(2)
dc_motor.forward(10)
sleep(5)
dc_motor.stop()


# made by gada888

class DCMotor:

def __init__(self, pin1, pin2, enable_pin, min_duty=750, max_duty=1023):
    self.pin1 = pin1
    self.pin2= pin2
    self.enable_pin = enable_pin
    self.min_duty = min_duty
    self.max_duty = max_duty

def forward(self, speed):
    self.speed = speed
    self.enable_pin.duty(self.duty_cycle(self.speed))
    self.pin1.value(1)
    self.pin2.value(0)

def backwards(self, speed):
    self.speed = speed
    self.enable_pin.duty(self.duty_cycle(self.speed))
    self.pin1.value(0)
    self.pin2.value(1)

def stop(self):
    self.enable_pin.duty(0)
    self.pin1.value(0)
    self.pin2.value(0)
      
def duty_cycle(self, speed):
    if self.speed <= 0 or self.speed > 100:
      duty_cycle = 0
    else:
      duty_cycle = int (self.min_duty + (self.max_duty - self.min_duty)*((self.speed - 1)/(100-1)))
    return duty_cycle


页: [1]
查看完整版本: 用ESP32和MicroPython来控制电机