《简易旋转倒立摆及控制装置毕业论文.doc》由会员分享,可在线阅读,更多相关《简易旋转倒立摆及控制装置毕业论文.doc(24页珍藏版)》请在三一办公上搜索。
1、2013年全国大学生电子设计竞赛简易旋转倒立摆及控制装置(C题)【本科组】2013年9月6日摘 要 本系统要求设计并制作一个简易旋转倒立摆及控制装置。其中角度传感器WDD35 D4电位计,直流伺服电机和单片机STC12C5A60S2最小系统是本系统的核心部分。利用电位计进行数据采集,在控制摆杆E旋转角度,旋轴D摆动速度是通过测试得到PID系数Kp,Ki,Kd,能够实现倒立摆系统的要求。将传感器的电位信号通过A/D转换送给单片机,并通过液晶显示屏显示读到的A/D值,PID输出,另加按键一起实现人机交互功能,最后实验表明,系统达到了系统要求基本功能要求。关键词:倒立摆,电位计,单片机,PID闭环控
2、制,液晶显示目 录1系统方案11.1 电源模块的论证与选择11.2 电机驱动模块的论证与选择11.3 角度检测模块的论证与选择1.4 显示模块的论证与选择1.5 电机的论证与选择1.6 控制系统的论证与选择12系统理论分析与计算12.1 系统可行性的分析12.1.1 控制方案分析12.1.2 角度传感器的分析12.1.3 电机速度控制分析12.2 摆杆角度有关的计算12.2.1 电位计信号与摆角的换算12.2.2 角度输出与PWM的换算12.3 控制摆动时间的计算22.3.1 单摆周期的计算23电路与程序设计23.1电路的设计23.1.1系统总体框图23.1.2 单片机子系统框图与电路原理图2
3、3.1.3 电机驱动子系统框图与电路原理图2 3.1.4 稳压电源子系统图与电路图3.1.5电源23.2程序的设计23.2.1程序功能描述与设计思路23.2.2程序流程图34测试方案与测试结果34.1测试方案34.2 测试条件与仪器34.3 测试结果及分析34.3.1测试结果(数据)34.3.2测试分析与结论4附录1:电路原理图5附录2:源程序6简易旋转倒立摆及控制装置(C题)【本科组】1系统方案本系统主要由电源模块、电机驱动模块、系统控制模块、角度传感器模块,显示模块组成,下面分别论证这几个模块的选择。1.1 电源的论证与选择方案一:直接使用电池组供电,该电源随着使用电压不稳。方案二:采用开
4、关电源效率高,但是需要购买,且比较贵。方案三:自行设计稳压电源模块给系统各部分供电,由于各稳压芯片不贵,而且电压可调,做好滤波设计,使用效果也不错。综合以上三种方案,选择方案三。1.2 电机驱动的论证与选择方案一:自行搭建H桥,设计电机驱动,经过试验功率不大,切比较容易烧。方案二:使用电机驱动芯片BTS7960两片并联,由于内部有自动睡眠可以防止由于功率过大时的发热烧毁芯片情况发生。而且最大输出电流达到64A。综合以上两种方案,选择方案二。1.3 角度检测模块的论证与选择方案一:使用编码器来检测摆杆角度,但是编码器不易安装,而且控制起来也不是很方便,价格比较高。方案二:使用WDD35 D4电位
5、计,通过检测输出的电位信号转换成角度信号,能够无限权的旋转,反应灵敏,价格比较合适。综合以上两种方案,选择方案二。1.4 显示模块的论证与选择方案一:使用上位机观看数据,需要数据通信设置,由于使用的是单片机,比较麻烦。方案二:使用液晶显示,但是显示的位数有限,只能显示个数字或字符,不能显示汉字。方案三:使用液晶显示,能显示汉字,能显示的数据量大。综合以上三种方案,选择方案三。1.5 电机的论证与选择方案一:采用步进电机,由于最小的步进角不能很小,所以不能精确控制电机轴转过角度,不好控制转轴D。方案二:采用直流伺服电机,由于直流伺服电机控制精度高,速度能平滑控制,比较适合该系统保持倒立时的性能要
6、求。综合考虑采用方案二。1.6控制系统的论证与选择方案一:选用At89c52单片机,由于该单片机内部没有集成A/D转换电路,需要设计A/D转换电路模块,另外单片机没有集成PWM输出端口,调节电机需要用定时器模拟方波输出最多2位的PWM,是8位的单片机处理速度有些慢。方案二:选用STC12C5A60S2型单片机,该单片机是加强型51单片机,内部集成A/D转换电路,其中的PCA模块可通过程序设置使其工作于8位PWM模式。价格也不高。综合考虑采用方案二。2系统理论分析与计算2.1 系统可行性的分析 2.1.1 控制方案的分析简单地开环控制,根据电位计输出信号来换算出PWM驱动电机转动,电机容易驱动转
7、轴D错过摆杆倒立位置,系统保持摆杆倒立不稳定。由于摆杆要倒立,就必须随着转轴D的转动而动,在摆杆倒立时距中心轴线偏角比较大时就需要加速保持倒立采用典型的PID闭环控制方法,闭环控制能够根据反馈信号知道摆杆和垂直位置偏差角度的大小输出相适应的PWM控制电机的速度尽快恢复倒立状态。单级倒立摆控制系统最经典的是PID控制方法,后续又出现LQR,模糊PID等一些控制方法,但是对于单级倒立摆经典的PID已经足够,对于多级倒立摆,如二级,三级则需要用到较为复杂的数学模型,通过仿真得到比较理想的,参数。对于四级倒立摆则需要更为复杂的控制方法,由于条件有限,我们对该系统建立了比较理想的的基本模型,进行估算三个
8、参数值,并进行不断地调试,得到比较适合该系统的参数值。从而得到了适合要求的系统控制方案,单闭环增量式控制方案。2.1.2 角度传感器的分析由于编码器比较贵,而且现有的条件我们不容易安装,所以选择了WDD35 D4电位计,价格比较合适,比较熟悉控制方法,而且该传感器能够度无限圈旋转,这就满足该旋转单级倒立摆的调试过程及其测试要求,但是该传感器有一个盲区,分界线处出现跳转,这一部分我们最初很不幸放在了最上面,似的在测试保持倒立时的参数时,电机响应太快摆杆刚有一很小角度,电机对应的值出现跳转,这时电机的速度很大,摆杆来不及保持倒立,转轴已经旋转较大角度,摆杆摆出绝对值小于度的范围,电机不再反应,不能
9、保持倒立,但是将盲区移开上面时就可以解决电机响应过快这个问题,电机就可以按照控制的要求作出相应的响应速度。而且该电位计是塑料的比较轻,可以降低机械损失,方便系统的调试工作。2.2 摆杆角度的有关计算 2.2.1 电位计信号与摆角的换算电位计两个端子接GND和+5V,旋转一周360度, 5V/360即为单片机读到的角度最小单位值。2.2.2 角度输出与的换算通过摆臂旋转将经A/D转换后的电压值运用PID自动控制理论进行数据处理,可得到一个可作为PWM占空比,以此换算出PWM占空比,赋予电机,实现控制电机转速的目的。2.3 控制摆动时间的计算 2.3.1 单摆周期的计算由于需要尽快摆动,达到系统要
10、求的角度,所以需要对单摆的周期进行理想的计算然后考虑误差再做估计。2Lg=0.897s,(L=20cm,g=9.8)我们最终取0.9s作为参考值进行电机的控制应用。3电路与程序设计3.1电路的设计3.1.1系统总体框图系统总体框图如图1所示电位计传感器信号稳压电源模块7.2v电源STC12C5A60S2单片机最小系统转轴,摆杆部分电机驱动模块直流伺服电机图1 系统总体框图3.1.2 单片机子系统框图与电路原理图如图2,3所示STC12C5A60S2单片机复位电路时钟电路电源(+5V)图2 单片机子系统框图图 单片机子系统电路图3.1.3 电机驱动子系统框图与电路原理图1、 电机驱动子系统框图如
11、图4两片BTS7960全桥驱动芯片5V稳压电源.电源单片机控制信号PWM74LS244电源指示灯图4 电机驱动子系统框图2、电机驱动子系统电路图如图5图5 电机驱动子系统电路3.1.4 稳压电源子系统框架图与电路原理图滤波电路LM2940电源 图6 稳压电源子系统框图图7 稳压电源子系统电路3.1.5电源本系统电源由离子电池提供,无需作介绍。3.2程序的设计3.2.1程序功能描述与设计思路1、程序功能描述根据本题题目要求设计简易旋转倒立摆控制系统程序,题目中未涉及按键及显示等要求,但为对系统操作简易化和功能分离话,能在系统调试中掌握相关数据的变化及时调整部分内容,在设计时加入按键和液晶显示模块
12、,实现对系统实时监控和及时的调节。本次按键设置仅为对题目中不同要求的功能实现简便切换。显示部分主要是对旋转杆相对起始位置旋转时角度变化,通过A/D转换模块时时输出摆杆偏转位置,从而参考对相关量的设定,调整。2、程序设计思路为增强程序的可读性使程序更清晰明了,在设计程序时结合相关问题,将程序有效地模块化。做到见明知意,有效帮助理解各函数功能。考虑到程序涉及模拟量数字量的转换,PWM电机驱动,PID自动控制和液晶显示辅助等内容,将程序按照此功能模块系统划分,逐步编写,最后融合与主函数中,从而实现对题目系统的自动化控制。3.2.2程序流程图1、主程序流程图4测试方案与测试结果4.1测试方案1、硬件测
13、试稳压电源的波形测试,比较稳定,符合要求,电位计输出信号基本没有受影响,信号电压和转过角度呈线性关系,显示屏显示正常,只要不在电位计盲区,显示的内容都基本正常。2, 软件仿真测试通过keil4软件在线调试,程序编译正确,执行正常。延时等子程序符合要求。3、硬件软件联调通过串口将程序下载至单片机中,打开单片机电源开关,系统能够较顺利完成基本和发挥部分。4.2 测试条件与仪器测试条件:检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。测试仪器:高精度的数字毫伏表,模拟示波器,数字示波器,数字万用表,指针式万用表。4.3 测试结果及分析4.3.1测试结果(数据)
14、5V档信号测试结果好下表所示: (单位/V)角度030100160190240260300电压00.431.412.202.683.343.634.284.3.2测试分析与结论根据上述测试数据,电压与摆杆角度关系,由此可以得出以下结论:1、电压与摆杆摆角基本呈线性关系,说明电位计符合系统设计要求。2、电机在摆杆在和垂直线间夹角与电机响应速度呈现相同趋势,及时保持倒立。3、摆杆不能再电位计盲区,否则不能正常控制,这不是人为因素。综上所述,本设计达到设计要求。参加本次全国电子设计大赛,我们认真做好比赛要求内容,并没有被困难所困惑,也没有被身体的疲惫破坏我们的积极性,我们发散思维,相处许多种解决的方
15、案用来解决算法灵魂,最后找到最合适的应用到该系统中,感谢组委会给我这样一个锻炼自我和团队合作的机会。附录1:电路原理图附录2:源程序# include stc12c5a.h sbit k1=P00; sbit k2=P01; sbit k3=P02;sbit SCLK=P24;/ SCLK线sbit SDIN=P23;/ SDIN线sbit LCD_DC=P22;/ DC线sbit LCD_CE=P21;/ CE线sbit LCD_RST=P20;/ RST线int qian = 0,bai = 0, shi = 0,ge=0; int channel = 0;void delay_1us(v
16、oid) /1us延时函数unsigned int i;for(i=0;i0;x-) for(y=110;y0;y-);void delay(uint c)uint a,b;for(a=0;ac;a+)for(b=0;b1100;b+);void LCD_init(void)/ 产生一个让LCD复位的低电平脉冲LCD_RST = 0;delay_1us();LCD_RST = 1;/ 关闭LCDLCD_CE = 0;delay_1us();/ 使能LCDLCD_CE = 1;delay_1us();LCD_write_byte(0x21,0);/ 使用扩展命令设置LCD模式LCD_write_
17、byte(0xc8,0);/ 设置偏置电压LCD_write_byte(0x06,0);/ 温度校正LCD_write_byte(0x13,0);/ 1:48LCD_write_byte(0x20,0);/ 使用基本命令LCD_clear(); / 清屏LCD_write_byte(0x0c, 0);/ 设定显示模式,正常显示/ 关闭LCDLCD_CE = 0;/*-LCD_clear : LCD清屏函数-*/void LCD_clear(void)unsigned int i;LCD_write_byte(0x0c,0);LCD_write_byte(0x80,0);for (i=0; i5
18、04; i+)LCD_write_byte(0,1);/*-LCD_set_XY : 设置LCD坐标函数输入参数:X :083 Y :05-*/void LCD_set_XY(unsigned char X,unsigned char Y) LCD_write_byte(0x40|Y,0);/ column LCD_write_byte(0x80|X,0); / row/*-LCD_write_char : 显示英文字符输入参数:c :显示的字符;-*/void LCD_write_char(unsigned char c)unsigned char line;c-=32;for (line=
19、0;line6;line+)LCD_write_byte(font6x8cline,1);/*-LCD_write_english_String : 英文字符串显示函数输入参数:*s :英文字符串指针; X、Y : 显示字符串的位置,x 0-83 ,y 0-5-*/void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)LCD_set_XY(X,Y);while(*s) LCD_write_char(*s);s+;/*-LCD_write_chinese_string: 在LCD上显示汉字输入参数:X、Y :显
20、示汉字的起始X、Y坐标; ch_with :汉字点阵的宽度 num :显示汉字的个数; line :汉字点阵数组中的起始行数 row :汉字显示的行间距测试:LCD_write_chi(0,0,12,7,0,0);LCD_write_chi(0,2,12,7,0,0);LCD_write_chi(0,4,12,7,0,0);-*/ void LCD_write_chinese_string(unsigned char X, unsigned char Y, unsigned char ch_with,unsigned char num, unsigned char line,unsigned
21、char row)unsigned char i,n;LCD_set_XY(X,Y); /设置初始位置for(i=0;inum;)for(n=0;nch_with*2;n+) /写一个汉字 if(n=ch_with) /写汉字的下半部分if(i=0) LCD_set_XY(X,Y+1);elseLCD_set_XY(X+(ch_with+row)*i),Y+1);LCD_write_byte(write_chineseline+in,1);i+;LCD_set_XY(X+(ch_with+row)*i),Y);/*-LCD_draw_map : 位图绘制函数输入参数:X、Y :位图绘制的起始X
22、、Y坐标; *map :位图点阵数据; Pix_x :位图像素(长) Pix_y :位图像素(宽)-*/void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map, unsigned char Pix_x,unsigned char Pix_y)unsigned int i,n;unsigned char row;if (Pix_y%8=0) row=Pix_y/8; /计算位图所占行数elserow=Pix_y/8+1;for (n=0;nrow;n+)LCD_set_XY(X,Y);for(i=0;i
23、Pix_x;i+)LCD_write_byte(mapi+n*Pix_x,1);Y+; /换行 /*-LCD_write_byte : 使用SPI接口写数据到LCD输入参数:data :写入的数据; command :写数据/命令选择;-*/void LCD_write_byte(unsigned char dat,unsigned char command)unsigned char i;/PORTB &= LCD_CE ; / 使能LCDLCD_CE = 0; if (command = 0)/ PORTB &= LCD_DC ; / 传送命令LCD_DC = 0;else/ PORTB
24、|= LCD_DC ; / 传送数据LCD_DC = 1;for(i=0;i8;i+)if(dat&0x80)SDIN = 1;elseSDIN = 0;SCLK = 0;dat = dat 0;x-)for(y=110;y0;y-);uint STC12_ADFormat(uchar align) uint AD_Res = 0;AUXR1 &= 0xFB;if(align = AD_HBit_Align)AUXR1 |= AD_HBit_Align;ADC_RESL = ADC_RESL & 0x03;AD_Res = ADC_RESL + ADC_RES * 4;else if(alig
25、n = AD_LBit_Align)AUXR1 |= AD_LBit_Align;ADC_RES = ADC_RES & 0x03;AD_Res = ADC_RESL + ADC_RES * 256;return AD_Res; void STC12_ADChannel(uchar Channel)uchar reg_temp = 0x01;if(Channel 7)return;reg_temp 4820|channel4500|channel4820|channel4500|channel580) CR=1; pwm0(180); pwm1(252); PCA_PWM1=0x00;/占空比调节第九位为0 delay(400); CR=1; pwm0(252); pwm1(180); PCA_PWM0=0x00; /占空比调节第九位为0 delay(400);