一、任务
甲车车头紧靠起点标志线,乙车车尾紧靠边界,甲、乙两辆小车同时起动,先后通过起点标志线,在行车道同向而行,实现两车交替超车领跑功能。跑道如图1 所示。
二、要求
1. 基本要求
(1)甲车和乙车分别从起点标志线开始,在行车道各正常行驶一圈。
(2)甲、乙两车按图 1 所示位置同时起动,乙车通过超车标志线后在超车区内实现超车功能,并先于甲车到达终点标志线,即第一圈实现乙车超过甲车。
(3)甲、乙两车在完成(2)时的行驶时间要尽可能的短。
2. 发挥部分
(1)在完成基本要求(2)后,甲、乙两车继续行驶第二圈,要求甲车通过超车标志线后要实现超车功能,并先于乙车到达终点标志线,即第二圈完成甲车超过乙车,实现了交替领跑。甲、乙两车在第二圈行驶的时间要尽可能的短。
(2)甲、乙两车继续行驶第三圈和第四圈,并交替领跑;两车行驶的时间要尽可能的短。
(3)在完成上述功能后,重新设定甲车起始位置(在离起点标志线前进方向 40cm 范围内任意设定),实现甲、乙两车四圈交替领跑功能,行驶时间要尽可能的短。
三、说明:
1.赛车场地由 2 块细木工板(长 244cm,宽 122cm,厚度自选)拼接而成,离地面高度不小于 6cm(可将垫高物放在木工板下面,但不得外露)。板上边界线由约 2cm 宽的黑胶带构成;虚线由 2cm 宽、长度为 10cm、间隔为 10cm 的黑胶带构成;起点/终点标志线、转弯标志线和超车标志区线段由 1cm 宽黑胶带构成。图 1 中斜线所画部分应锯掉。
2.车体(含附加物)的长度、宽度均不超过 40cm,高度不限,采用电池供电,不能外接电源。
3.测试中甲、乙两车均应正常行驶,行车道与超车区的宽度只允许一辆车行驶,车辆只能在超车区进行超车(车辆先从行车道到达超车区,实现超车后必须返回行车道)。甲乙两车应有明显标记,便于区分。
4.甲乙两车不得发生任何碰撞,不能出边界掉到地面。
5.不得使用小车以外的任何设备对车辆进行控制,不能增设其它路标或标记。
6.测试过程中不得更换电池。
7.评测时不得借用其他队的小车。
GPT-4o给出的设计方案:
设计一个双车交替超车竞速系统,两个小车沿跑道同步起跑,过程中实现交替超车功能,最终完成竞速并终止。在设计中,使用MCU控制小车的行驶与超车。当小车接近标志线时,通过传感器检测位置,并控制电机调整速度,实现交替超车和竞速目标。
电机驱动电路:
位置检测电路:
控制电路:
直流电机:
H桥电机驱动模块:
位置传感器:
MCU(如STM32F103C8T6):
MCU主要功能代码,以下示例代码用于STM32系列MCU,实现同步启动、位置检测与速度控制:
#include "stm32f4xx.h"
#define SPEED_NORMAL 50
#define SPEED_OVERTAKE 70
void SystemClock_Config(void);
void GPIO_Config(void);
void Motor_Control(uint8_t speed);
int Read_Position_Sensor(void);
int main(void) {
HAL_Init();
SystemClock_Config();
GPIO_Config();
while (1) {
if (Read_Position_Sensor() == 1) {
Motor_Control(SPEED_OVERTAKE);
} else {
Motor_Control(SPEED_NORMAL);
}
HAL_Delay(100);
}
}
void SystemClock_Config(void) {
// 配置系统时钟
}
void GPIO_Config(void) {
// 配置GPIO引脚
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; // 假设位置传感器连接到PA0,电机控制信号连接到PA1
GPIO_InitStruct.Mode = GPIO_MODE_INPUT | GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void Motor_Control(uint8_t speed) {
// 通过PWM信号控制电机速度
// 这里假设使用定时器产生PWM信号,具体配置需根据实际硬件和需求调整
TIM_HandleTypeDef htim;
TIM_OC_InitTypeDef sConfigOC;
__HAL_RCC_TIM1_CLK_ENABLE(); // 假设使用TIM1
htim.Instance = TIM1;
htim.Init.Prescaler = 0;
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = 100;
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
HAL_TIM_PWM_Init(&htim);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = speed;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_1);
}
int Read_Position_Sensor(void) {
return HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); // 读取位置传感器信号
}
通过上述设计及代码实现,系统能够满足两个小车分时超车竞速的规定要求,确保小车在行驶中能够快速准确地调整速度,实现超车和竞速功能。这些设计充分考虑了系统稳定性、精确性和易用性。
本题考察的主要知识点: