ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:223.14KB ,
资源ID:9591450      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9591450.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(感测综合设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

感测综合设计.docx

1、感测综合设计数理与信息工程 学院感测技术基础大作业报告 题 目: 基于MPU6050的平衡板 专业班级: 电子信息工程131班 姓 名: 邵文淦 学 号: 13610120 指导老师: 蒋敏兰 日 期: 2015年12月30日 成 绩: 数理与信息工程学院电工电子实验中心制基于MPU6050的平衡板摘要本系统采用MSP430F149单片机作为系统的核心,由MPU6050角度检测模块、电机驱动控制模块、液晶显示和电源部分组成。主要实现了平面板的角度检测以及PID算法控制平板任意角度悬停的功能。具体为单片机通过DMP读取MPU6050的角度值,从而输出PWM控制空心杯电机的转速实现平板的角度控制。

2、经测试系统能很好的完成设计功能。关键词:MSP430F149单片机;MPU6050角度传感器;PID算法1.设计任务要求1.1 实现对平板的角度检测的功能。1.2 通过设定角度,控制平板在该角度悬停。1.3 通过实践,了解更多传感器知识以及学习如何使用传感器。2.系统方案设计与论证2.1 主控芯片的选择方案1:采用高性能单片机CPU实现系统,如32位嵌入式CPU ARM芯片作为控制系统核心。采用该方案,虽然可以很好的解决角度检测与控制功能,但是ARM系统设计调试复杂,在短时间内难以很好地完成设计,故不宜采用此方案。方案2:采用STC89C52芯片作为主控制器。STC89C52内部具有8KB R

3、OM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,与MCS-51系列单片机完全兼容,同时可以通过串口下载,但是该单片机需要专门的仿真器才能仿真,且不能通过内部资源产生PWM。方案3:用MSP430F149做控制芯片,它是TI公司生产的16位超低功耗微控制器,体积小,功能齐全,方便实用,而且可以在超低功耗模式下工作,对环境和人体辐射小。在此系统中,采用MSP430F149单片机作为主控单片机更为实用。综上考虑题目和设计要求,MSP430F149单片机指令简单,又能通过内部资源直接产生PWM,所以我们确定选择方案3。2.2 传感器选择方案1:采用WDD35D-4电位器式角

4、度传感器,其独立线性度为0.5%,阻值误差达到15%,机械转角是360(连续),理论电器转角为345正负2度。其优点是测量角度简单,只需要通过判断它的阻值就能计算出相应的角度,缺点误差太大,且价格较贵,故不满足本次设计的要求。方案2:采用MPU6050角度传感器,MPU-6000为全球首例整合性6轴运动处理组件,它的角速度全格感测范围为250、500、1000与2000/sec (dps),可准确追踪快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为2g、4g8g与16g。其内部数字运动处理(DMP)引擎可减少复杂的融合演算数据、感测器同步化、姿势感应等,计算出相应的三个横滚角、俯仰角

5、、航向角,精度高,完全满足本设计的要求。综合考虑到性价比、精度等因素,我选用了方案2。3.理论分析3.1 计算角度值首先,通过读取MPU6050内部的寄存器,我们就能够直接读取到x、y、z三个坐标轴的加速度Acceleration和角速度angular rate。其次,通过对加速度的三角函数计算或者对角速度进行积分都能得到相应的角度值。但是由于加速度的误差较大,而角速度的温漂较大,所以我们采用了一阶互补滤波的方法得到较为精准的角度值。3.1.1 根据加速度计算角度值根据三个加速度值,通过对各个轴的反正切函数计算出角度。其中,AX、AY、AZ分别是xyz轴的加速度。具体的计算公式如下: /式1:

6、z轴角度值 /式2:x轴角度值 /式3:y轴角度值具体的计算函数程序如下:short MPU6050_Get_Angle(float x,float y,float z,u8 dir) float temp; float res=0; switch(dir) case 0:/与自然Z轴的角度 temp=sqrt(x*x+y*y)/z; res=atan(temp); break; case 1:/与自然X轴的角度 temp=x/sqrt(y*y+z*z); res=atan(temp); break; case 2:/与自然Y轴的角度 temp=y/sqrt(x*x+z*z); res=ata

7、n(temp); break; return res*1800/3.14;/把弧度转换成角度 3.1.2 根据角速度计算角度值根据对读取的角速度进行积分就能得到相应的角度。本设计中由于不能对角速度在连续的时间上积分,但是只要间隔时间足够短,就能近似的得到积分值。我在程序中采用了5ms的中断,dt为5ms。 /式4:x轴角度值3.1.3 一阶互补滤波融合角度值一阶互补滤波就是通过加速度计算的角度乘以一定的比重加上角速度积分的角度乘以一定的权重,所得的和就是融合后的角度,融合的效果可由权重调整。本设计中取加速度权重K1为0.05,角速度权重为0.95。Angle_x = K1 * angle_1+

8、 (1-K1) * (angle2 + gyro_y * dt)/一阶互补滤波3.2 PID控制算法分析根据前面的方法我们可以计算出一个较为精确的角度值Angle_x,为了实现本设计中的第二个功能,还需要通过PID控制算法实现对Angle_x的闭环控制。 本设计中主要是将当前的实际角度与设定的角度构成一个差值Angle_error,将此差值作为PID控制器的输入端,再将控制器的输出作用于pwm,pwm控制电机转速实现平板到达设定的角度,即直至Angle_error为0,此时平板平衡不动。PWM=LastPWM+p*(Angle_error-Last_Angle_error)+i*Last_An

9、gle_error+d*(Angle_error-2*Last_Angle_error+PreAngle_error) /增量式PID控制算法4.系统硬件电路设计本设计的硬件部分主要由MPU6050传感器、MSP430控制器、OLED、电机驱动等及部分组成,MPU6050传感器负责采集加速度、角速度和角度信息,单片机负责接受传感器的数据,并将数据送到液晶上显示,同时根据角度值进行PID控制。各个模块协调工作,完成系统的所有功能。其系统框图和示意图如图一、二所示。图1 系统总设计框图图2 系统示意图图3 MPU6050接口电路5.系统软件设计图4 软件设计流程图系统的软件设计流程图如上图所示,首

10、先让平板静止20s左右(让MPU6050初始化完成,读取零偏值),接着单片机开始读取计算角度值,本设计只涉及到平板的一维运动,故只需要读取横滚角即可(如图2中的)。然后通过判断按键是否按下并且修改的设定值,进行PID控制,使平板始终处于设定的角度位置。整个过程中,液晶不断的刷新显示设定角度与当前角度等参数。6.测试结果及分析通过实验测量,得到以下结果并进行数据分析测试次数12345实际角度-60-3003060测量角度-60.5-30.10.130.461设定角度-60-3003060PID控制后角度-61.2-30.30.130.561.3通过以上数据,有以下分析:测量所得的角度值与实际的角

11、度有一定的偏差,通过查阅资料及理论分析和验证,发现误差主要由以下因素造成: 采用角速度和加速度融合的方法及权重取值引起计算所得的角度值与实际角度值存在一定的偏差。 由于加速度存在误差且角速度温漂较大,所以融合前计算的角度本身就引入了误差。 由于机械结构的问题引入一定的误差。同时,由表格中的数据我们可以知道PID控制的角度与设定的角度也存在一定的误差,切角度越大偏差也越大。这主要是由于重力的影响导致。7.设计中的问题与心得体会问题: 由于MPU6050在初始化时需要充足的时间来校准,而我在初次编写程序的时候初始化时间不够,导致测得的角度值始终具有较大的抖动。最终通过加长初始化时间成功解决。 角度

12、读取之后没有除去零偏,导致控制不稳,通过去零偏得以解决。心得体会:经过几天的不懈努力,最后终于完成了软硬件、报告的全部任务。经过多次测试,本设计运行稳定、可靠性高、抗干扰能力强。同时,通过本次课程的设计与制作,使我对电子更加的热爱,有了更大的信心,也让我对传感器有了更加全面和深刻的认识。让我懂得了传感器的设计原理,传感器的误差由来以及如何减小误差等等。最后,感谢知道老师的耐心指导。附件1:系统实物图附图1 实物图附件2:系统整体电路图附图2 电机电路图附图3 电机电路图附图4 MPU6050传感器电路图附件3:核心代码/* 函数名称:void MPU6050_DMP_get_fifo(void

13、)函数功能:MPU6050角度读取入口参数:无出口参数:无备 注:在10ms定时中断中读取*/ void MPU6050_DMP_get_fifo(void) dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more); if (sensors & INV_XYZ_GYRO ) send_packet(PACKET_TYPE_GYRO, gyro); if (sensors & INV_XYZ_ACCEL) send_packet(PACKET_TYPE_ACCEL, accel); if (sensors & INV

14、_WXYZ_QUAT) q0=quat0 / q30; q1=quat1 / q30; q2=quat2 / q30; q3=quat3 / q30; Pitch = asin(2 * q1 * q3 - 2 * q0* q2)* 57.3; / pitch Roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; / roll Yaw = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3; /* 函数名称:void PID_Contr

15、ol()函数功能:PID控制平板平衡在设定角度入口参数:无出口参数:无备 注:采用位置式pid */ void PID_Control() Roll_error=Roll_set-(Roll-Roll_offset); /*PID控制*/ Roll_AddI=Roll_AddI+Roll_error; Roll_Pout=Roll_error*Roll_1.P; Roll_Iout=Roll_AddI*Roll_1.I; Roll_Dout=(Roll_error-last_Roll_error)*Roll_1.D; /*/ Roll_PID_out=Roll_Pout+Roll_Iout+R

16、oll_Dout; pwm1=pwmZero1-Roll_PID_out; pwm2=pwmZero2+Roll_PID_out; last_Roll_error=Roll_error; pre_Roll_error=last_Roll_error; /pwm输出最大最小限定 if(pwm1pwm1_max)pwm1=pwm1_max; if(pwm1pwm2_max)pwm2=pwm2_max; if(pwm2100) Roll_AddI=100; if(Roll_AddI-100) Roll_AddI=-100; /* 函数名称:void main()函数功能:主函数入口参数:无出口参数:

17、无备 注: */ void main() sys_init(); MPU6050_init(); OLED_Init(); Zero_avarage(100); while(1) MPU6050_GetData_ACCEL(); MPU6050_GetData_GYRO(); ax=MPU6050.ACCEL_X-ACCEL_X_zero; ay=MPU6050.ACCEL_Y-ACCEL_Y_zero; az=MPU6050.ACCEL_Z-ACCEL_Z_zero; gx=MPU6050.GYRO_X-GYRO_X_zero; gy=-(MPU6050.GYRO_Y-GYRO_Y_zero

18、); gz=MPU6050.GYRO_Z-GYRO_Z_zero; Angle_ACC(MPU6050.ACCEL_X,MPU6050.ACCEL_Y,MPU6050.ACCEL_Z); complement_update_X(ax,gy); send_HC_06_dat0=(s16)Accel_Angle_x; send_HC_06_dat1=(s16)Gyro_AngSpeed_y; send_HC_06_dat2=(s16)Angle_X; send_HC_06_dat3=(s16)(X_angle_Out); send8_HC_06(send_HC_06_dat,4); keyScan_delay(); OLED_Display();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1