基于FreeRTOS两轮平衡小车的设计与实现
2024年1 月
作者:颜孙炜
目 录
摘 要
本文报告了基于FreeRTOS的两轮平衡小车的设计与实现。该小车使用STM32F407ZET6微控制器、MPU6050传感器和L298N电机驱动器。通过实时操作系统FreeRTOS,实现了小车的稳定运动和自动平衡控制。硬件方面,STM32F407ZET6提供了强大的处理能力,MPU6050传感器监测小车的姿态和运动状态,L298N驱动器控制电机。软件上,FreeRTOS确保了实时性和多任务处理能力,同时,结合传感器数据,实现了小车的自动平衡控制。实验结果显示,该设计具有优良的运动性能和平衡稳定性,为进一步研究智能小车提供了有力基础。
关键词:FreeRTOS;单片机;平衡小车;MPU6050;PID
1引言
1.1 课题背景
两轮平衡小车作为智能车辆的一种,具有自动平衡和自主导航的能力,在许多领域有广泛的应用前景。其核心在于如何实现稳定的自主平衡和高效的运动控制。随着嵌入式系统技术的不断发展,实时操作系统(RTOS)在两轮平衡小车的控制中得到了广泛应用。FreeRTOS作为一种流行的开源RTOS,具有可移植性、可扩展性和可裁剪性等特点,能够为两轮平衡小车的控制系统提供强大的多任务管理和实时响应能力。
目前,国内外对于两轮平衡小车的研究主要集中在硬件设计、运动控制算法和传感器数据处理等方面。在硬件设计方面,研究者们通常采用高性能的微控制器和传感器来提高小车的稳定性和运动性能。在运动控制算法方面,PID控制、模糊控制等经典控制算法得到了广泛应用。同时,也有一些研究者尝试采用机器学习算法对小车的运动进行自适应控制。在传感器数据处理方面,数字滤波算法和卡尔曼滤波算法等被广泛应用于提取小车的姿态和运动状态信息。
尽管已有许多研究工作取得了丰硕的成果,但如何设计并实现一个高效、稳定、扩展性强的两轮平衡小车仍然是一个挑战。因此,本文旨在基于FreeRTOS设计并实现一个两轮平衡小车,以提高其运动性能和平衡稳定性,并为进一步研究智能小车提供基础。
1.2国内外研究现状
国内外研究者们在硬件设计方面采用了各种高性能的微控制器和传感器。STM32系列微控制器由于其丰富的外设接口和强大的处理能力,成为了主流的选择。同时,MPU6050传感器由于其集成了3轴陀螺仪和3轴加速度计,被广泛应用于监测小车的姿态和运动状态。PID控制和模糊控制等经典控制算法在两轮平衡小车的运动控制中得到了广泛应用。通过调节电机的PWM信号,可以实现对小车速度和方向的精确控制。同时,结合传感器数据,可以实现小车的自动平衡控制。数字滤波算法和卡尔曼滤波算法等被广泛应用于提取小车的姿态和运动状态信息。这些算法可以对传感器数据进行处理,减小噪声干扰,提高数据的准确性和可靠性。FreeRTOS作为一种流行的开源RTOS,具有可移植性、可扩展性和可裁剪性等特点。在两轮平衡小车的控制系统中,使用FreeRTOS能够提供强大的多任务管理和实时响应能力,从而提高小车的整体性能。
2项目需求
基于 FreeRTOS 设计一款两轮自平衡小车,通过运动保持自身平衡,实现前
进、后退、转向、原地静止等基本运动功能,通过对陀螺仪的数据的读取处理, 从而识别出车身姿态,根据车身姿态计算PID,通过基于STM32+PID 控制两轮 智能自平衡小车设计,对小车进行实时的PID控制,使得小车可以按照要求实现 自主平衡,根据遥控可以实现平稳前进后退;根据灰度传感器数据,可以实现循 迹和避障。具体内容分为以下几个部分:
①平衡小车机械设计部分:主要是机械,重心调整,电气设计部分。
②信号处理部分:九轴陀螺仪数据的读取和处理,灰度传感器的读取和处
理,电机编码器的数据读取和处理。
③控制算法 PID:根据输入的信息,完成直立环,速度环,转向环的计算
控制。
④遥控传输部分:采用蓝牙无线模块或者WIFI透传模块,使用手机接收的遥控数据
3 FreeRTOS介绍
本项目完全基于FreeRTOS,此处为FreeRTOS做部分介绍。
FreeRTOS是一个开源实时操作系统(RTOS),主要用于嵌入式系统。它提供了一套丰富的API,使得开发者可以更好地管理任务、队列、信号量、定时器等资源,从而实现多任务并发处理和实时响应。FreeRTOS具有可移植性、可扩展性和可裁剪性等特点,可以根据实际需求进行定制和优化。
FreeRTOS的主要特点包括:
丰富的API:FreeRTOS提供了一套丰富的API,使得开发者可以方便地进行任务的创建、删除、调度、信号量的操作等操作。
高度可移植性:FreeRTOS的设计理念是可移植性,可以在不同的处理器架构和开发平台上运行。
高度可扩展性:FreeRTOS提供了许多可配置的选项,可以根据实际需求进行定制和优化,从而满足不同的应用场景。
实时性:FreeRTOS能够保证任务的实时响应,具有快速的任务切换和中断处理能力。
良好的性能:FreeRTOS通过合理的任务调度和内存管理,能够提供良好的性能表现。
FreeRTOS对于同一优先级任务的调用会提供一个固定的时间片,为了保证系统的实时性,所设时间片通常都小于1 ms,通常无法满足任务处理所需的时间,系统对任务进行频繁切换。当同优先级的任务数量较多时,会造成系统的处理效率降低。
作为一个轻量级的操作系统,FreeRTOS提供的功能包括: 任务管理、时间管理、信号量、消息队列、内存管理和记录等,可以基本满足较小系统的需要。FreeRTOS内核可以根据用户需要设置为可剥夺型内核或不可剥夺型内核。当FreeR-TOS被设置为可剥夺型内核时,处于就绪态的高优先级人物能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求。
为了弥补同优先级任务调度的不足,引进了最短时间任务调度算法,其核心算法思想是对于同优先级任务,任务执行时间长短决定任务的调用顺序,时间越短的任务优先调用。短任务优先调用减少了系统任务的平均周转时间,在相同的时间内系统可以处理更多的任务,提高执行效率。同时,最短时间任务调度算法也有相应缺点,同优先级的长任务会一直得不到CPU资源,被“饿死”。
4开发环境搭建
本项目使用STM32CubeMX配置FreeRTOS和使用KILE5进行开发以平衡车控制为例
STM32CubeMX是一个强大的工具,它可以帮助我们快速初始化硬件并创建FreeRTOS任务。通过以下步骤使用STM32CubeMX配置FreeRTOS以控制平衡车。
配置FreeRTOS: 在选择单片机芯片后,进入“Middleware”选项卡,并选择FreeRTOS的CMSIS_V1版本。这将自动在您的工程中配置FreeRTOS。您可以在“Kernel Setting”选项卡中查看和修改FreeRTOS内核的配置参数,例如系统工作模式、系统时钟节拍等。
添加任务: 在“Tasks and Queneus”选项卡中,您可以点击“Add”添加任务。在任务列表中,您可以定义任务的名称、优先级、栈大小等属性,并配置任务的回调函数。回调函数是任务的主要执行代码,您可以在这里编写控制平衡车的逻辑。
编写任务代码: 在回调函数中,以根据平衡车的具体需求编写代码。例如,您可以检测平衡车的姿态、速度和加速度等传感器数据,并根据这些数据计算控制信号,如电机速度和方向。您可以使用FreeRTOS提供的API函数来实现这些功能。
编译和烧录: 完成代码编写后,使用STM32CubeMX提供的编译工具链将代码编译成可执行文件。然后将可执行文件烧录到平衡车的单片机中。您可以使用ST-Link/V2或其他可靠的烧录工具来完成这一步。
调试和测试: 最后,将平衡车连接到PC上,并使用调试器启动平衡车。使用STM32CubeMX提供的调试工具来监视和调试平衡车的状态和控制信号。确保平衡车能够正确地响应您的控制信号,并保持稳定的平衡状态。
通过以上步骤,我们使用STM32CubeMX配置FreeRTOS来控制平衡车。
图4.1 CUMEMX配置
Keil μVision5(简称Keil5)是一款功能强大的集成开发环境(IDE),广泛用于嵌入式系统的开发,特别是基于ARM Cortex-M系列微控制器的项目。在开发FreeRTOS平衡车控制系统时,Keil5提供了从代码编写、编译、调试到烧录的一站式解决方案。
以下是使用Keil5开发FreeRTOS平衡车控制系统的大致方法:
新建项目:打开Keil5软件,选择“Project”菜单中的“New uVision Project”来创建一个新项目。在弹出的对话框中,为项目命名并选择一个合适的保存位置。
选择微控制器:在新项目向导中,选择适合平衡车的微控制器型号。确保选择的微控制器支持FreeRTOS。
配置项目:在项目设置中,配置微控制器的时钟系统、引脚分配和其他硬件相关设置。这些设置通常基于您的硬件设计和平衡车的具体要求。
添加FreeRTOS源码:将FreeRTOS的源代码文件添加到您的项目中。这通常包括内核文件、配置文件和可能用到的FreeRTOS+组件(如FreeRTOS+TCP、FreeRTOS+POSIX等)。
编写任务代码:在项目中创建C源文件,并编写FreeRTOS任务。每个任务应该有一个无限循环,在其中执行特定的功能,如读取传感器数据、计算控制输出或处理用户输入。
任务调度与配置:在FreeRTOS配置文件(通常是FreeRTOSConfig.h)中,配置任务优先级、栈大小等参数。使用FreeRTOS的API函数来创建、挂起、恢复和删除任务。
编译与调试:使用Keil5的编译功能来构建您的项目。一旦编译成功,没有错误或警告,您可以使用Keil5的调试器来调试您的代码。设置断点、单步执行、查看变量值等调试功能可以帮助您找到并修复潜在的问题。
烧录与测试:通过Keil5的烧录功能,将编译好的固件烧录到平衡车的微控制器中。然后,对平衡车进行实际测试,确保它能够稳定运行,并按照您的预期响应控制输入。
使用Keil5开发FreeRTOS平衡车控制系统,能够大大提高开发效率和代码质量。其强大的调试功能和直观的界面使得开发者能够更快地找到并解决问题,从而加速产品的上市时间。
图4.2 KEIL5工程
5产品设计
5.1系统框图设计
该平衡车系统主要由陀螺仪、蓝牙串口、电机驱动和控制任务组成。陀螺仪用于检测平衡车的姿态和方向信息,通过串口将这些数据传输给主控制器。主控制器通过FreeRTOS任务来处理这些数据,并根据控制算法计算出控制信号。控制信号通过电机驱动电路驱动电机转动,从而实现平衡车的姿态控制、速度控制和方向控制。整个系统通过蓝牙串口与外部设备进行通信,可以实现平衡车的远程控制和数据传输。同时,FreeRTOS任务调度器负责管理各个任务的执行,确保系统的实时性和稳定性。
图5.1 系统框图
5.2硬件模块设计
5.2.1 Stm32f407zet6
STM32F407ZET6是一款基于ARM Cortex-M4架构的32位微控制器,具有高性能、低功耗和丰富的外设接口等特点。它拥有高速的Flash存储器和SRAM,能够满足对数据的快速采集和处理需求。同时,其硬件资源包括多个定时器、DMA控制器、SPI、IIC、UART等通信接口,以及ADC、DAC、SDIO等模拟数字转换接口,能够实现多种外设的通信和控制。在平衡车系统中,STM32F407ZET6作为主控制器,负责管理各个外设接口的数据采集和处理,以及控制信号的输出,确保系统的稳定性和实时性。
5.2.2 Mpu6050
MPU6050是一款集成了3轴陀螺仪和3轴加速度计的传感器模块。它能够通过内部算法计算出物体的姿态、角速度和加速度等运动参数。在平衡车系统中,MPU6050用于检测平衡车的姿态和运动状态,并将数据传输给主控制器。主控制器根据这些数据计算出控制信号,实现平衡车的姿态控制和运动控制。同时,MPU6050的高精度测量也保证了系统的稳定性和准确性。
5.2.3L298N
L298N是一种高电压、大电流电机驱动芯片。该芯片采用1脚封装。主要特点是:工作电压高,工作电压可达46V;输出电流大,瞬峰值电流可达3A,持续工作电流为2A;额定功率25。内含两个H桥的高电压大地啊牛全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号在低电平压下工作;可以外接检测电阻,将变化量反馈给控制电路使L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。
5.2.4蓝牙模块
蓝牙模块用于实现平衡车与外部设备的无线通信。通过蓝牙连接,用户可以通过手机或其他智能设备对平衡车进行远程控制和状态监测。同时,蓝牙模块还可以用于接收来自GPS等外部设备的信号,实现平衡车的定位和导航功能。在平衡车系统中,蓝牙模块通过串口与主控制器连接,接收主控制器发送的控制信号或上传数据,实现与外部设备的通信和控制。
5.3结构模块
随着科技的发展,3D打印技术已经广泛应用于各个领域。在平衡车的设计与制造过程中,3D打印技术为我提供了一个全新的创作平台。通过3D建模软件,我可以将脑海中的设计创意转化为三维模型,并直接打印出实体原型。这大大缩短了从设计到实体的转化时间,降低了制作成本,并允许我在早期阶段就对设计进行测试和迭代。
在选择设计软件时,我选择了Autodesk的Fusion 360。Fusion 360不仅提供了强大的3D建模工具,还整合了辅助制造功能,使我可以直接在软件中对3D模型进行加工和制造设置。这使得从设计到制造的流程更加顺畅,减少了出错的可能性。
对于平衡车的外观设计,我着重考虑了其功能性、美学和用户体验。通过Fusion 360的参数化设计功能,我可以快速调整和优化设计的各个方面,如角度、尺寸和形状。这为我在满足功能需求的同时,提供了更大的创意空间。
总的来说,3D打印和Fusion 360为我提供了一个高效、精确的设计与制造平台。它们使我能够将创意转化为实际的产品,并在过程中不断优化和完善设计。这一过程不仅提高了设计的品质,也增强了最终产品的市场竞争力。
图5.2 第一代底座
图5.3 第二代底座
6功能模块设计
6.1主控模块
6.1.1功能概述
STM32Cube:STM32Cube是一个全面的软件平台,包括了ST产品的每个系列。对于新的产品设计,强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。
Keil-uVision5:Keil-uVision5是一款专业的单片机开发工具,通过这款软件可以帮助单片机开发人员轻松快发单片机。
6.1.2接口设计/硬件设计
图6.1 引角图
6.1.3软件设计
以下是主控芯片配置参数:
1. 时钟频率配置
HSE配置
外部晶振频率:根据实际晶振频率设置
HSE使能:使能
HSE预分频:根据需要设置
HCLK、PCLK2、PCLK1配置
根据项目需求进行配置,确保各个总线时钟分频正确
2. 串口配置
USART2配置
波特率:115200 Bits/s
数据位长度:8位
停止位:1位
奇偶校验:无
硬件流控制:无
接收使能:使能
发送使能:使能
USART1配置 (除波特率设置为9600外,其他参数与USART2相同)
3. 中断配置
USART2中断配置
中断触发方式:外部触发(rising edge)
中断优先级:根据需要设置
中断使能:使能
其他中断源配置 (如定时器、ADC等)
根据项目需求进行配置,确保各个中断使能和优先级设置正确
4. 定时器配置
TIM6配置 (作为FreeRTOS的时钟)
自动重载值:根据FreeRTOS要求设置
预分频值:根据FreeRTOS要求设置
计数器模式:向上计数模式
输出比较模式:翻转模式,用于产生OSCHF信号,用于时钟同步和心跳信号
其他定时器配置 (如TIM3、TIM4等)
根据项目需求进行配置,例如用于定时、PWM输出等
5. FreeRTOS配置
配置FreeRTOS的参数
根据项目需求和任务需求进行任务管理、时间管理、内存管理等配置。例如任务优先级、时间滴答等。
任务创建与调度
根据项目需求创建任务,并进行任务调度。确保任务之间通信、同步等机制设置正确。
FreeRTOS API使用
根据项目需求使用FreeRTOS提供的API函数,例如任务创建、任务删除、任务挂起与恢复等。
通过上述配置,为STM32 FreertOS平衡车项目设置正确的时钟频率、串口、中断、定时器和FreeRTOS。
6.2陀螺仪模块
6.1.4功能概述
表6.1 陀螺仪功能表
模块名称 | 功能 |
---|---|
陀螺仪模块 | 在STM32平衡车项目中,陀螺仪的主要作用是测量车体的倾斜角度。陀螺仪是一种能够测量角速度的传感器,通过测量车体的角速度变化来判断车体的倾斜程度。通过读取陀螺仪的数据,STM32单片机可以得到车体的倾斜角度,进而实现平衡车的姿态控制。 此外,陀螺仪还可以用于测量车体的加速度,以判断车体的速度。这些数据可以帮助平衡车更准确地感知自身状态,从而更精确地控制其运动。 总的来说,陀螺仪在STM32平衡车项目中起到了至关重要的作用,确保平衡车的稳定运行和精确控制。 |
6.1.5接口设计/硬件设计
表6.2 陀螺仪接口表
STC8A8K64D4 | buzzer | ||
---|---|---|---|
GND | GND | ||
3V3 | VCC | ||
SDA | PA6 | ||
ACK | PA7 |
6.1.6软件设计
| typedef struct { I2C_HandleTypeDef \*hi2c; // I2C¾ä±ú uint8_t devAddr; // É豸µØÖ· MPU6050_LPF_CUTOFF_FREQ_t lpf_cutoff_freq; // Êý×ÖµÍͨÂ˲¨Æ÷½ØÖ¹ÆµÂÊ MPU6050_SAMPLE_RATE_t sample_rate; // ²ÉÑùÂÊ MPU6050_ACCEL_FS_SEL_t accel_fs_sel; // ¼ÓËٶȼÆÁéÃô¶È MPU6050_GYRO_FS_SEL_t gyro_fs_sel; // ÍÓÂÝÒÇÁéÃô¶È uint8_t initialized; // É豸ÊÇ·ñÒѳõʼ»¯ } MPU6050_t; /\* º¯ÊýÔÐÍ \*/ void MPU6050_Init(MPU6050_t\* mpu6050, I2C_HandleTypeDef\* hi2c); void MPU6050_SetLPF(MPU6050_t\* mpu6050, MPU6050_LPF_CUTOFF_FREQ_t lpf_cutoff_freq); void MPU6050_SetSampleRate(MPU6050_t\* mpu6050, MPU6050_SAMPLE_RATE_t sample_rate); void MPU6050_SetAccelFS(MPU6050_t\* mpu6050, MPU6050_ACCEL_FS_SEL_t accel_fs_sel); void MPU6050_SetGyroFS(MPU6050_t\* mpu6050, MPU6050_GYRO_FS_SEL_t gyro_fs_sel); void MPU6050_ReadAccel(MPU6050_t\* mpu6050, float\* ax, float\* ay, float\* az); void MPU6050_ReadGyro(MPU6050_t\* mpu6050, float\* gx, float\* gy, float\* gz); float MPU6050_ReadTemp(MPU6050_t\* mpu6050); 结构体MPU6050_t 这个结构体包含了与MPU6050传感器相关的各种参数和状态信息: I2C_HandleTypeDef \*hi2c;:I2C通信句柄,用于与MPU6050传感器进行通信。 uint8_t devAddr;:MPU6050的设备地址。 MPU6050_LPF_CUTOFF_FREQ_t lpf_cutoff_freq;:数字低通滤波器的截止频率。 MPU6050_SAMPLE_RATE_t sample_rate;:采样率。 MPU6050_ACCEL_FS_SEL_t accel_fs_sel;:加速度计的量程选择。 MPU6050_GYRO_FS_SEL_t gyro_fs_sel;:陀螺仪的量程选择。 uint8_t initialized;:表示传感器是否已经初始化。 函数 初始化函数 MPU6050_Init 这个函数用于初始化一个MPU6050传感器。它接受一个指向MPU6050_t结构体的指针和一个I2C通信句柄,并设置传感器的各种参数。 设置函数 以下函数用于设置传感器的不同参数: MPU6050_SetLPF:设置数字低通滤波器的截止频率。 MPU6050_SetSampleRate:设置采样率。 MPU6050_SetAccelFS:设置加速度计的量程。 MPU6050_SetGyroFS:设置陀螺仪的量程。 读取函数 以下函数用于从传感器读取数据: MPU6050_ReadAccel:读取3轴加速度数据,并存储在提供的浮点数组中。 MPU6050_ReadGyro:读取3轴陀螺仪数据,并存储在提供的浮点数组中。 MPU6050_ReadTemp:读取传感器温度数据。 这些函数通常在主循环中调用,以持续获取传感器的数据,并根据这些数据来控制平衡车的运动。例如,通过读取加速度和陀螺仪数据,可以判断平衡车的姿态和运动状态,从而调整电机速度来实现平衡控制。 |
6.3电机驱动模块
6.1.7功能概述
表6.4 电机驱动功能表
L298n | 功能 |
---|---|
电机驱动模块 | 电机驱动在平衡车中的作用主要体现在提供动力和控制精度两个方面。 首先,电机驱动为平衡车提供动力。电机驱动模块负责将电池或外部电源提供的电能转换为机械能,从而驱动电机运转,使平衡车前进、后退、转弯或停止。电机的运转速度和方向由电流的方向和大小决定,通过控制电机的电流,可以精确地控制电机的转速和转向,从而实现平衡车的精确控制。 其次,电机驱动也负责控制平衡车的精确运动。通过调节电机的电流,可以实时控制平衡车的运动状态,如速度、方向、加速度等。这不仅体现在对电机直接的控制上,还体现在对其他相关系统的协同控制上,如陀螺仪、编码器等传感器以及STM32等主控制器。 |
6.1.8接口设计/硬件设计
表6.5 电机驱动接口表
STM32F407ZET6 | SEVEN SEGMENT NIXIE TUBE | ||
---|---|---|---|
I/O | P2.0-2.4 | ||
INTO | PA0-PA4 | ||
VCC | |||
OUT | MOTO1-2 |
6.1.9软件设计
uint16_t motor1_pwm = (uint16_t)(output + 500.0f); // ??500,??????0-1000 uint16_t motor2_pwm = (uint16_t)(-output + 500.0f); \__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,motor2_pwm); osDelay(10); \__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,motor1_pwm); osDelay(10); \__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_3,motor2_pwm); osDelay(10); \__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,motor1_pwm); osDelay(10); printf("Motor 1 PWM: %d\\r\\n", motor1_pwm); printf("Motor 2 PWM: %d\\r\\n", motor2_pwm); 代码使用了STM32的HAL库来设置定时器的比较值,从而输出不同的PWM信号。 首先,代码初始化两个uint16_t类型的变量motor1_pwm和motor2_pwm,将output加上500.0转换为uint16_t类型,作为PWM的占空比。 然后,通过调用__HAL_TIM_SET_COMPARE函数来设置定时器的比较值。该函数会根据设置的比较值输出相应的PWM信号。 具体来说,该代码做了以下操作: 设置motor2_pwm为负的output + 500.0f,然后将其设置为定时器TIM2的通道1的比较值。 延时10ms后,将motor1_pwm设置为定时器TIM2的通道2的比较值。 再次延时10ms后,将motor2_pwm设置为定时器TIM2的通道3的比较值。 延时10ms后,将motor1_pwm设置为定时器TIM2的通道4的比较值。 最后,通过printf函数输出motor1_pwm和motor2_pwm的值。
7 算法设计调试
本项目采用了经典的PID算法进行控制.
7.1Pid算法介绍:
PID算法,即比例-积分-微分算法,是一种控制算法,常用于工业控制和许多其他系统。该算法基于系统的当前和过去的误差值,通过比例、积分和微分三个部分进行计算,以产生一个输出值,用于调整系统的参数,达到控制目标。
在PID算法中,比例项用于调整系统的当前误差,积分项用于消除系统的静态误差,微分项用于减小系统的动态误差。通过调整这三个部分的系数,可以实现对系统的精确控制。
PID算法在两轮平衡小车的控制中也有应用。例如,在小车的平衡控制中,可以使用PID算法来调整小车的姿态,使其保持平衡状态。通过实时监测小车的姿态和运动状态,并使用PID算法计算出控制量,可以实现对小车的稳定控制。
总之,PID算法是一种广泛应用于控制领域的算法,通过比例、积分和微分三个部分进行计算,可以实现对系统的精确控制。在两轮平衡小车的控制中,也可以使用PID算法来提高小车的运动性能和平衡稳定性。
PID控制器的性能可以通过多个指标进行评估,一些常见的指标包括
(1)稳态误差:衡量系统在稳定状态下与期望值之间的偏差。常见的稳态误差指标包 括稳态偏差、积分偏差和稳态振荡。
(2)响应时间:衡量系统从初始状态到达稳定状态所需的时间。常见的响应时间指标 包括上升时间、调整时间和峰值时间。
(3)控制精度:衡量系统的输出与期望值之间的精确度。常见的控制精度指标包括超 调量、稳态误差和振荡幅度。
(4)稳定性:衡量系统的稳定性和抗干扰能力。稳定性指标包括定边界、相角裕度和 相位裕度。
7.2PID调节方法:
PID参数整定就是确定比例系数 (K)、积分系数 (K)和微分系(K)的过程,以便使PID控制能够在系统中实现稳定、快速、准确的响应。常见的PID参数整定方法有:
(1)经验整定法是一种常见的PID整定方法,通过逐步改变PID控制器的参数,观察系统响应并调整参数值,以获得满意的控制效果。该方法不依赖于系统的数学模型,而是根据经验知识进行调整。
(2)Ziegler-Nichols方法是一种经典的整定方法,通过计算系统的临界增益和临界周期来确定PID控制器的参数。
(3)自整定法通过系统的数学模型和实时反馈来自动整定PID参数。自整定算法通常根据系统的稳态和动态响应特性进行参数优化。
算法调试:PID调参是平衡车的精髓所在,参数整定的好坏直接影响到平衡车的平衡效果。
基本调试方法:先比例(从中间到两边)、后积分(从0到大)、再微分(从0到大)。
1.判断参数(Kp,Kd)极性
2.调节Kp
3.调节Kd
8系统测试
8.1实物展示
图8.1-图8.5 实物展示图
8.2系统调试
在完成系统的硬件和软件设计后,系统调试是确保其正常、稳定运行的关键步骤。在本项目中,我们进行了细致的系统调试,以确保每个环节都能达到预期的效果。
首先,我们对每个单独的硬件模块进行了测试,包括传感器、执行器等。这涉及到检查它们的基本功能是否正常,如输入输出信号是否符合要求,是否能够正确响应控制信号等。对于软件部分,我们进行了单元测试和集成测试,确保每个函数和模块都能按照预期工作。
在确认各个模块正常后,我们进行了系统的整体调试。这包括检查系统的控制逻辑、信号传输等。我们模拟了各种实际运行中可能遇到的情况,如突然的干扰、过载等,以验证系统的鲁棒性。
此外,我们还特别关注了PID算法的应用。我们调整了PID控制器的参数,以优化系统的性能。通过观察系统在不同参数下的响应,我们不断进行参数的微调,最终找到了使系统达到最佳性能的参数组合。
在整个调试过程中,我们采用了实时数据监控和记录的方法,以便及时发现和解决问题。这不仅有助于我们快速定位问题,还为后续的系统优化提供了宝贵的数据支持。
通过上述步骤,我们成功完成了本项目的系统调试,确保了系统的稳定性和性能。这为后续的实际运行和应用打下了坚实的基础。
8.3功能测试
功能测试是确保项目各个功能正常、稳定的关键环节。在本项目中,我们根据项目的不同阶段,分为了初始、中间和结尾三个阶段进行功能测试。
在项目初始阶段,我们主要进行的是基本功能的测试。这包括验证各个模块是否能正常工作,各接口是否连接正常,以及核心算法如PID控制算法是否能够正确运行。这个阶段的测试目标是确保项目的基本框架没有问题,为后续的详细测试打下基础。
图8.6 串口调试表
进入项目中间阶段,我们开始进行更深入的功能测试。这一阶段主要关注的是系统在各种条件下的性能表现。我们模拟了各种实际运行中可能遇到的情况,如突然的干扰、过载等,以验证系统的鲁棒性和稳定性。同时,我们还进行了兼容性测试,确保系统能够与其他相关设备或软件正常交互。
图8.7 中期产品测试
到了项目结尾阶段,功能测试的重点转向了整体的协调性和优化。在这个阶段,我们会对整个系统进行一次全面的检查,确保各个部分能够协同工作,达到预期的效果。同时,我们还会根据测试结果对系统进行必要的调整和优化,以提高其性能和稳定性。
图8.8 后期产品测试
通过以上三个阶段的细致测试,我们确保了本项目中的所有基本功能都能正常运行,满足设计要求。这为项目的顺利交付和后续的实际应用提供了有力的保障。
9展望与不足
9.1展望:
在未来的发展中,我们预期本项目将不断取得重要的进展和突破。随着技术的不断升级和迭代,PID算法和其他控制技术将更加精确和高效,进一步提升系统的性能和稳定性。同时,我们计划将人工智能和机器学习技术引入项目中,以实现更智能、自适应的控制策略。这将使系统能够更好地应对各种复杂环境和条件,提高自主性和适应性,进一步扩大应用范围。
此外,我们期望通过持续的改进和优化,降低项目的成本并提高其普及度。这将使更多企业和个人能够受益于本项目的技术成果,为智能制造、机器人技术、无人驾驶等领域的发展做出更大的贡献。
总之,本项目在未来具有广阔的发展前景。我们将继续关注技术前沿和创新,致力于不断改进和优化项目的技术和应用,为未来的科技发展和社会智能化做出积极贡献。
9.2问题:
过冲是指小车在到达目标位置之前,由于控制系统的误差或惯性,超过了目标位置的现象。这可能会导致小车需要额外的调整才能回到目标位置,或者导致小车无法准确到达目标位置。
小车因为没有使用编码器而偶尔过冲的问题,是一个很常见的问题。编码器通常用于精确测量小车的速度和位置,从而帮助控制系统更精确地控制小车的运动。如果没有使用编码器,控制系统可能无法准确获取小车的实时位置信息,导致过冲或欠冲的现象。
9.3解决方案:
增加编码器:使用编码器可以提供更精确的速度和位置信息,帮助控制系统更好地控制小车的运动。通过获取实时位置信息,控制系统可以更准确地调整小车的速度和方向,从而避免过冲或欠冲的现象。
优化控制算法:改进控制算法可以帮助提高控制系统的精度和稳定性。通过调整控制算法的参数,可以更好地适应不同的运行条件,减小误差和惯性对小车运动的影响。
增加缓冲区:在目标位置附近增加缓冲区可以减小过冲或欠冲的影响。当小车接近目标位置时,控制系统可以通过调整小车的速度和方向来减小误差,使小车更准确地到达目标位置。
调整PID参数:PID控制器是用于控制小车运动的常用方法。通过调整PID控制器的参数,可以更好地平衡系统的动态性能和稳态误差。适当的PID参数可以帮助减小过冲或欠冲的影响,提高控制系统的性能。