一、任务
设计并制作一个自由摆上的平板控制系统,其结构如图 1 所示。摆杆的一端通过转轴固定在一支架上,另一端固定安装一台电机,平板固定在电机转轴上;当摆杆如图 2 摆动时,驱动电机可以控制平板转动。
二、要求
1.基本要求
(1)控制电机使平板可以随着摆杆的摆动而旋转(3~5 周),摆杆摆一个周期,平板旋转一周(360º),偏差绝对值不大于 45°。
(2)在平板上粘贴一张画有一组间距为 1cm 平行线的打印纸。用手推动摆杆至一个角度θ(θ在 30º~45º间),调整平板角度,在平板中心稳定放置一枚 1 元硬币(人民币);启动后放开摆杆让其自由摆动。在摆杆摆动过程中,要求控制平板状态,使硬币在 5 个摆动周期中不从平板上滑落,并尽量少滑离平板的中心位置。
(3)用手推动摆杆至一个角度θ(θ在 45º~60º间),调整平板角度,在平板中心稳定叠放 8 枚 1 元硬币,见图 2;启动后放开摆杆让其自由摆动。在摆杆摆动过程中,要求控制平板状态使硬币在摆杆的 5 个摆动周期中不从平板上滑落,并保持叠放状态。根据平板上非保持叠放状态及滑落的硬币数计算成绩。
2.发挥部分
(1)如图 3 所示,在平板上固定一激光笔,光斑照射在距摆杆 150cm 距离处垂直放置的靶子上。摆杆垂直静止且平板处于水平时,调节靶子高度,使光斑照射在靶纸的某一条线上,标识此线为中心线。用手推动摆杆至一个角度θ(θ在 30º~60º间),启动后,系统应在 15 秒钟内控制平板尽量使激光笔照射在中心线上(偏差绝对值<1cm),完成时以 LED 指示。根据光斑偏离中心线的距离计算成绩,超时则视为失败。
(2)在上述过程完成后,调整平板,使激光笔照射到中心线上(可人工协助)。启动后放开让摆杆自由摆动;摆动过程中尽量使激光笔光斑始终瞄准照射在靶纸的中心线上,根据光斑偏离中心线的距离计算成绩。
(3)其他。
三、说明
1.摆杆可以采用木质、金属、塑料等硬质材料;摆杆长度(固定转轴至电机轴的距离)为 100 cm±5cm;摆杆通过转轴固定在支架或横梁上,并能够灵活摆动;将摆杆推起至θ=30º处释放后,摆杆至少可以自由摆动 7 个周期以上。摆杆不得受重力以外的任何外力控制。
2.平板的状态只能受电机控制。平板的长宽尺寸为 10cm×6cm,可以采用较轻的硬质材料;不得有磁性;表面必须为光滑的硬质平面;不得有凸起的边沿;倾斜一定角度时硬币须能滑落。平板承载重量不小于 100g。
3.摆动周期的定义:摆杆被释放至下一次摆动到同侧最高点。
4.摆杆与平板部分电路可以用软质导线连接,但必须不影响摆杆的自由摆动。
5.在完成基本要求部分工作时,需在平板上铺设一张如图 4 所示画有一组间距为 1cm 平行线的打印纸(10cm×6cm),平行线与电机转轴平行。
6.非保持叠放状态硬币数为接触平板硬币数减 1。接触平板硬币数的定义参见图 5。
7. 在完成发挥部分工作时,需要在平板上固定安装一激光笔。激光笔的照射方向垂直于电机转轴。激光笔的光斑直径不大于 5mm。需在距摆杆 150cm处设置一高度可以调整的目标靶子,靶子上粘贴靶纸(A4 打印纸),靶纸上画一组间距为 1cm 的水平平行线。测试现场提供靶子,也可自带。
8.题目要求的各项工作中,凡涉及推动摆杆至某一位置并准备开始摆动时,允许手动操作启动工作,亦可自动启动工作。一旦摆杆开始自由摆动,不得再人为干预系统运行。
9.设计报告正文中应包括系统总体框图、核心电路原理图、主要流程图、主要测试结果。完整的电路原理图、重要的源程序和完整的测试结果用附件给出。
GPT-4o给出的设计方案:
设计一个能够精确控制平板旋转和倾斜角度的系统。该系统使用电动机来旋转和调整平板的角度,利用传感器进行角度反馈和精确控制,以达到要求的平衡和倾斜角度。
电动机驱动电路:
角度传感器电路:
控制电路:
电动机(如无刷直流电机):
H桥电机驱动模块(如L298N或L293D):
角度传感器(如MPU-6050或ADXL345):
MCU(如STM32F103C8T6):
以下示例代码用于STM32系列MCU,实现角度检测与电动机控制:
#include "stm32f4xx.h"
#include "mpu6050.h"
#include "motor_driver.h"
#define TARGET_ANGLE 0 // 目标角度0度
#define ANGLE_THRESHOLD 1 // 角度阈值1度
void SystemClock_Config(void);
void GPIO_Config(void);
void Motor_Control(int angle, int target);
int main(void) {
HAL_Init();
SystemClock_Config();
GPIO_Config();
MPU6050_Init();
Motor_Init();
while (1) {
int angle = MPU6050_Get_Angle();
if (abs(angle - TARGET_ANGLE) > ANGLE_THRESHOLD) {
Motor_Control(angle, TARGET_ANGLE);
}
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_InitStruct.Mode = 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(int angle, int target) {
if (angle > target) {
Motor_Drive(FORWARD, angle - target);
} else if (angle < target) {
Motor_Drive(REVERSE, target - angle);
} else {
Motor_Stop();
}
}
通过上述设计方案,实现了该系统对于平板的控制和角度调整功能,能够稳定、快速地响应,并满足设计要求。
本题考察的主要知识点: