任务名称
2013年_J题:电磁控制运动装置【高职高专组】
任务要求
难度

一、任务
设计并制作一套电磁控制运动装置,该装置由电磁控制装置、摆杆等部分构成。装置外形尺寸要求不能大于:长 300mm、宽 300mm、高 300 mm,摆杆支撑轴中心点到摆杆底端的长度规定在 100mm~150mm 范围内;装置结构示意图如图 1 和图 2 所示。

二、要求

1.基本要求
(1)按下启动按钮,由静止点开始,控制摆杆摆动。
(2)由静止点开始,控制摆杆在指定的摆角(10°~45°范围内)连续摆动,摆动摆角绝对误差≤5°,响应时间≤15s。
(3)由静止点开始,按指定周期(0.5s~2s 范围内)控制摆杆连续摆动,摆动周期绝对误差值≤0.2s,响应时间≤15s。
(4)在摆杆连续摆动的情况下,按下停止按钮,控制摆杆平稳地停在静止点上,停止时间≤10s。

2.发挥部分
(1)摆杆摆角幅度能在 10°~45°范围内预置,预置步进值为 5°,摆角幅度绝对误差值≤3°,响应时间≤10s。
(2)摆杆的周期能在 0.5s~2s 范围内预置,预置步进值 0.5s,周期绝对误差值≤0.1s,响应时间≤10s。
(3)摆杆摆角幅度和周期在上述范围内可同时预置,由静止点开始摆动,摆角幅度值和周期相对误差要求均和发挥部分中的(1)、(2)相同。当摆杆稳定运行 20 秒后发出声、光提示,并在 5s 内平稳停在静止点上。
(4)其他。

三、说明
(1)图 1 和图 2 只作为设计参考,参赛队可以自行设计电磁控制运动装置结构;
(2)摆杆和摆杆支撑轴上不能安装任何驱动装置,但可以安装角度传感器;
(3)摆杆运动控制、检测装置的安装方式与控制方法由参赛队自行确定;
(4)磁铁在摆杆上的安装位置不做限制,在测试过程中不允许做任何改动和调整;
(5)摆角指示刻度盘绘制以 1°为最小单位,可以自制或采用成品量角器,摆角测量值以摆杆上指针与指示刻度盘相对应的读数为基准。
(6)摆杆自然下垂的点定义为摆杆的静止点。
(7)响应时间在本题目中定义为:摆杆由初始静止状态到达稳定状态(4 个周期摆幅基本相同)的时间。响应时间包括 4 个稳定周期摆动的时间。

评审标准

参考答案


一、系统构成

设计一个基于电磁控制的摆杆运动装置,通过电磁铁的开闭控制运动摆杆,实现摆角指示装置的摆动。主要组件包括电磁铁、摆角指示器、运动摆杆、支架、控制电路等。摆动角度通过摆角指示器进行显示,由电磁铁通断电控制摆杆运动,电磁铁由MCU进行控制。

二、核心指标

  1. 摆动角度:10°-45°范围内可调,角度分辨率为5°。
  2. 响应时间:磁铁吸合/释放时间均不超过5s。
  3. 保持时间:磁铁通电、断电保持时间分别为15s、5s。
  4. 功耗:系统总功耗限制在30W以内。

三、核心模块详细设计

1. 电磁控制模块

使用电磁铁进行非接触式控制,驱动摆杆运动:

器件:12V DC电磁铁。

设计要点

  • 强磁力,响应速度快。
  • 电流控制需稳定。
2. MCU控制模块

选择使用STM32系列单片机,利用其丰富的I/O接口和实时控制能力:

器件:STM32F103C8T6。

设计要点

  • 通过GPIO控制电磁铁的启停。
  • 利用定时器精确控制电磁铁的通断时间。
  • 控制各角度位置的反馈传感器。
3. 角度检测模块

使用光电编码器或电位计实时监测运动摆杆的角度位置:

  • 器件:10KΩ电位计或适用的光电编码器。

设计要点

  • 精确检测摆杆角度并反馈给MCU。
  • 模拟信号或脉冲信号采集。
4. 电源管理模块

系统需要12V和5V两路电源,使用DC-DC转换模块实现稳压:

器件:LM2596。

设计要点

  • 高效转换,最大支持3A输出。
  • 提供稳定直流电压。

四、关键电路原理图设计要点

  1. 电磁铁控制电路

    • 电磁铁与MOSFET连接,MOSFET由MCU的GPIO引脚控制。
    • 加入二极管保护电路,防止感应电动势反击。
  2. 角度检测电路

    • 电位计接入ADC通道,测量摆杆角度变化。
    • ADC精度足够分辨5°的角度变化。

五、代码实现

MCU(STM32)C代码

#include "stm32f1xx_hal.h"

ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_TIM1_Init(void);

uint32_t readAngle();
void controlElectromagnet(uint8_t state);

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_ADC1_Init();
    MX_TIM1_Init();

    uint32_t angle;
    while (1) {
        angle = readAngle();
        if (angle >= 10 && angle <= 45) {
            controlElectromagnet(GPIO_PIN_SET);
            HAL_Delay(15000);  // 保持15秒
            controlElectromagnet(GPIO_PIN_RESET);
            HAL_Delay(5000);   // 停止5秒
        }
    }
}

uint32_t readAngle() {
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, 1000000);
    uint32_t adcValue = HAL_ADC_GetValue(&hadc1);
    HAL_ADC_Stop(&hadc1);
    return (adcValue * 45) / 4096;  // 根据ADC值计算角度
}

void controlElectromagnet(uint8_t state) {
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, state);
}

static void MX_ADC1_Init(void) {
    ADC_ChannelConfTypeDef sConfig = {0};
    hadc1.Instance = ADC1;
    hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
    hadc1.Init.ContinuousConvMode = DISABLE;
    hadc1.Init.DiscontinuousConvMode = DISABLE;
    hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc1.Init.NbrOfConversion = 1;
    HAL_ADC_Init(&hadc1);

    sConfig.Channel = ADC_CHANNEL_0;
    sConfig.Rank = 1;
    sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

static void MX_TIM1_Init(void) {
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};

    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 0;
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 0;
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim1.Init.RepetitionCounter = 0;
    HAL_TIM_Base_Init(&htim1);

    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
    HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);
}

static void MX_GPIO_Init(void) {
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    __HAL_RCC_GPIOB_CLK_ENABLE();
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

// 系统时钟配置等其他配置省略

总结

本设计考察了电磁控制、角度检测、MCU控制、定时器和PWM控制等知识点,重点在于实现电磁铁的精确控制及摆角检测与反馈,保障系统在指定范围内稳定运行。通过STM32的GPIO操作、ADC采样及定时器控制,满足了题目要求。


本题考察的主要知识点

 

硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号