《大学毕业设计---单级倒立摆.doc》由会员分享,可在线阅读,更多相关《大学毕业设计---单级倒立摆.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘 要本系统以atmega16为平台,主要由机械倒立装置及单片机自动控制组成,将装在摆杆的角度传感器GY-61得到的数据进行处理,利用摆杆倒立摆动过程中受力的分析和实验数据总结对摆杆板调节一定的角度,提高了倒立摆装置自动控制的稳定性。通过PWM技术动态控制电机的转速、方向和PID控制调节,实现装置设计的各种要求,达到了设计目的,完成了设计功能。关键词:角度传器;电动机;倒立摆;反馈;倒立控制;PID控制 Abstract The system taking ATmega16 as the platform, mainly composed of a mechanical device and
2、microcomputer automatic control system, for processing will be installed in the GY-61 pendulum angle sensor data, summarize the pendulum plate adjusting certain angle by analysis and experiment data force pendulum inverted the oscillating process, improves the stability of inverted swing device for
3、automatic control. By adjusting the speed, control the direction and PID dynamic PWM technology to control the motor, to achieve a variety of device design requirements, achieve the design purpose, completed the design function.Keywords: Angle sensor;Motor; Inverted pendulum;inverted control; Feedba
4、ck; PID control目 录1 方案论证11.1 电机的选择32 总体方案33 电路设计43.1 Atmega16及其AD电路43.2内部PWM发生模式53.3 直流电机驱动电路73.4 PID控制84 软件设计95 系统测试96 误差分析与改进方法107 小结10参考文献11附录一:元件明细表11附录二:仪器设备清单11附录三:电路图图纸121 方案论证方案一:AT89C51为8位单片机,具有一定算术运算功能,编程软件灵活、自由度大;具有功耗较低、体积小、技术成熟和成本低等优点,得到了广泛应用;使用AT89C51与AD采集芯片PCF8591,通过AD采集芯片PCF8591对角度传感器
5、信号进行采集传给单片机,单片通过PID控制算法使定时器产生变化的PWM波及波形持续时间,输入电机驱动板控制电机的转速和角度。运算速度较慢。引脚图,如下图1-1:图1-1 8051引脚图缺点:51单片内部资源有限,内部没有集成的A/D转换器,在一些需要数据采的应用场合,需要外扩A/D转换器,硬件连接较复杂,给系统设计过程带来不便。方案二:使用atmega16内部集成了10位A/D转换器,可对角度传感器信号进行采集与处理,还集成了PWM的功能,硬件电路连接较简单,系统运行稳定。运算速度较快。Atmega16简介:ATmega16是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其
6、先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz,从而可以减缓系统在功耗和处理速度之间的矛盾。ATmega16 AVR 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与运算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10 倍的数据吞吐率。ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512 字节EEPROM,1K 字节SRAM,32 个通用I/O 口线,32 个通用工作寄存
7、器,用于边界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/ 计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP 封装) 的ADC ,具有片内振荡器的可编程看门狗定时器,一个SPI 串行端口,以及六个可以通过软件进行选择的省电模式。工作于空闲模式时CPU 停止工作,而USART、两线接口、A/D 转换器、SRAM、T/C、SPI 端口以及中断系统继续工作;停电模式时晶体振荡器1停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准
8、,而其余功能模块处于休眠状态; ADC 噪声抑制模式时终止CPU 和除了异步定时器与ADC 以外所有I/O 模块的工作,以降低ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby 模式下则允许振荡器和异步定时器继续工作。引脚图如图1-2:图1-2 Atmega16引脚图缺点:价格稍显昂贵,编程较复杂。方案三:使用STM32F103内部集成了1s的双12位ADC,可对角度传感器信号进行采集与处理。硬件电路连接较简单,低功耗,系统运行稳定。最高工作频率72MHz,运算速度较快。STM
9、32引脚如图1-3:图1-3 STM32引脚图缺点:价格昂贵,编程复杂。最终选择方案:方案二。因倒立摆摆动速度快,对ADC采样速率及运算速度要求较高,所以我们这里选择方案二。方案三因价格昂贵,编程复杂,所以在这里我们不做考虑。1.1 电机的选择方案一:采用步进电机,步进电机具有控制简单、定位精度高、无累计误差等优点。缺点:扭矩较小,反应动作较慢,价格昂贵。方案二:机构动力部分选用伺服电机,能精确控制转动角度、速度。缺点:扭矩较大,反应动作较慢,价格昂贵。方案三:采用直流电机,直流电机具有最优越的调速性能,主要表现在调速方便(可无级调速)、调速范围宽、低速性能好、运行平稳、噪音低、效率高的优点。
10、最终选择方案:方案三。由于系统中电机控制平板倾角需要较高的控制精度,基于直流电机和步进电机的特点,所以这里选择直流电机。2 总体方案当角度传感器随摆杆转动的时候,通过atmega16集成的ADC读取到相应的数据传给atmega16的PID控制算法,算出相应的值用以控制PWM发生器产生相应控制的PWM实现调节,如图2-1:PID控制Atmega16处理采样信号发送已处理数据ADC采集信号角度传感器控制PWM输出作用电机图2-1总体方案框图3 电路设计3.1 Atmega16及其AD电路,如图3-1:图3-1 Atmega16及其AD电路ATmega16有一个10位的逐次逼近型ADC。ADC与一个
11、8通道的模拟多路复用器连接,能对来自端口A 的8 路单端输入电压进行采样。单端电压输入以0V (GND) 为基准。器件还支持16 路差分电压输入组合。两路差分输入(ADC1、ADC0 与ADC3、ADC2)有可编程增益级,在A/D 转换前给差分输入电压提供0dB(1x)、20dB(10x) 或46dB(200x)的放大级。七路差分模拟输入通道共享一个通用负端(ADC1), 而其他任何ADC 输入可做为正输入端。如果使用1x 或10x 增益,可得到8 位分辨率。如果使用200x 增益,可得到7 位分辨率。ADC 包括一个采样保持电路,以确保在转换过程中输入到ADC 的电压保持恒定。当ATmega
12、16的31脚接VCC时,则5V作为内部AD的参考电压。悬空时,内部AD参考电压为内部2.56V作为参考电压晶振选择为16MHz,提高AD采集速度。这里我们采用的是10位内部2.56V作为参考电压。ADC转换结果转换结束后(ADIF 为高),转换结果被存入ADC 结果寄存器(ADCL, ADCH)。单次转换的结果如下,式3-1:(3-1)式中,VIN 为被选中引脚的输入电压,VREF 为参考电压。 0x000 代表模拟地电平, 0x3FF 代表所选参考电压的数值减去1LSB。如果使用差分通道,结果如式3-2:(3-2)式中,VPOS 为输入引脚正电压,VNEG 为输入引脚负电压,GAIN 为选定
13、的增益因子,且VREF 为参考电压。结果用2 的补码形式表示,从0x200 (-512d) 到 0x1FF (+511d)。如果用户希望对结果执行快速极性检测,它充分读结果的MSB( ADCH 中ADC9 )。如果该位为1,结果为负;该位为0,结果为正。3.2内部PWM发生模式Atmega16的PWM模式分为:普通模式、CTC( 比较匹配时清零定时器)模式、快速PWM模式、相位修正PWM模式。这里我们选择的是快速PWM模式。快速PWM模式工作原理:快速PWM 模式(WGM01:0 = 3) 可用来产生高频的PWM 波形。快速PWM 模式与其他PWM模式的不同之处是其单斜坡工作方式。计数器从BO
14、TTOM计到MAX,然后立即回到BOTTOM重新开始。对于普通的比较输出模式,输出比较引脚OC0在TCNT0与OCR0匹配时清零,在BOTTOM 时置位;对于反向比较输出模式, OC0 的动作正好相反。由于使用了单斜坡模式,快速PWM 模式的工作频率比使用双斜坡的相位修正PWM 模式高一倍。此高频操作特性使得快速PWM 模式十分适合于功率调节,整流和DAC 应用。高频可以减小外部元器件( 电感,电容) 的物理尺寸,从而降低系统成本。工作于快速PWM 模式时,计数器的数值一直增加到MAX,然后在后面的一个时钟周期清零。具体的时序图为Figure 32。图中柱状的TCNT0 表示这是单边斜坡操作。
15、方框图同时包含了普通的PWM 输出以及反向PWM 输出。TCNT0 斜坡上的短水平线表示OCR0和TCNT0 的比较匹配。快速PWM模式时序图,如图3-2:图3-2 快速PWM模式时序图计时器数值达到MAX 时T/C 溢出标志TOV0 置位。如果中断使能,在中断服务程序可以更新比较值。工作于快速PWM 模式时,比较单元可以在OC0 引脚上输出PWM 波形。设置COM01:0为2 可以产生普通的PWM 信号;为3 则可以产生反向PWM 波形。要想在引脚上得到输出信号还必须将OC0 的数据方向设置为输出。产生PWM 波形的机理是OC0 寄存器在OCR0 与TCNT0 匹配时置位( 或清零),以及在
16、计数器清零( 从MAX变为BOTTOM) 的那一个定时器时钟周期清零( 或置位)。输出的PWM 频率可以通过如下公式计算得到,如式3-3:(3-3)变量N 代表分频因子(1、 8、 64、 256 或1024)。OCR0寄存器为极限值时表示快速PWM模式的一些特殊情况。若OCR0等于BOTTOM,输出为出现在第MAX+1 个定时器时钟周期的窄脉冲; OCR0 为MAX 时,根据COM01:0的设定,输出恒为高电平或低电平。通过设定OC0 在比较匹配时进行逻辑电平取反(COM01:0 = 1),可以得到占空比为50%的周期信号。OCR0 为0 时信号有最高频率foc2 = fclk_I/O/2。
17、这个特性类似于CTC 模式下的OC0 取反操作,不同之处在于快速PWM 模式具有双缓冲。3.3 直流电机驱动电路 直流电机驱动电路如图3-3所示:图3-3 直流电机驱动电路L298是意大利SGS半导体公司生产的步进电机专用控制器,它能产生4相控制信号,可用于计算机控制的两相双极和四相单相步进电机,能够用单四拍、双四拍、四相八拍方式控制步进电机。芯片内的PWM斩波器电路可开关模式下调节步进电机绕组中的电机绕组中的电流。该集成电路采用了SGS公司的模拟/数字兼容的I2L技术,使用5V的电源电压,全部信号的连接都与TFL/CMOS或集电极开路的晶体管兼容。变换器是一个重要组成部分。变换器由一个三倍计
18、算器加某些组合逻辑电路组成,产生一个基本的八格雷码(。由变换器产生4个输出信号送给后面的输出逻辑部分,输出逻辑提供禁止和斩波器功能所需的相序。为了获得电动机良好的速度和转矩特性,相序信号是通过2个PWM斩波器控制电动波器包含有一个比较器、一个触发器和一个外部检测电阻,如图4所示,晶片内部的通用振荡器提供斩波频率脉冲。每个斩波器的触发器由振荡器的脉冲调节,当负载电流提高时检测电阻上的电压相对提高,当电压达到Uref时(Uref是根据峰值负载电流而定的),将触发器重置,切断输出,直至第二个振荡脉冲到来、此线路的输出(即触发器Q输出)是一恒定速率的PWM信号,L297的CONTROL端的输入决定斩波
19、器对相位线A,B,C,D或抑制线INH1和INH2起作用。CONTROL为高电平时,对A,B,C,D有抑制作用;为低电平时,则对抑制线INH1和INH2有抑制作用,从而可对电动机和转矩进行控制。引脚图如图3-4:图3-4 L298引脚图3.4 PID控制PID控制MATLAB仿真如图3-5:图3-5 PID控制MATLAB仿真如图4 软件设计主控制芯片为ATmega16,编程语言为C语言,,编程平台采用AVR studio,.软件流程图,如图4-1:采集AD值数据PID返回参数调节PWMPWM控制电机数据交PID算法处理开放ADC、PWM功能程序入口5、系统测试图4-1软件流程图5 系统测试5
20、.1 测试使用的仪器与测试方法(1)测试仪器设备稳压电源、VC890D数字万用表、DS1022C示波器、秒表、直尺、量角器。(2)测试方法测量当前平板倾角值与角位移传感器两侧电压的A/D采样值对应关系,如表5-1所示:表5-1 平板倾角值与角位移传感器两侧电压的A/D采样值 角度-40-30-20-10010203040AD值5035406016296727097398208945.2 指标测试和测试结果如表5-2所示:表5-2 实验测试数据表角度-40-30-20-10010203040AD值503540601629672709739820894电压1.251.351.501.571.681
21、.771.842.052.226 误差分析与改进方法误差分析:(1) 机械结构连接不紧凑造成的机构震动,给单片机控制带来较大的误差。(2) 直流减速电机中的减速器中齿轮中存在的间隙在电机转动的时候也会带来较大的震动。(3) 摆杆连接位置没用选用轴承,而是一个拆机小电机做成的,产生误会较大。(4) 旋臂配重不很均匀,导致有些许上下摆动。改进方法:(1) 固定完所以不必要的自由度,使结构更加紧凑,减少一些不必要的震动。(2) 选择不带减速器的电机。(3) 改用轴承连接。(4) 掌握好旋臂的平衡配重比。7 小结在本次竞赛中,我们各自发挥各自的优点,经过辛勤的努力,从而使我们能优秀的完成了部分作品。与
22、此同时我们积极起草各种器件选型方案,确定最终的使用方案。通过这次竞赛,我们将理论与实际相结合,将学习的电子方面知识充分应用到本次设计中,充分利用了Atmega16单片机的功能,夯实了基础,提高了理论联系实际的能力,更提高了电子设计方面的综合能力。此次大赛不仅为我们提供了一次难得的检验自己学习知识的平台,也锻炼了队员的吃苦能力。在比赛以后的时间里,我们会继续我们电子设计的爱好,设计出更好的作品。努力向前,永不退缩。参考文献1 范红刚,宋彦佑,董翠莲. AVR单片机自学笔记M. 北京:北京航天大学出版社,2012.2 谭浩强. C程序设计M. 北京:清华大学出版社,2005年7月.3 华成英. 模
23、拟电子技术基础M,北京:高等教育出版社,2000. 4 阎石. 数字电子技术基础M. 北京:高等教育出版社,2008. 5 张毅刚. 单片机原理及应用M. 北京:高等教育出版社,2004.附录一:元件明细表1、Atmega16单片机2、GX-61角度传感器模块3、L298电机驱动芯片4、1N4001二极管若干5、角铝若干6、螺母若干7、亚克力板若干附录二:仪器设备清单1、低频信号发生器2、数字万用表3、失真度测量仪4、数字示波器5、稳压电源6、逻辑分析仪附录三:电路图图纸附录四程序清单:/*Mega16头文件*/#include#define FMQH PORTC|=(13);#define
24、FMQL PORTC&=(13);void delay(unsigned char aa,unsigned char bb,unsigned char cc);/*mega16_ADC初始化函数声明*/unsigned int ADC_init(void);void delay1();unsigned int adc_l,adc_h;/*PID函数声明*/double PIDCalc( PID *pp, double next ) ;void PIDInit (PID *pp) ;/*PID结构体声明*/typedef struct PID double init; / 设定目标 double
25、 Kp; / 比例常数 double Ti; / 积分常数double Kd; / 微分常数 double first; / 一阶误差double end; / 二阶误差double sum; /误差总和 PID; /*主函数*/int main() unsigned int a,b,i,ave8,sum_2=0,max,min,qian,bai,shi,ge; PID sPID; / PID控制结构体 double ouput; / PID 响应变量 double input; / PID 输入变量 DDRC=0xff;DDRD=0xff;DDRB=0xff;TCCR0=0x6c;TCNT0
26、=0x00; PIDInit ( &sPID ); SPID.Kp =4; sPID.Ti = 0.02; sPID.Kd= 20; sPID.init = 1700 init();while(1) ADC_init(); /*软件滤波*/ /*for(i=0;i=7;i+) adc_l=ADCL; adc_h=ADCH; a=adc_h*256; b=adc_l+a; avei=b; max=ave0;min=ave0; for(i=0;i=max) max=avei; if(avei=724) b+=793; else b+=852; if(1680=b)&(b=1710) b+=2; i
27、f(1670=b)&(b1680)b-=2; if(1660=b)&(b1670)b-=2; if(1620=b)&(b1660)b-=3; if(1610=b)&(b1620)b-=2; if(1600=b)&(b1610)b+=3;if(1590=b)&(b1600)b+=4;if(1578=b)&(b1590)b+=6; if(1560=b)&(b1578)b+=8; input = b; / ouput = PIDCalc ( &sPID,input ); ouput =1710-ouput ; ouput =ouput *0.139; OCR0=ouput ; void delay(
28、unsigned char aa,unsigned char bb,unsigned char cc) for (aa=0;aa15;aa+) for(bb=0;bb3;bb+) for(cc=0;cc220;cc+);unsigned int ADC_init(void)/mage16 DDRA&=(10);PORTA&=(1init - next; / 偏差 pp-sum += Error; / 积分 dError = Error - pp-first; / 当前微分 pp-end = pp-first; pp-first = Error; return (pp-Kp * Error / 比例项 + pp-Ti * pp-sum / 积分项 + pp-Kd* dError ); / 微分项 void PIDInit (PID *pp) /初始化子程序 memset ( pp,0,sizeof(PID); 第 16 页 共 19 页