针对四轴飞行器飞行性能不稳定和惯性测量单元(IMU)易受干扰、存在漂移等问题,利用惯性传感器MPU6050采集实时数据,以经典互补滤波为基础,提出一种可以自适应补偿系数的互补滤波算法,该算法在低通滤波环节加入PI控制器,依据陀螺仪测得的角速度实时调节PI控制器补偿系数。飞行器姿态控制系统采用双闭环PID控制方法,姿态解算的欧拉角作为系统外环,陀螺仪角速度作为系统内环。最后,搭建以NI my RIO为核心控制器的四轴飞行器,通过Lab VIEW实现算法和仿真,实验结果表明,自适应互补滤波算法可以准确解算姿态信息,双闭环PID控制超调量小、反应灵敏,控制系统基本满足飞行要求。
标签: mpu6050 互补滤波 四旋翼飞控系统 双闭环PID LabVIEW语言
上传时间: 2022-06-13
上传用户:bluedrops
近几年,无人机已成为非常火热的话题,而大疆则是国内消费无人机中的领先者,最近其精灵3,悟系列无人机屡上头条,而其农业无人机则更是跨进了另一个领域,不知下一秒又会怎么改变我们的生活。对于我们这样的平民玩家,上千的无人机实在是可望而不及可及,尝鲜太贵,如果我们新手想了解一下无人机,体验其中的乐趣,或是自己开发,微型四旋翼无疑是最佳选择。
上传时间: 2022-06-24
上传用户:shjgzh
四轴飞行器拥有四个旋翼,属于多旋翼直升机。四轴飞行器具有四个成对称分布的旋翼。它通过控制四个旋翼的旋转速度而非机械结构来实现各种飞行动作。四轴飞行器具有成本低、机体结构简单、没有机械结构、飞行稳定性好、重量轻、有利于小型化无人化等特点。因此可以应用在人无法到达的一些复杂环境之中。目前四旋翼飞行器等多旋翼飞行器已经在很多行业比如航空拍摄、遥感勘测、实时监控、军事侦察、喷洒农药中得到了广泛的应用,并已经形成了相关产业。四旋翼飞行器具有非线性控制、控制量多、飞行姿态控制过程复杂等特性。本课题基于实现四轴飞行器低成本小型化通用化的思路,通过研究剖析四旋翼飞行器飞行的原理,根据其数学模型和控制系统的功能要求,在MCU上实现了四旋翼飞行器的姿态数据的获取、飞行姿态解算以及飞行姿态控制。本课题硬件上采用stm32系列STM32F103C8T632位处理器作为主控制器负责分析处理数据,根据姿态运算结果,输出电机控制信号;主要使用惯性测量单元MPU-6050等传感器模块用于姿态信息的检测;采用场效应管驱动电路来驱动空心杯电机;蓝牙模块负责和上位机进行通信以实时采集飞行数据便于分析测试。整个软硬件系统均基于模块化设计的思想。各传感器采集飞行器的传感器数据都使用通用数字接口和MCU进行数据交换和通信。软件上,编写飞行姿态控制软件,在stm32单片机上实现了四元数法和卡尔曼滤波算法,解算出飞行器正确的姿态角,并使用PID控制进行姿态角的闭环控制,稳定飞行姿态。实验结果表明,本课题设计的四轴飞行器能够较好的自主达到稳定飞行状态,抗扰动能力强。飞行姿态控制算法完全实现了使四旋翼飞行器能在室内平稳飞行的控制要求。
上传时间: 2022-07-17
上传用户:
自制航模 直升机相关 直升机调式篇 四轴 说明书 平衡仪设置软件 精彩视频欣赏 精彩视频 精彩壁纸 经典航模心得 技术操作录制视频收集 航模心得 航模模型组装资料 航模基础 海量航模图纸大全 海量航模飞机图纸大全 固朗平衡仪中文 固定翼 各类航模器材中文说明书 飞控板设置资料 发动机相关 调式篇 …………
上传时间: 2013-06-14
上传用户:eeworm
实现运动控制卡的运动,实现四轴联动的中文版资料
标签: 运动控制卡
上传时间: 2013-04-24
上传用户:yqq309
特点: 精确度0.1%满刻度 可作各式數學演算式功能如:A+B/A-B/AxB/A/B/A&B(Hi or Lo)/|A|/ 16 BIT类比输出功能 输入与输出绝缘耐压2仟伏特/1分钟(input/output/power) 宽范围交直流兩用電源設計 尺寸小,穩定性高
上传时间: 2014-12-23
上传用户:ydd3625
特点(FEATURES) 精确度0.1%满刻度 (Accuracy 0.1%F.S.) 可作各式数学演算式功能如:A+B/A-B/AxB/A/B/A&B(Hi or Lo)/|A| (Math functioA+B/A-B/AxB/A/B/A&B(Hi&Lo)/|A|/etc.....) 16 BIT 类比输出功能(16 bit DAC isolating analog output function) 输入/输出1/输出2绝缘耐压2仟伏特/1分钟(Dielectric strength 2KVac/1min. (input/output1/output2/power)) 宽范围交直流两用电源设计(Wide input range for auxiliary power) 尺寸小,稳定性高(Dimension small and High stability)
上传时间: 2013-11-24
上传用户:541657925
STM32,5110液晶显示声纳探鱼器200KHz,带电路图,精确到厘米 MC34063升压,大声压发射,实际板子上滤波电路没要(电路图上的滤波电阻电容电感没焊,开路或者短路)。一般200KHz的换能器在水里面的耦合比较好,在空气中发射出来的(或者接收的)强度很低。 用的MOSFET Relay,contact和release时间都可以做到很小,不过选的是比较低端器件,所以最近测量距离为70cm。 开源啦开源啦 架构为状态机+任务流,Task都是放在函数指针数组里面的 Task分两种,routine的和错误处理的 5110液晶的SPI用的DMA 基本上STM32和C语言高阶的特征都用上了,稍微修改直接可以商用 Open Issue 偶尔会hardware fault或者memory fault,然后watchdog重启, 应该比较好解决,仔细检查下就好 有什么问题代码的file comment里面有我联系地址 有能搞到好的器件也请知会我,多谢了 接下来准备把它装到船模上,用以前四轴的那套东西,就看什么时候有时间了
上传时间: 2013-10-28
上传用户:songyue1991
/*--------- 8051内核特殊功能寄存器 -------------*/ sfr ACC = 0xE0; //累加器 sfr B = 0xF0; //B 寄存器 sfr PSW = 0xD0; //程序状态字寄存器 sbit CY = PSW^7; //进位标志位 sbit AC = PSW^6; //辅助进位标志位 sbit F0 = PSW^5; //用户标志位0 sbit RS1 = PSW^4; //工作寄存器组选择控制位 sbit RS0 = PSW^3; //工作寄存器组选择控制位 sbit OV = PSW^2; //溢出标志位 sbit F1 = PSW^1; //用户标志位1 sbit P = PSW^0; //奇偶标志位 sfr SP = 0x81; //堆栈指针寄存器 sfr DPL = 0x82; //数据指针0低字节 sfr DPH = 0x83; //数据指针0高字节 /*------------ 系统管理特殊功能寄存器 -------------*/ sfr PCON = 0x87; //电源控制寄存器 sfr AUXR = 0x8E; //辅助寄存器 sfr AUXR1 = 0xA2; //辅助寄存器1 sfr WAKE_CLKO = 0x8F; //时钟输出和唤醒控制寄存器 sfr CLK_DIV = 0x97; //时钟分频控制寄存器 sfr BUS_SPEED = 0xA1; //总线速度控制寄存器 /*----------- 中断控制特殊功能寄存器 --------------*/ sfr IE = 0xA8; //中断允许寄存器 sbit EA = IE^7; //总中断允许位 sbit ELVD = IE^6; //低电压检测中断控制位 8051
上传时间: 2013-10-30
上传用户:yxgi5
TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。 TLC2543的特点 (1)12位分辩率A/D转换器; (2)在工作温度范围内10μs转换时间; (3)11个模拟输入通道; (4)3路内置自测试方式; (5)采样率为66kbps; (6)线性误差±1LSBmax; (7)有转换结束输出EOC; (8)具有单、双极性输出; (9)可编程的MSB或LSB前导; (10)可编程输出数据长度。 TLC2543的引脚排列及说明 TLC2543有两种封装形式:DB、DW或N封装以及FN封装,这两种封装的引脚排列如图1,引脚说明见表1 TLC2543电路图和程序欣赏 #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit clock=P1^0; sbit d_in=P1^1; sbit d_out=P1^2; sbit _cs=P1^3; uchar a1,b1,c1,d1; float sum,sum1; double sum_final1; double sum_final; uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar wei[]={0xf7,0xfb,0xfd,0xfe}; void delay(unsigned char b) //50us { unsigned char a; for(;b>0;b--) for(a=22;a>0;a--); } void display(uchar a,uchar b,uchar c,uchar d) { P0=duan[a]|0x80; P2=wei[0]; delay(5); P2=0xff; P0=duan[b]; P2=wei[1]; delay(5); P2=0xff; P0=duan[c]; P2=wei[2]; delay(5); P2=0xff; P0=duan[d]; P2=wei[3]; delay(5); P2=0xff; } uint read(uchar port) { uchar i,al=0,ah=0; unsigned long ad; clock=0; _cs=0; port<<=4; for(i=0;i<4;i++) { d_in=port&0x80; clock=1; clock=0; port<<=1; } d_in=0; for(i=0;i<8;i++) { clock=1; clock=0; } _cs=1; delay(5); _cs=0; for(i=0;i<4;i++) { clock=1; ah<<=1; if(d_out)ah|=0x01; clock=0; } for(i=0;i<8;i++) { clock=1; al<<=1; if(d_out) al|=0x01; clock=0; } _cs=1; ad=(uint)ah; ad<<=8; ad|=al; return(ad); } void main() { uchar j; sum=0;sum1=0; sum_final=0; sum_final1=0; while(1) { for(j=0;j<128;j++) { sum1+=read(1); display(a1,b1,c1,d1); } sum=sum1/128; sum1=0; sum_final1=(sum/4095)*5; sum_final=sum_final1*1000; a1=(int)sum_final/1000; b1=(int)sum_final%1000/100; c1=(int)sum_final%1000%100/10; d1=(int)sum_final%10; display(a1,b1,c1,d1); } }
上传时间: 2013-11-19
上传用户:shen1230