5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: MWC改造... [打印本页]

作者: hysblyz    时间: 2013-9-16 01:52
标题: MWC改造...
好久没玩了,成熟飞控玩腻了.弄了块海盗板回来刷MWC,发现很多与现有飞控操作不习惯的地方.打开代码改了一通.

1. 外接LED灯.除板载LED外,另外将云台输出(D44,D45)改为外接LED接口
    #define LEDPIN_PINMODE             pinMode (13, OUTPUT);pinMode (30, OUTPUT);pinMode (44, OUTPUT);pinMode (45, OUTPUT);
  #define LEDPIN_TOGGLE              PINB  |= (1<<7); PINC  |= (1<<7); PINL &=~(48<<5);
  #define LEDPIN_ON                  PORTB |= (1<<7); PORTC |= (1<<7); PORTL &= 207;
  #define LEDPIN_OFF                 PORTB &= ~(1<<7);PORTC &= ~(1<<7);PORTL |=48;

   GPS状态外接灯(D46),后面是加的代码.
     #define STABLEPIN_PINMODE          pinMode (31, OUTPUT);pinMode (46, OUTPUT);
    #define STABLEPIN_ON               PORTC |= 1<<6;PORTL |= 1<<3;
    #define STABLEPIN_OFF              PORTC &= ~(1<<6);PORTL &= ~(1<<3);

2. 解锁改为外八字,加锁改为内八字(美国手)
         (conf.activate[BOXARM] == 0 && rcSticks == THR_LO + YAW_HI + PIT_LO + ROL_LO) go_disarm();    // 加锁内八字(油门最低,升降最低,方向最大,副翼最低)


         (conf.activate[BOXARM] == 0 && rcSticks == THR_LO + YAW_LO + PIT_LO + ROL_HI) go_arm();      // 解锁外八字(油门最低,升降最低,方向最高,副翼最高)


作者: 宇浩轩杰    时间: 2013-9-16 07:26
高手

作者: 东方弥勒佛    时间: 2013-9-16 07:58
就是需要这样的技术贴才能进步

作者: dingrenjun    时间: 2013-9-16 09:29
顶起!

作者: rain51m    时间: 2013-9-16 11:26
别光炫耀了,能看下你的接线图。是根据下文弄的吗
http://www.multiwii.com/forum/vi ... t=1505&start=20

作者: hysblyz    时间: 2013-9-16 17:31
没看你提到的文章,我看到E文就头大. 本来想买个成品小机型带个狗之类的方便出去玩的时候带,结果找来找去都不合适,DJ的小精灵一体化不方便改造,结果看中了华科尔的RX400,+F7遥控器,没想到买回来后感觉有点坑,华科尔的RX400竟然只是个3D玩具机,集成的飞控板竟然连自动返航都没有,但又看F7遥控器集成显示器了.只好自己改造,把RX400原装的接收机,电调板,飞控板全部扔了,买了个海盗飞控板,库存的20A电调.首先刷的海盗,发现飞控的磁罗盘传感器总不能正常工作,只好刷MWC,试飞后感觉还不错.因为华科尔的RX400带机架罩的,飞行的时候看不到状态,所以才决定改的.MWC飞控的代码确实不多,稍懂点单片机的都不难找到每个功能点.单片机驱动LED是应该是所有单片机的入门课程.
接线图很简单,外接LED正负极插到飞控板的D44,45,46的正和信号线上就行了.最好中间加个电阻.因为飞控输出是5V,很容易烧掉LED.

作者: rain51m    时间: 2013-9-16 21:18
没学过单片机看不懂代码啊。能解释下你的代码吗,我用的是MWC LITE, 没法照抄啊

作者: ywywxb    时间: 2013-9-16 23:32
学习。

作者: hysblyz    时间: 2013-9-17 00:37
rain51m 发表于 2013-9-16 21:18
没学过单片机看不懂代码啊。能解释下你的代码吗,我用的是MWC LITE, 没法照抄啊

好吧,我没用过mwc lite 的板子,不知道结构咋样.

  #define LEDPIN_PINMODE             pinMode (13, OUTPUT);pinMode (30, OUTPUT);   
  #define LEDPIN_TOGGLE              PINB  |= (1<<7); PINC  |= (1<<7);
  #define LEDPIN_ON                     PORTB |= (1<<7); PORTC |= (1<<7);
  #define LEDPIN_OFF                    PORTB &= ~(1<<7);PORTC &= ~(1<<7);

上面的是飞控2.2原代码,
第一行表示: 将飞控板的D13,D30脚设为输出,如果你要使用飞控板空闲输出脚连接外部LED灯,可以在此行后添加同样的代码,改过数字为你要设置的针脚.如我设的:pinMode (44, OUTPUT);就是单片机的D44输出脚.
第二行表示: 应该是闪烁上面设置的两个输出脚所连接的LED灯.因为我使用的是D44,D44在单片机上所属端口为L,所以代码为:PINL &=~(48<<5),这个后面48<<5可能解释起来有点困难.48是二进制的11000,表示第4,5位为1,其他位为0.因为一个端口PINL使用了两个脚,所以必须同时设置两个脚的状态,而不能一个一个的去设置.
第三行表示: 将上面调动连接LED灯的脚电平设为低,因为LED灯另一端连接了飞控板5V正,所以此时LED会亮.我加了PORTL &= 207; 207是二进制的11001111,表示第4,第五位为0,其他位为1.单片机输出位为0时表示低电平(0V),输出高电平的为(5V).
第四行表示: 将上面调动连接LED灯的脚电平设为高(也就是5V输出),因为LED灯另一端连接了飞控板5V正,所以此时LED两端无电压,会熄灭.与第三行的道理相同.只是上面输出低电平,这行输出高电平.

解释起来有点费劲...






作者: rain51m    时间: 2013-9-17 09:57
hysblyz 发表于 2013-9-17 00:37
好吧,我没用过mwc lite 的板子,不知道结构咋样.

  #define LEDPIN_PINMODE             pinMode (13,  ...

不错基本明白,二进制部分可以照抄,看不懂我可以略过。主要是端口和针脚的对应比较麻烦, MWClite 用的是ATmega 328,我的理解是PortB/PortL是ATmega芯片对管脚的命名,pin44, 45是Arduino板对板上针脚的命名对么?另请教,PINB和PORTB有何区别?我看到语句中都有用到。






欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://bbs.5imx.com/) Powered by Discuz! X3.3