一、任务
一长约 60cm~70cm 的细管上端用万向节固定在支架上,下方悬挂一组(2~4 只)直流风机,构成一风力摆,如图 1 所示。风力摆上安装一向下的激光笔,静止时,激光笔的下端距地面不超过 20cm。设计一测控系统,控制驱动各风机使风力摆按照一定规律运动,激光笔在地面画出要求的轨迹。
二、要求
1. 基本要求
(1) 从静止开始,15s 内控制风力摆做类似自由摆运动,使激光笔稳定地在地面画出一条长度不短于 50cm 的直线段,其线性度偏差不大于±2.5cm,并且具有较好的重复性;
(2) 从静止开始,15s 内完成幅度可控的摆动,画出长度在 30~60cm 间可设置,长度偏差不大于±2.5cm 的直线段,并且具有较好的重复性;
(3) 可设定摆动方向,风力摆从静止开始,15s 内按照设置的方向(角度)摆动,画出不短于 20cm 的直线段;
(4) 将风力摆拉起一定角度(30°~45°)放开,5s 内使风力摆制动达到静止状态。
2.发挥部分
(1) 以风力摆静止时激光笔的光点为圆心,驱动风力摆用激光笔在地面画圆,30s 内需重复 3 次;圆半径可在 15~35cm 范围内设置,激光笔画出的轨迹应落在指定半径±2.5cm 的圆环内;
(2) 在发挥部分(1)后继续作圆周运动,在距离风力摆 1~2m 距离内用一台 50~60W 台扇在水平方向吹向风力摆,台扇吹 5s 后停止,风力摆能够在 5s 内恢复发挥部分(1)规定的圆周运动,激光笔画出符合要求的轨迹;
(3) 其他。
三、说明
1. 任务中各项要求,均要考察完成时间及准确性。
2. 风力摆的制作方法建议:
方案 1:如 2 图所示,一组直流风机用细管或棒(如碳素纤维管、PVC 管等)通过万向节固定在一支架上;
方案 2:用粗单股导线(减少自旋)将风力摆吊挂在支架上。
3. 参赛队可以自行选定一方向为 0°,以此为起始,顺时针依次为 90°、180°、270°等,详见图 3,测试现场将提供此图。
4. 直流风机是驱动风力摆的唯一动力,不得以任何其它方式影响风力摆的运动;启动后,不得以任何形式人为影响风力摆运动。
5. 各项目中,运动到达要求时需有明显声或光提示,以便开始测试及记录。
6. 发挥部分施加干扰的方式是在1~2m 的距离,用 50~60W 台扇在水平方向 吹 风力摆 , 风 速 在1.0~2.0m/s 范围内。
7. 风力摆在圆周运动时的旋转方向不限;测试时考察在 6 个均匀分布点上激光轨迹是否落在圆环内,见图 3。
8. 各项要求中,长度均以厘米(cm)为单位,角度以 10°为最小单位。
9. 赛题中要求的各项动作完成时间越短越好,超过规定时间 1 倍时不计成绩。
GPT-4o给出的设计方案:
设计一个长约60cm-70cm的细管,由下方稳定一组风力扇提供动力,使装置能在启动后30秒内使激光笔在圆周面内稳定旋转。通过控制风力扇的开启和调节,激光笔在圆周面内扫射,对准相应目标。
细管与万向节固定系统:
风力扇:
控制模块(MCU):
电源模块:
启动与停止:
旋转与对准:
硬件连接:
软件编程:
#include "stm32f4xx_hal.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);
TIM_HandleTypeDef htim2;
// 主函数
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
// 启动风扇
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
while (1)
{
// 调整风扇转速
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 50); // 假设50为转速
HAL_Delay(5000); // 运行5秒后停止
// 停止风扇
HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);
// 按要求重复或进入休眠
HAL_Delay(5000);
}
}
// 时钟配置
void SystemClock_Config(void)
{
// 根据具体需求配置
}
// GPIO配置
static void MX_GPIO_Init(void)
{
// 具体引脚配置
}
// 计时器配置
static void MX_TIM2_Init(void)
{
__HAL_RCC_TIM2_CLK_ENABLE();
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim2.Instance = TIM2;
htim2.Init.Prescaler = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 1000 - 1;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
// 初始化错误处理
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
{
// 时钟源配置错误处理
}
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
{
// PWM初始化错误处理
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
// 主配置同步错误处理
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
// PWM配置错误处理
}
}
调试:
验证:
该设计方案能够确保装置按要求完成360度旋转,并能精确对准目标,达到任务要求。
本题目考察的主要知识要点:
上述知识点涵盖了从设计到实现、调试的全过程,考察学生综合运用所学知识解决实际问题的能力。