(优作)风力摆控制系统

本系统由瑞萨 100LGA 单片机控制模块, 6050 三轴陀螺仪加速度模块,直流风机及其驱
动模块,显示模块,键盘模块,蜂鸣器模块以及风力摆机械结构组成, MPU6050 采集风摆姿
态,单片机处理姿态数据后通过 PID 精确算法调节直流风机以控制风力摆,本系统实现了风
力摆在仅受直流风机为动力控制下快速起摆、画线、稳摆的功能,并能准确画圆,且在受风
力影响后能快速回复画圆状态,双 PID 组成双闭环控制系统具有很好的稳定性。另外本系统
具有良好的人机交互系统,各参数及测试模式可由按键输入并通过显示屏显示,智能性好,
反应速度快。
关键词:瑞萨 100LGA 单片机 MPU6050 PID 算法 人机交互
一、 设计任务
根据题目要求,系统主要实现驱动直流风机,使其按照一定规则运动,包括左右摆动,
可控幅度摆动,定向摆动。圆周运动以及制动。其关键在于对于直流风机的精密控制。系统
方案框图如下:

设计单元理论分析
1. 硬件部分
(A) 100LGA 单片机资源分布图,如图 2 所示。

显示方案实现:
使用 1602 显示屏,能够同时显示 16x02 即 32 个字符。

控制算法分析
本系统采用 PID 算法来控制风机转动的速度,风机开始工作后,姿态采集模块不
断采集当前风力摆姿态角状态,并与之前的状态比较,使得风力摆的运动状态逐渐
趋向于平稳, PID 算法控制由舵机转动角度比例 P 、角度误差积分 I 和角度微分 D 组
成。
其输入 e ( t )与输出 U ( t )的关系为:

风力摆转动角度比例 P :对风力摆角速度进行比例调整,即对舵机转动速度调整,
比例越大,调节速度越快,但不能过大,过大可能造成四风机因工作状态突变而是
摆杆不稳定,
角度误差积分 I :使系统消除稳态误差,提高无差度,加入积分调节可使系统稳
定性下降,动态相应变慢。本系统追求更快更稳完成对风力摆的控制,因此,本系统
对积分调节的需要就非常弱,即保证在不需要时系统不会受到影响。
角度微分 D :微分作用反应风力摆角度的变化率,即角速度,具有预见性,能预
见偏差变化的趋势因此能产生超前的控制作用,在偏差还没有形成之前已被微分调
节作用消除,因此,可以改善系统的动态性能、在微分时间选择合适情况下,减少
调节时间


附录 3-部分程序
/***************************************************************************
********************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only
intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics
Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS
SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM
EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED
COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED
TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software
and to discontinue the availability
* of this software. By using this software, you agree to the additional terms
and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2011, 2014 Renesas Electronics Corporation. All rights reserved.
****************************************************************************
*******************************************/
/***************************************************************************
********************************************
* File Name : r_cg_KeyScan.c
* Version : RL78/G13 V2.02.01.01 [21 Jan 2015]
* Device(s) : R5F100LG
* Tool-Chain : CA78K0R
* Company Name : Getsoon Electronic Co,Ltd. Shanghai,China
* Description : This file implements device driver for TAU module.
* Creation Date: 2015-1-21
****************************************************************************
*******************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_KeyScan.h"
//uint8_t array_key[2];
uint8_t temp = 0;
volatile unsigned char num_keyboard;
uint8_t testvalue;
/***************************************************************************
********************************************
* Function Name: delay
* Description : nop instruction wait.
* Arguments : None
* Return Value : None ****************************************************************************
*******************************************/
void delay(uint8_t t)
{
for(;t>0;t--);
for(;t>0;t--);
}
/***************************************************************************
********************************************
* Function Name: Keyboard_scan
* Description : check key state.
* Arguments : None
* Return Value : None
****************************************************************************
*******************************************/
uint8_t Keyboard_scan(void)
{
num_keyboard=0;
KEY_PORT = 0xff;
P7.3=0;
temp = KEY_PORT;
temp=temp&0xf0;
/*check four lower bits*/
if(temp!=0xf0)
/*first check*/
{
delay(100);
/*delay some time*/
temp = KEY_PORT;
temp=temp&0xf0;
/*check four lower bits*/
if(temp!=0xf0)
/*second check*/
{
temp=KEY_PORT;
temp=temp&0xf0;
switch(temp)
{
case 0xe0: num_keyboard=1; break;
case 0xd0: num_keyboard=5; break;
case 0xb0: num_keyboard=9; break;
case 0x70: num_keyboard=13; break;
}
}
testvalue=num_keyboard;
} KEY_PORT = 0xff;
/*as above*/
P7.2=0;
temp=KEY_PORT;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
temp=KEY_PORT;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=KEY_PORT;
temp=temp&0xf0;
switch(temp)
{
case 0xe0: num_keyboard=2; break;
case 0xd0: num_keyboard=6; break;
case 0xb0: num_keyboard=10; break;
case 0x70: num_keyboard=14; break;
}
}
}

资源分享

直流风机风力摆控制系统(原理图+PCB+程序源码+论文)基于瑞萨100LGA单片机https://download.csdn.net/download/xcltapestry/89358314

相关推荐
wudl55668 分钟前
Python 虚拟环境和包管理
数据库·python·sqlite
那我掉的头发算什么13 分钟前
【数据库】事务
数据库·sql·mysql·github·数据库开发
全栈工程师修炼指南17 分钟前
DBA | Oracle 数据备份迁移之传统 exp/imp 工具实战指南
数据库·oracle·dba
自由日记23 分钟前
MySql修炼2(力扣):收了6只妖
数据库·mysql
tritone28 分钟前
在优豆云的免费云服务器上开启MongoDB学习之旅
服务器·学习·mongodb
我菜就多练29 分钟前
SQlite3
数据库·sqlite
程序猿ZhangSir40 分钟前
Spring Boot 项目实现邮件推送功能 (以QQ邮箱为例)
java·数据库·spring boot
梦里不知身是客112 小时前
kettle的mysql 根据条件,导出到不同的excel中
数据库·mysql·excel
sanggou2 小时前
踩坑记录:PDManer 导出 Oracle DDL 默认值成 ‘NULL‘ 字符串的排查与解决
数据库·oracle
动亦定2 小时前
MySQL 锁等待超时错误。详细解释原因和解决方案
数据库·mysql