飞控程序教程解析.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
红色是一些暂时没去顾及的部分,与我现在关心的地方并无太大关系。 函数对rcDate进行处理(去除死区,根据油门曲线,roll/pitch曲线,油门值,动态PID调整参数,在无头模式对于rcdata进行优化),生成rccommand值用于姿态控制。记录最大循环时间,最小循环时间,解锁时间,最大气压值。用LED表示一些传感器运行的状态。若定义了低压报警则进行电压测量。 rccommand【油门】在0-1000之间 ?rccommand【roll/pitch】-500 +500 ?小于1500为负 大于1500为正。 void annexCode()?// 每个循环都会执行,若执行时间少于650MS则不会影响主循环的执行。 {? ??static uint32_t calibratedAccTime; ??uint16_t tmp,tmp2; ??uint8_t axis,prop1,prop2; ? ??#define BREAKPOINT 1500 ??// PITCH ROLL 进行动态的PID参数调整, ?调整取决于油门大小 ??if (rcData[THROTTLE] ??{ ????prop2 = 100; ??}? ??else ????//油门大于1500 ??{ ????if (rcData[THROTTLE]2000) ??//油门小于2000 ????{ ???????prop2 = 100 - (uint16_t)conf.dynThrPID*(rcData[THROTTLE]-BREAKPOINT)/(2000-BREAKPOINT); //dynThrPID 四轴默认0 可以GUI设置 ??TPA参数 ?????????????PROP 与动态pid有关。dynThrPIDprop 越小 即油门大小对于PID影响越大。 ????}? ????else ??//油门大于2000 (不太可能) ????{ ???????prop2 = 100 - conf.dynThrPID; ????} ??} ??for(axis=0;axis3;axis++)? ??{ ?????tmp = min(abs(rcData[axis]-MIDRC),500); ?????#if defined(DEADBAND) ?????????//死区 ?即偏移小于死区的去掉 大于死区的减去死区范围 ???????if (tmpDEADBAND) { tmp -= DEADBAND; } ???????else { tmp=0; } ?????#endif ?????if(axis!=2)??//ROLL PITCH ?yawaxis=2 ?????{ ????????tmp2 = tmp/100; ??//偏移量除以100 ????????rcCommand[axis] = lookupPitchRollRC[tmp2] + (tmp-tmp2*100) * (lookupPitchRollRC[tmp2+1]-lookupPitchRollRC[tmp2]) / ??????100; // ?差值法求用于控制的rc信号,取决于roll pitch 曲线。 ????????prop1 = 100-(uint16_t)conf.rollPitchRate*tmp/500;//tmp=rc数据与中立值差得绝对值 ?rate [0 100]; ????????prop1 = (uint16_t)prop1*prop2/100; ????????????//根据prop2 修改 prop1? ??????}? ??????else?// YAW ????? ??????{ ????? ?????????rcCommand[axis] = tmp; ?????????prop1 = 100-(uint16_t)conf.yawRate*tmp/500; ??//tmp=RC距离中点值 ??yawRate[0 100] 默认为0 ???????} ???????dynP8[axis] = (uint16_t)conf.P8[axis]*prop1/100; ????????//动态YAW PID参数 ???????dynD8[axis] = (uint16_t)conf.D8[axis]*prop1/100; ???????if (rcData[axis] ??} ??tmp = constrain(rcData[THROTTLE],MINCHECK,2000); ????// 令tmp=rcData[THROTTLE]; (前面等于各个轴的输入数值) ??tmp = (uint32_t)(tmp-MINCHECK)*1000/(2000

文档评论(0)

妈妈王子 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档