3 Star 9 Fork 4

NEUQ upybot / Micropython pyboard-controller-robot PYB差速主控底盘

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
motor.py 2.71 KB
一键复制 编辑 原始数据 按行查看 历史
Irvingao 提交于 2021-04-25 21:37 . v3.4
from pyb import Pin, Timer
class Motor:
def __init__(self, pwm_range):
# 左轮A, 右轮B
self.io_p_A = Pin("Y5", Pin.OUT_PP) # 电机A的正极IO口
self.io_n_A = Pin("Y6", Pin.OUT_PP)
self.io_p_B = Pin("X11", Pin.OUT_PP) # 电机B的正极IO口
self.io_n_B = Pin("X12", Pin.OUT_PP)
self.io_PWM_A = Pin("Y3", Pin.OUT_PP) # 电机A、B的PWM输入IO口
self.io_PWM_B = Pin("Y4", Pin.OUT_PP)
timer_M = Timer(4, freq=1000) # PWM输出定时器
self.ch_PWM_A = timer_M.channel(3, Timer.PWM, pin=self.io_PWM_A)
self.ch_PWM_B = timer_M.channel(4, Timer.PWM, pin=self.io_PWM_B)
self.pwm_range = pwm_range # PWM范围
def motor_run(self, pwm_A, pwm_B):
'''
函数功能:电机驱动
入口参数:两个电机的PWM值(范围为pwm_range)
'''
self.ch_PWM_A.pulse_width_percent(100*(pwm_A/self.pwm_range)) # 给电机PWM占空比,默认pwm_range为100
self.ch_PWM_B.pulse_width_percent(100*(pwm_B/self.pwm_range))
def direction_control(self, pwm_A, pwm_B):
'''
函数功能:控制方向,并将PWM值转换为正值
入口参数:两个电机的PWM值(范围为pwm_range)
返回值 :两个电机的正PWM值
'''
def ahead_m_A():
self.io_p_A.high(); self.io_n_A.low();
# self.io_p_A.low(); self.io_n_A.high();
def back_m_A():
self.io_p_A.low(); self.io_n_A.high();
# self.io_p_A.high(); self.io_n_A.low();
def ahead_m_B():
self.io_p_B.high(); self.io_n_B.low();
# self.io_p_B.low(); self.io_n_B.high();
def back_m_B():
self.io_p_B.low(); self.io_n_B.high();
# self.io_p_B.high(); self.io_n_B.low();
def stop():
self.io_p_A.low(); self.io_n_A.low();
self.io_p_B.low(); self.io_n_B.low();
if (pwm_A > 0 and pwm_B >= 0) or (pwm_A >= 0 and pwm_B > 0): # 向前
ahead_m_A()
ahead_m_B()
# print("ahead")
elif (pwm_A < 0 and pwm_B <= 0) or (pwm_A <= 0 and pwm_B < 0): # 向后
back_m_A()
back_m_B()
# print("back")
elif pwm_A < 0 and pwm_B > 0: # 原地左转,只有当没有其他动作时才会原地左转
back_m_A()
ahead_m_B()
# print("left")
elif pwm_A > 0 and pwm_B < 0: # 原地右转,只有当没有其他动作时才会原地右转
ahead_m_A()
back_m_B()
# print("right")
else:
stop()
# print("stop")
pwm_A = abs(pwm_A)
pwm_B = abs(pwm_B)
return pwm_A, pwm_B
1
https://gitee.com/neuq-intelligent-desert-robot/pyb-controller_robot.git
git@gitee.com:neuq-intelligent-desert-robot/pyb-controller_robot.git
neuq-intelligent-desert-robot
pyb-controller_robot
Micropython pyboard-controller-robot PYB差速主控底盘
pyb-controller-v3.4

搜索帮助