初级会员
- 积分
- 131
- 金钱
- 131
- 注册时间
- 2015-6-23
- 在线时间
- 15 小时
|
发表于 2015-10-9 22:29:16
|
显示全部楼层
回复【6楼】Jayq:
---------------------------------
我解释一下吧!我也是个半瓶水,不对的地方见谅。
我这里,1毫秒对应2000,2毫秒对应4000.相减等于2000.后面积分正负1000、输出限幅正负2000就是根据这个2000来的。
这样也把油门分为2000份,感觉这样好操控一些。你也可以改小或者该大
PError_pitch直接等于当前该轴的角度。如果四轴水平,当前角度就为0或者在0附近,那么PError_pitch就为0或者在0附近。AngleX(只能是pitch和roll其中一个,主要看你把那个轴定位前后,那个轴定为左右),X_angle(如果遥控最高的时候为255(AD转换得来),那么该值等于(当前AD值减去128)除以某个系数),例如:现在四轴水平。当前AD值为150,系数为2.那么X_angle=(150-128)/2.这样四轴就会倾斜一定角度,具体系数自己定。
angle_X(角度补偿是飞起来后你需要打一点摇杆才能让四轴水平的值)
积分时间我这里直接舍去了,因为整个程序放在定时器5毫秒的中断里面.积分时间=0.005秒。这么小的一个值我直接忽略了。
对于输出motor1=2000+油门+out_X-out_Y+out_Z;(2000对应1毫秒,4000对应2毫秒)
当占空小于1毫秒时,电调会报警,大于2毫秒也一样。所以最终输出限幅 if (motor1>4000)motor1=4000;if (motor1<2000)motor1=2000;
最后把motor1加载到控制PWM波占空比的寄存器
我是按上面这样理解的,具体的代码你可以参考STC单片机开源的小四轴。传感器的代码参考原子哥的MPU6050/DMP输出 |
|