求真杯程序设计指南

求真杯电控程序设计教程

(针对ESP32平台)


一、底盘控制

1. 电机初始化

核心任务:配置4个电机的12个控制引脚
关键要点

  • 每个电机需配置:

    • 2个参考电平引脚(方向控制)
    • 1个PWM引脚(速度控制)
  • 定时器分配原则:每个PWM通道需独立定时器

代码模板

void Chassis_Init() {
    // PWM引脚配置(示例:左前轮)
    pinMode(Left1_Pin, OUTPUT);
    ledcAttachPin(Left1_Pin, Left1_Channel);
    ledcSetup(Left1_Channel, 50, 10); // 50Hz频率,1024级精度

    // 参考电平引脚配置(示例:左前轮)
    pinMode(Left1_ref1, OUTPUT);
    pinMode(Left1_ref2, OUTPUT);
    // 其他3个电机重复上述配置...
}

注意事项
⚠️ 定时器通道不可重复使用
⚠️ 推荐引脚分配表:

硬件名称PWM引脚参考电平引脚1参考电平引脚2
左前轮电机GPIO 33GPIO 25GPIO 26
左后轮电机GPIO 14GPIO 12GPIO 13
右前轮电机GPIO 21GPIO 19GPIO 18
右后轮电机GPIO 16GPIO 2GPIO 4
舵机GPIO 5

2. 电机运动控制

控制原理

  • 方向控制:通过参考电平组合实现
  • 速度控制:PWM占空比(0-1024)

方向控制逻辑表

运动方向参考电平引脚1参考电平引脚1
正转HIGHLOW
反转LOWHIGH

优化后的控制函数

// 通用电机方向设置函数
void SetMotorDir(int refPin1, int refPin2, bool direction) {
    digitalWrite(refPin1, direction ? HIGH : LOW);
    digitalWrite(refPin2, direction ? LOW : HIGH);
}

// 示例:设置左前轮正转
SetMotorDir(Left1_ref1, Left1_ref2, FORWARD);

运动模式速查表
针对O型麦轮装法(与地面接触面棍子的形状呈现O型)

方向指令左前轮左后轮右前轮右后轮
前进(1)正转正转正转正转
后退(2)反转反转反转反转
左平移(3)反转正转反转正转
右平移(4)正转反转正转反转
左上平移(5)停止正转正转停止
左下平移(6)反转停止停止反转

3. 麦轮解算(进阶)

实现步骤

  1. 建立运动学模型
  2. 将速度矢量分解为各轮分量
  3. 编写解算函数:

    void MecanumMove(float vx, float vy, float omega) {
     // 各轮速度计算(示例公式)
     float LF = vx + vy + omega;
     // 其他三个轮计算同理...
     // 设置实际PWM输出
    }

二、舵机控制

1. 舵机初始化

接线示意图

[VCC]----[舵机红线]  
[GND]----[舵机棕线]  
[PWM]----[舵机黄线]

角度-PWM换算公式

PWM值 = (0.025 + (角度/180)*0.1) * 1024;

代码优化

void SetServoAngle(uint8_t angle) {
    angle = constrain(angle, 0, 180); // 限制角度范围
    uint16_t pwm = 25.6 + (angle * 5.12); // 简化计算公式
    ledcWrite(Servo_Channel, pwm);
}

三、蓝牙控制

1. 通信协议解析

由于手机蓝牙app的数据格式开头和结尾数据为固定的,所以esp32接收数据时,需要设置一个数组用来接收手机发送的数据。下面是以我的程序为例,大家按照自己的想法设计。
数据包结构

起始位X轴Y轴角度L键R键校验和结束位
0xA51111110x5A

校验算法

checksum = (X + Y + Angle + L + R) & 0xFF;
评论区
头像