无线电轨智能车校内赛 | 无线电轨车模电机运动实验

无线电轨车模电机运动实验

01 线电轨


一、问题/目标

  无线电轨车模运动动能来自于车模两个后轮电机,  它们在电机驱动电路板的作用下, 将来自法拉电容, 或者锂电池中的电能转换成车模运动动能。  这两个电机在安装的时候与电机驱动板后面两个蓝色插座相连, 请注意, 电机两个接线是由极性的, 它们左右调换会改变电机转动方向。  在测试前, 请先将锂电池接入电路。  还有一个地方请大家注意, 电机驱动板左上方有一个控制开关,   它可以打开或者关断驱动板输出的电压信号。  下面就让我们看一下相应的测试过程。

GM1690680694_1280_720.MPG|_-7

二、基本原理

  下面,我们看一下在开发资料中给定的电机测试示例程序。 这个程序除了完成对电机控制之外, 还应用了主控板上的 LED, 按键, 以及 OLED 显示屏的功能, 所以整体上比较复杂。  在程序开始部分,  输入 MicroPytion 内部的 Pin, PWM, SoftSPI, 以及 time 软件包。  另外还输入了 Motor Servo 以及 OLED096 两个外部模块。 这两个软件需要在一开始拷贝到 ESP32内部文件区中。  这里构造了 LED 对象, 控制电路板上面 D1 对应的 LED闪烁, 显示程序运行状态。  下面两个构建按键对象, 读取电路板上右侧两个按键。   这里创建两个电极驱动 PWM 对象,  这个对象应用到模块文件 Motor Servo 中 定义的类。 详细功能大家可以参见 该文件内部的程序。  接下来这句话定义了一个全局变量 duty, 它用于保存控制电机 PWM 的占空比数值。 这个值越大, 电极驱动电压就越高, 速度就越快。  特别是后面给出了 duty 取值范围, 是在 -1023 到 1023 之间。 1023 对应的 PWM 为 100% 。 另外, 这个数值 的正负决定了电机运行的方向。 这是程序的前面初始化部分。

GM1690681472_1280_720.MPG|_-11
  接下来, 程序定义了 OLED 液晶屏部分功能,  这部分需要应用到 OLED096 模块文件中的功能。 这部分程序相对复杂, 大家可以在未来应用到的时候再进行研究。 使用 两个电极对象 motor1,2 的函数 Crol 来设置控制板输出的 PWM 占空比。 通过电机驱动板功率放大之后, 决定两个电极运行速度。   接下来是键盘处理函数,  在这个函数中,  实现对两个控制板按键动作的处理。   根据按键动作改变 全局变量 duty 的数值, 用于改变电机PWM的占空比。  后面程序分别处理两个按键动作, 处理的逻辑基本相同,  当按钮按下之后, 对应的IO口电平为低电平。 按键对象 k0 通过 value 函数读取到的数值对应的 0,  此时 增加 duty 数值,  如果该数值大于 1024, 就将其修改成 1024 。  这一段程序是等待按键抬起, 然后进行下面的程序。  第二个按键处理过程与前面相同, 只是把占空比修改进行减小。 并保持duty 不小于 负的 1024。  最后看一下程序的循环主题,  由 while 组成了无线循环过程。   循环任务依次为 刷新 OLED屏幕,  处理按键,  输出电机 PWM 占空比,  duty 是全局变量。  最后是改变电路板上 LED 状态。  因此程序运行后, 电路板上 LED会周期闪烁。

GM1690682013_1280_720.MPG|_-25

1、电机测试软件

import LQ_Motor_Servo
import time
from machine import Pin,PWM,SoftSPI
from LQ_OLED096 import OLED096_SPI

LED0 = Pin(2,Pin.OUT)     #创建LED对象

k0 = Pin(25, Pin.IN)     # create input pin on GPIO25
k1 = Pin(26, Pin.IN)     # create input pin on GPIO26

