MWC程序详解-油门值映射.pdfVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MWC程序详解-油门值映射

“油门控制”(四旋翼使用的不是真正的油门,但程序中却使用的”Throttle”这一单词,为了 避免混淆这里姑且沿用油门,并将其认为是动力系统吧)在MWC 中有着非常核心的地位, 首先体现在控制算法上,PID控制很大程度上是通过对油门的调控实现对姿态的控制。其次 很多功能是针对油门进行设计的,如定高。最后油门在程序中是很多标志位的判断依据。由 此称之为最重要的指标,是绝不为过的。 但油门控制过程比较复杂,全部展开在一片文章中会导致结构难以把握,因此本文主要针对 油门量的映射。至于根据姿态,功能来控制油门量,这些内容以后再做详解。 油 门 在 程 序 中 的 名 字 是 ”rcData.THROTTLE”( 下 文 简 记 为 rdt) 以 及”rcCommand[THROTTLE]”(下文简记为rct)。首先看看这个rdt变量在主函数出现位置有: 339,340,341,365,792,821,936。再对位置进行归类分析,一部分出现在函数annexCode 中,另 外一部分,作为标志位判断出现在主循环中。第一部分是核心,annexCode作为computeIMU 函数的子函数出现在主循环中,但起作用是巨大的。正是在这个函数中完成了油门值从rdt 到rct 的映射。这两变量的逻辑关系稍微说明一下,rdt可以理解为控制器接收到的遥控器油 门量,rct则是经过控制器计算后的油门需要量。这个需要量要经过映射,控制算法处理, 最终输出给执行器——电机。 对油门的处理来自于很多方面,如BARO 的定高就是直接对油门的数据控制,再比如PID 对姿态误差进行响应,输出控制量,并将该控制量叠加在油门之上。 先把两个变量之间的映射关系相关的程序贴出来: uint16_ttmp,tmp2; uint8_taxis,prop1,prop2; //PITCHROLLonlydynamicPIDadjustemnt dependingonthrottlevalue prop2= 128;//prop2was 100 is 128now if(rcData[THROTTLE]1500) {//breakpointisfix: 1500 if(rcData[THROTTLE]2000) { prop2 -= ((uint16_t)conf.dynThrPID*(rcData[THROTTLE]-1500)9);// /512 instead of/500 }else { prop2-= conf.dynThrPID; } } for(axis=0;axis3;axis++) { tmp=min(abs(rcData[axis]-MIDRC),500); #ifdefined(DEADBAND) if(tmpDEADBAND) {tmp-=DEADBAND; } else {tmp=0; } #endif if(axis!=2) {//ROLLPITCH tmp2=tmp7;//500/128=3.9 =range [0;3] rcCommand[axis] = lookupPitchRollRC[tmp2] + ((tmp-(tmp27)) * (lookupPitchRollRC[tmp2+1]-lookupPitchRollRC[tmp2])7); prop1 = 128-((uint16_t)conf.rollPitchRate*tmp9);// prop1 was 100 is 128now -- and /512insteadof/500 prop1 = (uint16_t)prop1*prop27;// prop1: max is 128 prop2: max is 128 result prop1:maxis 128 dynP8[axis]=(uint16_t)conf.pid[axis].P8*prop17;//was/100 is/128now dynD8[axis]=(uint16_t)conf.pid[axis].D8*prop17;//was/100 is/128now }else { //YAW rcCommand[axis]=tmp; } if(rcData[axis]MIDRC)rcCommand[axis]=-rcCommand[axis]

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档