风力摆控制系统 设计报告
全国大学生电子设计竞赛B题风力摆设计报告
2015年全国大学生电子设计竞赛风力摆控制系统( B 题)2015 年8 月15 日本文以IAP单片机为控制核心,可以在运行过程中对User Flash的部分区域进行烧写;MPU605是陀螺仪与加速度传感器的结合,可实时检测出风力摆的状态并由单片机处理后通过PID控制算法实现闭环调节,实现对直流电机转速的控制以此来达到风力摆的动态平衡。
系统设计结构简单,制作成本低,控制精度高。
风力摆运行状态由液晶显示,智能性好,反应速度快,具有良好的人机交互界面。
目录一、系统方案 (1)1、电机的论证与选择12、单片机的论证与选择...............................................................13、电机驱动电路的论证与选择1二、系统理论分析与计算22.1保证系统稳定性的方法 (2)⑴选取合适的材料搭建支架 (2)(2)选取适宜的硬件提高精准度 (2)1、小型直流电机电路32、显示模块的电路33、电机驱动电路3三、系统设计31、系统流程图32、程序设计(见附录) ................................................................3四、测试方案及结果31、测试仪器32、测试结果33、测试分析 (5)五、结论与心得5六、参考文献5附录1 :源程序 (6)风力摆控制系统( B 题)【本科组】一、系统方案本系统主要由控制处理模块、角度,加速度检测模块、驱动模块、电源模块、显示组成,下面分别论证这几个模块的选择。
1、电机的论证与选择方案一:采用步进电机。
步进电机具有动态响应快、易于起停,易于正反转及变速的优点。
但缺点是它以步进式跟进,角度小于一个步距角时是系统响应盲区,而且经过测试步进电机在控制旋转臂时,抖动性大并且容易出现卡顿现象,所以不适合风力摆的控制。
方案二:采用小型轴流风机。
扭矩大,体积小,驱动电路简单,稳定强,负载能力强等优点。
风力摆系统设计
风力摆系统摘要风力摆系统是一种利用风力对物体进行位置控制的设备,在我国虽然还没有成品的销售与应用,但这种控制理论已经应用于方方面面。
目前的普遍问题风力摆系统的自动控制水平不高。
本设计将设计一款智能的风力摆控制系统。
主要控制程序由STM32来实现。
通过三轴陀螺仪进行角度采集,采集过来的角度值在进行卡尔曼滤波处理,最后将其应用到风力摆系统的控制程序中。
主要实现对风力摆进行偏角的收集和计算、控制其运动轨迹,包括其角加本设计主控制器利用STM32作为开发硬件系统。
它能够对系统进行良好的操控,包括控制与监测风力摆的运动状态、角度值、加速度和平衡参数。
轴部是通过万向节连接的,整体运动自如是通过它来实现。
系统整体架构清晰,便于操控。
关键词:风力摆;STM32;陀螺仪;卡尔曼滤波AbstractWindpendulumsystemisakindofmicrocontrolequipment,thoughnotyetfinishedp roductsalesandapplicationinourcountry,butthiskindofcontroltheoryhasbeenusedin everyaspect.Atpresentthecommonproblemsofwindpowersystemautomaticcontrollevelisnothigh.Thisdesignwilldesignaintelligentwindpendulumcontrolsystem.Thema incontrolprogramimplementedbythestm32.AcquisitionthroughthetriaxialgyroAngl e,theAngleofthecollectedvaluesinthekalmanfilterprocessing,theAnglevalueshavebe enobtainedthroughcomparingtheAnglevaluesbeforeandafterjudgmentaftertheosci llationamplitude,windpendulumswingwillneedthesizeoftheforceisconvertedintoPW Mvalue,thenoutputtothemotordrive,ofcourse,whenthemotortodrivetheoutputtone edtoaddtheprotectionlightcouplingforphotoelectricisolation.Controlsystemtoproce ssthedataofeachsensormeasurementandcalculation,thecorrespondingequipmentd eviceeffectively,goodcontrol,thesystemcanrunsafelyandeffectively.ThisdesignusesS TM32asmaincontrollerhardwaresystemdevelopment.Itcancarryonthegoodcontrolof thesystem,includingthecontrolandmonitoringwindpendulummotionstate,Angle,acc eleration,andbalanceparameters.Axisisthroughuniversaljointconnection,andtheove rallfreelyistoachievethroughit.Overallsystemstructureclear,easytocontrol.Keywords: STM32,microwindpendulumcontrollightcouplinggyroscopeContentsTOC \o "1-3" \h \z \u 摘要IIAbstractIIICONTENTSVI第1章绪论81.1课题背景81.2课题的来源91.3课题的国内外现状91.4本课题研究的内容10第2章总体方案的设计112.1系统功能、要求及原理分析122.1.1设计任务122.1.2系统机械结构122.2控制方式选择132.2.1角度测量方案的论证与选择132.2.2直流风机驱动模块的论证与选择14 2.2.3控制系统的论证与选择142.2.4风力摆运动控制方案的选择与论证15 2.2.5电源方案的论证与选择152.2.6电机速度控制162.2.7控制算法的选择162.2.8理论分析与计算162.3控制系统方案17第3章风力摆控制系统硬件设计173.1芯片选用183.2控制流程图203.3角度采集控制设计203.4程序滤波设计223.5光电隔离设计223.6系统主电路设计243.7电机控制设计243.8电源以及稳压模块设计273.8.1LM2596S电源模块273.8.2LM7805稳压芯片及应用电路28第4章控制系统程序设计294.1程序需求304.2主程序流程图304.3控制程序流程图304.4PWM输出设计314.4.1Pwm构成314.5PID及其应用344.5.1模拟PID控制规律及实现方法35 4.5.2数字PID控制364.5.3增量式PID374.5.4PID参数整定374.5.5PID控制分析384.6圆形轨迹摆动控制39致谢40参考文献41CONTENTSTOC \o "1-3" \h \z \u AbstractI摘要IIAbstractIIICONTENTSVI第1章绪论81.1课题背景81.2课题的来源91.3课题的国内外现状91.4本课题研究的内容10第2章总体方案的设计112.1系统功能、要求及原理分析122.1.1设计任务122.1.2系统机械结构122.2控制方式选择132.2.1角度测量方案的论证与选择132.2.2直流风机驱动模块的论证与选择14 2.2.3控制系统的论证与选择142.2.4风力摆运动控制方案的选择与论证15 2.2.5电源方案的论证与选择152.2.6电机速度控制162.2.7控制算法的选择162.2.8理论分析与计算162.3控制系统方案17第3章风力摆控制系统硬件设计173.1芯片选用183.2控制流程图203.3角度采集控制设计203.4程序滤波设计223.5光电隔离设计223.6系统主电路设计243.7电机控制设计243.8电源以及稳压模块设计273.8.1LM2596S电源模块273.8.2LM7805稳压芯片及应用电路28第4章控制系统程序设计294.1程序需求304.2主程序流程图304.3控制程序流程图304.4PWM输出设计314.4.1Pwm构成314.5PID及其应用344.5.1模拟PID控制规律及实现方法35 4.5.2数字PID控制364.5.3增量式PID374.5.4PID参数整定374.5.5PID控制分析384.6圆形轨迹摆动控制39致谢40参考文献41绪论课题背景风力在能源方面的应用最早可追溯到古代世纪初,那时人们利用风吹动帆,在海上驾驭大型船只。
风力摆控制系统设计
摘要:本次风力摆控制系统设计,采用4个直流风机垂直挂在长约70cm的细管下方,直流风机下方固定一个激光笔,当风力摆受控制按一定规律运动时,激光笔在地上画出相应的轨迹。
本设计以STC15W4K32S4系列的芯片作为主控芯片,采用LM298模块作电机驱动,通过单片机控制其输入占空比获得不同高低电平,达到对电机转速的控制。
空间角度测量中,本设计采用MPU-6050陀螺仪对空间角度进行准确追踪,精度高。
最终可将所测部分数据传输到LCD12864显示出来。
关键字:STC15W4K32S4单片机轴流风机陀螺仪一、设计任务设计一测控系统,控制驱动各风机使风力摆按照一定规律运动,激光笔在地面画出要求的轨迹。
1.基本要求(1)从静止开始,15s内控制风力摆做类似自由摆运动,使激光笔稳定地在地面画出一条长度不短于50cm的直线段,其线性度偏差不大于±2.5cm,并且具有较好的重复性;(2)从静止开始,15s内完成幅度可控的摆动,画出长度在30~60cm间可设置,长度偏差不大于±2.5cm的直线段,并且具有较好的重复性;(3)可设定摆动方向,风力摆从静止开始,15s内按照设置的方向(角度)摆动,画出不短于20cm的直线段;(4)将风力摆拉起一定角度(30°~60°)放开,5s内使风力摆制动达到静止状态。
2.发挥部分(1)以风力摆静止时激光笔的光点为圆心,驱动风力摆用激光笔在地面画圆,30s内需重复3次;圆半径可在15~35cm范围内设置,激光笔画出的轨迹应落在指定半径±2.5cm的圆环内;(2)在发挥部分(1)后继续作圆周运动,在距离风力摆1~2m距离内用一台50~60W台扇在水平方向吹向风力摆,台扇吹5s后停止,风力摆能够在5s内恢复发挥部分(1)规定的圆周运动,激光笔画出符合要求的轨迹;(3)其他。
二、方案论证基于本次风力摆控制系统的设计,我们有如下几种方案:方案一:采用传统的51单片机做主控芯片,其体积小,价格便宜,控制简单,但其运算速度慢,内部存储容量小,难以存储大体积的程序和实现快速精准的反应控制。
全国大学生电子设计竞赛B题风力摆设计报告精编版
全国大学生电子设计竞赛B题风力摆设计报告公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-2015年全国大学生电子设计竞赛风力摆控制系统(B题)2015年8月15日摘要本文以 IAP 单片机为控制核心,可以在运行过程中对User Flash的部分区域进行烧写;MPU6050是陀螺仪与加速度传感器的结合,可实时检测出风力摆的状态并由单片机处理后通过PID 控制算法实现闭环调节,实现对直流电机转速的控制以此来达到风力摆的动态平衡。
系统设计结构简单,制作成本低,控制精度高。
风力摆运行状态由液晶显示,智能性好,反应速度快,具有良好的人机交互界面。
目录风力摆控制系统(B题)【本科组】一、系统方案本系统主要由控制处理模块、角度,加速度检测模块、驱动模块、电源模块、显示组成,下面分别论证这几个模块的选择。
1、电机的论证与选择方案一:采用步进电机。
步进电机具有动态响应快、易于起停,易于正反转及变速的优点。
但缺点是它以步进式跟进,角度小于一个步距角时是系统响应盲区,而且经过测试步进电机在控制旋转臂时,抖动性大并且容易出现卡顿现象,所以不适合风力摆的控制。
方案二:采用小型轴流风机。
扭矩大,体积小,驱动电路简单,稳定强,负载能力强等优点。
综合比较以上两种电机,结合设计所需平稳的控制摆杆处于竖直状态,故选择小型轴流风机。
2、单片机的论证与选择方案一:采用 AT89C52 单片机。
AT89C52 单片机是一种低功耗、高性能CMOS 8 位微控制器,具有 8K 在系统可编程 Flash 存储器。
方案二:采用IAP15F2K61S2 单片机。
IAP 系列单片机具有低功耗、高速度、超强抗干扰等优点。
方案三:采用 STC89C52RC 单片机本身带有有 8 路十位 AD 转换和 2 路PWM,而且处理速度比一般单片机要快,精度高。
综合比较以上三种单片机。
为了更方便、高精度、高速度地控制系统,完成题目要求,故选择 IAP15F2K61S2 单片机为主控芯片。
全国大学生电子设计竞赛设计报告风力摆
2015年全国大学生电子设计竞赛风力摆控制系统(B题)2015年8月15日摘要本风力摆系统主要包括单片机控制模块,开关电源(电源模块)激光笔及小型轴流风机,以及基于六轴倾角仪mpu6050的闭环控制系统。
其中控制模块采用STM32为核心控制芯片,激光笔作为系统的执行机构,12V2.5A的小型轴流风机作为驱动风力摆的唯一动力,用12V的开关电源驱动轴流风机。
轴流风机和摆杆通过万向节固定在支架上(用粗股导线将风力摆悬挂在支架上)。
固定在支架上,测量得到的角度经过软件处理得到风力摆摆动所需要的PWM值。
(本系统的PID 算法算法是通过实际经验试验出风力摆的控制规律,稳定的完成风力摆运动过程中激光笔画轨迹。
)关键词:风力摆; STM32; 轴流风机; PID算法; mpu6050目录一、系统结构方案与设计 (1)1、机械结构设计 (1)2、主控芯片的论证与选择 (1)3、风力摆结构方案的论证和选择 (2)4、运动控制算法的论证和选择 (2)二、系统理论分析与计算 (2)1、摆杆位置检测 (2)2、风力摆运动控制分析 (2)3、控制算法分析 (2)三、电路与程序设计 (3)1、电路的设计 (3)(1)STM32最小系统电路 (4)(2)稳压电源电路 (4)2、程序的设计 (4)(1)程序功能描述与设计思路 (4)(2)程序流程图 (4)四、测试方案与测试结果 (5)1、测试方案 (5)2、测试条件与仪器 (5)3、测试结果及分析 (5)(1)测试结果(数据) (5)(2)数据分析与结论 (7)五、结论与心得 (7)六、参考文献 (8)附录1:电路原理图 (9)附录2:源程序 (11)风力摆控制系统(B题)【本科组】一、系统结构方案与设计1、机械结构设计我们以生钢为材料加工成的十字作为风力摆支架的底盘,结构坚固克服摆动时的震动。
以实心的钢棒作为摆杆减小了摆动时的自旋,用万向节将摆杆和支架的水平臂连接保证了摆动的灵活性以及达到了摆动角度和速度的精确控制。
风力摆控制系统方案
风力摆控制系统方案简介风力摆控制系统是用来控制风力摆的运动的一种系统。
风力摆通常用于测量风力的强度和方向,以便在风能利用方面进行相应的调整和优化。
本文将介绍一个设计用于控制风力摆运动的系统方案。
目标本系统的目标是实现对风力摆的精确控制,使其可以随需要而停止、开始或改变方向。
通过控制风力摆的运动,可以提高其测量精度,并确保风能的高效利用。
系统组成本系统主要由下面几个组成部分构成:1. 风力摆风力摆是本系统的核心部件,它用于测量风向和风速。
风力摆通常由一个垂直铰接杆和一个悬挂在杆上的摆锤组成。
当风吹过摆锤时,摆锤会向相反方向摆动,从而使测量者能够通过观察摆动的幅度和方向来判断风的强度和方向。
2. 传感器为了实现对风力摆的控制,需要安装相应的传感器来检测风力摆的姿态和运动。
常用的传感器包括倾斜传感器和加速度传感器。
倾斜传感器用于检测风力摆的倾斜角度,而加速度传感器用于检测风力摆的加速度。
这些传感器可以提供给控制系统必要的数据,以便进行相应的控制。
3. 控制器控制器是系统中的核心部件,负责接收传感器的数据并根据设定的控制算法对风力摆进行控制。
控制器通常由微处理器或可编程逻辑控制器(PLC)组成,它可以根据需求改变风力摆的运动方向、幅度或停止风力摆的运动。
4. 电源与通信模块为了保证系统的正常运行,需要为系统提供稳定的电源。
另外,为了方便对系统进行监控和控制,还需要配备相应的通信模块,使得系统可以与外部设备进行数据传输和命令交互。
系统工作原理本系统工作的基本原理是通过控制器对风力摆进行精确控制。
控制器通过接收传感器提供的数据来判断当前风力摆的状态,并根据设定的控制算法采取相应的控制策略。
控制信号经过放大和处理后,通过执行机构控制风力摆的运动。
系统的工作流程如下:1.传感器采集风力摆的姿态和运动数据,并将数据传输给控制器。
2.控制器根据接收到的数据判断风力摆的状态,如姿态角度、加速度等。
3.控制器根据设定的控制算法,计算出相应的控制信号。
简易风力摆报告设计
摘要设计了一个简易风力摆控制装置,由直流风机组,陀螺仪,直流减速电机以及激光笔等组成。
以MSP430F149单片机为核心,用PWM波控制控制电机转速,调节风力大小,并以四个风机上下与左右同面两两并在一起对碳素管及激光笔进行工作,使细杆及激光笔在风机的作用下可进行自由摆动且进一步可控摆动在地上划线,具有很好的重复性,并且可以设定摆动方向且画短线,已经能够在将风力摆拉起一定角度放开后可以在规定时间内达到平衡。
关键词:风力控制摆、陀螺仪、轴流风机、PWM调速、MSP430单片机风力摆控制系统(B题)1方案设计与选择设计内容要求一个下端悬挂有(2~4只)直流风机的细管上端固定在结构支架上,只由风机提供动力,构成一个风力摆,风力摆上安装一个向下的激光笔。
通过单片机代码指令控制驱动风机使风力摆按照一定的规律运动,并使激光笔在地面画出要求的轨迹,风力摆结构图如图1所示。
图1风力摆结构图设计要求基本要求(1)从静止开始,15s 内控制风力摆做类似自由摆运动,使激光笔稳定地在地面画出一条长度不短于50cm 的直线段,其线性度偏差不大于±,并且具有较好的重复性;(2)从静止开始,15s 内完成幅度可控的摆动,画出长度在30~60cm 间可设置,长度偏差不大于± 的直线段,并且具有较好的重复性;(3)可设定摆动方向,风力摆从静止开始,15s 内按照设置的方向(角度)摆动,画出不短于20cm 的直线段;(4)将风力摆拉起一定角度(30~45°)放开,5s 内使风力摆制动达到静止状态。
发挥部分(1)以风力摆静止时激光笔的光点为圆心,驱动风力摆用激光笔在地面画圆,30s 内需重复3 次;圆半径可在15~35cm 范围内设置,激光笔画出的轨迹应落在指定半径± 的圆环内;(2)在发挥部分(1)后继续作圆周运动,在距离风力摆1~2m 距离内用一台50~60W 台扇在水平方向吹向风力摆,台扇吹5s 后停止,风力摆能够在5s 内恢复发挥部分(1)规定的圆周运动,激光笔画出符合要求的轨迹;(3)其他。
风力摆控制系统方案
风力摆控制系统方案(凌阳版)一、硬件选型(1)万向节(购买的时候注意万向节灵活度)(2)陀螺仪(3)单片机控制板:SPM 75F2413 EVM(也可选用其他单片机)(4)风扇驱动板:VLN2003(5)激光笔(尽量小)(6)PVC管(10MM左右购买的时候长一点根据构架截断)(7)风机:每组4个,同一型号,且符合元器件清单要求(直径5~10cm,5~12V DC)即可(电流值选择偏大的)(8)整体支架结构(暂定凌阳3D打印机直接打印)二、 编程控制思路本系统属于个双摆系统,动力来源由悬挂的一组直流风机。
题目的第一步:由于风机的风力的限制,不可能实现直接把风摆的高度吹到实验的要求的高度。
于是需要利用单摆的思路,在摆动过程中增加摆动的能量。
软件设计思路:第一步:1.由于单摆的周期,T = 2π*根号(L/G)L 位杆的长度,G为重力系数。
在程序启动时,可以近似的根据这个时间转换风机旋转方向。
2.但是由于摆幅越来越大后,陀螺仪的测量的角加速度更加明显,可以通过测量陀螺仪的角加速的,进行判断风机换向的时间点。
第二步:这一步主要的要求是,摆幅可控,可设计。
每次在第一步基础上,在风机换向的时候进行PWM脉宽调节控制,进行风力的调节。
第三步:这一步主要是开始使用两个方向的风机进行动力合成,从而实现摆动方向的改变,换向的时候两组电机同时换向。
方向可以通过矢量合成,通过查询sin表格,进行每个风力计算。
(在路劲规划好的基础上可以用陀螺仪进行路径修正)。
第四步:的思路和第一步的思路正好反过来,需要有陀螺仪的辅助,给定陀螺仪反馈回来的角加速度反向的风力,实现制动,在摆动角度比较小的时候在关闭电机即可。
风力摆控制系统
摆杆
风机 1 风机 2
图 2.3 两个直流风机组合示意图
4
方案 2: 使用四个直流风机,用两个矩形塑料板组成十字形,分别将四个直 流风机放置在四个点上如图 2.4 所示。每个轴上由两个直流风机控制风力摆的摆 动,可以很好地做到加速摆动与快速制动,能够更容易的实现题目的要求。
(2) 在发挥部分(1)后继续作圆周运动,在距离风力摆 1~2m 距离内用 一台 50~60W 台扇在水平方向吹向风力摆,台扇吹 5s 后停止,风力摆能够在 5s 内恢复发挥部分(1)规定的圆周运动,激光笔画出符合要求的轨迹;
(3) 其他。
2 方案论证与设计
2.1 总体方案描述
本设计的结构示意主视图与俯视图如下图 2.1 所示,为了实现题目中的要求, 我们在初始点 O 处 1~4 号直流风机全部开始运转,1、3 号直流风机用来调节垂 直于运动方向上的距离,使其摆动时偏差不超过允许范围;2、4 号直流风机同时 运转,但转速不同,使风力摆向风速小的方向运动。风力摆无法直接运动到指定 位置,所以需要多次摆动,每次到达最高点时将其推向另一侧,最终使其实现摆 动。采用姿态采集模块来测量摆动角度,进而推断画线长度;通过几个在直流风 机的合力使风力摆向任意指定方向摆动;改变各个直流风机的风速使其尽快制动。 调节各个风机使其在有无干扰的情况下完成画圆功能。
方案 1:12864 液晶显示,12864 不仅能显示数字符号,还能显示汉字与图 形,操作方法与其他液晶显示相似。但其体积较大,并且价格较高。
大学生电子设计竞赛论文-风力摆控制系统的设计
2015 年全国大学生电子设计竞赛论文B 题:风力摆控制系统的设计2015年8 月15 日摘要该系统以高速单片机STC89C52R为控制核心,主要由物理框架、数据采集系统、主控系统、执行系统四大部分组成。
主控系统以高速单片机STC11F52X助核心,实现对执行系统对直流电机的控制,从而实现基于自由摆的摆动控制系统。
此方案可行性高,且精确度较高。
关键词:单片机( STC11F52X)E ,直流电机,风力摆摆动控制目录1、系统方案论证与选择 (1)1.1 控制系统的论证与选择 (1)1.2 供电系统的论证与选择 (2)1.3 风力摆角度调整系统的论证与选择 (2)2、系统理论分析与计算 (3)2.1 建模与控制方法 (3)2.1.1 基本部分的第一项控制方法 (3)2.1.2 基本部分的第二项控制方法 (3)3 、硬件电路设计与分析 (3)3.1 系统电路总体框图 (3)3.2 主要模块电路的设计 (4)3.2.1 继电器模块电路 (4)3.2.2 单片机模块电路 (4)4、测试方案与测试结果 (5)4.1 测试仪器 (5)4.2 测试方案以及结果...4.2.1 测试基本部分(1)4.2.2 测试基本部分(2).5、总结....................5.1硬件小结 ............5.2软件小结 ............5.3 心得体会 ........... 附录1电路原理图和PCB版图附录2主要元器件清单 (5) (5)...514 14 15 15 16 18风力摆控制系统(B题)【本科组】1系统方案论证与选择本任务要求设计制作一个基于风力摆测控系统,控制驱动各风机使风力摆按照一定规律运动,激光笔在地面上画出要求的轨迹。
据题目要求分析,我们得到基本思路,如图 1. i所示:图1. i 系统总体方案i.i控制系统的论证与选择方案1:用继电器来产生直流机的控制信号。
它是利用电磁效应实现电路开、关控制作用的原件,广泛应用在电子设备、仪器仪表及自动化设备中。
L002风力摆控制系统
方案比较与论证风力摆控制系统摘要本系统为风力摆控制系统,由四只直流风机用碳素杆通过万向节固定在支架上构成。
以STM32f103高性能单片机作为系统的控制核心。
采用Mpu6050传感器,利用陀螺仪和加速度计来测量风力摆运动时坐标系三个轴的角度和加速度,然后解算其运动姿态,用BTS7971大功率芯片驱动电路来驱动四个不同朝向的风机进行控制,达到准确控制风力摆运动轨迹的目的。
本系统可在做出幅度可控的直线运动,线性误差在范围内,具有较好重复性。
可作曲线运动。
关键词: 风力摆; STM32; Mpu6050; 驱动电路【 abstract 】this system for wind pendulum control system, by four dc fan with carbonrod through the universal joint is fixed on the bracket. STM32high-performance single chip microcomputer is control core of the system.Mpu6050 sensor, the use of gyroscope and accelerometer to measure windpendulum motion coordinate system when the Angle of the three axis andacceleration, and then calculating the movement posture, with BTS7971chip driver circuit to drive the four different towards fan control, toachieve the purpose of accurate control wind pendulum motion.This systemcan be made the amplitude, the linear motion of the controlled linear errorwithin the range, has a good repeatability and can do curve movement. key words : wind pendulum ; STM32 ; Mpu6050 ; drive circuit方案比较与论证一、方案比较与论证1.1硬件方案系统主要由:MPU6050传感器模块,BTS7971驱动电路模块,运动模式选择模块,激光笔等组成。
2015全国大学生电子设计竞赛设计报告B题 风力摆控制系统
2015年全国大学生电子设计竞赛风力摆控制系统(B题)参赛学校:长安大学队伍编号:XZ015参赛队员:崔曜东、马若斯、李宝才指导教师:2015年8月15日摘要本系统为由STM32单片机控制模块、姿态采集模块、风力摆模块、人及交互系统以及风力摆机械结构组成的闭环控制系统。
MPU-6050陀螺仪传感器实时采集风力摆的姿态角及角速度,STM32f103单片机通过PID算法调节轴流电机转速以控制风力摆。
风力摆能够实现快速起摆、画线、恢复静止的功能,并能准确画圆。
同时系统可以通过键盘设定运行模式和相关角度值,风力摆的角度和运行时间由液晶显示,具有较好人机界面。
系统设计结构简单,制作成本低,控制精度高。
关键词:STM32f103、MPU-6050模块、PWM调速AbstractThis system is composed of STM32 control module, attitude acquisition module, wind force model, human and interactive system, and the closed-loop control system composed of wind force. The attitude and angular velocity of the MPU-6050 gyroscope sensor are acquired in real time, and the speed of the motor is controlled by the PID algorithm, and the speed of the motor is controlled by the STM32f103 algorithm. Wind power can be achieved quickly, draw lines, restore the function of static, and can accurately draw circle. At the same time, the system can set up the operating mode and the relevant angle value, and the angle of the wind force and the running time of the system are displayed by the LCD. The system has the advantages of simple structure, low cost and high control precision.Key words: MPU-6050, STM32f103 module, PWM speed control目录风力摆控制系统(B题)【本科组】一、系统方案本风力摆控制系统主要包括控制模块、电源模块、姿态采集模块、轴流风机及驱动模块、LCD显示模块、人机交互系统以及风力摆机械结构组成。
全国大学生电子设计竞赛设计报告
全国大学生电子设计竞赛设计报告Corporation standardization office #QS8QHH-HHGX8Q8-GNHHJ82015年全国大学生电子设计竞赛风力摆控制系统(B题)2015年8月15日摘要本参赛小组设计制作了风力摆控制系统,实现了风力摆系统的摆起及画圆控制。
该系统主要由机械部分和控制系统构成,其中机械部分包括风机、支架、万向节以及摆杆等;控制部分主要由单片机最小系统、传感器以及直流电机驱动电路组成。
该系统以XS128单片机为控制核心,利用陀螺仪检测摆杆偏角,经AD转换构成闭环,采用PD 控制算法,通过PWM对风机进行调速,驱动风力摆装置以调节摆杆的偏角,使风力摆摆起并画圆,实现对风力摆的实时控制。
该系统具有结构简单,制作成本低,控制精度较高,抗干扰能力强等优点。
关键词:风力摆,陀螺仪,单片机,PWM,PD算法AbstractThe team created wind pendulum control system design and implement the wind the swing-up and circle of pendulum control.The system mainly consists of mechanical part and control system, mechanical parts including fan, stents, universal joint, and swinging rod, etc.Control part is mainly composed of single chip microcomputer minimum system, sensor and the composition of dc motor drivecircuit.XS128 single chip microcomputer as control core, the system using the gyroscope detection swinging rod Angle, the AD conversion constitute a closed loop, the PD control algorithm, through the PWM speed of the fan, wind pendulum device driver to adjust the Angle of swinging rod, and circle the wind sway, but to realize the real-time control for wind pendulum.The system has simple structure, low production cost, high control precision, strong anti-interference ability, etc.Key words: Wind, gyroscope, MCU, PWM, PD algorithm目录风力摆控制系统(B题)【本科组】一、系统方案本系统主要由CPU模块、驱动模块、陀螺仪模块、电源模块、风机模块组成,下面分别论证这几个模块的选择。
风力摆控制系统电子设计大赛报告
2015年全国大学生电子设计竞赛风力摆控制系统(B题)【本科组】2015年8月14日摘要本系统采用STC89C52单片机最小系统作为控制中心,与电机驱动模块,直流风机、万向节、摆杆、反馈装置一起构成摆杆角度和电机角速度的双闭环调速系统。
由于直流电机属于一阶惯性,经分析在控制周期远小于电机时间常数的情况下建立电压与加速度的近似比例关系模型。
选择直流风机驱动摆杆摆动,采用MPU6050测量摆杆的瞬时角加速度,单片机输出占空比可变的PWM波控制电机角加速度,从而控制电机的加速度和给摆杆固定轴心的扭矩,实现控制摆杆的摆动幅度并最终达到近似自由摆的稳定状态。
控制方式采用PID控制,比例环节进行快速响应,积分环节实现无静差,微分环节减小超调,加快动态响应。
从而使该系统具有良好的性能,能很好地实现起振、单摆、画线、360度画圆旋转,同时具有很好的抗扰动性能。
关键词:STC89C52 直流风机加速度自由摆目录1系统方案 (2)1.1 角度传感器模块的论证与选择 (2)1.2 风机驱动模块的论证与选择 (2)1.3 电源模块的论证与选择 (3)1.4 主控制器的论证与选择 (3)2系统理论分析与计算 (3)2.1 XXXX的分析 (3)2.1.1 XXX (3)2.1.2 XXX (3)2.1.3 XXX (3)2.2 XXXX的计算 (4)2.2.1 XXX (4)2.2.2 XXX (4)2.2.3 XXX (4)2.3 XXXX的计算 (4)2.3.1 XXX (4)2.3.2 XXX (4)2.3.3 XXX (4)3电路与程序设计 (4)3.1电路的设计 (4)3.1.1系统总体框图 (4)3.1.2 XXXX子系统框图与电路原理图 (4)3.1.3 XXXX子系统框图与电路原理图 (4)3.1.4电源 (4)3.2程序的设计 (5)3.2.1程序功能描述与设计思路 (5)3.2.2程序流程图 (5)4测试方案与测试结果 (5)4.1测试方案 (5)4.2 测试条件与仪器 (5)4.3 测试结果及分析 (6)4.3.1测试结果(数据) (6)4.3.2测试分析与结论 (6)附录1:电路原理图 (7)附录2:源程序 (8)风力摆控制系统(B题)【本科组】1系统方案本系统主要由主控模块、角度传感器模块、轴流风机驱动模块、机械结构模块、电源模块组成,下面分别论证这几个模块的选择。
风力摆控制系统设计
科技论坛图1陀螺仪MPU6050模块原理图表1风力摆画长于50cm 直线测试1系统方案采用STC12C5A60S2/AD/PWM 系列单片机,它是宏晶科技生产的单时钟/机器周期(1T )的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成M AX810专用复位电路,2路PWM ,8路高速10位A/D 转换(250K/S),针对电机控制,强干扰场合。
采用自制流风机,不受材料的限制,制定满足要求并且适用的流风机,扭矩大,体积小,驱动电路简单,稳定强,负载能力强。
M PU-6000为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。
M PU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C 端口连接其他厂牌之加速器、磁力传感器、其他的特征包含内建的温度感测器、包含在运作环境中仅有±1%变动的振荡器。
按偏差的比例(P )、积分(I )和微分(D )进行控制的PID 控制器(亦称PID 调节器)是应用最为广泛的一种自动控制器。
它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID 控制器是一种最优控制[1、2、3]。
2系统理论分析与计算采用高精度的陀螺加速度计M PU6050不断采集风力摆姿态角数据。
M PU6050集成了3轴M EM S 陀螺仪,3轴M EM S 加速度计,以及一个可扩展的数字运动处理器DM P 。
M PU6050和所有设备寄存器之间的通信采用400kHz 的I2C 接口,实现高速通信。
且内置的可编程卡尔曼滤波器,采用最优化自回归数据处理算法精确测量风力摆当前姿态角。
M PU6050对陀螺仪和加速度计分别用了三个16位的ADC ,将其测量的模拟量转化为可输出的数字量,通过DM P 处理器读取测量数据然后通过串口输出[4、5]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:本系统主要是以STM32单片机为控制芯片控制4只直流轴流风机,从而调节风机转速来控制使风力摆呈现不同状态的控制系统。
该系统主要由主控板,无线遥控器,直流轴流风机,摆架框架等四大部分组成风力摆控制系统。
关键字:风力摆无线 STM32单片机直流轴流风机一.系统方案1.系统方案论证本系统主要由遥控模块、控制模块、陀螺仪模块、直流轴流风机组成,添加一些辅助电路作为扩展功能。
系统工作有六种工作模式,使用无线遥控切换模式并显示。
下面分别论证这几个模块的选择。
1.1直流风机的论证与选择方案一:使用直流鼓风机。
直流鼓风机的机械摩擦非常小,具有较大的精度,并能提供足够的风力进行运动。
但在实验过程中,风机启动速度较慢,且由于其自身重量过大,风摆在运动过程中受惯性影响极大,不能有效的完成任务要求。
方案二:采用直流轴流风机。
直流轴流风机是在固定位置使空气流动,自身重量和体积都比较小,且出风口大,能够很好的提供动力与控制。
在实验过程中能够较快的启动,并能较好的实现任务要求,符合实验需要。
综合以上两种方案,风力摆在运动过程中需要进行实时控制摆杆的姿态,且需要风机启停反应快,故选择方案二。
1.2控制器模块的论证与选择根据设计要求,控制器主要用于计算摆杆姿态、控制直流轴流风机PWM、使摆杆能完成相应等功能。
方案一:采用STC89C51作为系统控制器。
它的技术成熟,成本低。
STC89C51是8位的单片机,数据传输速度慢,在用于精密的操作时,不能满足实时控制的要求,且复杂的控制算法难以实现,不利于控制。
方案二:采用意法半导体公司的STM32F103单片机作为控制器。
STM32系列单片机是32位、RISC、低功耗的处理器。
在进行高精密的操作时,处理能力非常强,运算速度快,具有很好的控制能力,且成本低,更符合实验要求。
综合考虑以上两种方案,采用方案二。
2.系统结构根据上述方案的论证,我们确定以STC32F103作为控制核心,采用型号为PFB0812XHE的直流轴风机控制摆杆运动,用陀螺仪MPU6050检测状态数据,并将采集到的数据传输给控制板,然后通过单片机计算处理得出摆杆的姿态并调整直流轴风机的转速,从而使摆杆快速获得需要的状态,通过对应的无线遥控,设置相应的功能并发送给控制板,使其实现对应的功能,完成任务要求。
系统设计框图如图1所示图1 设计系统框图二.系统理论分析与计算1.直流轴风机选型本系统采用型号为PFB0812XHE的直流轴风机控制摆杆运动,电压为12V,电流4.65A。
此型号直流轴风机大小适中,重量较轻,产生的风力较大且能较快的启动,符合本系统要求。
2.摆杆状态检测本系统采用陀螺仪MPU6050采集摆杆的当前姿态数据,将采集到的数据实时传递给单片机,通过单片机PID计算处理后控制PWM的输出,使直流轴流风机转速改变,进而使摆杆达到相应的任务要求。
3.运动控制风力摆的运动是连续运动,摆杆的变化也是连续的变化过程,因此我们采用PID控制算法。
对直流电机或多圈电位器为执行器件的系统中,基本采用增量式PID算法进行控制。
由于单个直流轴风机,只能产生一个方向的力,为了便于控制,我们将4个直流轴风机直立围绕成一个正方形(出风口向外),使四周都能产生相同的风力。
然后单片机将陀螺仪MPU6050采集到的数据,确定其当前摆杆的姿态,在进行PID 算法以后,将得到的结果对应去控制直流轴风机的转速,以达到控制摆杆完成相应动作的效果三.电路与程序设计1.电路设计(1)陀螺仪模块陀螺仪MPU6050模块的实物硬件图如图3所示。
它与单片机的连接图如图附录总图所示。
在这里主要使用的是它的3轴定位功能和加速度功能。
图2 MPU6050硬件模块图(2)最小系统模块STM32单片机是意法半导体公司生产的32位低功耗、具有精简指令集的混合信号处理器。
其主要特点是处理能力强、运算速度快、低功耗等。
在这里主要使用开发板原理图如图4所示。
图3 最小系统板原理图2.程序设计 程序功能描述本系统的软件部分主要由数据采集模块、无线接收和发送、直流轴流风机PWM 、PID 控制模块函数组成。
当单片机上电后,根据不同的按键,遥控模块无线发送对应的工作模式,风力摆的控制板按照接收到的不同工作模式,对应的完成不同的的要求工作。
软件部分可实现对读取陀螺仪输出的数据信号,对直流轴流风机进行控制,实现摆杆的运动。
程序流程图如图5所示。
部分程序如附录一所示。
图4 系统软件流程图模式一:从静止开始,15s 内控制风力摆做自由摆运动,使激光笔稳定地在地面画出一条长度不短于50cm 的直线段,其线性度偏差不大于正负2.5cm ,并且具有较好的重复性;模式二:从静止开始,15s 内完成幅度可控的摆动,画出长度在30—60cm间可设置,长度偏差不大于正负2.5cm的直线段,并且具有较好的重复性;模式三:可设定摆动方向,风力摆从静止开始,15s内按照设置的方向(角度)摆动,画出不短于20cm的直线段;模式四:将风力摆拉起一定角度(30—45度)放开,5s内是风力摆制动达到静止状态;模式五:以风力摆静止时激光笔的光点为圆心,驱动风力摆用激光笔在地面花园,30s内需重复3次;圆半径可在15—35cm范围内设置,激光笔画出的轨迹应落在制定半径2.5cm的圆环内;模式六:在发挥部分(1)后继续作圆周运动,在距离风力摆1—2m距离内用一台50—60w台扇在水平方向吹风力摆,台扇吹5s后停止,风力摆能够在5s 内恢复发挥部分(1)规定的圆周运动,激光笔画出符合要求的轨迹。
四.测试方案与测试结果1.测试方案按照调试的顺序,按照以下步骤进行调试。
1)调试直流轴流风机的(PWM)速度2)调试单片机与陀螺仪之间的数据传输3)调试系统PID控制的三个参数值:balance.kp、balance.ki、balance.kd 4)调试各模式相应直流轴流风机的转速5)调试两个无线模块的数据传输2.测试仪器:数字示波器,秒表,米尺,量角尺,风速仪,12V5A直流电源。
3.测试结果硬件实物图如附录三所示。
(1)直流轴流风机的PWM能够正常控制其运转速度(2)陀螺仪能正常的将数据发送给控制板,其中陀螺仪MPU6050模块的通信模式为IIC(3)PID控制的调试:确定balance.kp、balance.kd、balance.kd三个参数的值(4)各模式直流轴流风机的转速,需要反复测试,目前已达到比较理想的转速,其测试结果如下表一表一测试数据表(5)两个无线NRF模块,能够较精确相互收发数据,完成两块单片机之间的数据传递4.总结本次设计的风力摆控制系统完全可以实现设计基本要求和发挥部分的要求,系统稳定性较好,成功的完成了本次比赛的任务和要求。
参考文献【1】全国大学生电子设计竞赛组委会编《全国大学生电子设计竞赛获奖作品汇编》[M].北京理工大学出版社.2006年【2】黄正瑾.《电子设计竞赛赛体解析》[M].东南大学出版社. 2003年.第五章【3】周航慈.《单片机应用程序设计》[M]. 北京航空航天大学出版社.2006年【4】李朝青.《单片机原理及接口技术》[M]. 北京航空航天大学出版社. 2005年.第四章附录一:include "sys.h"#include "usart.h"#include "delay.h"#include "led.h"#include "key.h"#include "beep.h"#include "24l01.h"#include "spi.h"#include "imu.h"#include "motor.h"#include "mpu6050.h"u8 Rx_buf[RX_PLOAD_WIDTH];int main(void){u8 key_board;u8 i=0;Stm32_Clock_Init(9);//系统时钟设置delay_init(72);LED_Init();uart_init(72,115200);KEY_Init();TIM4_PWM_Init(999,0);mpu6050_init();delay_ms(200);mpu6050_update();Timer3_Init(199,719);NRF24L01_Init();while(NRF24L01_Check()){LED1 = ~LED1;delay_ms(30);}printf("NRF24L01 OK!");NRF24l01_poweroff();delay_ms(3);NRF24L01_RX_Mode();delay_ms(3);while(1){key_board = KEY_Scan(0);if(key_board==1)//基本功能1{while(1){test_1(40);}}if(key_board==4){while(1){test_2(45);}}if(key_board==5){while(1){for(i=0;i<4;i++){ for(i=0;i<3;i++){test_5(20);delay_ms(1000);}for(i=0;i<3;i++){ TIM4->CCR1=1000;delay_ms(1000);TIM4->CCR1=400;}}while(1){if((angle_rao_x<0)&&(angle_rao_y<0)) {TIM4->CCR1=400;TIM4->CCR4=400;TIM4->CCR2=800;TIM4->CCR3=400;delay_ms(1000);}if((angle_rao_x<0)&&(angle_rao_y>0)) {TIM4->CCR1=800;TIM4->CCR2=800;TIM4->CCR3=400;TIM4->CCR4=400;delay_ms(1000);}if((angle_rao_x>0)&&(angle_rao_y>0)){TIM4->CCR1=800;TIM4->CCR4=400;TIM4->CCR2=400;TIM4->CCR3=400;delay_ms(1000);}if((angle_rao_x>0)&&(angle_rao_y<0)){TIM4->CCR3=600;TIM4->CCR4=700;TIM4->CCR1=400;TIM4->CCR2=400;delay_ms(1000);}}}}}#include "24l01.h"#include "delay.h"#include "spi.h"const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x01,0x02,0x03,0x04,0x05}; //发送地址const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x01,0x02,0x03,0x04,0x05}; //发送地址void NRF24l01_poweroff(void){NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x00);}void NRF24L01_Init(void){RCC->APB2ENR|=1<<3; //使能PORTB时钟RCC->APB2ENR|=1<<2; //使能PORTA时钟GPIOA->CRL&=0XFFF0FFFF;GPIOA->CRL|=0X00030000; //PG6 7 推挽GPIOA->CRH&=0XFFFFFFF0;GPIOA->CRH|=0X00000003; //PG6 7 推挽GPIOB->CRL&=0XFFFFFFF0;GPIOB->CRL|=0X00000004; //PG8 输入SPI1_Init(); //初始化SPISPI1->CR1&=~(1<<6); //SPI设备失能SPI1->CR1&=~(1<<1); //空闲模式下SCK为0 CPOL=0SPI1->CR1&=~(1<<0); //数据采样从第1个时间边沿开始,CPHA=0SPI1->CR1|=1<<6; //SPI设备使能NRF24L01_CE=0; //使能24L01NRF24L01_CSN=1; //SPI片选取消}u8 NRF24L01_Check(void){u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};u8 i;SPI1_SetSpeed(SPI_SPEED_16); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,buf,5);//写入5个字节的地址.NRF24L01_Read_Buf(TX_ADDR,buf,5); //读出写入的地址for(i=0;i<5;i++)if(buf[i]!=0XA5)break;if(i!=5)return 1;//检测24L01错误return 0; //检测到24L01}u8 NRF24L01_Write_Reg(u8 reg,u8 value){u8 status;NRF24L01_CSN=0; //使能SPI传输status =SPI1_ReadWriteByte(reg);//发送寄存器号SPI1_ReadWriteByte(value); //写入寄存器的值NRF24L01_CSN=1; //禁止SPI传输return(status); //返回状态值}u8 NRF24L01_Read_Reg(u8 reg){u8 reg_val;NRF24L01_CSN = 0; //使能SPI传输SPI1_ReadWriteByte(reg); //发送寄存器号reg_val=SPI1_ReadWriteByte(0XFF);//读取寄存器内容NRF24L01_CSN = 1; //禁止SPI传输return(reg_val); //返回状态值}u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len){u8 status,u8_ctr;NRF24L01_CSN = 0; //使能SPI传输status=SPI1_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值for(u8_ctr=0;u8_ctr<len;u8_ctr++)pBuf[u8_ctr]=SPI1_ReadWriteByte(0 XFF);//读出数据NRF24L01_CSN=1; //关闭SPI传输return status; //返回读到的状态值}u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len){u8 status,u8_ctr;NRF24L01_CSN = 0; //使能SPI传输status = SPI1_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值for(u8_ctr=0; u8_ctr<len; u8_ctr++)SPI1_ReadWriteByte(*pBuf++); //写入数据NRF24L01_CSN = 1; //关闭SPI传输return status; //返回读到的状态值}u8 NRF24L01_TxPacket(u8 *txbuf){u8 sta;SPI1_SetSpeed(SPI_SPEED_16);//spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)NRF24L01_CE=0;NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF 32个字节NRF24L01_CE=1;//启动发送while(NRF24L01_IRQ!=0);//等待发送完成sta=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值NRF24L01_Write_Reg(WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志if(sta&MAX_TX)//达到最大重发次数{NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器return MAX_TX;}if(sta&TX_OK)//发送完成{return TX_OK;}return 0xff;//其他原因发送失败}u8 NRF24L01_RxPacket(u8 *rxbuf){u8 sta;SPI1_SetSpeed(SPI_SPEED_16); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)sta=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值NRF24L01_Write_Reg(WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志if(sta&RX_OK)//接收到数据{NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器return 0;}return 1;//没收到任何数据}void NRF24L01_RX_Mode(void){NRF24L01_CE=0;NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WID TH);//写RX节点地址NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01); //使能通道0的自动应答NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址NRF24L01_Write_Reg(WRITE_REG+RF_CH,40); //设置RF通信频率NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db 增益,2Mbps,低噪声增益开启NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式NRF24L01_CE = 1; //CE为高,进入接收模式}void NRF24L01_TX_Mode(void){NRF24L01_CE=0;NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH) ;//写TX节点地址NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WID TH); //设置TX节点地址,主要为了使能ACKNRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01); //使能通道0的自动应答NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次NRF24L01_Write_Reg(WRITE_REG+RF_CH,40); //设置RF通道为40 NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f); //设置TX发射参数,0db 增益,2Mbps,低噪声增益开启NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断NRF24L01_CE=1;//CE为高,10us后启动发送}void BEEP_Init(void){RCC->APB2ENR|=1<<5; //使能PORTD时钟GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL|=0X00000300; //PD2 推挽输出BEEP=0; //关闭蜂鸣器输出}#include <stm32f10x_lib.h>#include <math.h>#include <stdio.h>#include "delay.h"#include "sys.h"#include "mpu6050.h"#include "imu.h"#include "shuxue.h"#include "sys.h"#define PI 3.1415926535897932384626433832795#define FILTER_SIZE 30float P=1;static s16 acc_x_cail=-145,acc_y_cail=-35,acc_z_cail=-555; //起始条件下,偏差,正常是4096,x和y轴都差不多,而z轴接近4900,因此减掉800// static s32 x_sum=0,y_sum=0,z_sum=0;static s16 x_hist_tab[FILTER_SIZE] ,y_hist_tab[FILTER_SIZE] ,z_hist_tab[FILTE R_SIZE] ;s16 ave_acc_x ,ave_acc_y,ave_acc_z;s16 pmx,pmy,pmz;floatv_angle_rao_x=0,v_angle_rao_y=0,piancha_x=0,piancha_y=0,wen_piao_x=0,w en_piao_y=0,angle_rao_x=0,angle_rao_y=0;euler_angle real;double gyro_temp_drift_x,gyro_temp_drift_y,gyro_temp_drift_z;PPID axis13,axis24,axis_z;u16 run_time;double att[3][3]={1 , 0 , 0 ,0 , 1 , 0 ,0 , 0 , 1 ,};double datt[3][3];void init_pid_para(void){axis24.rk=0;axis24.kp=100;//180; //210 axis24.kd=20000; //26000axis24.ki=0.1; //0axis24.sek=0;axis24.ek1=0;axis13.rk=0;axis13.kp=100;//180; //210 axis13.kd=20000; //26000axis13.ki=0.1; //0axis13.sek=0;axis13.ek1=0;axis_z.rk=0;axis_z.kp=150; //200axis_z.kd=7000; //8000axis_z.ki=0.1; //0axis_z.sek=0;axis_z.ek1=0;}void acc_prepare_data_int(void){u8 i;for(i=0;i<FILTER_SIZE;i++){mpu6050_update();x_hist_tab[i]=ax+acc_x_cail;y_hist_tab[i]=ay+acc_y_cail;z_hist_tab[i]=az+acc_z_cail;x_sum+=x_hist_tab[i];y_sum+=y_hist_tab[i];z_sum+=z_hist_tab[i];delay_ms(5);}ave_acc_x=x_sum/FILTER_SIZE;ave_acc_y=y_sum/FILTER_SIZE;ave_acc_z=z_sum/FILTER_SIZE; }void acc_prepare_data(void){static u8 idx=0;if(idx==FILTER_SIZE)idx=0;x_sum-=x_hist_tab[idx];y_sum-=y_hist_tab[idx];z_sum-=z_hist_tab[idx];x_hist_tab[idx]=ax+acc_x_cail;y_hist_tab[idx]=ay+acc_y_cail;z_hist_tab[idx]=az+acc_z_cail;x_sum+=x_hist_tab[idx];y_sum+=y_hist_tab[idx];z_sum+=z_hist_tab[idx];ave_acc_x=x_sum/FILTER_SIZE;ave_acc_y=y_sum/FILTER_SIZE;ave_acc_z=z_sum/FILTER_SIZE;idx++;}void TIM3_IRQHandler(void){if(TIM3->SR&0X0001)//溢出中断{mpu6050_update();acc_prepare_data();piancha_x=(atan2(ave_acc_y,ave_acc_z)*180/PI)-angle_rao_x;//this piancha is -,and it's unit is du //wen_piao_x+=KI_T*piancha_x; //this wen_piao_x is - //v_angle_rao_x=(gx/16.4+wen_piao_x)+KP_T*piancha_x;angle_rao_x+=v_angle_rao_x*0.002;//angle=v_angle*time//piancha_y=(-atan2(ave_acc_x,ave_acc_z)*180/PI)-(angle_rao_y);//thi s piancha is -,and it's unit is du //wen_piao_y+=KI_T*piancha_y; //this wen_piao_x is - //v_angle_rao_y=(gy/16.4+wen_piao_y)+KP_T*piancha_y;angle_rao_y+=v_angle_rao_y*0.002;//angle=v_angle*time//=axis24.kp*axis24.ek+axis24.kd*(axis24.ek-axis24.ek1)+axi s24.ki*axis24.sek;=axis13.kp*axis13.ek+axis13.kd*(axis13.ek-axis13.ek1)+axis13. ki*axis13.sek;axis_=axis_z.kp*axis_z.ek+axis_z.kd*(axis_z.ek-axis_z.ek1)+axis_z. ki*axis_z.sek;run_time= TIM3->CNT;}TIM3->SR&=~(1<<0);//清除中断标志位}void Timer3_Init(u16 arr,u16 psc){RCC->APB1ENR|=1<<1;//TIM2时钟使能TIM3->ARR=arr; //设定计数器自动重装值TIM3->PSC=psc; //预分频器7200,得到10Khz的计数时钟TIM3->DIER|=1<<0; //允许更新中断TIM3->DIER|=1<<6; //允许触发中断TIM3->CR1|=0x01; //使能定时器2MY_NVIC_Init(0,1,TIM3_IRQChannel,2);//抢占3,子优先级3,组2(组2中优先级最低的)}void ium_init(void){mpu6050_update();acc_prepare_data_int();init_pid_para();Timer3_Init(199,719);}void test_1(u16 angle){u16 i;for(;;){while(absolute(v_angle_rao_y)>30){if(absolute(angle_rao_y)<angle) goto MS;}if(angle_rao_y>0){TIM4->CCR4=1000;TIM4->CCR2=200;}else{TIM4->CCR4=200;TIM4->CCR2=1000;} printf("%f\r\n",angle_rao_y);for(i=0;i<(u16)(P*absolute(angle_rao_y));i++){delay_ms(5);if(absolute(angle_rao_y)<angle)goto MS;}TIM4->CCR4=200;TIM4->CCR2=200;}MS:TIM4->CCR4=200;TIM4->CCR2=200;}void test_2(u16 angle){u16 i;for(;;){while(absolute(v_angle_rao_y)>32){if(absolute(angle_rao_y)<angle) goto MS;}if(angle_rao_y>0){TIM4->CCR2=1000;TIM4->CCR4=480;}else{TIM4->CCR2=480;TIM4->CCR4=1000;}for(i=0;i<(u16)(P*absolute(angle_rao_y));i++){delay_ms(5);if(absolute(angle_rao_y)<angle)goto MS;}TIM4->CCR4=480;TIM4->CCR2=480;}MS:TIM4->CCR4=380;TIM4->CCR2=380;}void test_5(u16 angle){u16 i;for(;;){while(absolute(v_angle_rao_y)>30){if(absolute(angle_rao_y)<angle) goto MS;}if(angle_rao_y>0){TIM4->CCR4=1000;TIM4->CCR2=200;}else{TIM4->CCR4=200;TIM4->CCR2=1000;} printf("%f\r\n",angle_rao_y);for(i=0;i<(u16)(P*absolute(angle_rao_y));i++){delay_ms(5);if(absolute(angle_rao_y)<angle)goto MS;}TIM4->CCR4=200;TIM4->CCR2=200;}MS:TIM4->CCR4=200;TIM4->CCR2=200;}附录二:硬件实物图。