motor1 = LQ_Motor_Servo.Motor(4,16)  #创建电机对象1
motor2 = LQ_Motor_Servo.Motor(17,5)  #创建电机对象2
duty = 0  # set duty cycle ,范围0-1023 ,1023时为满占空比,512为50%

spi=SoftSPI(baudrate=100000,polarity=1,phase=0,sck=Pin(18),mosi=Pin(23),miso=Pin(19)) #创建软件模拟spi
dc=Pin(15,Pin.OUT)
res=Pin(13,Pin.OUT)
cs=Pin(19,Pin.OUT)
oled=OLED096_SPI(128,64,spi,dc,res,cs)  #创建oled对象

motor1.Crol(duty)
motor2.Crol(duty)

def Show():   #显示
    txt = ""
    oled.fill(0)   #清屏
    txt = ("    Motor_Test    ")
    oled.text(txt, 6*0, 8*0 ,1)
    txt = ("duty:    %d  ") % (duty)
    oled.text(txt, 6*0, 8*2 ,1)
    oled.show()

def Key():    #按键扫描实现函数
    global duty
    if k0.value() is 0:
        duty = duty+50
        if duty > 1024:    #限幅
            duty = 1024
        while (k0.value() is 0):
            time.sleep(0.001)
            
    if k1.value() is 0:
        duty = duty-50
        if duty < -1024:   #限幅
            duty = -1024
        while (k1.value() is 0):
            time.sleep(0.001)

while True:
    Show()
    Key()
    motor1.Crol(duty)
    motor2.Crol(duty)
    if LED0.value() is 0:
        LED0.value(1)
    else:
        LED0.value(0)

三、应用举例

  使用 TypeC USB 电缆将 ESP32主控板接入调试计算机。  请大家注意, 先将电机驱动板上的控制开关打到 关闭位置。

GM1690682598_1280_720.MPG|_-2

  打开 Thonny软件, 下面显示已经与 ESP32 连接上了。  先通过菜单 File 中的打开命令, 选择 MicroPython device,   查看 ESP32 内部文件区是否存在所需要的两个外部模块文件,  这两个文件分别是 Motor Servo 以及 OLED096,  它们分别用于控制电机以及电路板上的 OLED 显示屏。  然后在新建一个程序文件, 将示例程序 Test Motor 拷贝到编辑框中,  点击运行便可以查看程序运行结果了。

GM1690682499_1280_720.MPG|_-7

  程序运行后, 大家可以看到 OLED液晶屏上显示 duty 为 0, 这是它初始的数值。  电路板上 D1 对应的 LED在快速闪烁。 这表明程序运行正常。  按动电路板右侧两个按钮, 可以改变 屏幕上 duty的数值, 上面按钮是增加 duty 数值, 下面是减少 duty 数值。 数值的正负将来决定电机旋转的方向。

GM1690683349_1280_720.MPG|_-3

  打开电机驱动板有上面的开关, 马上可以听到两个电极发出的蜂鸣声音。 抬起车模后轮, 可以看到后轮在旋转。  可以通过按键改变 驱动电机 PWM对应的 占空比, 观察到电机旋转速度和方向都在随之改变。  之所以电机发出蜂鸣声, 这是因为空心杯电机线圈在 PWM 脉冲作用下产生的震动。 这个频率为 5kHz, 落在人的听觉范围之内。  至此, 大家测试了无线车模后轮电机的功能。

GM1690683576_1280_720.MPG|_-4

四、练习/实验

  本文介绍了 无线电轨车模驱动电机实验,  通过这个实验, 可以检测车模主板和电机驱动板的功能, 以及电机传动机械部分是否完好。 最后请注意, 不要让车模轮胎堵转的情况持续太长时间,  否则容易烧坏驱动电机。

GM1690684209_1280_720.MPG|_-3

02 座资料


一、讲座视频

无线电轨车模电机运动实验

二、讲座资料


■ 相关文献链接:

猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/132003659