2013全国电子设计大赛旋转倒立摆
全国大学生电子设计竞赛

全国大学生电子设计竞赛(郑新旺老师提供)(一)项目简介全国大学生电子设计竞赛是教育部倡导的大学生学科竞赛之一,是面向大学生的群众性科技活动,目的在于推动高等学校促进信息与电子类学科课程体系和课程内容的改革,有助于高等学校实施素质教育,培养大学生的实践创新意识与基本能力、团队协作的人文精神和理论联系实际的学风;有助于学生工程实践素质的培养、提高学生针对实际问题进行电子设计制作的能力;有助于吸引、鼓励广大青年学生踊跃参加课外科技活动,为优秀人才的脱颖而出创造条件。
电子设计竞赛奇数年为全国赛,偶数年为省赛,要求学生在短短的四天三夜完成一个电子设计类题目。
诚毅学院每年5月组织报名,暑假7、8月组织为期两个月的培训,9月初参加比赛。
智能车队2012年获得福建省大学生电子设计竞赛一等奖一项、二等奖一项、三等奖一项,2013年获得全国大学生电子设计竞赛全国二等奖一项,福建省一等奖一项、三等奖两项,2014年获得福建省大学生电子设计竞赛一等奖四项、二等奖一项、三等奖一项,成绩在逐年进步。
(二)竞赛时间【每年的7月到9月】(三)指导老师1.郑新旺【个人简介】:男,实验管理中心电工电子实验室实验员,从事实验教学工作十年,指导学生参加电子类学科竞赛。
为了进一步提高学生电子设计的实践水平,于2012年组建诚毅学院智能车队,于2014年协助组建诚毅学院电子信息创新实验室。
迄今为止所带学生获得全国大学生电子设计竞赛全国二等奖一项,福建省一等奖三项,二等奖一项,三等奖两项;获得“飞思卡尔杯”智能车竞赛华南赛区二等奖五项,三等奖九项。
指导学生申报大学生创新创业训练计划,获得国家级项目一项,省级项目一项。
2.……(四)参加对象:在校具有正式学籍的全日制本科一年级至三年级学生,同时需要有一定的模电、数电、单片机及C语言编程等基础;有足够的业余时间投入比赛训练;善于和他人沟通,具有良好的团队意识,有吃苦精神、钻研精神。
(五)培养形式:1.辅导讲座:针对不同层次的学生进行分层次教学,刚进入实验室的学生主要是基础培训,了解基本元器件知识和简单电路的焊接调试;对于有一定基础的学生进行单片机基础教学及印刷电路板制作培训。
2013年全国大学生电子设计大赛论文 本科组 简易旋转倒立摆及控制装置(C题)

2013年全国大学生电子设计竞赛简易旋转倒立摆及控制装置(C题)【本科组】2013年9月6日摘要本系统采用XS128单片机最小系统作为控制中心、与电机驱动模块,减速直流电机、旋转臂、摆杆、反馈装置一起构成摆杆角度和电机角速度的双闭环调速系统。
由于直流电机属于一阶惯性,经分析在控制周期远小于电机时间常数的情况下建立电压与加速度的近似比例关系模型。
选择减速直流电机带动旋转臂旋转,采用增量式旋转编码器测量摆杆的角度,单片机输出占空比可变的PWM波控制电机角加速度,从而控制电机的加速度和给摆杆固定轴心的扭矩,实现控制摆杆的摆动幅度并达到和保持平衡状态。
控制方式采用PID控制,比例环节进行快速响应,积分环节实现无静差,微分环节减小超调,加快动态响应。
从而使该系统具有良好的性能,能很好的实现起振、圆周运动、倒立、360度倒立旋转,同时具有很好的抗扰动性能。
关键词:XS128 直流电机加速度倒立平衡目录1系统方案 (1)1.1 角度传感器模块的论证与选择 (1)1.2电机的论证与选择 (1)1.3 电机驱动模块的论证与选择 (1)2理论分析与计算 (2)2.1 机械结构设计的分析 (2)2.1.1 摆杆 (2)2.1.2 底座 (2)2.2电机物理模型的分析与计算 (2)2.2.1 直流电机的机械特性 (2)2.2.2 直流电机的动态特性分析 (2)2.2.3 直流电机加速度分析与计算 (3)2.3摆杆运动状态的分析及控制思路 (4)2.3.1摆杆起振 (4)2.3.2摆杆做圆周运动 (4)2.3.3摆杆达到倒立平衡状态 (4)2.4 摆杆控制量的分析与计算 (4)2.4.1 摆杆起振状态分析 (4)2.4.2 摆杆进入开始调整倒立平衡的角度范围 (5)3电路与程序设计 (6)3.1电路的设计 (6)3.1.1系统总体框图 (6)3.1.2 系统电路原理图 (6)3.1.3 电机驱动模块的电路设计 (6)3.2程序的设计 (7)3.2.1程序功能描述与设计思路 (7)3.2.2程序流程图 (7)4测试方案与测试结果 (11)4.1测试方案 (11)4.2 测试条件与仪器 (11)4.3 测试结果及分析 (11)4.3.1测试结果(数据) (11)4.3.2测试分析与结论 (12)5总结 (12)附件1:系统电路原理图 (14)附件2:电机控制源程序 (15)简易旋转倒立摆及控制装置(C题)【本科组】1系统方案本系统主要由主控模块、角度传感器模块、机械结构模块、电源模块等几部分组成,下面分别论证这几个模块的选择。
全国电子设计大赛题目简易旋转倒立摆及控制装置C题

