风力摆控制系统设计
风力摆控制系统方案
风力摆控制系统方案简介风力摆控制系统是用来控制风力摆的运动的一种系统。
风力摆通常用于测量风力的强度和方向,以便在风能利用方面进行相应的调整和优化。
本文将介绍一个设计用于控制风力摆运动的系统方案。
目标本系统的目标是实现对风力摆的精确控制,使其可以随需要而停止、开始或改变方向。
通过控制风力摆的运动,可以提高其测量精度,并确保风能的高效利用。
系统组成本系统主要由下面几个组成部分构成:1. 风力摆风力摆是本系统的核心部件,它用于测量风向和风速。
风力摆通常由一个垂直铰接杆和一个悬挂在杆上的摆锤组成。
当风吹过摆锤时,摆锤会向相反方向摆动,从而使测量者能够通过观察摆动的幅度和方向来判断风的强度和方向。
2. 传感器为了实现对风力摆的控制,需要安装相应的传感器来检测风力摆的姿态和运动。
常用的传感器包括倾斜传感器和加速度传感器。
倾斜传感器用于检测风力摆的倾斜角度,而加速度传感器用于检测风力摆的加速度。
这些传感器可以提供给控制系统必要的数据,以便进行相应的控制。
3. 控制器控制器是系统中的核心部件,负责接收传感器的数据并根据设定的控制算法对风力摆进行控制。
控制器通常由微处理器或可编程逻辑控制器(PLC)组成,它可以根据需求改变风力摆的运动方向、幅度或停止风力摆的运动。
4. 电源与通信模块为了保证系统的正常运行,需要为系统提供稳定的电源。
另外,为了方便对系统进行监控和控制,还需要配备相应的通信模块,使得系统可以与外部设备进行数据传输和命令交互。
系统工作原理本系统工作的基本原理是通过控制器对风力摆进行精确控制。
控制器通过接收传感器提供的数据来判断当前风力摆的状态,并根据设定的控制算法采取相应的控制策略。
控制信号经过放大和处理后,通过执行机构控制风力摆的运动。
系统的工作流程如下:1.传感器采集风力摆的姿态和运动数据,并将数据传输给控制器。
2.控制器根据接收到的数据判断风力摆的状态,如姿态角度、加速度等。
3.控制器根据设定的控制算法,计算出相应的控制信号。
风力摆控制系统方案
风力摆控制系统方案1. 方案背景和目标随着可持续能源的需求日益增加,风力发电作为一种清洁、可再生的能源形式受到了广泛关注。
然而,由于风能的不稳定性和不可控性,风力发电系统的稳定性和可靠性成为限制其发展的一个关键因素。
为了解决这个问题,风力发电系统必须配备一个可靠的风力摆控制系统。
本文将介绍一种风力摆控制系统的方案,以帮助优化风力发电系统的性能。
2. 系统原理和组成部分风力摆控制系统的主要原理是通过控制摆角,调节风轮的旋转速率,以实现稳定的输出功率。
该系统由以下几个主要组成部分构成:2.1. 风轮风轮是风力发电系统的核心部件,它由多个叶片组成。
当风吹过叶片时,风轮开始旋转,并转化风能为机械能。
2.2. 摆角传感器摆角传感器用于监测风轮的偏移角度,并将这些数据反馈给控制器。
基于传感器的反馈,控制器可以调整风轮的旋转速度,从而在风能不稳定的情况下维持系统的稳定性。
2.3. 控制器控制器是风力摆控制系统的大脑,它接收来自摆角传感器的数据,并根据事先设定的控制算法进行计算。
通过对风轮的速度和角度进行调节,控制器确保系统能够自动适应不同风速和风向的变化。
2.4. 储能装置储能装置用于存储风能,以便在风力不足时提供稳定的电能输出。
常见的储能装置包括电池组、超级电容器等。
2.5. 电力输出风力摆控制系统最终的目标是通过电力输出将风能转化为可用的电能。
电力输出模块将经过控制器调节过的风轮旋转速度转化为电能,并将其连接到电网或其他电力设备。
3. 工作流程和控制算法风力摆控制系统的工作流程如下:1.摆角传感器检测风轮的摆角,并将数据发送给控制器。
2.控制器根据传感器数据和预设的控制算法进行计算。
3.控制器通过调节风轮的旋转速度,使风轮保持在适当的角度。
4.如果风速增加,控制器将增加风轮的旋转速度以提高系统的输出功率;如果风速减小,控制器将降低风轮的旋转速度以避免过载。
5.当风力不足时,储能装置将提供额外的电能,以维持系统的稳定性。
风力摆控制系统
摆杆
风机 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年8月15日本文论述了风力摆系统的工作原理和设计思路。
系统采用STM32F103单片机为主要控制系统,用角位移传感器mpu-6050采集到风力摆的摆头的角度及位置,通过I2C总线传输发送到主控系统中,采用lcd12864显示采集到的信息,通过PID进行数据处理,产生相应的PWM信号,发送到相应的直流风机,控制直流风机实现自由摆动,从而画出直线、圆等轨迹。
关键词:STM32F103单片机;角位移传感器mpu-6050;PID算法摘要 (I)目录 (II)一、方案设计与论证 (1)1.1方案比较与选择 (1)1.1.1控制器模块比较与选择 (1)1.1.2角度传感器模块比较与选择 (1)1.1.3驱动模块的比较与选择 (1)1.2系统最终方案选择 (1)二、测控方法分析与论证 (2)2.1风力摆状态测量分析 (2)2.2运动控制 (2)2.2.1 电机的比较与选择 (2)2.2.2控制原理和计算公式 (2)三、系统设计与分析 (3)3.1主要电路设计 (3)3.1.1 STM32F103单片机最小系统电路 (3)3.1.2电源模块: (4)3.1.3驱动模块: (4)3.1.4陀螺仪模块 (4)3.1.5系统整体电路原理图 (4)3.2 软件程序设计 (4)3.2.1程序功能描述与设计思路 (4)3.2.2程序流程图 (4)3.2.3程序设计 (5)四、测试方案与测试结果 (5)4.1测试方案 (5)4.2测试仪器 (5)4.3 测试结果及分析 (5)4.3.1测试结果(数据) (5)4.3.2测试分析与结论 (6)五、总结 (6)参考文献 (7)附录一电路原理图 (8)附录二程序流程图 (9)附录三部分程序 (10)附录四元器件清单 (11)一、方案设计与论证1.1方案比较与选择1.1.1控制器模块比较与选择方案一:采用STC89C51单片机作为控制器。
风力摆控制系统的设计与测试
O 前 言
风力 摆是 一 种 通 过 风 机 作 为 唯 一 动 力 驱 动 系
统 ,在 规定 时 间 内完 成规 定轨 迹 的控制 系统 ,且在 风
Байду номын сангаас
力摆 启动 后不 得 以任何 人为 方式 影响 其运 动 。风力
摆控 制系 统作 为一 个控 制装 置 ,其 形象 十分 直观 ,结
构较为简单 ;而将其作为一个被控对象 ,它又显得相
式 中 :m 为 自由摆 系 统 的 重 量 ,h为 摆 动 的最 大 高
度 , 为 最低点 时的摆动 速 度 , 为 摆 动 过程 中的 能
量损 耗 。此外 ,风机 在 控 制 风 力摆 速度 时 可 依 据 动
量定 理 ,即系 统所受 冲量 为动 量 的变化 量 ,即 :
Ft=mu2一mu1.
(L4q ) 最 大 电流 36 mA,在 与 Cortex—M3内核 的低 功 耗模 式 结合 之后 ,仅 有 2 uA 的电流 。当外 部振荡器 处在 待启 动状 态 ,使 用 内部 8 MHz的 RC振荡 器 也 可迅
+ sin :o.
g
(5) 速退 出低 功耗模 式 。这种快 速进 出低 功耗模 式 的特
2山01西8电年子第技1术期
应 用 实 践
文章编号 :1674·4578(2018)O1-0036-03
风 力 摆 控 制 系统 的 设 计 与 测 试
李政 清 (三 亚学 院理 工学 院 ,海 南 三亚 570200) 摘 要 :风 力摆 是 一种 通过 风机 作为 唯一 动力 驱动 的装 置 ,深入 研 究 该 系统 对 空 间 飞行 器 、四 旋翼无人机的运动状态和卫星姿 态控制具有重大意 义。由此提 出双向稳 定结构的风力摆机械设计 模 型 ,由四风机 构成 稳 定驱 动 装 置 ,以 stm32单 片机 为控 制 核 心 ,MPU6050为姿 态传 感 器 ,LCD显 示 实时轨迹控 制 ,核 心控制 模块 的 定时 器 中断方 式 ,以 闭环控 制 减 小 系统 误 差 ,从 而形 成 一 个 完整 的控 制 系统 。 经测试 ,实现 了风 力摆控 制 在误 差 范围 内连 续 运行 的理 想效果 。 关键 词 :风 力摆 ;轨迹 控制 ;STM32 中图分 类号 :TN98;TP273 文 献标 识码 :A
风力摆运动控制系统设计
周运动 , 轨迹能够在设定 半径 ±2 . 5 c m 的圆环 内。 关键词 :轴流风机 ; MP U 6 0 5 0 ; 运动控制
v a l u e a n d t r i g o n o me t r i c f u n c t i o n s c o mp u t a t i o n w i t h t wo i n d e p e n d e n t P I D a l g o r i t h m. T h e P I D a l g o r i t h m c a n ma k e
在三维空问的位 置 , 控制安装在摆杆底端的 4个 轴流风机 使得 风力 摆运动。在风力摆 正下端置一激光笔 ,
根据 MP U 6 0 5 0的反馈数值及三角 函数运算 , 运用两个独立 P I D算 法 , 控制风力摆做直线或 圆周 运动 , 且 在 圆周运动时使风力摆受到 5 0  ̄ 6 0 W 台扇在水 平方 向吹风 的干扰后 , 可以5 S内恢 复运动 轨迹。实验数 据
中图分 类号 :T P 2 7 2 文献标识 码 :A 文章编 号 :1 0 0 0 - - 9 7 8 7 ( 2 0 1 6 ) 1 2 - 0 1 0 6 - 0 4
De s i g n o f mo t i o n c o nt r o l s y s t e m f o r wi nd p e nd u l u m
风 力摆 运 动 控 制 系统 设 计
张 国军 ,李 绍明 ,闫孝妲 , 李 威 ,朱正 印
( 辽宁工程技术大学 电气与控制工程学院 , 辽 宁 葫芦 岛 1 2 5 1 0 5 ) 摘 要 :系统 以 3 2位 的 M K 6 0 D N 2 5 6 Z V L L 1 0单 片机 为核 心 , 通 过运 动处理传 感器 MP U 6 0 5 0测量 风力摆
风力摆智能控制系统设计
风 力摆 智 能 控 制 系统 设 计
王 蓉 晖 , 刘 钢
( 1 : 吉林建筑大学 电气与计算机学 院, 吉林 长春 1 3 0 1 1 8 ;
2 : 空军航空 大学 基础部 , 吉林 长春 1 3 0 0 0 0 )
[ 摘
要] 本系统设计是 由姿态传感 器采集 模块 、 单 片机控制模 块 、 轴 流风机模块 、 人机 交互系统 以及风
i 系统 方案设计
1 . 1 系统 整体 结构
机模块 、 单片机控制模块 、 人机交互 系统 、 电源模块 和风力 摆 机 械 结 构 组 成 。 其 系 统 整 体 结 构 如 图 1
所示。
本 系 统 主要 是 由姿 态 传 感 器 采 集 模 块 、 轴 流 风
图 1 系 统 整 体 结 构 框 图
力 摆机 械结 构组成的闭环控制系统 。MP U 6 0 பைடு நூலகம் 0姿态传感器采集风力 摆姿态 角 , 由单 片机处理姿 态角数 据后通过参数 自适应 P I D算法调节直流风机 以控制风力摆 。 [ 关键词 ] 参数 自适 应 P I D算法 ; MP U 6 0 5 0姿态传感器 ; 人机 交互 系统 [ 中图分类号 ]T M 4 6 [ 文献标识码 ]A [ 文章编号 ]1 0 0 9 - 9 0 4 2 ( 2 0 1 6 ) 1 0 — 0 1 0 6 — 0 3
风 力 摆 由万 向节 连 接 P V C杆 再 连 接轴 流风 机
风力 摆 姿 态 测 量 方 案 采 用 三 维 角 度 传 感 器 MP U 6 0 5 0, 可 以在 水平 单方 向对 角 度 进行 测 量 , 该 传 感器 能 够提供 分 辨率低 的方 向精 确 度 。用 它 实时 测
风力摆的精确控制设计
对 风 力 摆 的 影 响 。 直 杆 选 用 了 玻 纤 管 。使 摆 更 轻 ,控 制 更 有 驱动 能力 强 ,加 速 性 能 ,减 速 性 能 好 效 率 高 的 特 点 。
灵 活 。
2-3 电机 选 择
轴 流 风 机 我 们 使 用 了整 体 重 量 很 轻 但 是 风 力 强 大 的 流
r58224
3
广
5 憾
{【 上G s I R S OvUsT 。7一 D13 [ 5 82D24"I rL 广—旦 VOSU T IS 蜒
470g ̄ BTN797 f5 82 2
BTN797
PWMl一2 … ,
饥
图 2 BTN7971驱 动
4 系 统 软 件 设 计
采 用 小 型直 流 电机 。直 流 电 机 转速 快 。体 积 小 。具 有 最 优
风 机 ,与普 通 直 流 无 刷 流 风机 相 比大 大 缩 短 了完 成任 务 的 时 越 的调 速 性 能嘲,主 要 表 现 在 调 速 方 便 (可 无 级 调 速 )、运 行 平
间 。 流 风 机 的 固 定 架 是用 proe画 图 .经 3D打 印 机 打 印 而 成 稳 、噪 音 低 、效 率 高等 方 面 O
路 ,故 可 以直 接 和 MCU接 口 ,同时 具 有 电 流 检 测 ,以及 过 温 、 电 压 击 穿 开 关 管 。 电路 如 图 2所 示 。
f iND
PWM1—1
旦
2 GND 1
』
1
3 I N
D1 motorl D2 GND IN 2
,
1d一0 ~ INH OUT 45 82 【
风力摆控制系统 设计报告
大学生电子设计竞赛风力摆控制系统学院: 计算机学院项目:风力摆控制系统负责人:王贤朝指导老师:张保定时间: 2017年5月20日摘要本系统采用K60开发板作为控制中心,与万向节、摆杆、直流风机(无刷电机+扇叶)、激光头、反馈装置一起构成摆杆运动状态与风机速度分配的双闭环调速系统。
单片机输出可变的PWM波给电机调速器,控制4个方向上风机的风速,从而产生大小不同的力。
利用加速度计模块MPU6050,准确测出摆杆移动的位置与中心点位置之间的关系,采样后反馈给单片机,使风机及时矫正,防止脱离运动轨迹。
使用指南针模块判别方向,控制系统向指定方向偏移。
控制方式采用PID算法,比例环节进行快速响应,积分环节实现无静差,微分环节减小超调,加快动态响应。
从而使该系统具有良好的性能,能很好地实现自由摆运动、快速制动静止、画圆、指定方向偏移,具有很好地稳定性。
关键词:K60、空心杯电机、MPU6050、PID、无线蓝牙目录一、系统方案 (1)1.1 系统基本方案 (1)1.1.1 控制方案设计 (1)1.1.2 机械结构方案设计 (1)1.2 各部分方案选择与论证 (1)1.2.1电机选择 (1)1.2.2 电机驱动的选择 (2)1.2.3 摆杆与横杆的连接选择 (2)1.2.4 摆杆与风机的连接选择 (2)二、系统理论分析与计算 (2)2.1风力摆位置的计算与分析 (2)2.2风力摆运动状态的分析 (3)2.3控制算法的分析 (3)三、电路与程序设计 (3)3.1电路的设计 (3)3.1.1电路 (3)3.1.2电源 (4)3.2程序的设计 (4)3.2.1程序功能描述与设计思路 (4)3.2.2程序流程图 (4)四、测试方案与测试结果 (5)4.1测试方案 (5)4.2测试条件与仪器 (5)4.3测试结果及分析 (5)(1)测试结果 (5)(2)测试分析与结论 (6)五、结论与心得 (6)风力摆控制系统(B题)【本科组】一、系统方案1.1 系统基本方案1.1.1 控制方案设计为了实现题目要求我们采用K60单片机做为主控芯片,用加速度计陀螺仪模块MPU6050来计算角度和风机状态,用直流风机带动摆杆运动。
风力摆控制系统程序设计
上大部分的字符型液晶。(图 2) 3 驱动电路原理图
图 4 主程序流程图
L298N 是一种双 H 桥电机驱动芯片,其中每个 H 桥可以提供 2A
图 5 子程序流程图 表 1 风力摆画长于 5 2.5- 48v,逻辑部分 5v 供电,接受
5vTTL 电平。一般情况下,功率部分的电压应大于 6V 否则芯片可能不
根据上述测试数据,可以得出以下结论: 驱动风力摆工作,激光笔稳定地在地面画出一条长度不短于 50cm 的直线段,来回五次,满足时间要求及最大偏差距离。
参考文献 [1]李硕,赵彤帆,李根全,宋海珍.Matlab 软件在单摆自由振动中的应用[J]. 实验室研究与探索,2013,11:65-68. [2]陈文涛,龚善初.单摆振动分析[J].湖南理工学院学报(自然科学版), 2008,01:66-70. [3]侯祥林,丛德宏,徐心和.倒立单摆摆起开环控制律的最优化算法[J].东 北大学学报,2004,01:9-12. [4]龚善初.影响单摆振动周期的参数研究[J].大学物理,2006,06:12-15. [5]郭鹏.模糊前馈与模糊 PID 结合的风力发电机组变桨距控制[J].中国电 机工程学报,2010,08:123-128. [6]王述彦,师宇,冯忠绪.基于模糊 PID 控制器的控制方法研究[J].机械科 学与技术,2011,01:166-172. [7]何芝强.PID 控制器参数整定方法及其应用研究[D].杭州:浙江大学, 2005. [8]张卫政.基于模糊控制的风机盘管空调系统应用研究[D].广州:广东工 业大学,2005. [9]王冀龙.智能新风机控制系统设计[D].秦皇岛:燕山大学,2014.
1 系统总体框图(图 1)
2 显示模块
1602 液晶也叫 1602 字符型液晶,它
风力摆的精确控制设计
风力摆的精确控制设计杜金祥;杜宇轩【摘要】Design a measurement and control system, control drive the fan makes wind pendulum movement according to certain rule, laser pen to draw the required path on the ground.This design by STM32F4 micro-processor,gyroscope, OLEDdisplay, human-computer interaction system, universal joint structure of closed-loop control system, etc. Gyro attitude algorithm, data for the system to provide the accurate PID control fan speed.In drive, using the pulse width control large current driver chipBTN7971 debugging technology, can very good to dc fan speed, direction and start-stop and other working condition for rapid, accurate control.The brush position control.LOD linear regulator was adopted in the power control chip, the power supply ripple is small, ensure the stable operationof the system.This system has realized the wind in the under the dc fan power control was only fast the pendulum, line drawing, restore the function of static, and accurately draw circle, and affected by the wind can quickly restore circle state, has the very good robustness.In addition, this system has good man-machine interface, the parameters and test mode is the key input and through the liquid crystal display, operation is simpleand convenient.%设计一测控系统,控制驱动各风机使风力摆按照一定规律运动,激光笔在地面画出要求的轨迹。
风力摆系统设计
风力摆系统摘要风力摆系统是一种利用风力对物体进行位置控制的设备,在我国虽然还没有成品的销售与应用,但这种控制理论已经应用于方方面面。
目前的普遍问题风力摆系统的自动控制水平不高。
本设计将设计一款智能的风力摆控制系统。
主要控制程序由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绪论课题背景风力在能源方面的应用最早可追溯到古代世纪初,那时人们利用风吹动帆,在海上驾驭大型船只。
基于单片机的风力摆系统设计
基于单片机的风力摆系统设计风力摆是一种通过风机作为唯一动力驱动的装置。
为了更科学合理地运用风力摆,设计并制作了一套基于单摆物理模型的实物系统,为系统预设了定角度直线运动和圆周运动两种主要形式。
由此提出双向稳定结构的风力摆机械设计模型,由四风机构成稳定驱动装置,以stm15单片机为控制核心,MPU6050为姿态传感器,HMI串口屏实时显示,核心控制模块的定时器中断方式,以闭环控制减小系统误差,从而形成一个完整的控制系统。
标签:简谐运动;PID算法;轨迹控制;IAP 15W4K58S41 引言风力摆是一种通过风机作为唯一动力驱动系统,在规定时间内完成规定轨迹的控制系统,且在风力摆启动后不得以任何人为方式影响其运动。
风力摆控制系统作为一个控制装置,其形象十分直观,结构较为简单;而将其作为一个被控对象,它又显得相当复杂。
就本身而言,风力摆是一个稳定性随着时间与外部环境变化较为复杂的非线性系统,所以在对风力摆的控制中必须采取行之有效的方法,它才能稳定工作。
风力摆控制系统的稳定效果十分明显,对它的度量可以通过直接观测其响应速度、轨迹重合度以及线性误差来判断,一目了然。
2 系统总体设计风力摆控制系统本质为一套伺服随动控制系统,以四个对称布置的风机作为动力源,提供风力摆在四个方向的推力。
角度传感器实时采集风力摆的姿态。
MCU主控单元获取角度并与目标值比较,经运算后得出控制量,送给风机执行,从而完成预设的定角度直线摆动和圆周运动。
为调试方便,系统加入PID调节模块。
3 电路设计3.1主控单片机的选型系统选取STC公司出品的增强型51单片机工IAP 15W4K58S4作为主控芯片,可受益于ST C公司提供的STC一ISP上位机辅助软件,大大提高开发效率。
利用其自带的6路PWM发生器中的4路作为四个电机的PWM控制;串口2负责与MPU6050通信,实时采集角度信息;串口3负责与USART-HMI串口屏通信,刷新关键参数的显示;串口1负责与PC上位机通信,来在线调整PID参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:本次风力摆控制系统设计,采用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单片机做主控芯片,其体积小,价格便宜,控制简单,但其运算速度慢,内部存储容量小,难以存储大体积的程序和实现快速精准的反应控制。
其采用的是12MHz时钟,受其限制,计时精度低,且其内部资源少,不适合本次需要多路PWM控制电机转速,且精度和运算速度要求高的设计。
方案二:采用STC15W4K32S4系列的单片机作主控芯片,控制PWM脉宽调制从I/O口输出不同占空比的脉冲,经滤波后获得不同高低电平控制电机,从而达到控制电机转速的效果。
该系列芯片可控制多路PWM脉宽调制,且具有大容量4K字节SRAM,内部有时钟电路和复位电路,不需要外接,减轻了外围电路的复杂性,且其运算速率高,精度大,适于控制精度和速率要求大的陀螺仪等模块。
方案三:采用STC15W4K32S4系列单片机作主控芯片,通过D/A变换电路将数字量转换成控制电机电压的模拟量。
再利用电平的高低达到调速的目的。
本方案达到了利用CPU输出的数字量精确控制模拟量的目的。
但D/A变换电路复杂,且整体设计成本较高。
经过以上分析,我们发现方案二电路设计相对简单,且控制速率快,精度高,成本低,考虑到这些,我们选择该方案进行设计。
其流程框图如下:图1 流程框图三、理论分析与计算3.1设计原理本系统硬件主要有陀螺仪传感、四个轴流风机、电源供电模块、摆杆及支架构成。
STC15W4K32S4作为系统的控制核心,陀螺仪传感器对摆杆的运行状态数据进行实时采集并反馈回单片机,产生的控制量作用于电路从而实现对四个轴流风机转速及转向的控制。
四个轴流风机产生空气推力进而实现对摆杆的控制。
硬件框图如下图2所示。
图2 硬件结构3.2理论分析1.STC15W4K32S4系列芯片本次主控芯片采用STC15W4K32S4系列芯片,该芯片运行速度较传统的单片机快,ISP编程时5MHz~35MHz宽范围可设置,可彻底省掉外部昂贵的晶振和复位电路,省去了普通单片机制作最小系统时外部电路的设计。
此外,该系列单片机具有大容量程序存储器,且内部资源丰富,具有8路10位PWM,8路高速10位A/D转换,4组独立的高速异步串行通信端口SPI,是宽电压、高速、高可靠、低功耗、超强抗干扰的新一代8051单片机。
STC15W4K32S4系列单片机如下图3所示:其中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时器/计数器、掉电唤醒专用定时器、I/O口、高速A/D转换、比较器、看门狗、UART高速异步串行通信口1、串行口2、串行口3、串行口4、CCP/PWM/PCA、高速同步串行通信串口SPI、片内高精度R/C时钟及高可靠复位等模块。
STC15W4K32S4系列单片机几乎包含了数据采集和控制中所需要的所有单元模块,是一个真正的片上系统。
图3 STC15W4K32S4系列单片机2.电机速度控制本次设计的电机驱动模块采用LM298来驱动4个风机的转速,通过PWM 脉冲宽度调制来调节电机的转速。
LM298内部包含4通道逻辑驱动电路,是一种二相和四相电机的专用驱动器。
内部含有两个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V,2A以下电机。
具有控制原理简单,输出波动小,线性好,对邻近电路干扰小等特点。
PWM即脉冲宽度调制技术,通过改变接通脉冲宽度,使直流电机电枢上的电压的“占空比”改变,从而改变电枢电压的平均值,控制电机的转速。
占空比定义:输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比。
该调速系统具有以下特点:(1)电路简单,所用功率原件少,且工作于开关状态,因此电路的导通损耗小,装置效率比较高。
(2)采用功率较小的低惯量电机时,具有高的定位速度和精度。
(3)低速性能好,稳速精度高,调速范围宽。
(4)系统频带宽,动态响应好,抗干扰能力强。
3.MPU-6050模块本设计采用高精度的陀螺加速度计MPU-6050,通过处理器读取MPU-6050的测量数据然后通过串口输出,免去了用户自己去开发MPU-6050复杂的I2C协议,同时精心的PCB布局和工艺保证了MPU-6050收到外接的干扰最小,测量的精度最高。
模块内部自带电压稳定电路,可以兼容3.3V/5V的嵌入式系统,连接方便。
模块保留了MPU-6050的I2C接口,以满足高级用户希望访问底层测量数据的需求,采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。
模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态,姿态测量精度0.01 度,稳定性极高,性能甚至优于某些专业的倾角仪!MPU-6050模块连接上位机可输出加速度、角速度以及角度,其中加速度计算公式为:a x =((AxH<<8)|AxL)/32768*16g(g 为重力加速度,可取9.8m/s²)a y =((AyH<<8)|AyL)/32768*16g(g 为重力加速度,可取9.8m/s²)a z =((AzH<<8)|AzL)/32768*16g(g 为重力加速度,可取9.8m/s²)其温度计算公式:T=((TH<<8)|TL) /340+36.53 ℃其校验和:Sum=0x55+0x51+AxH+AxL+AyH+AyL+AzH+AzL+TH+TL角速度计算公式为:w x =((wxH<<8)|wxL)/32768*2000(°/s)w y =((wyH<<8)|wyL)/32768*2000(°/s)w z =((wzH<<8)|wzL)/32768*2000(°/s)其温度计算公式:T=((TH<<8)|TL) /340+36.53 ℃其校验和:Sum=0x55+0x52+wxH+wxL+wyH+wyL+wzH+wzL+TH+TL角度计算公式为:滚转角(x 轴):Roll=((RollH<<8)|RollL)/32768*180(°)俯仰角(y 轴):Pitch=((PitchH<<8)|PitchL)/32768*180(°)偏航角(z 轴):Yaw=((YawH<<8)|YawL)/32768*180(°)温度计算公式:T=((TH<<8)|TL) /340+36.53 ℃校验和:Sum=0x55+0x53+RollH+RollL+PitchH+PitchL+YawH+YawL+TH+TL四、测试结果与误差分析4.1 测试使用工具及仪器(1)秒表(2)量角器(3)自制角度图纸4.2测试方案及结果4.2.1驱动风力摆工作,使激光笔稳定地在地面画出一条长度不短于50cm 的直线段,来回五次,记录其由静止开始至摆到规定长度时自由摆所用时间及最大偏差距离。
测试结果如表1所示。
表1风力摆画长于50cm直线测试4.2.2设定不同的长度,驱动风力摆工作,使其画出规定长度的线段,记录其由静止开始自由摆动至画出规定长度的线段时所用的时间及在画不同长度线段时的最大偏差距离。
测试结果如表2所示。
表2风力摆画不同长度直线测试4.2.3设置风力摆自由摆时角度,驱动风力摆工作,记录其由静止至开始自由摆时间及在画不同角度直线时的最大偏差距离。
测试结果如表3所示。
表3 风力摆画不同角度直线测试4.2.4将风力摆拉起一定角度放开,驱动风力摆工作,测试风力摆制动达到静止状态所用时间。
测试结果如表4所示。
表4 风力摆恢复静止测试五、结论、心得体会本次设计中,利用STC15系列单片的低功耗、低价格以及资源丰富等特性,用其来作主控芯片使整个设计从成本、实现难易方面都符合实际要求。
在角度及电机转速控制过程中,更是利用MPU-6050以及LM298使整个设计达到运行精度高,高速控制等优点。
但由于时间紧张,还有一些问题没能较好解决,没有时间进一步改善。
通过这次竞赛使我们明白了理论知识与实践相结合的重要性,理论知识最终是为实践服务的,只掌握理论知识是远远不够的,只有把理论知识与实际应用相结合,在理论中运算,在实践中得到结果,从而不但加深了对理论知识的理解,也提高了自己实际动手能力与独立思考能力。
此外,本次比赛中,我们充分发挥了团队协作的精神,懂得了在团队中分工合作的重要性,为以后的比赛甚至是学习工作取得很大的帮助。
附录:总电路图原件清单源程序元件名称 数量 元件名称 数量 STC15W4K32S41个 轴流风机 4个 变压器 1个 12864液晶屏1个 升压模块 2个 滑动变阻器 若干 MPU6050模块1个 杜邦线 若干 电容 若干 Led 灯 1个 电阻 若干 万用板 2个 底座1个LM298电机驱动1个原程序#include"STC15Fxxxx.H"#include"GPIO.h"#include"USART.h"#include"delay.h"#include"timer.h"extern u8 PWM1;extern u8 PWM2;extern u8 PWM3;extern u8 PWM4;extern u8 TL Y;extern u8 JY;extern float JD_num[3];extern float J_SD_num[3];extern u16 TIME_num;xdata floatZ_sin[17]={7.5,7.8,8.0,8.9,9.5,9.9,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,13.9,14.0,1 5.0};u8 ge,shi,bai;int zhanbi;sbit PWM_R=P0^0;sbit PWM_L=P0^1;sbit PWM_H=P0^2;sbit PWM_Q=P0^3;void gongnengA(){PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;//delay_ms(10);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(100); // delay_ms(200); PWM_H=0;//delay_ms(100);//delay_ms(150);PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;delay_ms(100);//delay_ms(200);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;while(1){if((JD_num[1]<(-2))&&(JD_num[1]>(-11.8))){PWM_Q=1;delay_ms(50);} else PWM_Q=0;if((JD_num[1]>2)&&(JD_num[1]<11.8)){PWM_H=1;delay_ms(50);} else PWM_H=0;// if((JD_num[0]<(-1.0)))PWM_R=1;// else PWM_R=0;// if((JD_num[0]>1.0))PWM_L=1;// else PWM_L=0;}}void gongnengB(int R){ float cs;R=R/2;R=R-15;cs=Z_sin[R];if(R<6){PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);PWM_Q=0;//delay_ms(10);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(100); // delay_ms(200); PWM_H=0;//delay_ms(100);//delay_ms(150);PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;delay_ms(100);//delay_ms(200);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(200);//delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;}else{if(R<10){PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;//delay_ms(10);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(100); // delay_ms(200); PWM_H=0;//delay_ms(100);//delay_ms(150);PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;delay_ms(100);//delay_ms(200);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(200);//delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0;}else{if(R<14){PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;//delay_ms(10);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(100); // delay_ms(200); PWM_H=0;//delay_ms(100);//delay_ms(150);PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;delay_ms(100);//delay_ms(200);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(200); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;}else{PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;//delay_ms(10);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(100); // delay_ms(200); PWM_H=0;//delay_ms(100);//delay_ms(150);PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;delay_ms(100);//delay_ms(200);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_Q=0;}}}while(1){if((JD_num[1]<(-3))&&(JD_num[1]>(-cs))){PWM_Q=1;} else PWM_Q=0;if((JD_num[1]>3)&&(JD_num[1]<cs)){PWM_H=1;} else PWM_H=0;}}void gongnengC0(){PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);PWM_R=0;PWM_L=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);PWM_L=0;PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);PWM_R=0;delay_ms(100);PWM_L=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);PWM_L=0;/* PWM_Q=1; delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(200);//delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);*/while(1){if((JD_num[1]<(-2))&&(JD_num[1]>(-11.8))){PWM_H=1;delay_ms(1);PWM_H=0; }else PWM_H=0;if((JD_num[1]>2)&&(JD_num[1]<11.8)){PWM_Q=1;delay_ms(1);PWM_Q=0;} else PWM_Q=0;if((JD_num[0]<(-2))&&(JD_num[0]>(-11.8))){PWM_R=1;}else PWM_R=0;if((JD_num[0]>2)&&(JD_num[0]<11.8)){PWM_L=1;}else PWM_L=0;// if((JD_num[0]<(-1.0)))PWM_R=1;// else PWM_R=0;// if((JD_num[0]>1.0))PWM_L=1;// else PWM_L=0;}}void gongnengC45(){PWM_Q=1;PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;delay_ms(200);// delay_ms(200); PWM_R=0;//delay_ms(10);PWM_H=1;PWM_L=1;delay_ms(200);delay_ms(200);// delay_ms(200); PWM_L=0;// delay_ms(200); delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(100); // delay_ms(200); PWM_H=0;PWM_L=0;//delay_ms(100);//delay_ms(150);PWM_Q=1;PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); PWM_R=0;delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;PWM_R=0;delay_ms(100);//delay_ms(200);PWM_H=1;PWM_L=1;delay_ms(200);delay_ms(200); PWM_H=0; delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_L=0; PWM_Q=1; PWM_R=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(200); PWM_Q=0; PWM_R=0; PWM_H=1; PWM_L=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_L=0; PWM_Q=1; PWM_R=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_R=0; PWM_H=1; PWM_L=1;delay_ms(200);delay_ms(200);PWM_H=0;delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_L=0;PWM_Q=1;PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);PWM_Q=0;delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_Q=0;PWM_R=0;/* PWM_H=1;PWM_L=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//PWM_H=0;PWM_L=0; */while(1){if((JD_num[1]<(-3))&&(JD_num[1]>(-11.8))){PWM_Q=1;}else PWM_Q=0;if((JD_num[0]<(-2))&&(JD_num[0]>(-11.8))){PWM_R=1;delay_ms(25);} else PWM_R=0;if((JD_num[1]>3)&&(JD_num[1]<11.8)){PWM_H=1;}else PWM_H=0;if((JD_num[0]<(2))&&(JD_num[0]>(11.8))){PWM_L=1;delay_ms(25);} else PWM_L=0;// if((JD_num[0]<(-1.0)))PWM_R=1;// else PWM_R=0;// if((JD_num[0]>1.0))PWM_L=1; // else PWM_L=0;}}void gongnengC90(){PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200);// delay_ms(100);// delay_ms(200);PWM_H=0;//delay_ms(100);//delay_ms(150);PWM_Q=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200);// delay_ms(200);// delay_ms(200);PWM_Q=0;delay_ms(100);//delay_ms(200);PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(200); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_Q=0; PWM_H=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_Q=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200);//delay_ms(200);PWM_Q=0;PWM_H=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;while(1){if((JD_num[1]<(-2))&&(JD_num[1]>(-11.8))){PWM_Q=1;delay_ms(50);} else PWM_Q=0;if((JD_num[1]>2)&&(JD_num[1]<11.8)){PWM_H=1;delay_ms(50);} else PWM_H=0;// if((JD_num[0]<(-1.0)))PWM_R=1;// else PWM_R=0;// if((JD_num[0]>1.0))PWM_L=1;// else PWM_L=0;}}void gongnengC135(){Timer0Init();TIME_num=0;PWM_Q=PWM_L=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);PWM_Q=PWM_L=0;PWM_H=PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);PWM_H=PWM_R=0;PWM_Q=PWM_L=1;delay_ms(200);delay_ms(200);PWM_Q=PWM_L=0;PWM_H=PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);PWM_H=PWM_R=0;PWM_Q=PWM_L=1;delay_ms(200);delay_ms(200);delay_ms(200);PWM_Q=PWM_L=0;while(1){if((JD_num[1]<(-2.0))&&(JD_num[1]>(-8)))PWM_Q=PWM_L=1; else PWM_Q=PWM_L=0;if((JD_num[1]>2.0)&&(JD_num[1]<8))PWM_H=PWM_R=1; else PWM_H=PWM_R=0;if(TIME_num>3000)P4=0xff;}}void gongnengD1(){while(1){if(JD_num[1]<(-3)){PWM_H=1;}else PWM_H=0;if(JD_num[1]>3){PWM_Q=1;}else PWM_Q=0;if(JD_num[0]<(-3)){PWM_L=1;}else PWM_L=0;if(JD_num[0]>3){PWM_R=1;}else PWM_R=0;}}void gongnengD(){PWM_Q=1;PWM_R=1;delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); // delay_ms(200); PWM_Q=0;delay_ms(200);// delay_ms(200); PWM_R=0;//delay_ms(10);PWM_H=1;PWM_L=1;delay_ms(200);delay_ms(200);// delay_ms(200); PWM_L=0;// delay_ms(200); delay_ms(200);delay_ms(200);// delay_ms(200); // delay_ms(100); // delay_ms(200); PWM_H=0;PWM_L=0;//delay_ms(100);//delay_ms(150);PWM_Q=1;PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);// delay_ms(200); PWM_R=0;delay_ms(200);// delay_ms(200); // delay_ms(200); // delay_ms(200);PWM_Q=0; PWM_R=0; delay_ms(100); //delay_ms(200); PWM_H=1; PWM_L=1; delay_ms(200); delay_ms(200); delay_ms(200); PWM_H=0; delay_ms(200); //delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_L=0; PWM_Q=1; PWM_R=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(200); //delay_ms(200); PWM_Q=0; PWM_R=0; PWM_H=1; PWM_L=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); //delay_ms(100); //delay_ms(200); PWM_H=0; PWM_L=0; PWM_Q=1; PWM_R=1; delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_Q=0;PWM_R=0;PWM_H=1;PWM_L=1;delay_ms(200);delay_ms(200);delay_ms(200);PWM_H=0;delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_H=0;PWM_L=0;PWM_Q=1;PWM_R=1;delay_ms(200);delay_ms(200);delay_ms(200);PWM_Q=0;delay_ms(200);//delay_ms(200);//delay_ms(100);//delay_ms(200);PWM_Q=0;PWM_R=0;/*PWM_H=1;PWM_L=1;delay_ms(200);delay_ms(200);delay_ms(200);delay_ms(200);//delay_ms(200);//delay_ms(100);//PWM_H=0;PWM_L=0; */while(1){if((JD_num[1]<(-3))&&(JD_num[1]>(-11.8))){PWM_Q=1;} else PWM_Q=0;if((JD_num[0]<(-2))&&(JD_num[0]>(-11.8))){PWM_R=1;delay_ms(25);} else PWM_R=0;if((JD_num[1]>3)&&(JD_num[1]<11.8)){PWM_H=1;}else PWM_H=0;if((JD_num[0]<(2))&&(JD_num[0]>(11.8))){PWM_L=1;delay_ms(25);} else PWM_L=0;}}void main(){unsigned char ce[10]={0,1,2,3,4,5,6,7,8,9};GPIO_Init_All();Uart1Init();Uart2Init();P0=0x00;Timer0Init();Uart1_SendString("MPU6050测试!\r\n");TIME_num=0;while(1){gongnengA();//gongnengB(40);//gongnengD();//gongnengC0();//gongnengC45();//gongnengC90();//gongnengC135();//gongnengD(); }}。