摘要:本文介绍如何编写平衡车控制类以及确定驱动死区
从本篇文章开始,将介绍平衡车软件的开发及调试方法。平衡车开发中,最关键的就是要让小车能够稳定的站立起来,这是最基础也是最核心的一步,除了软件开发工作,这一步的关键就是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 |