2013 年全国大学生电子设计竞赛试题参赛注意事项(1)9 月4 日8:00 竞赛正式开始。
本科组参赛队只能在【本科组】题目中任选一题;高职高专组参赛队在【高职高专组】题目中任选一题,也可以选择【本科组】题目。
(2)参赛队认真填写《登记表》内容,填写好的《登记表》交赛场巡视员暂时保存。
(3)参赛者必须是有正式学籍的全日制在校本、专科学生,应出示能够证明参赛者学生身份的有效证件(如学生证)随时备查。
(4)每队严格限制3 人,开赛后不得中途更换队员。
(5)竞赛期间,可使用各种图书资料和网络资源,但不得在学校指定竞赛场地外进行设计制作,不得以任何方式与他人交流,包括教师在内的非参赛队员必须回避,对违纪参赛队取消评审资格。
(6)9 月7 日20:00 竞赛结束,上交设计报告、制作实物及《登记表》,由专人封存。
简易旋转倒立摆及控制装置(C 题)【本科组】一、任务设计并制作一套简易旋转倒立摆及其控制装置。
旋转倒立摆的结构如图1 所示。
电动机A 固定在支架B 上,通过转轴F 驱动旋转臂C 旋转。
摆杆E 通过转轴D 固定在旋转臂C 的一端,当旋转臂C 在电动机A 驱动下作往复旋转运动时,带动摆杆E 在垂直于旋转臂C 的平面作自由旋转。
二、要求图1 旋转倒立摆结构示意图1.基本要求(1)摆杆从处于自然下垂状态(摆角0°)开始,驱动电机带动旋转臂作往复旋转使摆杆摆动,并尽快使摆角达到或超过-60°~ +60°;(2)从摆杆处于自然下垂状态开始,尽快增大摆杆的摆动幅度,直至完成圆周运动;(3)在摆杆处于自然下垂状态下,外力拉起摆杆至接近165°位置,外力撤除同时,启动控制旋转臂使摆杆保持倒立状态时间不少于5s;期间旋转臂的转动角度不大于90°。
2.发挥部分(1)从摆杆处于自然下垂状态开始,控制旋转臂作往复旋转运动,尽快使摆杆摆起倒立,保持倒立状态时间不少于10s;(2)在摆杆保持倒立状态下,施加干扰后摆杆能继续保持倒立或2s 内恢复倒立状态;(3)在摆杆保持倒立状态的前提下,旋转臂作圆周运动,并尽快使单方向转过角度达到或超过360°;(4)其他。
2013全国电子设计大赛结果公布

韩堡德 陈宝桔 梁明明 许全维 张 洽 林远棠 何梓扬 林诗伦 李文峰 梁百泉 马丁桦 杨礼嘉 邱岳阳 宋迪屏 温国生 张冠营 黄梓淳 张敏基 朱仕心 游龙 陈志浩 冼铭斌 章旭林 陈启浩 李华灿 莫秋活 周翼 林健灿 周星 梁志勇 张钊 黄振金 黄林东 洪子婷
广东技术师范学院天河学院 熊晓南
广东技术师范学院天河学院 梁健滔
0.一等奖(推国) 华南农业大学 0.一等奖(推国) 华南理工大学 0.一等奖(推国) 华南农业大学 0.一等奖(推国) 华南理工大学 0.一等奖(推国) 韩山师范学院 0.一等奖(推国) 北京理工大学珠海学院 0.一等奖(推国) 华南农业大学 0.一等奖(推国) 韩山师范学院 1.一等奖 1.一等奖 1.一等奖 1.一等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 2.二等奖 广东工业大学 湛江师范学院 广州大学 湛江师范学院 北京理工大学珠海学院 东莞理工学院城市学院 华南农业大学 中山大学南方学院 中山大学南方学院 华南农业大学 韩山师范学院 仲恺农业工程学院 中山大学南方学院 韩山师范学院 广州大学 嘉应学院 嘉应学院 嘉应学院 广东机电职业技术学院 中山火炬职业技术学院 仲恺农业工程学院 华南农业大学 东莞理工学院
题号 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A 学 0.一等奖(推国) 中山大学
单位
队员 罗澍 施权展 朱振驰 薛成戴 麦活鹏 陈堆盛 郑琳丰 占堪光 吴锐斌 吴晓煌 黄明旭 戴汉儒 郑宇鹏 黄景儒 付伟浩 杨子靖 罗校敬 林泽铭 郑常维 王育龙 黄梓燚 林佳操 邢楚练 黄健龙 曾文正 王杰 黄业伟 崔廷佐 何源富 苏焕旭 陈增鹏 罗武 陈豪
2013年电子设计大赛旋转倒立摆资料

