一、目的
这一节我们来学习如何使用合宙ESP32 C3,连接PS2双轴按键摇杆控制L9110电机驱动风扇模块的实验。
二、环境
ESP32 C3开发板(MicroPython v1.19.1 on 2022-06-18)+ PS2双轴按键摇杆+ L9110电机驱动风扇模块 + 几根杜邦线 + Win10商业版
ESP32 C3和各个模块接线方法:
三、实验代码
examples.py
from machine import Pin,PWM,ADC
import time
# 定义摇杆的vrx引脚
vrx = ADC(Pin(4))
# 定义摇杆的vry引脚
vry = ADC(Pin(5))
# 定义摇杆的vrx、vry的属性
vrx.atten(ADC.ATTN_11DB) # 衰减比为3.3V
vrx.width(ADC.WIDTH_12BIT) # 宽度为12位,对应的范围0-4095
vry.atten(ADC.ATTN_11DB) #衰减比为3.3V
vry.width(ADC.WIDTH_12BIT) # 宽度为12位,对应的范围0-4095
# 打印出摇杆x,y轴的数值
print("x: %d, y: %d"%(vrx.read(),vry.read()))
#L9110直流电机的PWM范围0-1023
moa = PWM(Pin(2),duty=(0),freq=(1000)) # 对应模块的INA引脚
mob = PWM(Pin(8),duty=(0),freq=(1000)) # 对应模块的INB引脚
# 定义摇杆的按键
key = Pin(3,Pin.IN,Pin.PULL_UP)
# 定义一个LED灯,当摇杆按键按下时反转led状态
led = Pin(12,Pin.OUT)
# 定义L9110电机驱动风扇模块函数
def motor():
if key.value() == 0:
time.sleep(0.020)
if key.value() == 0: # 如果摇杆按键值为0
led.value(not led.value()) # 反转led灯状态
# 正转
moa.duty(0)
mob.duty(1023)
while not key.value():
pass
try:
# 获取摇杆vrx和vry的值
x = vrx.read()
y = vry.read()
# L9110模块的PWM占空比
moa.duty(int((x/4095)*1023))
mob.duty(int((y/4095)*1023))
except:
moa.deinit()
mob.deinit()
def main():
# 正转
moa.duty(0)
mob.duty(1023)
time.sleep(3)
# 反转
moa.duty(1023)
mob.duty(0)
time.sleep(3)
# 刹车
moa.duty(0)
mob.duty(0)
# 高阻态
moa.duty(1023)
mob.duty(1023)
while True:
motor()
if __name__ == "__main__":
main()
四、实验效果
运行上述代码后,L9110马达会正转3秒,倒转3秒。然后使用摇杆向上下左右推动摇杆,可以控制马达正反转。按下摇杆的按键,LED灯亮,马达最大转速,松开按键马达停止转动。
五、各模块获取
1,L9110电机驱动风扇模块
资料网盘下载:https://pan.baidu.com/s/1PIdrVOh2WoYYsMYs5F3chQ
2,双轴按键摇杆
3,L9110s桥两路直流电机步进电机驱动板智能小车控制器模块
如果你想控制多个马达可以使用这个模块,只需要在接两个小马达就可以了:
资料下载:http://pan.baidu.com/s/1qWADjha
4,小马达发电3V有刷DC6V直流电机