2015年电赛控制类—STM32风力摆控制系统资料+源程序

目录

一、项目背景

二、主要研究内容

三、总体思路与研究方案

四、主要研究结果

五、程序

六、图片

一、项目背景

风力摆控制系统是一种利用风力控制物体做简谐运动的系统,风力的利用和控制技术在我国的发展尚未完善,国内正处于起步阶段。风力摆的工作原理具有较为典型的自动化控制理论特点,其控制方法多种多样。深入研究,在许多工程技术领域都有着广阔的开发前景。风力摆系统的摆体由风扇构成,通过调整风扇的转速实现摆动位置及摆动路线的控制,由于摆动机构的滞后性,实现精确控制具有一定难度。通过合理的摆结构设计,并利用摆线理论建模,设计并优化控制策略,利用闭环结构提升摆的轨迹运动准确性。其中的控制原理对于人们处理工业工程,同样存在借鉴。系统对风摆控制参数设定、抗扰因素测试等惯性滞后问题解决具有借鉴意义,同时也为分析该类问题建立了直观的测试平台。风力摆是一种通过风机作为唯一动力驱动的装置,深入研究该系统对空间飞行器、四旋翼无人机的运动状态和卫星姿态控制具有重大意义。

二、主要研究内容

  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,幅值相同就会画出不同半径的圆。

设计整个系统时将角度传感器mpu6050固定在摆杆上,传感器返回的数据通过串口显示在上位机上。在程序里设置两条目标值曲线,根据上位机显示的实际值波形与目标值曲线之间的差异进行PID参数的整定。实际上整个系统的目的就是让实际值曲线沿着目标值曲线的轨迹运动。

2. 实施方案

(1)电机的论证和选择

方案1:采用驱动、风机一体化的轴流风机

驱动、风机一体化的轴流风机有可以免去驱动的设计、节省结构空间、控制方法简单,散热快等优点,但是他的风力较小而且重量大,响应速度和其他电机相比也比较慢。

方案2:采用空心杯电机

空心杯电机重量小,风力大,起动、制动迅速,响应极快,能量转换效率很高。但是他的抗干扰能力较弱容易受到很多外界因素的影响。

综合以上两种方案选择方案2。

(2)驱动模块的论证和选择

方案1:采用TB6612FNG驱动模块

TB6612FNG驱动模块双通道输出,可同时驱动两个电机。每个通道可以输出最高1A的驱动电流,启动峰值电流达2A。TB6612FNG是基于MOSFET的H桥集成电路,效率远高于晶体管H桥驱动器。

方案2:采用L298N驱动模块

L298N驱动模块是一种高电压、大电流的驱动模块,它采用L298N双H桥直流电机驱动芯片,单桥可以输出的最大驱动电流为2A,驱动部分端子供电范围为5V~35V。

综合以上两种方案选择方案2。

(3)主控模块的论证与选择

方案1:采用STC89C51单片机

STC89C51单片机最高工作时钟频率为80MHz,内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,芯片内集成了通用8位 中央处理器和ISP Flash 存储单元。

方案2:采用STM32单片机

STM32单片机是ST公司使用arm公司的cortex-M3为核心生产的32bit系列的单片机,他的内部资源非常丰富,基本上接近于计算机的CPU了,最高工作频率72MHz。

综合以上两种方案选择方案2。

(4)角度检测模块的论证与选择

方案1:采用角度传感器

由UZZ9001和KMZ41组成角度测量模块,并使用矩形磁铁进行配合测量磁铁与KMZ41芯片之间的角度。UZZ9001将KMZ41输出的正余弦角度信号转换为数字信号,并通过SPI串口输出。但KMZ41调试比较困难,不方便用于测量倾角。

方案2:采用MPU6050模块

MPU6050测量角度集成了三轴MEMS陀螺仪,三轴MEMS加速度计。MPU6050对陀螺仪和加速度计分别用了3个16位的ADC,将其测量的模拟量转化为可输出的数字量。测量范围可控,通信采用I2C总线,操作简单。

综合以上两种方案选择方案2。

(5)电源的论证和选择

方案1:采用航模电池,

航模电池可以输出12V的电压,可反复充电。此方案的优点是风力摆与外界无需电源连线统安装方便,但电压会有波动,不能长时间稳定工作。

方案2:采用开关电源