2013 年全国大学生电子设计竞赛简易旋转倒立摆及控制装置(C 题)[ 本科组2013年9月7日摘要:设计并制作了一个基于P ID 控制的倒立摆系统。
选用低功耗单片机AT89C51 、减速电机、电位器等器件,完成基本功能。
以单片机控制减速电机转速,改变摆杆转角θ,并保证让摆杆在同一平面内做圆周运动,最终使摆杆达到倒立(在规定的-165 °至165°范围内)稳定状态。
关键字: AT89C51 单片机;减速电机;电位器Abstract :Designed and produced an inverted pendulum system based on PID control. Choose low power single chip microcomputerAT89C51, gear motor, potentiometer, such as device, complete the basic functions. With single-chip microcomputer control deceleration motor speed, change the swinging rod Angle theta, and ensure that the swinging rod is circular motion in the same plane, eventually make the swinging rod upside down (in the rules - 165 to 165 ) s°teady state.Keywords: AT89C51 、 Gear motor 、 potentiometer目录序⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.5 前言⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯............. ⋯⋯⋯⋯⋯⋯ 61系统方案 (7)1.1系统结构 (8)1.2方案的比较和选择 (10)1.2.1电机的论证与选择 (10)1.2.2 电机驱动的论证与选择⋯⋯⋯⋯..... ⋯⋯⋯11 1.2.3速度控制.. (12)2理论分析与计算 (13)2.1电动机选型 (13)2.2摆杆状态检测 (15)2.3驱动与控制算法 (19)3电路与程序设计 (23)3.1 ......................................................... 电路的设计 (23)3.1.1控制部分用51单片机 (23)3.1.2硬件部分 (24)3.1.3 软件部分 (24)3.1.4部分器件原理 (25)3.2 ......................................................... 程序结构与设计.. (26)4设计小结 (30)5参考资料 (32)倒立摆系统是理想的自动控制教学实验设备,使用它能全方位的满足自动控制教学的要求。
2013年全国大学生电子设计大赛本科C题倒立摆程序

#include<stc/STC12C5A60S2.h>#include <math.h>#include <stdio.h>#include <INTRINS.H>typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned int uint;sbit bmq=P1^5;sbit sn=P1^2;sbit l1=P1^0;sbit l2=P1^1;sbit j1=P0^0;sbit j2=P0^1;sbit j3=P0^2;sbit j4=P0^3;sbit j5=P0^4;sbit j6=P0^5;sbit j7=P0^6;sbit j8=P0^7;unsigned char tttt=0;unsigned char step=0;#define unchar unsigned char#define unint unsigned int#define clear 0x01#define home 0x02#define f_set 0x30#define dis_on 0x0f#define in_mode 0x06sbit P_RS=P2^2;sbit P_RW=P2^1;sbit P_E= P2^0;sbit SCL=P1^6; //IIC时钟引脚定义sbit SDA=P1^7; //IIC数据引脚定义char s[15];//****************************************// 定义MPU6050内部地址//****************************************#define SMPLRT_DIV 0x19 //陀螺仪采样率,典型值:0x07(125Hz)#define CONFIG 0x1A //低通滤波频率,典型值:0x06(5Hz)#define GYRO_CONFIG 0x1B //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)#define ACCEL_CONFIG 0x1C //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)#define ACCEL_XOUT_H 0x3B#define ACCEL_XOUT_L 0x3C#define ACCEL_YOUT_H 0x3D#define ACCEL_YOUT_L 0x3E#define ACCEL_ZOUT_H 0x3F#define ACCEL_ZOUT_L 0x40#define TEMP_OUT_H 0x41#define TEMP_OUT_L 0x42#define GYRO_XOUT_H 0x43#define GYRO_XOUT_L 0x44#define GYRO_YOUT_H 0x45#define GYRO_YOUT_L 0x46#define GYRO_ZOUT_H 0x47#define GYRO_ZOUT_L 0x48#define PWR_MGMT_1 0x6B //电源管理,典型值:0x00(正常启用)#define WHO_AM_I 0x75 //IIC地址寄存器(默认数值0x68,只读)#define SlaveAddress 0xD0 //IIC写入时的地址字节数据,+1为读取//****************************************//函数声明//****************************************//MPU6050操作函数void InitMPU6050(); //初始化MPU6050void Delay5us();void I2C_Start();void I2C_Stop();void I2C_SendACK(bit ack);bit I2C_RecvACK();void I2C_SendByte(uchar dat);uchar I2C_RecvByte();void I2C_ReadPage();void I2C_WritePage();uchar Single_ReadI2C(uchar REG_Address); //读取I2C数据void Single_WriteI2C(uchar REG_Address,uchar REG_data); //向I2C写入数据//**************************************//延时5微秒(STC90C52RC@12M)//不同的工作环境,需要调整此函数//当改用1T的MCU时,请调整此延时函数//**************************************void Delay5us(){unsigned char i;i = 22;while (--i);}//**************************************//I2C起始信号//************************************** void I2C_Start(){SDA = 1; //拉高数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 0; //产生下降沿Delay5us(); //延时SCL = 0; //拉低时钟线}//**************************************//I2C停止信号//************************************** void I2C_Stop(){SDA = 0; //拉低数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 1; //产生上升沿Delay5us(); //延时}//**************************************//I2C发送应答信号//入口参数:ack (0:ACK 1:NAK)//************************************** void I2C_SendACK(bit ack){SDA = ack; //写应答信号SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}//**************************************//I2C接收应答信号//**************************************bit I2C_RecvACK(){SCL = 1; //拉高时钟线Delay5us(); //延时CY = SDA; //读应答信号SCL = 0; //拉低时钟线Delay5us(); //延时return CY;}//**************************************//向I2C总线发送一个字节数据//**************************************void I2C_SendByte(uchar dat){uchar i;for (i=0; i<8; i++) //8位计数器{dat <<= 1; //移出数据的最高位SDA = CY; //送数据口SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}I2C_RecvACK();}//**************************************//从I2C总线接收一个字节数据//**************************************uchar I2C_RecvByte(){uchar i;uchar dat = 0;SDA = 1; //使能内部上拉,准备读取数据, for (i=0; i<8; i++) //8位计数器{dat <<= 1;SCL = 1; //拉高时钟线Delay5us(); //延时dat |= SDA; //读数据SCL = 0; //拉低时钟线Delay5us(); //延时}return dat;}//**************************************//向I2C设备写入一个字节数据//**************************************void Single_WriteI2C(uchar REG_Address,uchar REG_data)I2C_Start(); //起始信号I2C_SendByte(SlaveAddress); //发送设备地址+写信号I2C_SendByte(REG_Address); //内部寄存器地址,I2C_SendByte(REG_data); //内部寄存器数据,I2C_Stop(); //发送停止信号}//**************************************//从I2C设备读取一个字节数据//**************************************uchar Single_ReadI2C(uchar REG_Address){uchar REG_data;I2C_Start(); //起始信号I2C_SendByte(SlaveAddress); //发送设备地址+写信号I2C_SendByte(REG_Address); //发送存储单元地址,从0开始I2C_Start(); //起始信号I2C_SendByte(SlaveAddress+1); //发送设备地址+读信号REG_data=I2C_RecvByte(); //读出寄存器数据I2C_SendACK(1); //接收应答信号I2C_Stop(); //停止信号return REG_data;}//**************************************//初始化MPU6050//**************************************void InitMPU6050(){Single_WriteI2C(PWR_MGMT_1, 0x00); //解除休眠状态Single_WriteI2C(SMPLRT_DIV, 0x07);Single_WriteI2C(CONFIG, 0x06);Single_WriteI2C(GYRO_CONFIG, 0x18);Single_WriteI2C(ACCEL_CONFIG, 0x01);}//**************************************//合成数据//**************************************int GetData(uchar REG_Address){char H,L;H=Single_ReadI2C(REG_Address);L=Single_ReadI2C(REG_Address+1);return (H<<8)+L; //合成数据}void bit8_serial_input(unchar ix){unchar i;P_E=0;for(i=0x80;i>=0x01;i=i>>1){if((ix&i)==0) P_RW=0; else P_RW=1;P_E=1;P_E=0;}}void instruct(unchar dat){unchar ch;P_RS=1;ch=0xf8;bit8_serial_input(ch);ch=dat&0xf0;bit8_serial_input(ch);ch=dat<<4;bit8_serial_input(ch);P_RS=0;}void write_abyte(unchar dat){data unchar ch;P_RS=1;ch=0xfa;bit8_serial_input(ch);ch=dat&0xf0;bit8_serial_input(ch);ch=dat<<4;bit8_serial_input(ch);P_RS=0;}void dis_str(unchar x, unchar y, unchar *str) {unchar loc,*p;unchar xline[5]={0,1,3,2,4};p=str;x=xline[x];instruct(home);loc=(16*(x-1)+y-1);if(loc&0x01){loc/=2;instruct(loc|0x80);write_abyte(' ');}else{loc/=2;instruct(loc|0x80);}while(*p){write_abyte(*p++);}}void initial(void){data unchar i,j;P_RS=0;P_E=0;instruct(f_set);for(i=0;i<30;i++){}for(i=0;i<250;i++){}for(i=0;i<250;i++){}instruct(f_set);for(i=0;i<30;i++){}for(i=0;i<250;i++){}for(i=0;i<250;i++){}instruct(0x0c);for(i=0;i<30;i++){}instruct(clear);for(j=0;j<10;j++){for(i=0;i<250;i++){} }instruct(in_mode);for(i=0;i<30;i++){}instruct(home);}int gx,gy,gz,wy;unsigned char PWM1,PWM2,PWM3;unsigned char l;//unsigned int idata atab[91]={0,2,11,26,47,74,107,146,190,241,297,360,428,502,582,668,759,857,959,1068,1182,130 2,1428,1559,1695,1837,1984,2137,2295,2459,2627,2801,2980,3164,3353,3547,3745,3949,4157,4 370,4588,4810,5037,5269,5504,5744,5988,6237,6489,6745,7006,7270,7538,7809,8084,8363,864 5,8931,9219,9511,9806,10104,10405,10709,11015,11324,11635,11949,12266,12584,12905,1322 7,13552,13878,14207,14537,14868,15201,15535,15870,16207,16545,16883,17223,17563,17903, 18245,18586,18928,19271,19613};void Delay50m() //@20.000MHz{unsigned char i, j, k;i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);}void Delay50ms(unsigned char aa){while(aa--)Delay50m();}unsigned char input();void inputstep(){char s[]=" ";unsigned char f=0,num;while(1){initial();dis_str(1,1,"选择\xb9\xfd程");sprintf(s,"%d",(int)step);dis_str(2,1,s);Delay50ms(1);num=input();switch(num){case 16:f=1;break;default:step=num;case 0:break;}if(f)break;}}void saveint(int d){IAP_DATA=d>>8;IAP_TRIG=0x5A;IAP_TRIG=0xA5;IAP_ADDRL++;IAP_DATA=d&0xff;IAP_TRIG=0x5A;IAP_TRIG=0xA5;}void savechar(unsigned char d) {IAP_DATA=d;IAP_TRIG=0x5A;IAP_TRIG=0xA5;}unsigned char readchar(){IAP_TRIG=0x5A;IAP_TRIG=0xA5;return IAP_DATA;}int readint(){int d;IAP_TRIG=0x5A;IAP_TRIG=0xA5;d=IAP_DATA;d<<=8;IAP_ADDRL++;IAP_TRIG=0x5A;IAP_TRIG=0xA5;d+=IAP_DATA;return d;}unsigned char pa1,ps1,pa2,ps2;int getangle();void Delay50us();void inputmode(){char s[]=" ";unsigned char num,t;while(1){initial();dis_str(1,1,"当前角度");sprintf(s,"%d",getangle());dis_str(1,9,s);dis_str(3,1,"角速度");sprintf(s,"%d",GetData(GYRO_YOUT_H)/100-wy);dis_str(3,9,s);Delay50ms(1);if(input()==15)break;}t=PWM1>>4;while(1){initial();while(input()==15);Delay50ms(2);dis_str(4,1,"输入PWM1高四位");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num;}if(num==16)break;}PWM1&=0x0f;PWM1+=t<<4;t=PWM1&0x0f;while(input()==16);Delay50ms(2);while(1){initial();dis_str(4,1,"输入PWM1低四位");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num;}if(num==16)break;}PWM1&=0xf0;PWM1+=t;while(input()==16);Delay50ms(2);t=PWM2>>4;while(1){initial();dis_str(4,1,"输入PWM2高四位");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num;}if(num==16)break;}PWM2&=0x0f;PWM2+=t<<4;t=PWM2&0x0f;while(input()==16);Delay50ms(2);while(1){initial();dis_str(4,1,"输入PWM2低四位");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num;}if(num==16)break;}PWM2&=0xf0;PWM2+=t;while(input()==16);Delay50ms(2);t=PWM3>>4;while(1){initial();dis_str(4,1,"输入PWM3高四位");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num-1;}if(num==16)break;}PWM3&=0x0f;PWM3+=t<<4;t=PWM3&0x0f;while(input()==16);Delay50ms(2);while(1){initial();dis_str(4,1,"输入PWM3低四位");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num-1;}if(num==16)break;}while(input()==16);Delay50ms(2);PWM3&=0xf0;PWM3+=t;t=pa1;while(1){initial();dis_str(4,1,"输入一加速时间");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num-1;if(num==16)break;}while(input()==16);Delay50ms(2);pa1=t;t=ps1;while(1){initial();dis_str(4,1,"输入一减速时间");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num-1;}if(num==16)break;}while(input()==16);Delay50ms(2);ps1=t;t=pa2;while(1){initial();dis_str(4,1,"输入二加速时间");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num-1;if(num==16)break;}while(input()==16);Delay50ms(2);pa2=t;t=ps2;while(1){initial();dis_str(4,1,"输入二减速时间");sprintf(s,"%d",(int)t);dis_str(1,9,s);Delay50ms(1);num=input();switch(num){case 16:case 0:break;default:t=num-1;}if(num==16)break;}while(input()==16);Delay50ms(2);ps2=t;gx=GetData(ACCEL_XOUT_H)/100-164; IAP_CONTR=0x83;IAP_ADDRH=0;IAP_ADDRL=0;IAP_CMD=3;IAP_TRIG=0x5A;IAP_TRIG=0xA5;IAP_CMD=2;saveint(gx);gy=GetData(ACCEL_YOUT_H)/100; IAP_ADDRL++;saveint(gy);gz=GetData(ACCEL_ZOUT_H)/100; IAP_ADDRL++;saveint(gz);wy=GetData(GYRO_YOUT_H)/100;IAP_ADDRL++;saveint(wy);IAP_ADDRL++;savechar(PWM1);IAP_ADDRL++;savechar(PWM2);IAP_ADDRL++;savechar(PWM3);IAP_ADDRL++;savechar(pa1);IAP_ADDRL++;savechar(ps1);IAP_ADDRL++;savechar(pa2);IAP_ADDRL++;savechar(ps2);initial();return;}int x,y,z;int getangle(){x=GetData(ACCEL_XOUT_H)/100+164-gx;y=GetData(ACCEL_YOUT_H)/100-gy;z=GetData(ACCEL_ZOUT_H)/100-gz;if(z<0)x=-x;return x;}void Delay50us() //@20.000MHz{unsigned char i, j;_nop_();_nop_();i = 1;j = 245;do{while (--j);} while (--i);}unsigned char input(){unsigned char state,ps; P0=0xff;while(1){j1=0;Delay50us();state=P0;state=state>>4;ps=0;if(state<15)break;j1=1;j2=0;Delay50us();state=P0;state=state>>4;ps++;if(state<15)break;j2=1;j3=0;Delay50us();state=P0;state=state>>4;ps++;if(state<15)break;j3=1;j4=0;Delay50us();state=P0;state=state>>4;ps++;if(state<15)break;j4=1;break;}switch(state){case 15:return 0;case 14:return 1+4*ps;case 13:return 2+4*ps;case 11:return 3+4*ps;case 7:return 4+4*ps;}return 0;}void rd(){l1=1;l2=0;Delay50ms(pa1);l1=0;Delay50ms(ps1);}unsigned char a;float b;unsigned char reset=0;unsigned char xd,xa;int angle;void main(){InitMPU6050(); //初始化MPU6050IAP_CONTR=0x83;IAP_ADDRH=0;IAP_ADDRL=0;IAP_CMD=1;gx=readint();IAP_ADDRL++;gy=readint();IAP_ADDRL++;gz=readint();IAP_ADDRL++;wy=readint();IAP_ADDRL++;PWM1=readchar();IAP_ADDRL++;PWM2=readchar();IAP_ADDRL++;PWM3=readchar();IAP_ADDRL++;pa1=readchar();IAP_ADDRL++;ps1=readchar();IAP_ADDRL++;pa2=readchar();IAP_ADDRL++;ps2=readchar();TMOD=0X20;TH1=0xfb;TL1=0xfb;SCON=0x50;TR1=1;ES=1;CCON=0;CL=0;CH=0;CMOD=0x02;CCAP0H=CCAP0L=0x20; CCAPM0=0x42;CR=1;EA=1;TI=0;RI=0;/*gx=0;gy=0;gz=0;wy=0;*/initial();dis_str(1,1,"预处理");l=20;initial();dis_str(3,1,"按功能键校准重力"); dis_str(1,2,"3秒后启动……"); for(a=1;a<=20;a++){Delay50ms(1);if(input()==16)inputmode(); }dis_str(1,2,"2秒后启动……"); for(a=1;a<=20;a++){Delay50ms(1);if(input()==16)inputmode(); }dis_str(1,2,"1秒后启动……"); for(a=1;a<=20;a++){Delay50ms(1);if(input()==16)inputmode();}reset=0;step=1;inputstep();if(step==1)rd();if(step==2){l1=1;l2=0;Delay50ms(pa2);l1=0;Delay50ms(ps2);}xa=1;while(1){/*initial();sprintf(s,"%d",GetData(ACCEL_XOUT_H)-gx);dis_str(1,1,s);Delay50ms(1);*//*angle=GetData(ACCEL_XOUT_H);sprintf(s,"%d",angle);dis_str(1,1,s);angle=GetData(ACCEL_YOUT_H);sprintf(s,"%d",angle);dis_str(2,1,s);angle=GetData(ACCEL_ZOUT_H);sprintf(s,"%d",angle);dis_str(3,1,s);angle=getangle();sprintf(s,"%d",angle);dis_str(4,1,s);sprintf(s,"%d",GetData(ACCEL_XOUT_H));dis_str(1,1,s);sprintf(s,"%d",GetData(GYRO_YOUT_H));dis_str(2,1,s);sprintf(s,"%d",GetData(ACCEL_ZOUT_H));dis_str(3,1,s);Delay50ms(1);*/switch(step){case 1:CCAP0H=CCAP0L=PWM1;if(GetData(ACCEL_XOUT_H)-gx>0)if(GetData(GYRO_YOUT_H)-wy>0&&getangle()>0){l1=1;l2=0;}else if(GetData(GYRO_YOUT_H)-wy<0&&getangle()<0){l1=0;l2=1;}else{}else{l1=0;l2=0;}break;case 2:CCAP0H=CCAP0L=PWM2;angle=getangle();if(GetData(GYRO_YOUT_H)-wy>0&&angle>150){l1=1;l2=0;xd=0;}else if(GetData(GYRO_YOUT_H)-wy<0&&angle<-150){l1=0;l2=1;xd=0;}else if(angle<70&&angle>-70){l1=0;l2=0;if(angle>0)xd|=2;else xd|=1;if(xd==3){while(1);}}break;case 3:CCAP0H=CCAP0L=PWM3;if(getangle()<0){l1=1;l2=0;}else{l1=0;l2=1;}break;}if(reset){initial();dis_str(1,1,"\xd5\xfd在烧写程序……");IAP_CONTR=0x60;Delay50ms(40);}}}unsigned char cmd;void RSINTR() interrupt 4{if(RI==1){cmd=SBUF;cmd=cmd<<4;cmd=cmd>>4;if(cmd==0x0e){reset=1;}RI=0;}}。
2013年全国电子设计大赛C题设计报告.doc
2013年全国大学生电子设计竞赛题目:简易旋转倒立摆及控制装置(C题)参赛学校:江苏师范大学队伍编号:XZ 015参赛队员:徐园明、刘海腾、黄波指导教师:朱士虎、王立巍2013年9月7日目录摘要 (1)Abstract (1)1方案论证与比较 (2)1.1电机类型的论证与选择 (2)1.2单片机的论证与选择 (2)1.3电机驱动电路的论证与选择 (2)1.4角度传感器的论证与选择 (3)2系统实现方框图和电路设计 (4)2.1系统总体框架图和实物构架图 (4)2.2硬件电路设计 (5)2.2.1电位器电路 (5)2.2.2显示模块的电路 (5)2.2.3电机驱动电路 (6)3系统软件设计 (7)3.1精密电位器误差计算 (7)3.2倒立摆控制策略 (7)3.3系统流程图 (9)4测试方案与测试结果 (10)4.1测试仪器 (10)4.2测试结果 (10)4.3测试结果分析 (11)参考文献 (12)摘要本文以STC12C5A60S2单片机为控制核心,通过角度传感器实时检测出倒立摆的位置并由单片机计算,计算PID控制算法,实现对直流电机转速的控制,达到倒立摆的动态平衡。
同时系统可以通过键盘设定运行模式和相关角度值,倒立摆运行角度和运行时间由液晶显示,具有较好人机界面。
系统设计结构简单,制作成本低,控制精度高。
关键字:STC12C5A60S2 倒立摆 PIDAbstractThis paper takes STC12C5A60S2 single chip as the control core,Through the real-time detection of the inverted pendulum's position and angle sensor is composed of a single chip computer calculation,Calculation of PID control algorithm,Control the speed of the DC motor,To achieve the dynamic balance of the inverted pendulum.At the same time the system can be set through the keyboard operation mode and related anglevalues.Inverted pendulum movement angle and running time by the liquid crystal display,With good man-machine interface.The system has the advantages of simple structure design,Low production cost,High control precision.Keyword: STC12C5A60S2 level inverted pendulum PID1 方案论证与比较1.1电机类型的论证与选择方案一:采用步进电机。
2013年全国大学生电子设计竞赛 C题
2013年全国大学生电子设计竞赛简易旋转倒立摆及控制装置(C 题)【本科组】2013年9月4日简易旋转倒立摆及控制装置摘要:本作品采用了TI公司MSP430 单片机作为控制器,实现了简易旋转倒立控制系统。
本作品选择两相四线步进电机作为旋转倒立摆的驱动装置,通过精密导电塑料角位移传感器获取摆杆的角度,实现对摆杆E运动状态的检测,以此角位移传感器的测量值作为反馈量,通过PID算法控制步进电机的运动方向和单位时间内运动的步数,实现对摆杆E角度的控制以及倒立摆的起摆和倒立平衡。
本作品可以实现对E摆杆运动状态的检测、倒立摆、起摆以及倒立摆的倒立平衡控制,具有起摆速度快、倒立摆平衡状态稳定、抗干扰能力强等特点。
关键字:旋转倒立摆步进电机 PID算法Abstract:This paper describes a control based on TI's MSP430 microcontroller simple rotary inverted control system. The system uses the West An Jiusheng 57HS56 08 type two-phase four-wire stepper motor as the power source of the system. In WDS35D4 precision conductive plastic angular displacement sensor as the only sensor to realize the system E pendulum motion detection, and so the sensor feedback value as the amount of feedback through software algorithm to determine E pendulum motion by changing the stepper motor the steering and speed to control the state of motion of the pendulum E. Test results had showed that: the system can realize the E pendulum motion detection and control. And the system also has a simple structure, enabling strong, control and stability advantages.Keywords:Rotating balance handstand tepper motor angular displacement一:系统方案1.1 系统结构:本系统主要由以下几部分构成,包括:MSP430单片机、液晶显示模块、矩阵键盘模块、角位移传感器、步进电机驱动模块以及步进电机。
全国大学生电子设计大赛论文
2013年全国大学生电子设计竞赛简易旋转倒立摆及控制装置(C题)【1101003组】2013年9月7日简易旋转倒立摆及控制装置(C题)摘要本系统采用自制的简易旋转倒立摆及控制装置,以16 位单片机(STC89C51)作为旋转倒立摆的检测和控制核心,以额定电压12V的步进电机驱动,通过加速度传感器(ADXL345)转变的角度传感器测定摆杆角度变化来定位摆杆的位置。
系统采用角度传感器(ADXL345)探测在摆杆保持倒立状态的前提下,旋转臂作圆周运动前进;同时通过编码器及PID控制算法实现了步进电机的转速和转向进行调节,以准确找到平衡点位置。
控制器的设计是倒立摆系统的核心内容,主要用到典型的控制器设计理论有PID控制、根轨迹以及频率响应法、状态空间法、最优控制理论等。
本系统可在较短时间内完成摆杆从自然下垂状态,驱动电机带动旋转臂作往复旋转使摆杆摆动,寻找平衡点等任务。
关键词:角度传感器;旋转倒立摆;模糊控制;最优控制理论;目录1系统方案......................................................................................... 错误!未定义书签。
1.1电机方案的论证与选择 (1)1.2 控制系统方案的论证与选择 (2)1.3 角度测量方案的论证与选择 (2)2系统理论分析与计算 (2)2.1 角度检测模块的分析 (2)2.2 控制方法的理论 (3)2.3 设计思想理论分析 (4)2.4 理论计算 (4)3电路与程序设计 (6)3.1电路的设计 (6)3.1.1系统总体框图 (6)3.1.2 电机驱动模块设计 (7)3.1.3 角度传感器模块 (7)3.1.4电源模块 (7)3.2程序的设计 (7)3.2.1程序功能描述与设计思路 (7)3.2.2程序流程图 (8)4测试方案与测试结果 (8)4.1硬件测试 (8)4.2 测试条件与仪器 (9)4.3 测试结果 (9)4.3.1不同脉冲时间间隔对应速度测试 (9)4.3.2摆杆达到指定高度往复运动的时间测试 (10)4.3.3摆杆达到指定度数的测试 (10)4.3.4摆杆选择和配重平衡测试 (10)4.3.5摆杆完成圆周运动测试 (11)4.3.6基本功能(3)测试 (11)4.3.7测试分析与结论 (12)5结束语 (12)6参考文献 (12)附录1:电路原理图 (13)附录2:电机驱动原理图 (14)附录3:稳压模块原理图 (15)附录4:主程序 (16)附录5:角度传感器子程序 (18)简易旋转倒立摆及控制装置(C 题)【本科组】1系统方案本系统主要由系统模块、角度检测模块、电机驱动模块、电源模块组成。
2013电赛报告
2013年全国大学生电子设计竞赛设计报告题目名称:简易旋转倒立摆及控制装置【本科组C题】参赛队号:201302092013年9月7日2013年“瑞萨杯”全国大学生电子设计竞赛摘要:本系统以STC12C5A60S2单片机最小系统为核心,辅以角度传感器、姿态传感器、开关控制电路、LCD1602显示、电机驱动电路等组成。
该设计利用PWM 调制来控制旋转臂转速的变化,通过角度传感器和姿态传感器检测摆杆角度偏转信号,并将检测到的数值A/D转换后送入调速系统,经LCD1602显示屏进行显示。
也可通过拨码开关控制旋转臂的转速,从而改变摆杆的状态。
该系统实现了通过操作拨码开关控制旋转臂转速的大小,使摆杆状态按要求变化。
关键词:单片机最小系统角位移传感器 A/D转换2013年“瑞萨杯”全国大学生电子设计竞赛目录1.作品简介 (1)2.系统方案论证和比较 (1)2.1系统方案整体实验框图 (1)2.2方案论证与比较 (1)2.1.1输入模块选择 (1)2.1.2调制方式的选择 (2)2.1.3角度传感器的选择 (2)2.1.4显示系统的选择 (2)2.3理论分析与参数计算 (2)2.3.1控制电路 (2)2.3.2角度测量原理与控制算法 (3)3.电路与程序设计 (3)3.1硬件设计 (3)3.1.1角度传感器的设计 (3)3.2软件设计 (3)3.1.1软件主程序流程图 (3)3.1.2程序算法理论分析 (4)4.系统调试与结果分析 (5)4.1系统调试的方法与仪器 (5)4.2系统电路的调试 (5)4.2.1电机的性能测试 (5)4.2.2角度传感器的性能测试 (5)4.3注意事项及解决方案 (6)4.4调试结果分析与总结 (6)5.实验结果的分析与总结 (6)6.参考文献 (6)附录一:部分电路原理图 (1)附录二:程序源代码 (4)1.作品简介本次设计作品以单片机最小系统和角度传感器、姿态传感器为制作核心,同时运用A/D模数转换,PWM调制旋转臂转速、LED声光显示,拨码开关控制等,从摆杆方向上的角位移传感器接收到摆杆角度偏转的信号,经A/D模数转换后,LED显示器进行声光显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
第一章系统方案比较与选择 (3)
1.1总实现方案 (3)
1.2主控制器方案比较与选择 (3)
第二章理论分析与计算 (5)
2.1编码器脉冲转换角度设计 (5)
2.2摇摆及圆周算法设计 (5)
2.3机械结构设计及电机选型 (6)
2.4 PID算法设计 (7)
第三章系统电路设计 (9)
3.1 系统主板工作原理 (9)
第四章系统程序设计 (10)
4.1 系统总体模块图 (10)
4.2 系统总流程图 (11)
第五章系统测试与结果 (12)
5.1 传感器角度测试 (12)
5.2 摇摆及圆周运动测试 (12)
5.3 倒立摆测试 (13)
第六章误差分析 (14)
6.1 整体的误差分析 (14)
6.2 软件引起的算法误差分析 (14)
第七章参赛感悟 (15)
摘要
本设计综合考虑基础部分和发挥部分要点,采用mega128a为主控芯片,BTS7960驱动电机并在程序中涉及到pid算法对电机进行调控,在设计中,我们采用1000线编码器为角度传感器。
在该简单控制装置中,我们实现了摆动,圆周运动和短时间的自动控制下的倒立。
关键字:倒立摆,mega128a,编码器
第一章系统方案比较与选择
1.1总实现方案
方案一:用陀螺仪和加速度计通过卡尔曼数据融合得到角度,用此处的角度为载体用单片机进行数据处理,并调整电机。
方案二:用电位器做角度传感,通过单片机自带ADC来读取电位数值以此为依据来判断角度,并调整电机。
方案三:用编码器做角度传感器,通过读取编码器的输出脉冲来计算角度传感器的输出角度,用此角度做处理调整电机。
通过对两个方案的对比选择,方案一中的加速度计和陀螺仪算法实现复杂,我们在融入卡尔曼滤波后有明显滤波效果,但是由于圆周运动,会使得各个方向轴返回的数据出错,且波动大,会减弱卡尔曼的滤波效果,对于pid的精准调整还是远远达不到预期。
在方案二中,考虑到电位器内部结构问题,虽然理论上电位器在转动过程中是线性的,但是考虑到每次停靠的电阻位可能会产生误差,最后考虑到我们最终选定的单片机ADC只有10位,在方案三中,由于实现编码器的功能实现方便简单,并能更多的趋近于精确值,因此最后我们采用了方案三。
1.2主控制器方案比较与选择
为了完成在短时间快速采集并计算角度,主控器件必须有较高的CPU工作频率和存储空间。
方案一:采用51系列加强型STC12C5A60S2作为主控器件,用来实现题目所要求的各种功能。
此方案最大的特点是系统规模可以做得很小,成本较低。
操作控制简单。
但是,我们在利用单片机处理高速信号快速扫描及电机控制时显得吃力, 51系列单片机很难实现这一要求。
方案二:采用ATMEL公司的AVR系列ATMEGA128A单片机为核心控制器件,MEGA128A有8个外部中断,中断系统丰富,并且有128K 字节的系统内可编程Flash,我们对它的性能和指标相对也较为熟悉,如此能够实现快速扫描和数据处理!
按照题目的要求,综合考虑我们最终选择了方案二,采用ATMEGA128A单片机为核心控制器件。
第二章理论分析与计算
2.1编码器脉冲转换角度设计
在单片机中,我们开启外部0中断,在AVR系列单片机中外部0中断的中断优先级最高,以此我们可以得到较为精确的角度。
由于我们使用的编码器为1000线编码器,所以每一个脉冲的角度值为0.36,所以在计算时即使丢步也不会很大的影响角度值,我们在后面做过的实验测试中,也证明了我们的想法。
2.2摇摆及圆周算法设计
我们通过对整体的系统建模,在查阅资料当中,根据单摆定律,摆杆的摆动虽然在衰减但是摆动的周期相同,所以在基础要求中的摇摆和圆周运动中,只要在摆杆在正弦我们对单摆系统实测波形如下,所以依据我们分析,当每次施力点在每次过峰值的时候既可以累加力的作用效果,以此来完成摇摆和圆周运动。
图2-2
2.3机械结构设计及电机选型
图2-3
以上是我们机械结构的仿真图。
在电机选型中,我们首先想到步进电机很便于角度控制,但是由于步进电机反应较慢,所以我们没有考虑,对于普通的直流电机虽然其反应快但调速性能差,另外我们还可以选择减速电机和直流伺服电机,直流伺服电机调速性,启动和制动都很有优势但是价格昂贵,最后在考虑到经济适用性方面,我们选择了带
有减速箱的减速电机。
在这个简易摆装置中,我们选用400转减速电机,型号为JH37-555,额定功率为15W,力矩为30Kgf.cm,由于转矩T=9550 * P / n= 716.25N·m,电机中心距离转臂245mm,电机转矩已经足够大,完全可以带动所要带的物体。
另外,由于该系统中电机要在短时间内顺逆时针转动,所以系统要达到很高要求的稳定性,所以我们在选择装置的底盘和支架选用了较为稳固的粗木。
在转臂与摆杆连接处我们选用了欧姆龙1000线编码器,编码器的轴与轴承相连接,也解决了摆杆与转臂的连接问题。
在机械结构的设计当中我们一共修正了3次基本构架,也经历了很多次的调整,在这个过程中也确定了最终的最稳定的构架。
2.4 PID算法设计
为了实现主轴旋转角度控制,我们又采用电机转动范围限制,同样的采用增量式PID控制算法,且结合我们单片机的速度限制(8位,16Mhz),电机旋转角度测量会存一定的的偏差,因此我们整定了P、I两个参数,减小了因测量误差计算出来的PID偏差。
采集回来的摆轴角度和主轴旋转角度,经PID反馈回来的数据进行融合,以PWM占空比的形式直接输入到减速直流电机上面。
从而达到目标控制。
PID参数整定:由于我们在物理结构,以及力学方面的知识薄弱,因此我们采用了反复整定确定系数的办法,首先,我们控制I、D为零,控制P参数,知道系统对输入阶跃响应出现零界振荡,记下这时的比例系数和零界震荡周期,在此基础上将该系数乘以60~70%,在调节I参数,同样的方法,调节D参数,知道系统稳定。
增量型控制:
控制流程:
公式:
[][])2()1(2)()()1()()
1()()(-+--++--=--=∆n e n e n e T T K n e T T
K n e n e K n u n u n u D P I P
P
程序框图:
第三章系统电路设计
3.1 系统主板工作原理
系统主板主要由5V电源模块,3.3V电源模块,蜂鸣器模块,以及ATMEGA128A 单片机为核心控制模块按。
5V电源模块:此设计采用12V开关电源供电,通过稳压芯片LM2576一脚输入三脚输出将12V输入转变为5V输出,来给单片机供电。
3.3V电源模块:3.3V电源输出是由AM1117稳压芯片三脚输入5V二脚输出来进行转换
按键模块:本系统板中设计了四个按键,通过按键来对不同功能来进行切换演示。
(外接)
液晶模块:液晶模块采用NOKIA5110液晶来显示,NOKIA5110液晶具有功能强大,连接简单等优势。
(外接)
图3-1 系统主板工作原理图
第四章系统程序设计4.1 系统总体模块图
4.2 系统总流程图
第五章系统测试与结果
5.1 传感器角度测试
我们在进行测试时为了保证角度的正确性,我们每将摆杆转动一个圆周或者多个圆周最后在摆杆垂直的角度为对360度求余即为0度,所以我们对编码器测量角度进行了测量以便分析其误差。
5.2 摇摆及圆周运动测试
我们在调试好后,对摆杆的摇摆进行测试,主要是针对摆杆起振到60度及以上角度的时间进行了统计分析。
(该数据由秒表测量得到,角度由简易量角器测得)
由以上数据可知,摇摆测试中该装置基本稳定。
我们同时也对摆杆进行了圆周运动的测试,主要是针对圆周运动的稳定性进行了测试统计分析。
(该数据由秒表测量得到)
由以上数据可以,我们装置的圆周运动也是基本稳定的,但是在测试中出现了一次未成功进入的圆周运动状态,我们分析是,由于在程序中我们要求每次起振要从0度开始,由于测量中的疏忽,我们没有等到摆杆静止就进入了测试,由此而产生的错误。
5.3 倒立摆测试
我们对倒立摆主要进行了摆杆稳定时间测试,以此分析我们的装置在倒立摆过程中的稳定性。
第一项测试是在人为将摆杆树直在165度到-165度范围内,待摆杆直立后的稳定时间。
第六章误差分析
6.1 整体的误差分析
由于我们在本次设计中采用编码器为1000线编码器,理论上每转一圈要进入外部中断1000次,所以在程序中很有可能出现掉步或者错步的。
但是由于我们采用的编码器线数较高,所以即使丢步也能基本满足要求。
为了减小误差,我们将编码器接到了最高优先级别的外部中断0中,所以也基本能满足要求。
6.2 软件引起的算法误差分析
由于增量式PID输出的是控制量增量,如果采集系统出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大,因此我们的角度PID采用了增量式PID算法。
结合响应速度,我们整定了P、D两个参数,使系统响应更快,能在短时间内实现直立控制。
第七章参赛感悟
在本次电赛的四天三夜了,也是我们队全体人员感觉最为充实的一段日子,虽然结果不尽人意但是努力的过程还是值得我们回味的。
我们选定倒立摆题目以后,我们一共更换了三次机械结构,才最终敲定了最稳定的版本,在程序上,对于pid算法的调试,我们也积累了一些经验。
上图为我队一次结构示
上图为我队第二次结构
上图为我队最后一次结构图。