完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
用51单片机做的四轴?以前别人这样说我们只能呵呵一笑说声逗比,但是现在的51早已不是当年的51,6路15位硬件PWM+2路CCP的16位硬件PWM,相当于是8路15位硬件PWM,mega328都可以直接秒掉,而mega328却正是市售MWC飞控的主控,mega328速度16MHZ,等效16MIPS,IAP15W4K61S4@28MHZ,等效25MIPS,运算速度也秒了mega328,也就是说,用51单片机做四轴绝对不成问题。
本人目前大二,做得不尽人意之处欢迎指教,不过麻烦说得别太专业化,我连模拟电路都还没学过,自动控制原理都还只自己看了一些些,太高深的懂不起,但是卡尔曼滤波,PID参数整定还是会的。 相关设计参数: 供电: 容量:650MAH(毫安) 电压3.7v 倍率20c 电机:716空心杯+7.5厘米 有刷 【电压】:3.7V, 空载电流110ma左右, 堵转1.54A 【尺寸】:直径7mm*长16MM*轴径1mm 【转速】:空载40000rpm MCU:IAP15W4K61S4@28MHZ STM32F103C8T6 稳压器件 AMS1117输出电压为3.3V的正向低压降稳压器 陀螺仪加速度计:MPU-6050 ROLL/PICTH 两轴姿态角 GPIO_Speed_50MHz 速度级别 磁场传感计:HMC5883L 霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。 无线芯片:NRF24L01+ GPIO_Speed_10MHz 电机驱动MOS管:AO3400 N沟道 MOS管保护用肖特基:BAT54ST 下载口防静电TVS:Rclamp0524P 机架:94*94mm PCB厚度:1.2mm FR-4 软件相关参数: 姿态解算&电机控制频率: 125HZ(8ms) PWM频率:28KHZ 1000精度 滤波算法:卡尔曼滤波器 平滑滤波 PID控制:PID=P*e(n)+I*[(e(n)+e(n-1)+...+e(0)]+D*[e(n)-e(n-1)] mpu6050 ALIENTEK 推出的一款高性能三轴加速度+三轴陀螺仪的六轴传感器模块,并可利用自带的数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主IIC 接口,向应用端输出姿态解算后的数据。 NRF24L01 是一款无线通信通信芯片,采用FSK 调制。可以实现点对点或是1对6的无线通信。无线通信速度最高可达到2Mbps。 NRF24L01采用SPI通信,可以很方便的连接到MCU上面。 浅谈PID整定和姿态解算。 PID的整定是个让很多人都感到头痛的问题,在此,我想强调一句,PID整定必须建立在良好的姿态解算的基础上才能进行,否则根本没法弄出一个很好的效果。举个例子,我的这个四轴,用互补滤波进行姿态处理,P最多调到3。再调大由于姿态解算不过关,P越大输出的姿态震动越大,即使D调大系统也没法收敛,也就是说这个系统发散了。而用卡尔曼滤波我可以把P调到4.5而且回复也有力,飞起来也稳。 在姿态解算中,有很多种方法,我这采用的就是普通的姿态角,其他的解算方法还有四元素,欧拉角,等等,其实四元数还是要转化为欧拉角才能用于PID,不过四元数没有欧拉角中万向节死锁的问题。具体请百度:四元数,欧拉角,万向节死锁。在此不一一赘述。 我这的姿态解算原理比较简单,就是对三轴加速度的值进行三角函数运算即可。 举个例子,首先我从加速度计中获取数据。 Accel_y= GetData(ACCEL_YOUT_H); Accel_x= GetData(ACCEL_XOUT_H); Accel_z= GetData(ACCEL_ZOUT_H); 再进行转化,转化公式在MPU6050数据手册里有 Angle_ax=(Accel_x)/8192; Angle_az=(Accel_z)/8192; Angle_ay=(Accel_y)/8192; 好了,这里得到的就是我们需要的加速度的值,取值范围0-1,也就是多少个g,g是重力加速度这个就不用说了吧。 之后用反三角函数进行运算: AngleAx=atan(Angle_ax/sqrt(Angle_ay*Angle_ay+Angle_az*Angle_az))*180/3.141592657; 公式:X轴角度=arctan(Angle_ax/开根号(Angle_ay^2+Angle_az^2)) 好了,这里得到的是弧度制的角度,再乘180除以π即可得到所需的角度值。 之后要对得到的值进行滤波,为什么要滤波呢,因为加速度计对震动特别敏感,一点震动就大姨妈,得到的角度值是不怎么准确的,不过大致在实际角度的上下。 而陀螺仪对震动不敏感,随便怎么震动都不会高潮。陀螺仪输出的数据是多少度一秒,据此进行积分,可以得到短时间内系统的姿态。不过陀螺仪有温飘,温度偏移一点他的误差就会大一点,故要用加速度计的值来对陀螺仪的值进行校准。修正他的温飘误差以及积分误差。这就是互补滤波的原理,短时间内以陀螺仪的值为准,长时间内以加速度计的值来对陀螺仪校准,二者优势互补,去掉不好的一面,这样得到的值就比较理想了。 互补滤波公式举例:Angle=0.95*(Angle-Angle_gy*dt)+0.05*AngleAx; 前面的0.95和0.05是对陀螺仪角度和角速度角度的权值,意思就是你相信哪个的程度更大一点,因为震动是双向的,故对加速度计进行低通滤波会使加速度计输出的值接近实际值,什么是低通滤波呢,打个比方,当前角度=0.95乘上次的角度+0.05乘测量的角度,这就是对测量值进行低通滤波,dt是积分时间,就是定时器定时的时间,我这取8ms,即dt=0.08。 至于卡尔曼滤波, 就是一个先进行估计,再根据实际测量的值修改卡尔曼参数,最后再算误差,里面涉及到线性代数,概率论的相关知识 再谈PID, 得到了实时姿态,就知道了误差,知道了误差就要对电机进行控制,在PID中,P指比例,I指积分,D指微分,换种说法,P指回复力,P的输出值=P*误差;P越大偏差所引起的回复力越大。是系统能够回到0点的主要力。D是系统运动的阻力,D的输出值=D*(当前误差-前一次误差),D的存在能阻止系统运动。I是系统静差的消除力,比如你四轴的重心偏了,四轴会朝一边偏,对误差进行积分再乘以I即可消除这种机械结构引起的偏移。I的输出值=I*所有误差积分之和。 光有P存在的情况,系统一有偏差,就会立马回复,不过到0点时由于惯性,会继续运动,故光有P的话系统会震荡,根本停不下来。 故需要D,这个系统运动的克制力来对P进行压制,当PD呈一定比例时,系统就会稳定在一定的值,不过有可能会有点误差,这时就得靠I来修正。 I的原理决定了误差存在的时间约久,回复力越大,I可以理解是变相的回复力,专门用来修正PD没法消除的静差。 PID整定的方法: I和D置0,从小往大调P,调整至用手造成一个误差,感觉回复有力即可。网上所说的调整至等幅震荡不适合小四轴,你根本就不可能把这玩意弄到等幅震荡的状态。总得来说,P调至你觉得回复起来有点力度就行了,不要太过于纠结。 之后从小往大加大D,在D加大的过程中,会出现震荡减小,震荡最小,震荡增大的过程。震荡最小的那一点即very good。 调好PD之后如果系统有静差,适当加上I即可,I不能加大,加大了会导致系统震荡,适当为宜。 这个过程一定要会区分震荡的来源,到底是P引起的还是D引起的。这个口述讲不清,只有靠自己来体会。 调整好XY轴的PID后就该解决四轴自旋的问题了,一般来说XY轴的PID参数是一样的,调好一边,另一边直接复制过去就行。 自旋控制方法有2种,一种是对HMC5883的值进行PD控制。一种是对Z轴陀螺仪旋转速度进行PD控制,后面那种就够了,只不过需要飞前对陀螺仪偏差进行校准。这个PD参数不要太纠结,Z轴稍微给点控制就稳了,毕竟XY轴才是四轴飞起来的关键。 此外,PID的要求是系统的输出量要和被调量成正比,故大四轴比小四轴好调得多,因为大四轴有电调,电调调整的不是电机供电电压,而是力矩,也就是说大四轴输出信号和升力是成正比的,而小四轴不是,但是我们只需要他大概是正比关系就行了,也能好好滴做朋友的。推荐碳刷电机PWM频率为500HZ,空心杯最好是20KHZ以上。 调PID中各种问题及解决方法汇总: 四轴偏离一定角度即使加I也纠正不过来,也就是说四轴明明知道他自己偏了,就是纠正不过来,解决方法:加大P。 D无论怎么调四轴就是要震荡,根本停不下来,解决方法,减小P 系统有细微偏差:加点点I 发现无论怎么调PID根本就不能让四轴取得一个很好的效果:换滤波方案吧,什么梯度下降法,卡尔曼滤波算法都是很好的。 震动越大角度值和实际值偏离越大:陀螺仪装错位置了,在MPU6050模块下面弄点泡沫双面胶可以很好解决,原则上来讲MPU6050是不能太靠近轴的。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:22 , Processed in 0.868916 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号