利用开关电源虽然系统安装较复杂,但功率较大,电压稳定。

综合以上两种方案选择方案2

四、主要研究结果

经过我们团队的不懈努力,风力摆控制系统现在可以完成一下要求:

(1) 从静止开始,15s 内控制风力摆做类似自由摆运动,使激光笔稳定地

在地面画出一条长度不短于 50cm 的直线段,其线性度偏差不大于±

2.5cm,并且具有较好的重复性;

(2) 从静止开始,15s 内完成幅度可控的摆动,画出长度在 30~60cm 间可设置,长度偏差不大于±2.5cm 的直线段,并且具有较好的重复性;

(3) 可设定摆动方向,风力摆从静止开始,15s 内按照设置的方向(角度)

摆动,画出不短于 20cm 的直线段;

(4) 将风力摆拉起一定角度(30°~45°)放开,5s 内使风力摆制动达到静止状态。

(5) 以风力摆静止时激光笔的光点为圆心,驱动风力摆用激光笔在地面画圆,30s 内需重复 3 次;圆半径可在 15~35cm 范围内设置,激光笔画出的轨迹应落在指定半径±2.5cm 的圆环内;

(6) 在发挥部分(1)后继续作圆周运动,在距离风力摆 1~2m 距离内用一台 50~60W 台扇在水平方向吹向风力摆,台扇吹 5s 后停止,风力摆能

够在 5s 内恢复要求(5)规定的圆周运动,激光笔画出符合要求的轨迹;

五、程序

单片机接线方式

 OLED:
                SCL------PB5
                SDA------PB4
                RST------PB3
                D/C------PA15
        MPU6050:
                SCL------PB8
                SDA------PB9
        L298N:
                PWM1----PB1
                R_EN1----PB12
                L_EN1----PB13
                PWM2----PA1
                R_EN2----PB14
                L_EN2----PB15
        KEY:
                KEY1-----PA11
                KEY2-----PA12
                KEY3-----PB6
                KEY4-----PB7

源代码

bash 复制代码
#include "sys.h"

float Pitch,Roll,Yaw;
float KP1=0,KD1=0,KI1=0,KP2=0,KD2=0,KI2=0;
float Menu=1,A=0,B=0,X=0,Y=0,m=0,n=0;
int EN=0;
float Target_Position1=500,Target_Position2=500,Last_Bias1,Bias1,Pwm1,Integral_bias1,Last_Bias2,Bias2,Pwm2,Integral_bias2;
int main(void)
{        
        delay_init();
        IIC_Init();        
        JTAG_Set(SWD_ENABLE);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(9600);         //串口初始化为9600
        DMP_Init();
        KEY_Init();
        TIM4_Int_Init(49,7199);//10Khz的计数频率,计数到30为3ms 
        TIM3_PWM_Init(1499,0);         //不分频。PWM频率=72000000/900=80Khz
        TIM2_PWM_Init(1499,0);         //不分频。PWM频率=72000000/900=80Khz
        OLED_Init();
        LED_Init();
        EXTIX_Init();
        
        while(1)
        {        
        DataScope();
        oled_show();
        }
        
}

六、图片

风力摆图片

上位机图片

相关推荐
日晨难再2 小时前
嵌入式:STM32的启动(Startup)文件解析
stm32·单片机·嵌入式硬件
PegasusYu12 小时前
STM32CUBEIDE FreeRTOS操作教程(九):eventgroup事件标志组
stm32·教程·rtos·stm32cubeide·free-rtos·eventgroup·时间标志组
文弱书生65617 小时前
输出比较简介
stm32
黑客呀19 小时前
[系统安全]Rootkit基础
stm32·单片机·系统安全
小A15919 小时前
STM32完全学习——使用SysTick精确延时(阻塞式)
stm32·嵌入式硬件·学习
楚灵魈20 小时前
[STM32]从零开始的STM32 HAL库环境搭建
stm32·单片机·嵌入式硬件
小A15920 小时前
STM32完全学习——使用标准库点亮LED
stm32·嵌入式硬件·学习
code_snow1 天前
STM32--JLINK使用、下载问题记录
stm32·单片机·嵌入式硬件
youcans_1 天前
【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识
stm32·单片机·嵌入式硬件·电机控制·foc
YuCaiH1 天前
【STM32】MPU6050简介
笔记·stm32·单片机·嵌入式硬件