串口直输型PID红外循迹模块/PID循迹

介绍了一款改进型PID红外循迹模块,通过内置STM8单片机实现了AD采集并可通过串口直接输出线性数据。用户仅需按下配置键即可轻松调整参数,适用于不同类型的机器人模型。

写在前面

 关于红外PID循迹模块的原理我之前写过一篇博客,大家没看过的话可以点此链接查看:PID循迹模块原理。此循迹模块可以根据传感器离黑线的距离输出线性值,但是配置起来比较麻烦,单片机必须带有AD采集功能,然后在代码中改配置参数比较麻烦。最近本人将之前的PID循迹模块更新了一下,在模块上加入了一个stm8的单片机,单片机通过AD采集数据后直接通过串口输出线性数据,大家只需按下按键即可配置循迹模块,再也不用手动改程序配置了。下面给大家介绍一下这款串口直输式PID红外循迹模块。

如果大家需要购买的话可以点此链接购买:串口直输式PID红外循迹模块
模块资料链接:
链接:https://pan.baidu.com/s/10IUagQXBHASeuqSnktP1tg
提取码:4tfa

1.模块特性

A.适合线宽范围广,黑线的宽度范围为1cm到4cm。
B.一键配置循迹模块参数,按下配置按键后从左到右移动模块即可配置完成。
C.循迹模块输出值根据模块距黑线距离从左到右,返回值从-1500到1500线性变化。
D.串口输出数据信息,单片机不需要AD采集功能即可通过此模块实现PID循迹,只要带串口的单片机都可以使用。
F.串口数据输出频率可通过串口设置,设置频率范围从10HZ到300HZ。
H.循迹模块适合多种车型,舵机转向车型和差速转向车型。

在这里插入图片描述

图1 循迹模块图示
### 关于五路红外循迹模块使用HAL库进行PID控制 在嵌入式开发领域,尤其是针对STM32系列微控制器的应用场景中,利用五路红外循迹模块实现路径跟踪是一项常见的任务。以下是关于如何通过HAL库结合PID控制来完成这一功能的具体说明。 #### 1. **硬件连接** 五路红外循迹模块通常由五个独立的红外传感器组成,这些传感器可以检测地面的颜色差异(通常是黑色线条与白色背景之间的对比)。每个传感器对应一个I/O端口,用于读取其状态。对于STM32F103C8T6或其他号的MCU,可以通过GPIO配置接收来自红外模块的状态信号[^1]。 #### 2. **软件初始化** 为了简化开发流程并提高代码可移植性,推荐使用ST官方提供的CubeMX工具生成基础框架,并启用HAL库支持。具体步骤如下: - 使用CubeMX配置定时器作为PWM出源,用于调节流电机的速度。 - 配置GPIO引脚为入模式,以便实时获取红外传感器的数据。 - 初始化UART串口通信接口(如果需要调试信息打印)。 ```c // 定义全局变量存储当前误差值和历史数据 float error = 0, last_error = 0; float integral = 0; void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 配置PA0~PA4为入模式,用于连接红外传感器 GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; // 不上拉不下拉 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` #### 3. **PID参数调整** PID控制器的核心在于三个关键系数:比例(P),积分(I),微分(D)[^2]。它们分别影响系统的响应速度、稳态精度以及抗干扰能力。实际应用中需根据实验结果不断优化这组数值。 假设目标位置位于中心线处,则偏差计算公式为: \[ \text{error} = (\text{sensors}[2]-\text{sensors}[0])+\frac{\text{sensors}[3]-\text{sensors}[1]}{2} \] 其中`sensors[]`数组保存各通道采集到的结果。 更新后的控制量表达式为: \[ u(t)=K_p e(t)+K_i \int_{0}^{t}e(\tau)d\tau+K_d \frac{de}{dt}(t) \] 将其离散化处理后得到递推关系式: \[ u[k]=u[k-1]+K_p(e[k]-e[k-1])+K_i T_s e[k]+K_d (e[k]-2e[k-1]+e[k-2])/T_s \] 这里\(Ts\)代表采样周期时间间隔。 #### 4. **主循环逻辑** 编写主函数部分,在每次迭代过程中执行以下操作序列: - 扫描全部五个红外探头获得即时反馈; - 计算新的偏移量并与旧记录比较得出变化趋势; - 应用上述提到的数学模求解最终修正指令发送至马达驱动电路; 示例代码片段展示如下所示: ```c #include "main.h" #define KP 1.2f /* Proportional gain */ #define KI 0.005f /* Integral gain */ #define KD 0.5f /* Derivative gain */ uint8_t sensors[5]; /* Function to read sensor values into 'sensors' array */ void ReadSensors() { for(int i=0;i<5;i++) { sensors[i] = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN(i)); } } /* Main loop function implementing PID control algorithm */ void ControlLoop() { float derivative, proportional, output; ReadSensors(); // Compute the current position error based on sensor readings. error = ((sensors[2]==0)-(sensors[0]==0))+(0.5*((sensors[3]==0)-(sensors[1]==0))); // Calculate terms of PID equation. proportional = KP * error; integral += KI * error; derivative = KD *(error-last_error); // Combine all three components together and limit maximum value. output = proportional + integral + derivative; if(output > MAX_OUTPUT){ output = MAX_OUTPUT; }else if(output < MIN_OUTPUT){ output = MIN_OUTPUT; } SetMotorSpeed(output); // Adjust motor speed according to computed correction factor. last_error = error; // Store previous error term before next iteration begins. } ``` 以上即是一个完整的基于HAL库的五路红外循迹小车PID控制系统设计方案概述及其配套程序清单摘要版本[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值