|
发表于 2012-5-19 22:29:05
|
显示全部楼层
谈不上指点...
对陀螺仪积分,往返,是无法归零。原因可能是陀螺仪器件本身不对称,也可能是电源不稳ADC出现误差,或这些原因都有。总之,单纯对陀螺仪积分无法得到正确的姿态角。
kk四轴只使用陀螺仪,也听说过其他人只用陀螺仪做成四轴的,怎么做出来的,暂时还不清楚。但我有飞过,和同时使用陀螺仪、加速度计的四轴相比,总是飘来飘去,非常不适合普通玩家。
有没有遥控控制,对四轴飞控其实没有一点影响。
我所说的飞控,是指利用陀螺仪和加速度计计算出俯仰角和横滚角,然后以这两个角度为输入(其实还有角速度),按一定比例,最终计算出马达转速——这是输出量。
上边的输出量目的是让四轴保持水平,如果有遥控,再把遥控数据叠加到输出量,四轴就可以按遥控指令完成各种动作。
互补滤波已经有好多人说过了,我说下原器件的使用,基础很重要。
1、ADXL345和L3G4200D数据输出都是有符号数。也就是说,ADXL345水平放置时,XY输出差不多为0,往一边倾斜,输出负值;另一边,正值。同样,L3G4200D,静止时输出零,往一边旋转,输出负值;另一边,正值。
2、ADXL345量程可选+-2g~+-16g,对应输出结果10~13bits。不管选哪个量程,灵敏度都是3.9mg/LSB。将某个轴倾斜90度,静止,对应轴的输出为+-256。这个数据用于相对于陀螺仪的单位换算。
3、L3G4200D,我选250dps,16bits输出,这个时候灵敏度最高。顺便说下,为了和mk兼容,只保留高10位(这样牺牲了灵敏度)。最终的灵敏度是 8.75*2^6 = 560mdps/digit。
4、这里计算旋转90度,陀螺仪的积分是多少。飞控周期1ms,每周期对陀螺仪积分一次(stm8s207 IRC16M,确实可以做到这么快)。假设角速度为90dps,转90d正好用时1s。陀螺仪输出90*1000/560 = 160.714 ,积分1000次,最终结果160714。
5、同样90度倾角,陀螺仪160714、加速度计输出256,比值627。ACC_AMPLAFY=12,Parameter_GyrAccScale=32(二者相乘不等于627,试出来了,好用)。
6、开机后ADXL345需要矫正,也就是多次采集取均值;L3G4200D不需要。
7、使用SPI接口,管脚对管脚,直接接到207的硬件SPI端口。这两种传感器都是I2C和SPI复用,最初担心,使用SPI读写一个传感器时,会被另一个传感器误认为I2C指令,仔细观察SPI总线时序,sck低电平时sda数据才会变化,不满足I2C的起始条件(scl高电平时,sda由高变低),所以之前的担心是多余的。
8、正确获取传感器数据后,接下来是互补滤波,最后将马达转速值转换成PWM信号,直接驱动MOS,实现马达调速。
|
|