【ESP32 Arduino平衡小车制作】(四) 直流电机PID控制

一、PID算法

PID 是 结合Proportional(比例)、 Integral(积分)、Differential(微分)三种环节于一体的闭环控制算法,它是目前为止在连续控制系统中计数最为成熟的一种控制算法;
PID 控制的实质是对目标值和实际值误差进行比例、积分、微分运算后的结果用来作用在输出上。
连续控制的理想 PID 控制规律

u ( t ) u(t) u(t) = K   p   ( e ( t ) + 1 T ∫ e ( t ) d t + T   d   d e ( t ) d t K~p~(e(t) + \frac 1T \int_{}e(t)dt + {T~d~}\frac {de(t)}{dt} K p (e(t)+T1e(t)dt+T d dtde(t)

• Kp——比例增益, Kp 与比例度成倒数关系
• Tt——积分时间常数
• TD——微分时间常数
• u(t)——PID 控制器的输出信号
• e(t)——给定值 r(t)与测量值误差

1-1 积分分离pid算法

控制系统在大幅度改变给定值时,系统会出现较大的偏差,不可能在短时间内消除,经过PID算法中积分项的累积后,可能会使控制作用u(t)很大,控制量达到了饱和

·积分饱和使控制量不能根据被控量的误差,按控制算法进行调节,从而影响控制效果,其中最明显的结果是:系统超调增大,响应延迟。

积分分离算法的思想是在e(kt)较大时,取消积分作用;而在e(k)较小时将积分作用投入。

在这里插入图片描述

1-2 带有死区的pid算法

在要求控制作用少变动的场合,常采用带死区的PID控制,实际上是一个非线性系统。

使用ESP32Arduino控制小车转向,可参考相关项目的实现思路。 在Arduino - ESP32智能车项目中,主要通过特定硬件组件和核心硬件连接来实现基础控制,进而为转向控制提供支持。硬件方面,主控板采用ESP32 DevKit,电机驱动使用L298N,直流电机为TT马达,超声波模块为HC - SR04等。电机驱动L298N是双路直流电机驱动且支持PWM调速,这为控制小车的转向提供了可能,通过调整不同电机的转速和方向,就能实现小车的转向。其控制的实现依赖于ESP32强大的PWM电机控制技术,利用PWM信号可以精确控制电机的转速,进而控制小车的转向动作。同时,超声波传感器可以进行环境感知,为智能避障和路径规划提供数据,这在小车转向决策中起到重要作用,当检测到障碍物时,小车可以根据检测结果调整转向以避开障碍物,实现智能转向。 另外,【花雕学编程】Arduino ESP32 SPP项目中提到控制两个舵机的转向、速度与停止的案例,虽未直接针对小车转向,但多舵机同步控制、精确速度调节等特点和方法可提供一定的借鉴。在小车转向控制中,可以类比舵机的控制方式,通过合理配置PWM信号来调节电机的转速和方向,实现小车的转向控制。并且,在实施过程中,需要关注电源管理、PWM信号配置和蓝牙连接的稳定性等问题,以确保系统的高效性与可靠性,这对于小车转向控制的稳定性也非常重要。 在基于arduinoesp32的机械臂小车项目中,模块的供电和连接方式需要注意,合理的供电是保证小车正常运行和转向控制的基础。同时,控制小车的代码展示虽未详细给出,但暗示了通过代码可以实现对小车的各种控制,包括转向控制。 而【ESP32 Arduino平衡小车制作】项目中提到的PID控制算法,也可应用于小车转向控制PID控制可以对电机的转速进行精确调节,使小车能够更稳定、准确地实现转向。可以根据小车的实际转向需求,对PID参数进行调整和优化,从而达到更好的转向控制效果。 以下是一个简单的伪代码示例,展示如何使用ESP32Arduino控制小车转向: ```cpp // 定义电机控制引脚 const int motorLeftForward = 2; const int motorLeftBackward = 3; const int motorRightForward = 4; const int motorRightBackward = 5; void setup() { // 设置电机控制引脚为输出模式 pinMode(motorLeftForward, OUTPUT); pinMode(motorLeftBackward, OUTPUT); pinMode(motorRightForward, OUTPUT); pinMode(motorRightBackward, OUTPUT); } void loop() { // 小车前进 forward(); delay(2000); // 小车左转 turnLeft(); delay(1000); // 小车右转 turnRight(); delay(1000); // 小车后退 backward(); delay(2000); // 小车停止 stop(); delay(2000); } void forward() { digitalWrite(motorLeftForward, HIGH); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, HIGH); digitalWrite(motorRightBackward, LOW); } void turnLeft() { digitalWrite(motorLeftForward, LOW); digitalWrite(motorLeftBackward, HIGH); digitalWrite(motorRightForward, HIGH); digitalWrite(motorRightBackward, LOW); } void turnRight() { digitalWrite(motorLeftForward, HIGH); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, HIGH); } void backward() { digitalWrite(motorLeftForward, LOW); digitalWrite(motorLeftBackward, HIGH); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, HIGH); } void stop() { digitalWrite(motorLeftForward, LOW); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, LOW); } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值