一起玩儿平衡车(ESP32)——06 平衡车控制类的编写及驱动死区的确定

摘要:本文介绍如何编写平衡车控制类以及确定驱动死区

从本篇文章开始,将介绍平衡车软件的开发及调试方法。平衡车开发中,最关键的就是要让小车能够稳定的站立起来,这是最基础也是最核心的一步,除了软件开发工作,这一步的关键就是PID参数的调节。

下面就来逐步的实现,让平衡车先站立起来的目标。为了实现这个目标的软件结构并不复杂,大致流程如下图所示:

系统初始化部分包括了对蓝牙串口(主要用于PID调试和反馈小车状态)、LEDC控制器初始化和姿态控制器MPU6050初始化这三个部分。

平衡车处理器进入正常运行阶段之后,就是重复在做一件事情,根据姿态控制器的姿态信息来改变对小车电机的控制,通过这种不停的动态调整,来达到一种动态平衡的状态,使平衡车保持在平衡位置附近。

接下来就来实现一个小车类,这个类定义了与驱动小车电机相关的各种配置信息和方法。先来看一下类的声明,以及在头文件中定义的一些配置信息。如下所示:

/*********************************

    car.h

    by 一起玩儿科技   2024/02/23

 ********************************/

#pragma once

#ifndef _YQWKJ_BALANCE_CAR_

#define _YQWKJ_BALANCE_CAR_

#include <Arduino.h>

// 默认控制引脚

#define R_IN1 25

#define R_IN2 27

#define L_IN1 32

#define L_IN2 17

// PWM通道占用

#define L_CH1 0

#define L_CH2 1

#define R_CH1 2

#define R_CH2 3

//左右轮死区pwm值

#define LEFT_MOTOR_PWM_OFFSET 41

#define RIGHT_MOTOR_PWM_OFFSET 41

class Car {

public:

  // 构造函数

  Car();

  // 初始化方法

  void begin();

  void motor(int leftPWM, int rightPWM);

private:

  // 私有属性

  // 两轮的驱动引脚

  uint8_t l1 = L_IN1, l2 = L_IN2, r1 = R_IN1, r2 = R_IN2;

  // 处理偏移量

  int calcPwmOffset(int pwm, int 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起玩儿科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值