一、任务
设计并制作一个帆板控制系统,通过对风扇转速的控制,调节风力大小,改变帆板转角θ,如图 1 所示。
二、要求
1、基本要求
(1)用手转动帆板时,能够数字显示帆板的转角θ。显示范围为 0~60°,分辨力为 2°,绝对误差≤5°。
(2)当间距 d=10cm 时,通过操作键盘控制风力大小,使帆板转角θ能够在 0~60°范围内变化,并要求实时显示θ。
(3)当间距 d=10cm 时,通过操作键盘控制风力大小,使帆板转角θ稳定 45°±5°范围内。要求控制过程在 10 秒内完成,实时显示θ,并由声光提示,以便进行测试。
2、发挥部分
(1) 当间距 d=10cm 时,通过键盘设定帆板转角,其范围为 0~60°。要求θ在 5 秒内达到设定值,并实时显示θ。最大误差的绝对值不超过5°。
(2) 间距 d 在 7~15cm 范围内任意选择,通过键盘设定帆板转角,范围为0~60°。要求θ在 5 秒内达到设定值,并实时显示θ。最大误差的绝对值不超过 5°。
(3) 其他。
三、说明
(1) 调速装置自制。
(2) 风扇选用台式计算机散热风扇或其他形式的直流供电轴流风扇,但不能选用带有自动调速功能的风扇。
(3) 帆板的材料和厚度自定,固定轴应足够灵活,不阻碍帆板运动。帆板形式及具体制作尺寸如图 2 所示。
GPT-4o给出的设计方案:
设计一个帆板控制系统,通过对风扇转速的控制来调节帆板的转角。系统包含以下模块:
风扇转速影响风力大小,从而影响帆板的转动角度。通过角度传感器反馈实际角度,控制器根据当前角度与目标角度的偏差调整风扇转速,以实现闭环控制,最终稳定在设定角度。
转速控制电路:
角度检测电路:
显示和输入接口:
MCU(如STM32系列):
角度传感器(如霍尔传感器或旋转编码器):
以下是实现帆板角度控制的C语言代码实例(使用STM32)
#include "stm32f4xx.h"
#include "stdio.h"
// 定义全局变量和宏
#define TARGET_ANGLE 45 // 目标角度
#define KP 2.0 // 比例系数
#define KI 1.0 // 积分系数
#define KD 0.5 // 微分系数
void SystemClock_Config(void);
void GPIO_Config(void);
void PWM_Config(void);
void ADC_Config(void);
void display_angle(uint16_t angle);
uint16_t read_angle(void);
// PID控制相关变量
float error = 0, integral = 0, derivative = 0, last_error = 0;
float pid_output = 0;
// 主函数
int main(void) {
HAL_Init();
SystemClock_Config();
GPIO_Config();
PWM_Config();
ADC_Config();
while (1) {
uint16_t current_angle = read_angle();
display_angle(current_angle);
// PID计算
error = TARGET_ANGLE - current_angle;
integral += error;
derivative = error - last_error;
pid_output = KP * error + KI * integral + KD * derivative;
last_error = error;
// 调节风扇转速
__HAL_TIM_SET_COMPARE(&htim, TIM_CHANNEL_1, pid_output);
HAL_Delay(200);
}
}
// 系统时钟配置
void SystemClock_Config(void) {
// 时钟配置代码
}
// GPIO配置
void GPIO_Config(void) {
// GPIO端口配置代码
}
// PWM配置
void PWM_Config(void) {
// PWM配置代码
}
// ADC配置
void ADC_Config(void) {
// ADC配置代码
}
// 读取角度传感器数据
uint16_t read_angle(void) {
// 读取角度传感器的ADC值并转换为角度值
uint16_t adc_val = HAL_ADC_GetValue(&hadc1);
uint16_t angle = (adc_val * 60) / 4096; // 假设ADC满量程值为4096,对应最大测量角度60度
return angle;
}
// 显示角度
void display_angle(uint16_t angle) {
// 显示角度值的代码,例如通过LCD或数码管显示
}
通过上述设计及代码实现,帆板系统能够实时调节帆板角度,满足多个角度设定和实时测量的要求,并具有较高精度和响应速度。
本题考察的主要知识点: