---
# System prepended metadata

title: Multiwii
tags: [hackpad]

---

---
title: "Multiwii"
tags: hackpad
---

# Multiwii

> [點此觀看原始內容](https://openlabtaipei.hackpad.tw/PJX20ZhAy0l)

Multiwii

 **MultiWii is NOT a** **product, NOR a** **plug and play solution.**
###   Don't expect to buy a compatible board and run it without a minimum knowledge.


### 介紹

[http://www.multiwii.com/](http://www.multiwii.com/)

不錯的中文網站
[http://oaione.blogspot.tw/2014/02/muliwii-i.ht](http://oaione.blogspot.tw/2014/02/muliwii-i.ht)
[http://www.rctw.net/forum.php](http://www.rctw.net/forum.php)
[http://velen966.pixnet.net/blog](http://velen966.pixnet.net/blog)
[http://www.terca.org.tw/](http://www.terca.org.tw/)
[http://ark-lab.blogspot.tw/](http://ark-lab.blogspot.tw/)

### 韌體設定（config.h）：

1.  決定飛行狀態（The type of multicopter）：根據你的板子上面的箭頭是指著馬達還是兩顆馬達中央，來決定十字飛行（QUADP）還是X字飛行（QUADX）。（我是指著馬達，所以決定為十字飛行）
    1.  把這一行 取消註解#define QUADP
2.  設定馬達最低油門（Motor minthrottle）：我的電變是[SkyWalker 20A](https://openlabtaipei.hackpad.tw/HuNvXVQ5LnO#SkyWalker-20A)
    1.  把這行#define MINTHROTTLE 1150 取消註解，後面數字可以更改
### 設定電變最低指令，就是ESC 沒有反應的數值（Mincommand）

1.  設定I2C 速度（I2C speed）
    1.  我打算使用高速的I2C 經度感覺比較高
    2.  把這一行：[#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) I2C_SPEED 100000L 註解
    3.  把這一行：//[#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) I2C_SPEED 400000L 取消註解
2.  設定板子（boards and sensor definitions）
    1.  我的板子是採用CRIUS_LITE 的相容版，所以把他的那一行註解取消
韌體設定2（[MultiWii.h](https://code.google.com/p/multiwii/source/browse/tags/version-2.3/MultiWii_shared/MultiWii.h)）：
由於我的遙控器（DEVO7）和接收器（DEVO RX1002）買回來後就直接插上去，但是久久都沒辦法解除鎖定
    解決方法參考：
        [http://www.multiwii.com/forum/viewtopic.php?f=8&t=3940#p40677](http://www.multiwii.com/forum/viewtopic.php?f=8&t=3940#p40677)
1.  改變#define MINCHECK 後面的數字
    1.  由於遙控器最低訊號輸出會低於：1110，所以數字更改為1110
2.  改變#define MAXCHECK 後面的數字
    1.  由於遙控無法超過預設值：1900，所以數字更改為1810
3.  結論：MINCHECK > 遙控器的最低值， MAXCHECK  <遙控器的最高值一點點
4.  **_在燒錄前，首先把Arduino 內建的EPPROM 清除_**
5.  開啟Arduino→File→Examples→EPPROM→epprom_clear
6.  修改for 迴圈的：i < 512，修改為 1024，因為ATMEGA328P 是1Kbytes（1024 Bytes）
7.  最後再把MultiWii.ino 燒錄進去即可。
- **油門最低值：1098**
![](https://s3-ap-northeast-1.amazonaws.com/hackmd-public/uploads/2fc3c841-d599-4808-9363-9099786edf11)
- **油門最高值：1898**
![](https://s3-ap-northeast-1.amazonaws.com/hackmd-public/uploads/cb10730c-9708-4f04-b11e-88688e9f6fa4)
Multiwii 調整別篇：
1\. Servo PWM Glitch
2.I2C speed
3.Servo refresh rate
4.ACC LPF  (Especially for MPU6050)


### 幾種不同多軸機架的比較 :

**+4 跟 X4 比**, +4的 Pitch or Roll 都只需動對向的兩顆, 在 飛控板 Timer/PWM 控制上有更簡單的優勢, 翻起特技又猛又簡潔... 只是後來的 FPV 或空拍機種上, 因為前面擋著一根軸, 所以比較不採用了!

**Y4 跟 Y3 一樣**, 前進運動時後面的槳不會吃到前面槳風尾流擾動 .... Y3 比 Y4 的 Yaw 靈敏, Y4尾側面機積大, 比Y3, X4 不耐側風.. 而V尾4 更抗側風, 航道飛行很有優勢.

Porting 到 STM32 MCU 的 MultiWii 變種分支
[https://github.com/multiwii/baseflight](https://github.com/multiwii/baseflight)
[https://code.google.com/p/afrodevices/downloads/list](https://code.google.com/p/afrodevices/downloads/list)
國外玩家根據MultiWii重寫的一套新韌體，據說運算效能更佳(未測試)
[https://github.com/bradquick/bradwii/tree/master/](https://github.com/bradquick/bradwii/tree/master/)

### 硬體

以這個配置為主介紹：
控制板：MWC MultiWii Lite
    露天網址：[http://goods.ruten.com.tw/item/show?21307201368003](http://goods.ruten.com.tw/item/show?21307201368003)
    價格：500
    主核心：[ATMEGA328P](http://www.atmel.com/images/doc8161.pdf)
    Gyro：[ITG3205](http://dl.btc.pl/kamami_wa/itg3205.pdf)
    Accel ：[ADXL345ADXL345](http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf)
    燒錄器選用：使用一般的USB 轉 TTL （RS232）即可（100 元而已喔）
    在Config.h 的Combined IMU Boards 設定下選擇：CRIUS_LITE
遙控器：[DEVO7](http://goods.ruten.com.tw/item/show?21405235407777#auc) (會有較長距離的打算時, 最好第一次就使用RC 主流 Futaba FASST 系統)
遙控器接收器：DEVO RX1002

航空夾板 \- 比一般建材合板  or 密集板, 細致輕量及有縱橫支撐向, 缺點是木料有含水 & 密度均一的顧慮,  好處是 吸震,  優質機架結構材, 容易加工黏著, 沒有2.4G 電波屏壁問題.
(露天有個賣家, 航空 & Balsa合板都有賣, 參考看看)
[http://goods.ruten.com.tw/item/show?21312300829696](http://goods.ruten.com.tw/item/show?21312300829696)[)](http://goods.ruten.com.tw/item/show?21312300829696)

馬爸給的結構件的故事

### MultiWii main version history


V2.3
\*\*\*Control mode\*\*\*
\- main PITCH/ROLL/YAW PID modification (r1474)
  \- the sticks scaling is no more affected by PID coefficients
  \- yaw rate (to the right of the PIDs in GUI) now works as stick scaling
  \- default yaw rate is increased (with yaw rate at 0)
  \- yaw PID principle is now different from PITCH&ROLL PID:
    \- yaw ITerm windup is very high, allowing an 'elastic' direction return after a manual perturbation
    \- yaw ITerm is also constrained with a windup independent limit
    \- yaw PTerm is constrained in order to counter the yaw jump effect.
      use yaw DTerm to increase this constrain (r1573)
    \- yaw ITerm is canceled if the yaw stick is not centered
\- Throttle angle correction (r1374)
\- Advanced Headfree mode added (see config.h for instructions) (r1374)
\- DYNBALANCE option, individual motor can be controled via GUI, to test individual vibration
\- better gyro & acc calibration accuracy (r1546)
\- cannot arm is baro mode is on (r1550)
\- only one baro mode : vario around a throttle deadband (r1554)
\- magHold is reset when arm is switched on
\- ONLYARMWHENFLAT option (r1587)
\*\*\*receiver & UART\*\*\*

\- RCSERIAL is now deeply integrated. If a MSP\_SET\_RAW_RC comes,
  it will just override legacy RX data. (r1420)
  as a consequence, RCSERIAL is no more an option
\- no RC averaging for Spektrum & SBUS (r1545)
\- SBUS center define (r1568)
\- FAILSAFE\_DETECT\_TRESHOLD configurable


\*\*\*GPS\*\*\*
\- Enables sonar altitude from i2c-gps-nav board (1424)
\- navigation code will follow after 2.3


\*\*\*GUI\*\*\*
\- Gui with Servosettings. (r1441 & r1450)
  All models with servo included.

\- GUI globalsettings (for some settings previously only in config.h)
\- do not display /dev/cu.* devices but only corresponding /dev/tty.* (r1442)
\- GUI baudrate as configurable setting


\*\*\*IMU and baro\*\*\*
\- correct GYRO_SCALE for all gyro (r1428)
\- no more small angles while shaking the board (r1579)
 [http://www.multiwii.com/forum/viewtopic.php?f=8&t=4112](http://www.multiwii.com/forum/viewtopic.php?f=8&t=4112)

\- baro Alt based on ground temp compensation (r1570)
\- not  reset for FIXEDWING (r1590)

\*\*\* SERVO management ***

\- add a generic way to configure servo settings : conf struct + MSP read/set messages (r1383)
\- Added general servo handler (r1421 & r1429)
\- allow preset of some servo stuff from config.h (r1432)
\- Gui with Servosettings. (r1441)
  We can get 180 degrees servo move without servo modification.

\*\*\*internal improvements\*\*\*
\- migration to a cpp/h code structure
\- huge flash size optimization (around 1k)
\- read at most one analog channel per MWii main loop cycle (r1375)
\- smoothing of RX_RSSI (r1379)
\- make faster analog reads an option with default off to increase accuracy (r1375)
\- detangle vbat & buzzer dependancy (r1375)
\- optimization : small approximation bit shift used instead of * or / number
  for TPA, rates, dynP, dynD and expo curb (r1376)
\- Added checking for flash content change, and reload config parameters in this case. (r1389)
\- split Serial into Serial(core UART management) & Protocol (r1548)
\- loop is globally faster

\*\*\*add-ons\*\*\*
\- no more than one MSP per port and per cycle
  should smooth the delay while requesting MSP, especially for USB port on micro



V2.1

\*\*\*Control mode\*\*\*
\- introduction of HORIZON MODE.
We have now 3 modes:
ACRO mode.
  This is the default one when none of the ANGLE & HORIZON BOX is activated.
  The copter will continue rotating in the direction in which you tilt sticks.
  When you let go of sticks it will maintain that angle and not return to level
ANGLE mode
  The position of the stick indicates the angle at which the copter tries to maintain. Sticks off = level.
  Full sticks in any direction and it will tilt at around 50 degrees. It's proportional in-between.
  It maintains the angle set by the stick. Let go of sticks and it returns to level
HORIZON mode <- new
  It's a proportional mix of the two. Sticks off = level. Full deflection = ACRO.
  In between it gradually mixes from LEVEL mode to ACRO.
  It's a fine mix to be able to do some ACRO with the safety of ANGLE mode when you release the sticks.
  It allows also a more natural way of flying as the multi seems less constrained.


\- failsafe code is more strict.
  If activated, it takes into account all the main channels and it's important to stay strictly inside the \[1000-2000\] range.
  For instance a throttle of 995 will activate the failsafe
failsafe is optional and can be activated via [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) FAILSAFE

\- Acrotrainer mode introduced
  a kind of non proportional horizon mode
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=16&t=1944](http://www.multiwii.com/forum/viewtopic.php?f=16&t=1944)

\*\*\*add-ons\*\*\*
\- pilotlamp integration
via [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) PILOTLAMP

\- LEDRING pattern was refined

\- variometer introduced
  enable to get audio feedback upon rising/falling copter/plane
via [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) VARIOMETER


\*\*\*GPS\*\*\*

\- UBLOX GPS: the baud configuration is autodetected and the UBLOX binary protocol is automaticly set
\- MKT GPS can now be parsed in binary mode is possible thanks to EOSBandi
  made for DIYDrones MTK firmware v1.6 and v1.9

\- I2C GPS:
  correct directionToHome (change it to the opposite direction)
  there is still a problem remaining when your distance to home reaches 654m: it overflows.
  a I2C code evolution is needed to correct this problem

\- a forward predictive filter was ported from the Arducopter code by EOSBandi
optional and by default activated: [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) GPS\_LEAD\_FILTER

\- first implementation of MSP\_SET\_WP
  with the help of Ezio app (EZ-GUI), we can now control the multi with a smartphone:
    set a new position on a map / follow me / follow heading
see Multiwii EZ-GUI specific topic: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=2034](http://www.multiwii.com/forum/viewtopic.php?f=8&t=2034)
  some video about this functionality:
Multiwii main verion history

V2.3

\*\*\*Control mode\*\*\*

\- main PITCH/ROLL/YAW PID modification (r1474)
  \- the sticks scaling is no more affected by PID coefficients
  \- yaw rate (to the right of the PIDs in GUI) now works as stick scaling
  \- default yaw rate is increased (with yaw rate at 0)
  \- yaw PID principle is now different from PITCH&ROLL PID:
    \- yaw ITerm windup is very high, allowing an 'elastic' direction return after a manual perturbation
    \- yaw ITerm is also constrained with a windup independent limit
    \- yaw PTerm is constrained in order to counter the yaw jump effect.
      use yaw DTerm to increase this constrain (r1573)
    \- yaw ITerm is canceled if the yaw stick is not centered
\- Throttle angle correction (r1374)
\- Advanced Headfree mode added (see config.h for instructions) (r1374)
\- DYNBALANCE option, individual motor can be controled via GUI, to test individual vibration
\- better gyro & acc calibration accuracy (r1546)
\- cannot arm is baro mode is on (r1550)
\- only one baro mode : vario around a throttle deadband (r1554)
\- magHold is reset when arm is switched on
\- ONLYARMWHENFLAT option (r1587)
\*\*\*receiver & UART\*\*\*

\- RCSERIAL is now deeply integrated. If a MSP\_SET\_RAW_RC comes,
  it will just override legacy RX data. (r1420)
  as a consequence, RCSERIAL is no more an option
\- no RC averaging for Spektrum & SBUS (r1545)
\- SBUS center define (r1568)
\- FAILSAFE\_DETECT\_TRESHOLD configurable


\*\*\*GPS\*\*\*
\- Enables sonar altitude from i2c-gps-nav board (1424)
\- navigation code will follow after 2.3


\*\*\*GUI\*\*\*
\- Gui with Servosettings. (r1441 & r1450)
  All models with servo included.

\- GUI globalsettings (for some settings previously only in config.h)
\- do not display /dev/cu.* devices but only corresponding /dev/tty.* (r1442)
\- GUI baudrate as configurable setting


\*\*\*IMU and baro\*\*\*
\- correct GYRO_SCALE for all gyro (r1428)
\- no more small angles while shaking the board (r1579)
 [http://www.multiwii.com/forum/viewtopic.php?f=8&t=4112](http://www.multiwii.com/forum/viewtopic.php?f=8&t=4112)

\- baro Alt based on ground temp compensation (r1570)
\- not  reset for FIXEDWING (r1590)

\*\*\* SERVO management ***

\- add a generic way to configure servo settings : conf struct + MSP read/set messages (r1383)
\- Added general servo handler (r1421 & r1429)
\- allow preset of some servo stuff from config.h (r1432)
\- Gui with Servosettings. (r1441)
  We can get 180 degrees servo move without servo modification.

\*\*\*internal improvements\*\*\*
\- migration to a cpp/h code structure
\- huge flash size optimization (around 1k)
\- read at most one analog channel per MWii main loop cycle (r1375)
\- smoothing of RX_RSSI (r1379)
\- make faster analog reads an option with default off to increase accuracy (r1375)
\- detangle vbat & buzzer dependancy (r1375)
\- optimization : small approximation bit shift used instead of * or / number
  for TPA, rates, dynP, dynD and expo curb (r1376)
\- Added checking for flash content change, and reload config parameters in this case. (r1389)
\- split Serial into Serial(core UART management) & Protocol (r1548)
\- loop is globally faster

\*\*\*add-ons\*\*\*
\- no more than one MSP per port and per cycle
  should smooth the delay while requesting MSP, especially for USB port on micro



V2.1

\*\*\*Control mode\*\*\*
\- introduction of HORIZON MODE.
We have now 3 modes:
ACRO mode.
  This is the default one when none of the ANGLE & HORIZON BOX is activated.
  The copter will continue rotating in the direction in which you tilt sticks.
  When you let go of sticks it will maintain that angle and not return to level
ANGLE mode
  The position of the stick indicates the angle at which the copter tries to maintain. Sticks off = level.
  Full sticks in any direction and it will tilt at around 50 degrees. It's proportional in-between.
  It maintains the angle set by the stick. Let go of sticks and it returns to level
HORIZON mode <- new
  It's a proportional mix of the two. Sticks off = level. Full deflection = ACRO.
  In between it gradually mixes from LEVEL mode to ACRO.
  It's a fine mix to be able to do some ACRO with the safety of ANGLE mode when you release the sticks.
  It allows also a more natural way of flying as the multi seems less constrained.


\- failsafe code is more strict.
  If activated, it takes into account all the main channels and it's important to stay strictly inside the \[1000-2000\] range.
  For instance a throttle of 995 will activate the failsafe
failsafe is optional and can be activated via [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) FAILSAFE

\- Acrotrainer mode introduced
  a kind of non proportional horizon mode
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=16&t=1944](http://www.multiwii.com/forum/viewtopic.php?f=16&t=1944)

\*\*\*add-ons\*\*\*
\- pilotlamp integration
via [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) PILOTLAMP

\- LEDRING pattern was refined

\- variometer introduced
  enable to get audio feedback upon rising/falling copter/plane
via [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) VARIOMETER


\*\*\*GPS\*\*\*

\- UBLOX GPS: the baud configuration is autodetected and the UBLOX binary protocol is automaticly set
\- MKT GPS can now be parsed in binary mode is possible thanks to EOSBandi
  made for DIYDrones MTK firmware v1.6 and v1.9

\- I2C GPS:
  correct directionToHome (change it to the opposite direction)
  there is still a problem remaining when your distance to home reaches 654m: it overflows.
  a I2C code evolution is needed to correct this problem

\- a forward predictive filter was ported from the Arducopter code by EOSBandi
optional and by default activated: [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) GPS\_LEAD\_FILTER

\- first implementation of MSP\_SET\_WP
  with the help of Ezio app (EZ-GUI), we can now control the multi with a smartphone:
    set a new position on a map / follow me / follow heading
see Multiwii EZ-GUI specific topic: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=2034](http://www.multiwii.com/forum/viewtopic.php?f=8&t=2034)
  some video about this functionality:

 [http://www.youtube.com/watch?v=qpoPanmVa9Y](http://www.youtube.com/watch?v=qpoPanmVa9Y)

 [http://www.youtube.com/watch?v=hPj6WZex8j0](http://www.youtube.com/watch?v=hPj6WZex8j0)

 [http://www.youtube.com/watch?v=nPICiiaDTnc](http://www.youtube.com/watch?v=nPICiiaDTnc)


\*\*\*multiwii models\*\*\*

\- USE\_THROTTLESERVO (for airplanes), COLLECTIVE\_RANGE changed (second value not offset anymore)

\*\*\*IMU and baro\*\*\*

\- gyro calibration could be held until the MWC stops moving
  introduced by MIS, and made optional after via a specific define:?define GYROCALIBRATIONFAILSAFE

\- mag gain calibration is improved thanks to EOSBandi
  based on Fabio FreeIMU code. We won't forget you Fabio...

\- perfect euler angle computation in case of 9DOF (better heading)
  no more gimbal lock in GUI representation with a 9DOF sensor

\- force sensors orientation to override board specific defaults
  optional in config.h

\- default ACC LPF factor reduced from 16 (2^4), and is share with ACC LPF for alt hold

\- gyro/acc complementary filter value increased from 400 to 600

\- gyro/mag complementary filter now set to 250 instead of 200

\- gyro scale factor changed from 2380 to 2279

\- accelerometer now used below 1.15G and above 0.85G instead of previous 1.4G/0.6G settings

\- option: SENSORS\_TILT\_45DEG_LEFT/RIGHT to change X/P configuration without changing board orientation

\- baro calibration and calculation is improved
  baro indicates now altitude 0 when it is powered. This is the reference altitude.

\- calculation of barometric altitude changed to include temperature, faster update rate


\*\*\*internal improvements\*\*\*

\- some default PID were changed for optimization speed in PID copmputation.
  The default PID should behave exactly as the previous ones.
  To restore your old PID settings, just a proportion is needed.

\- EEPROM settings secured by checksum (thanks to MIS)
\- optional permanent logging to eeprom
  setting: LOG_PERMANENT
\- change LED blink frequency for acc-uncalibrated or tilt>25 from 50ms to 10ms

\- allow override of motor/servo mixing from config.h - no need to edit Output.ino
  experimental
\- faster cycle time than with v2.1
\- many many hidden optimizations in the code




V2.0 (全面用新架構 .ino 拿掉 .pde)
  WMP and NUNCHUCK are no longer auto recognized.
  You must explicitly declare them (or just WMP) in config.h

  Pullups are now undefined by default

  LCD is not activated by default
  Failsafe is not activated by default
  VBAT monitoring is not activted by default


Multiwii Serial Protocol
  It's a new protocol to communicate with the FC

  Compatible GUI:
   open source code, compatible with the new serial protocol:
    WinGUI from EOSBandi, which is fully equivalent with the original one,
     with a better look
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1229](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1229)
    mwGui from kos
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1791](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1791)
    Android ones via serial bluetooth:
     \- adding a bluetooth module to multiwii
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=6&t=133](http://www.multiwii.com/forum/viewtopic.php?f=6&t=133)
     compatible apps:
 [https://play.google.com/store/apps/details?id=net.xrotor.andmultiwiiconf](https://play.google.com/store/apps/details?id=net.xrotor.andmultiwiiconf)
 [https://play.google.com/store/apps/details?id=net.loide.games.bicopter](https://play.google.com/store/apps/details?id=net.loide.games.bicopter)
 [https://play.google.com/store/apps/details?id=com.naze32.configurator](https://play.google.com/store/apps/details?id=com.naze32.configurator)

  Compatible OSD:
    open source code, compatible with the new serial protocol
    Rushduino:
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=922](http://www.multiwii.com/forum/viewtopic.php?f=8&t=922)
    mobiDrone:
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1498](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1498)

LCD config
  OLED display
    thanks to contributions of howardhb and Hamburger
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=7&t=1350](http://www.multiwii.com/forum/viewtopic.php?f=7&t=1350)

  VT100 terminal type addition
    thanks to contribution of Hamburger
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=7&t=1096](http://www.multiwii.com/forum/viewtopic.php?f=7&t=1096)

  A multiline option is added to allow the configuration on more than 2 lines
    useful for displays like OLED or VT100

  We have now a lot of possibilities regarding LCD:
    SERIAL3W : original 2x16 line from Sparkfun
    TEXTSTAR : Cat's Whisker LCD_TEXTSTAR Module CW-LCD-02
    VT100 : vt100 compatible terminal
    ETPP : Eagle Tree Power Panel LCD
    LCD03 : an i2c LCD
    OLED\_I2C\_128x64

New proc: ATmega32U4

Servo:
  Higher refresh rate:
    Some servo (mostly digital ones) can work with a higher frequency than 50Hz.
    The benefit to use a higher refresh rate is a sharper response.
     Hardware PWM output:
    On MEGA boards, it's now possible to drive the gimbal servos with
    a 11-bit PWM servo resolution. Thanks to ronco.
    The hardware PWM output ensures a jitter free response.

LED flasher
  A way to set a flash LED sequence from Tommie
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1505](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1505)

Throttle expo
  There is now another curve in the GUI to configure the Throttle expo.
  It's a way to smooth the throttle stick response around the hover point.
  In order to help the setting, there is a small cursor in the graph to show
  where is the current throttle input.

ACC LEVEL improvement
  The LEVE mode is improved since 2.0 thanks to new choice of
  other complementary filter coefficients and a floating point low pass filter

Headfree checkbox:
  It's possible to reset the headfree direction while flying via a checkbox.
  thanks to Tommie

Internal code:
  \- the Serial part uses now less RAM (thanks to Tommie first mod)
    RX/TX buffers are smaller than before.
  \- EEPROM parameters are stored in a struct, and are written in the
    EEPROM in a single step.
  \- MAG declination was added by EOSBandi, to have more accurate orientation.
    In some countries, it's really mandatory to set this variable right,
     otherwise it's impossible to use GPS.
  \- Flag var was introduced for global boolean type variables.
  \- Hamburger introduced some "copter exemple" in order to check
    if compilation is ok. (should be a way to remove some trivial bugs)
  \- code style (indentation, variable naming convention etc.) started
  \- GUI requires new ControlP5 library to compile
  \- interval variable activate\[\] is now 16 bit long
  \- new config.h structure

GUI:
  \- thanks to Danal, there is now the PIN number and the propeller direction
  drawed in the graph representation
  \- thanks to kos, we can now load and save parameters into a file
  \- there is now a reset button to set all parameters to default
  \- there is now a GUI visual feedback on all states (checkbox items)


ESC calibration
  experimental
It's a special [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) which allows to calibrate all ESCs with exaclty
   the same signal.
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=13&t=1517](http://www.multiwii.com/forum/viewtopic.php?f=13&t=1517)

Telemetry
  new telemetry manual stepping mode

Arming option
  configurable TX stick combos for arm/disarm
  this way, it's possible to arm/disarm the multi via:
    \- one AUX switch like before
    \- YAW stick and/or ROLL stick

AIRPLANE mode
  experimental

HELICOPTER mode
  experimental

Dual & Single copter
  experimental

VTAIL mode
  motor rotation has changed:
  Front Left & Rear Right: CCW, Front Right & Rear Left: CW , YAW_DIRECTION=1



V1.9 (進入穩定 1.0 IDE 環境)

A new processor
  Coded by ronco based on ATMega 32U4, which can be seen
  as an intermediate proc between 328 and 2560


STM32 porting
  A nice initiative from dongs to port multiwii to a 32bit processor.
  This code allows also to reuse some cheap FC boards and replace the
  firmware by a multiwii one.
 [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1193](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1193)
 [http://code.google.com/p/afrodevices/](http://code.google.com/p/afrodevices/)


Stable mode
  The term D of the PID LEVEL settings is now used to limit the effect
  of the level correction thanks to the suggestion of Shikra
(see [http://www.multiwii.com/forum/viewtopic.php?f=7&t=905](http://www.multiwii.com/forum/viewtopic.php?f=7&t=905) ).
  By default (D=100), the behaviour of the stable mode is unchanged.
  With a lower D, effects are:
   \- a smoothing level change
   \- should prevent some wobbles of death

HeadFree mode
  Something similar to MK Carefree mode was added.
  Firstly introduced by mahowik as a imple mode?
 [http://www.multiwii.com/forum/viewtopic.php?f=7&t=925](http://www.multiwii.com/forum/viewtopic.php?f=7&t=925)
  A specific check box was added in the GUI to activate this mode via a switch.
  You need to have a magnetometer and accelerometer on the board
  Principle: The head/front will be remembered when you turn on the engines.
    So it means that you can   turn on/off the mode during the flight.



Pass-through mode
  It a checkbox in the GUI.
  The purpose is to bypass the IMU for some configs like flying wings.



Beeper mode
  It a checkbox in the GUI.
  The purpose is to activate a beeper in case you have a buzzer
  installed and you lost your multi in high grass for instance.



New stick combo
  for magneto calibration (throttle=up yaw=right pitch=down)


Better magnetometer calibration
  The calibration of the magnetometer is now more precise,
  because it takes into account the relative strength of the magnitude
  projection on each axis.
  Based on a code suggested by EOSBandi:
 [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1068](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1068)

  It should improve the GPS return to target point accuracy.


Gyro smoothing
  There are 2 options to smooth the gyros: (mainly useful for fixed wings configs)
\- per axis based on a LPF: [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) GYRO_SMOOTHING {20, 20, 3}
     // separate averaging ranges for roll, pitch, yaw
   \- for all axis, based on a moving average (from Magnetron)
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) MMGYRO
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) MMGYROVECTORLENGHT 10

  Servo gimbal smoothing is also an option based on the same principle:
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) MMSERVOGIMBAL
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) MMSERVOGIMBALVECTORLENGHT 32



Inflight ACC-calibration:
  It a way to calibrate the level via on flight tests.
  Must be defined in config.h


Coding specific improvements:
  Less RAM memory usage via the use of PROGMEM statement

  No more Arduino Serial function => the new serial communication is more efficient


V1.8
    \- some factorizations between PPM sum receiver code & standard receiver code
    \- EXPERIMENTAL: integration of direct SBUS receiver thanks to the contribution of Captain IxI & Zaggo
      \- LEVEL drift problem:
      the root of this problem was identified (at least partly).
      Several options to try to solve it:
\- adding a [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRUSTED_ACCZ for those who have huge ACC Z variations when some throttle is applied
        (it's a test you should do before tructing ACCZ)
    //[#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRUSTED_ACCZ  -> ACCZ is not taken into account in calculation for small angles
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRUSTED_ACCZ    -> ACCZ is taken into account in calculation for small angles
      \- BMA180 init changes to another mode: should help to filter noisy setups
\- adding a [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) STAB\_OLD\_17 for those who still encounter problem with the stable code,
        as the old 1.7 LEVEL code (less elaborated) doesn't seem to cause drift.
     \- some flying wing code upgrade (thanks to the suggestion of Hamburger)
     \- ACC added: LSM303DLx_ACC


MAIN SOFT: introduction of a deadband around the stick center
via a [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) DEADBAND. (commented by default)
     it might help to get some accuracy from RC TX with not accurate potentiometers
     however, as it introduces a central deadband, the TX trims are not efficient as before.

MAIN SOFT: new altitude hold
     there is now a working implementation :)
     thanks to ziss_dm, the estimation of the altitude is more precise.
     the Z ACC is integrated in the alt hold estimation and helps a lot to estimate short term variation
     how-to:
        the multi must be nearly altitude stable before the activation of altitude hold.
        a dead band is then created around the throttle value.
     at every moment, it's possible to still control the trhottle power when the throttle goes out of the deadband
     this is not the best implemetation as the multi needs to be quite static before the activation, but it's a good start.

     There are 2 PIDS which are separated ans which can be used separatly.
    ALT PID: better results are obtained with a P only term (P=4.7 I=0 D=0 is the default value)
    VEL PID: it stands for velocity PID, more info here: (P=I=D=0 is the default value)
            it should help to smooth every altitude varation
 [http://www.multiwii.com/forum/viewtopic.php?f=7&t=363](http://www.multiwii.com/forum/viewtopic.php?f=7&t=363)

GUI: altitude representation
     there is an autoscale feature in the GUI to see better the altitude variation.



GUI: introduction of MAG 3 axis raw values

MAIN SOFT:  the failsafe function of the PPM sum receiver was a little mofified and can handle better
      unusual signal patterns with short pulses.



V1.7

ALL: BARO is more precise, but still not perfect (1m to 2m amplitude).
     Note it's a code issue, not a baro component issue.

ALL: RC channels AUX2, CAM1 CAM2 added. only relevant for PPM SUM stream or MEGA boards.
     On the 328p with a standard receiver, only the first 5 channels are recognized.
     CAM1 and CAM2 controls are not yet implemented.

ALL: AUX1 and AUX2 switches are fully customizable via a 3 state position.
    We can activate/deactivate individually  level mode (ACC), baro or compass (mag).
    It's a generic approach which lets other possibilities to control things in the future.
    With this principle, it's possible to activate permanently the options you want even if you have only 4 channels
    (replace the FORCE LEVEL option)

ALL: CAM triger option:
    a servo can be connected on digital pin A2 (pro mini) to activate the trigger of a camera
    the option can be activated or deactivated via the button configuration panel AUX1/AUX2
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) CAM\_SERVO\_HIGH 2000  // the position of HIGH state servo
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) CAM\_SERVO\_LOW 1020   // the position of LOW state servo
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) CAM\_TIME\_HIGH 1000   // the duration of HIGH state servo expressed in ms
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) CAM\_TIME\_LOW 1000    // the duration of LOW state servo expressed in ms
    the PIN on arduino mega is also A2, but this is not the final PIN mapping

ALL CAM stab (servo tilt) button option:
    the servo tilt option can be activated or deactivated via the button configuration panel AUX1/AUX2

ALL: BI COPTER is now a avatar style implementation.
    on a pro mini: 9 motor left, 10 motor right, 11 servo left, 3 servo right
    on mega: 3 motor left, 5 motor right, 6 servo left, 2 servo right

ALL: addition of Y4 (not tested)
    on a pro mini: motors 9,10,11,3
    on mega: motors 3,5,6,2
    REAR1 , FRONT R , REAR2 , FRONT L

ALL: addition of HEX6X (not tested)
    on a pro mini: motors 9,10,11,3,6,5
    on mega: motors 3,5,6,2,7,8
    REAR\_R , FRONT\_R , REAR\_L , FRONT\_L , RIGHT , LEFT

ALL: new level mode
    The level mode is completely redesigned with a coherent independent trim
    There a now a PI control loop for level mode based on angle estimation.
    The old auto level strength value was a sort of P only control loop.
    With the new code, the I term allows to refine the remaining angular error for a better angle positioning accuracy.
    With an RC rate = 1, the angle at full stick is around 45deg => a flip should never happen in this mode.

MAIN SOFT: software trim for stable mode
    It is now possible to adjust the trim of the level mode to match the same TX trim used for the acro mode.
    1) disarm the motors
    2) full throttle (must be >1900)
    3) full PITCH forward/backward and full ROLL left/right (2 axis possibilities) will trim the level mode according to
    the neutral angle you want to change. The status LED will blink to confirm each ticks.

MAIN SOFT: new calibration procedure
    The ACC calibration differs now from the gyro calibration.
    gyro calibration: it's still done at each power on. It's also possible manually as before: min throttle+full pitch
    backward+full yaw left.
    acc calibration: motor disarmed, full throttle up, full pitch backward+full yaw left.

MAIN SOFT: it was in 1.6 but not mentioned. it's possible to arm/disarm motors
    either via min throttle + full yaw stick or full roll stick.

MAIN SOFT: anti yaw jump modification for multi with 4 motors or more

MAIN SOFT: servo range for tricopter
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRI\_YAW\_CONSTRAINT_MIN 1020
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRI\_YAW\_CONSTRAINT_MAX 2000

MAIN SOFT: compass lock now works
    the option can be activated or deactivated via the button configuration panel AUX1/AUX2
    the lock is activated 1s after the stick release
    the lock is maintained only if the YAW stick in centred +/- 50
    In some case, especially with the 5883, the mag must be calibrated otherwise, the direction is not good.
    The calibration procedure is not yet implemented.

GUI: 3D copter attitude visualization

GUI: ACC calibration. there is now a calibrate button to calibrate the ACC directly from the GUI
    (it resets the soft trim)

GUI: thanks to Eberhard, better display of serial ports on Mac OS X and Linux

GUI: the memory leak bug GUI is corrected

GUI and LCD: D is now positive (to avoid confusion in explanations)


V1.6

    PPM\_SUM 19 (now separated from RC\_THROTTLE assignment)
    RC_THROTTLE 62 (=A8)
    RC_ROLL 63 (=A9)
    RC_PITCH 64 (=A10)
    RC_YAW 65 (=A11)
    RC_MODE 66 (=A12)
    RC_AUX(not used) 67 (=A13)
    RC_7(not used) 68 (=A14)
    RC_8(not used) 69 (=A15)
    I2C SDA 20
    I2C SCL 21
    FRONTMOTORPIN 2 (on 328p was 3) = servo for tricopter
    REARMOTORPIN 3 (on 328p was 9)
    RIGHTMOTORPIN 5 (on 328p was 10)
    LEFTMOTORPIN 6 (on 328p was 11)
    Y6RIGHT(HEXFRONT) 7 (on 328p was 6)
    Y6LEFT(HEXREAR) 8 (on 328p was 5)
    V\_BAT\_MONITOR A3
    TILT&GIMBAL&WING A0/A1
    POWERPIN 12


V1.4:
Serial PPM (PPM SUM):
    more explanation on //[#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) SERIAL\_SUM\_PPM
    only one line to comment/uncomment in order to activate it
    a bug was corrected about the number of channel

new calibration approach
    at each initialization:
        the gyro calibration is done
        the acc calibration is done only for a pure gimbal setup
        for other setups, the acc is retrieved from the EEPROM
    on demand (via full left yaw stick + full pitch low stick):
        the gyro calibration is done
        the acc calibration is done and store in the EERPOM
    =\> the acc calibration must be done at least once on demand.


autolevel strength: the last range was \[0;10\]. The new range is \[0;25\]
     with a reduction weight of 2.5 => more precision for tunning.


 [http://www.youtube.com/watch?v=qpoPanmVa9Y](http://www.youtube.com/watch?v=qpoPanmVa9Y)

 [http://www.youtube.com/watch?v=hPj6WZex8j0](http://www.youtube.com/watch?v=hPj6WZex8j0)

 [http://www.youtube.com/watch?v=nPICiiaDTnc](http://www.youtube.com/watch?v=nPICiiaDTnc)


\*\*\*multiwii models\*\*\*

\- USE\_THROTTLESERVO (for airplanes), COLLECTIVE\_RANGE changed (second value not offset anymore)

\*\*\*IMU and baro\*\*\*

\- gyro calibration could be held until the MWC stops moving
  introduced by MIS, and made optional after via a specific define:?define GYROCALIBRATIONFAILSAFE

\- mag gain calibration is improved thanks to EOSBandi
  based on Fabio FreeIMU code. We won't forget you Fabio...

\- perfect euler angle computation in case of 9DOF (better heading)
  no more gimbal lock in GUI representation with a 9DOF sensor

\- force sensors orientation to override board specific defaults
  optional in config.h

\- default ACC LPF factor reduced from 16 (2^4), and is share with ACC LPF for alt hold

\- gyro/acc complementary filter value increased from 400 to 600

\- gyro/mag complementary filter now set to 250 instead of 200

\- gyro scale factor changed from 2380 to 2279

\- accelerometer now used below 1.15G and above 0.85G instead of previous 1.4G/0.6G settings

\- option: SENSORS\_TILT\_45DEG_LEFT/RIGHT to change X/P configuration without changing board orientation

\- baro calibration and calculation is improved
  baro indicates now altitude 0 when it is powered. This is the reference altitude.

\- calculation of barometric altitude changed to include temperature, faster update rate


\*\*\*internal improvements\*\*\*

\- some default PID were changed for optimization speed in PID copmputation.
  The default PID should behave exactly as the previous ones.
  To restore your old PID settings, just a proportion is needed.

\- EEPROM settings secured by checksum (thanks to MIS)
\- optional permanent logging to eeprom
  setting: LOG_PERMANENT
\- change LED blink frequency for acc-uncalibrated or tilt>25 from 50ms to 10ms

\- allow override of motor/servo mixing from config.h - no need to edit Output.ino
  experimental
\- faster cycle time than with v2.1
\- many many hidden optimizations in the code




V2.0 (全面用新架構 .ino 拿掉 .pde)
  WMP and NUNCHUCK are no longer auto recognized.
  You must explicitly declare them (or just WMP) in config.h

  Pullups are now undefined by default

  LCD is not activated by default
  Failsafe is not activated by default
  VBAT monitoring is not activted by default


Multiwii Serial Protocol
  It's a new protocol to communicate with the FC

  Compatible GUI:
   open source code, compatible with the new serial protocol:
    WinGUI from EOSBandi, which is fully equivalent with the original one,
     with a better look
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1229](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1229)
    mwGui from kos
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1791](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1791)
    Android ones via serial bluetooth:
     \- adding a bluetooth module to multiwii
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=6&t=133](http://www.multiwii.com/forum/viewtopic.php?f=6&t=133)
     compatible apps:
 [https://play.google.com/store/apps/details?id=net.xrotor.andmultiwiiconf](https://play.google.com/store/apps/details?id=net.xrotor.andmultiwiiconf)
 [https://play.google.com/store/apps/details?id=net.loide.games.bicopter](https://play.google.com/store/apps/details?id=net.loide.games.bicopter)
 [https://play.google.com/store/apps/details?id=com.naze32.configurator](https://play.google.com/store/apps/details?id=com.naze32.configurator)

  Compatible OSD:
    open source code, compatible with the new serial protocol
    Rushduino:
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=922](http://www.multiwii.com/forum/viewtopic.php?f=8&t=922)
    mobiDrone:
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1498](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1498)

LCD config
  OLED display
    thanks to contributions of howardhb and Hamburger
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=7&t=1350](http://www.multiwii.com/forum/viewtopic.php?f=7&t=1350)

  VT100 terminal type addition
    thanks to contribution of Hamburger
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=7&t=1096](http://www.multiwii.com/forum/viewtopic.php?f=7&t=1096)

  A multiline option is added to allow the configuration on more than 2 lines
    useful for displays like OLED or VT100

  We have now a lot of possibilities regarding LCD:
    SERIAL3W : original 2x16 line from Sparkfun
    TEXTSTAR : Cat's Whisker LCD_TEXTSTAR Module CW-LCD-02
    VT100 : vt100 compatible terminal
    ETPP : Eagle Tree Power Panel LCD
    LCD03 : an i2c LCD
    OLED\_I2C\_128x64

New proc: ATmega32U4

Servo:
  Higher refresh rate:
    Some servo (mostly digital ones) can work with a higher frequency than 50Hz.
    The benefit to use a higher refresh rate is a sharper response.
     Hardware PWM output:
    On MEGA boards, it's now possible to drive the gimbal servos with
    a 11-bit PWM servo resolution. Thanks to ronco.
    The hardware PWM output ensures a jitter free response.

LED flasher
  A way to set a flash LED sequence from Tommie
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1505](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1505)

Throttle expo
  There is now another curve in the GUI to configure the Throttle expo.
  It's a way to smooth the throttle stick response around the hover point.
  In order to help the setting, there is a small cursor in the graph to show
  where is the current throttle input.

ACC LEVEL improvement
  The LEVE mode is improved since 2.0 thanks to new choice of
  other complementary filter coefficients and a floating point low pass filter

Headfree checkbox:
  It's possible to reset the headfree direction while flying via a checkbox.
  thanks to Tommie

Internal code:
  \- the Serial part uses now less RAM (thanks to Tommie first mod)
    RX/TX buffers are smaller than before.
  \- EEPROM parameters are stored in a struct, and are written in the
    EEPROM in a single step.
  \- MAG declination was added by EOSBandi, to have more accurate orientation.
    In some countries, it's really mandatory to set this variable right,
     otherwise it's impossible to use GPS.
  \- Flag var was introduced for global boolean type variables.
  \- Hamburger introduced some "copter exemple" in order to check
    if compilation is ok. (should be a way to remove some trivial bugs)
  \- code style (indentation, variable naming convention etc.) started
  \- GUI requires new ControlP5 library to compile
  \- interval variable activate\[\] is now 16 bit long
  \- new config.h structure

GUI:
  \- thanks to Danal, there is now the PIN number and the propeller direction
  drawed in the graph representation
  \- thanks to kos, we can now load and save parameters into a file
  \- there is now a reset button to set all parameters to default
  \- there is now a GUI visual feedback on all states (checkbox items)


ESC calibration
  experimental
It's a special [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) which allows to calibrate all ESCs with exaclty
   the same signal.
more info here: [http://www.multiwii.com/forum/viewtopic.php?f=13&t=1517](http://www.multiwii.com/forum/viewtopic.php?f=13&t=1517)

Telemetry
  new telemetry manual stepping mode

Arming option
  configurable TX stick combos for arm/disarm
  this way, it's possible to arm/disarm the multi via:
    \- one AUX switch like before
    \- YAW stick and/or ROLL stick

AIRPLANE mode
  experimental

HELICOPTER mode
  experimental

Dual & Single copter
  experimental

VTAIL mode
  motor rotation has changed:
  Front Left & Rear Right: CCW, Front Right & Rear Left: CW , YAW_DIRECTION=1



V1.9 (進入穩定 1.0 IDE 環境)

A new processor
  Coded by ronco based on ATMega 32U4, which can be seen
  as an intermediate proc between 328 and 2560


STM32 porting
  A nice initiative from dongs to port multiwii to a 32bit processor.
  This code allows also to reuse some cheap FC boards and replace the
  firmware by a multiwii one.
 [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1193](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1193)
 [http://code.google.com/p/afrodevices/](http://code.google.com/p/afrodevices/)


Stable mode
  The term D of the PID LEVEL settings is now used to limit the effect
  of the level correction thanks to the suggestion of Shikra
(see [http://www.multiwii.com/forum/viewtopic.php?f=7&t=905](http://www.multiwii.com/forum/viewtopic.php?f=7&t=905) ).
  By default (D=100), the behaviour of the stable mode is unchanged.
  With a lower D, effects are:
   \- a smoothing level change
   \- should prevent some wobbles of death

HeadFree mode
  Something similar to MK Carefree mode was added.
  Firstly introduced by mahowik as a imple mode?
 [http://www.multiwii.com/forum/viewtopic.php?f=7&t=925](http://www.multiwii.com/forum/viewtopic.php?f=7&t=925)
  A specific check box was added in the GUI to activate this mode via a switch.
  You need to have a magnetometer and accelerometer on the board
  Principle: The head/front will be remembered when you turn on the engines.
    So it means that you can   turn on/off the mode during the flight.



Pass-through mode
  It a checkbox in the GUI.
  The purpose is to bypass the IMU for some configs like flying wings.



Beeper mode
  It a checkbox in the GUI.
  The purpose is to activate a beeper in case you have a buzzer
  installed and you lost your multi in high grass for instance.



New stick combo
  for magneto calibration (throttle=up yaw=right pitch=down)


Better magnetometer calibration
  The calibration of the magnetometer is now more precise,
  because it takes into account the relative strength of the magnitude
  projection on each axis.
  Based on a code suggested by EOSBandi:
 [http://www.multiwii.com/forum/viewtopic.php?f=8&t=1068](http://www.multiwii.com/forum/viewtopic.php?f=8&t=1068)

  It should improve the GPS return to target point accuracy.


Gyro smoothing
  There are 2 options to smooth the gyros: (mainly useful for fixed wings configs)
\- per axis based on a LPF: [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) GYRO_SMOOTHING {20, 20, 3}
     // separate averaging ranges for roll, pitch, yaw
   \- for all axis, based on a moving average (from Magnetron)
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) MMGYRO
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) MMGYROVECTORLENGHT 10

  Servo gimbal smoothing is also an option based on the same principle:
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) MMSERVOGIMBAL
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) MMSERVOGIMBALVECTORLENGHT 32



Inflight ACC-calibration:
  It a way to calibrate the level via on flight tests.
  Must be defined in config.h


Coding specific improvements:
  Less RAM memory usage via the use of PROGMEM statement

  No more Arduino Serial function => the new serial communication is more efficient


V1.8
    \- some factorizations between PPM sum receiver code & standard receiver code
    \- EXPERIMENTAL: integration of direct SBUS receiver thanks to the contribution of Captain IxI & Zaggo
      \- LEVEL drift problem:
      the root of this problem was identified (at least partly).
      Several options to try to solve it:
\- adding a [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRUSTED_ACCZ for those who have huge ACC Z variations when some throttle is applied
        (it's a test you should do before tructing ACCZ)
    //[#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRUSTED_ACCZ  -> ACCZ is not taken into account in calculation for small angles
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRUSTED_ACCZ    -> ACCZ is taken into account in calculation for small angles
      \- BMA180 init changes to another mode: should help to filter noisy setups
\- adding a [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) STAB\_OLD\_17 for those who still encounter problem with the stable code,
        as the old 1.7 LEVEL code (less elaborated) doesn't seem to cause drift.
     \- some flying wing code upgrade (thanks to the suggestion of Hamburger)
     \- ACC added: LSM303DLx_ACC


MAIN SOFT: introduction of a deadband around the stick center
via a [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) DEADBAND. (commented by default)
     it might help to get some accuracy from RC TX with not accurate potentiometers
     however, as it introduces a central deadband, the TX trims are not efficient as before.

MAIN SOFT: new altitude hold
     there is now a working implementation :)
     thanks to ziss_dm, the estimation of the altitude is more precise.
     the Z ACC is integrated in the alt hold estimation and helps a lot to estimate short term variation
     how-to:
        the multi must be nearly altitude stable before the activation of altitude hold.
        a dead band is then created around the throttle value.
     at every moment, it's possible to still control the trhottle power when the throttle goes out of the deadband
     this is not the best implemetation as the multi needs to be quite static before the activation, but it's a good start.

     There are 2 PIDS which are separated ans which can be used separatly.
    ALT PID: better results are obtained with a P only term (P=4.7 I=0 D=0 is the default value)
    VEL PID: it stands for velocity PID, more info here: (P=I=D=0 is the default value)
            it should help to smooth every altitude varation
 [http://www.multiwii.com/forum/viewtopic.php?f=7&t=363](http://www.multiwii.com/forum/viewtopic.php?f=7&t=363)

GUI: altitude representation
     there is an autoscale feature in the GUI to see better the altitude variation.



GUI: introduction of MAG 3 axis raw values

MAIN SOFT:  the failsafe function of the PPM sum receiver was a little mofified and can handle better
      unusual signal patterns with short pulses.



V1.7

ALL: BARO is more precise, but still not perfect (1m to 2m amplitude).
     Note it's a code issue, not a baro component issue.

ALL: RC channels AUX2, CAM1 CAM2 added. only relevant for PPM SUM stream or MEGA boards.
     On the 328p with a standard receiver, only the first 5 channels are recognized.
     CAM1 and CAM2 controls are not yet implemented.

ALL: AUX1 and AUX2 switches are fully customizable via a 3 state position.
    We can activate/deactivate individually  level mode (ACC), baro or compass (mag).
    It's a generic approach which lets other possibilities to control things in the future.
    With this principle, it's possible to activate permanently the options you want even if you have only 4 channels
    (replace the FORCE LEVEL option)

ALL: CAM triger option:
    a servo can be connected on digital pin A2 (pro mini) to activate the trigger of a camera
    the option can be activated or deactivated via the button configuration panel AUX1/AUX2
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) CAM\_SERVO\_HIGH 2000  // the position of HIGH state servo
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) CAM\_SERVO\_LOW 1020   // the position of LOW state servo
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) CAM\_TIME\_HIGH 1000   // the duration of HIGH state servo expressed in ms
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) CAM\_TIME\_LOW 1000    // the duration of LOW state servo expressed in ms
    the PIN on arduino mega is also A2, but this is not the final PIN mapping

ALL CAM stab (servo tilt) button option:
    the servo tilt option can be activated or deactivated via the button configuration panel AUX1/AUX2

ALL: BI COPTER is now a avatar style implementation.
    on a pro mini: 9 motor left, 10 motor right, 11 servo left, 3 servo right
    on mega: 3 motor left, 5 motor right, 6 servo left, 2 servo right

ALL: addition of Y4 (not tested)
    on a pro mini: motors 9,10,11,3
    on mega: motors 3,5,6,2
    REAR1 , FRONT R , REAR2 , FRONT L

ALL: addition of HEX6X (not tested)
    on a pro mini: motors 9,10,11,3,6,5
    on mega: motors 3,5,6,2,7,8
    REAR\_R , FRONT\_R , REAR\_L , FRONT\_L , RIGHT , LEFT

ALL: new level mode
    The level mode is completely redesigned with a coherent independent trim
    There a now a PI control loop for level mode based on angle estimation.
    The old auto level strength value was a sort of P only control loop.
    With the new code, the I term allows to refine the remaining angular error for a better angle positioning accuracy.
    With an RC rate = 1, the angle at full stick is around 45deg => a flip should never happen in this mode.

MAIN SOFT: software trim for stable mode
    It is now possible to adjust the trim of the level mode to match the same TX trim used for the acro mode.
    1) disarm the motors
    2) full throttle (must be >1900)
    3) full PITCH forward/backward and full ROLL left/right (2 axis possibilities) will trim the level mode according to
    the neutral angle you want to change. The status LED will blink to confirm each ticks.

MAIN SOFT: new calibration procedure
    The ACC calibration differs now from the gyro calibration.
    gyro calibration: it's still done at each power on. It's also possible manually as before: min throttle+full pitch
    backward+full yaw left.
    acc calibration: motor disarmed, full throttle up, full pitch backward+full yaw left.

MAIN SOFT: it was in 1.6 but not mentioned. it's possible to arm/disarm motors
    either via min throttle + full yaw stick or full roll stick.

MAIN SOFT: anti yaw jump modification for multi with 4 motors or more

MAIN SOFT: servo range for tricopter
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRI\_YAW\_CONSTRAINT_MIN 1020
 [#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) TRI\_YAW\_CONSTRAINT_MAX 2000

MAIN SOFT: compass lock now works
    the option can be activated or deactivated via the button configuration panel AUX1/AUX2
    the lock is activated 1s after the stick release
    the lock is maintained only if the YAW stick in centred +/- 50
    In some case, especially with the 5883, the mag must be calibrated otherwise, the direction is not good.
    The calibration procedure is not yet implemented.

GUI: 3D copter attitude visualization

GUI: ACC calibration. there is now a calibrate button to calibrate the ACC directly from the GUI
    (it resets the soft trim)

GUI: thanks to Eberhard, better display of serial ports on Mac OS X and Linux

GUI: the memory leak bug GUI is corrected

GUI and LCD: D is now positive (to avoid confusion in explanations)


V1.6

    PPM\_SUM 19 (now separated from RC\_THROTTLE assignment)
    RC_THROTTLE 62 (=A8)
    RC_ROLL 63 (=A9)
    RC_PITCH 64 (=A10)
    RC_YAW 65 (=A11)
    RC_MODE 66 (=A12)
    RC_AUX(not used) 67 (=A13)
    RC_7(not used) 68 (=A14)
    RC_8(not used) 69 (=A15)
    I2C SDA 20
    I2C SCL 21
    FRONTMOTORPIN 2 (on 328p was 3) = servo for tricopter
    REARMOTORPIN 3 (on 328p was 9)
    RIGHTMOTORPIN 5 (on 328p was 10)
    LEFTMOTORPIN 6 (on 328p was 11)
    Y6RIGHT(HEXFRONT) 7 (on 328p was 6)
    Y6LEFT(HEXREAR) 8 (on 328p was 5)
    V\_BAT\_MONITOR A3
    TILT&GIMBAL&WING A0/A1
    POWERPIN 12


V1.4:
Serial PPM (PPM SUM):
    more explanation on //[#define](https://openlabtaipei.hackpad.tw/ep/search/?q=%23define&via=PJX20ZhAy0l) SERIAL\_SUM\_PPM
    only one line to comment/uncomment in order to activate it
    a bug was corrected about the number of channel

new calibration approach
    at each initialization:
        the gyro calibration is done
        the acc calibration is done only for a pure gimbal setup
        for other setups, the acc is retrieved from the EEPROM
    on demand (via full left yaw stick + full pitch low stick):
        the gyro calibration is done
        the acc calibration is done and store in the EERPOM
    =\> the acc calibration must be done at least once on demand.


autolevel strength: the last range was \[0;10\]. The new range is \[0;25\]
     with a reduction weight of 2.5 => more precision for tunning.

## 聚會討論記錄

** 2014/12/10**
1.  竑傑帶了自己的機架與Arduino 飛控板來給大家參考.
2.  目前實作的計畫分成以下幾種:

|  | 機架 | 飛控板 | MCU | 韌體 | 電變 | 馬達 | 遙控裝置 | 組員 | 電池 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 四軸 X | 現成鋁製機架 | Multiwii lite | Atmega 328 | Open Source | ? | ? | DEVO 7 | Frank, 建評 | ? |
| 四軸 X | X525 V3 | Arduino + 外掛Sensor | Atmega 328 | Open Source | 好盈 Sky Walker Quattro 20A | 新西達 A2212 1000KV | 手機+藍牙 | 竑傑 | 30C 4200 mah 3S |
| Bicopter | 碳纖管、鋁件、塑膠件自己印 | Arduino + 外掛Sensor | Atmega 328 | Open Source | SimonK 30A | 2212 1400KV | 手機+藍牙 | 國俊 | ? |
| 四軸 (小) | 現成小型機架 | 現成新唐系列 | 新唐 | ? | ? | ? | ? | Eric | ? |
3\. 其他記錄事項
    a.  自穩 / 增穩 (by [Mach Ma](https://openlabtaipei.hackpad.tw/ep/profile/AgbjvMlyjYW))
    b. 鋁製機架要注意馬達固定鬆脫的問題. 因此裡面要加上原子筆塑膠管支撐.
    c. 碳纖維的機架容易碎裂(鎖太緊或墜機)
    d. 無刷電變的控制信號不是單純的duty cycle PWM, 而是 1.0Vms\- 1.5ms(中立) \- 2.0ms的控制信號.
    e. 藍芽遙控, 容易因為跟左右鄰居衝突而導致墜機.
    f. 螺旋槳若變成發電機時, 容易將飛控板的MCU (3.3 or 1.8V 低電壓系統) 打爛.
    g.

**2014/12/17**
1.  討論了一些機架的特性.
    1.  航空夾板 : 重量輕, 能吸收震動, 不會有額外的共振效應. 且能用雷切製作.
    2.  大疆F450 塑膠骨架 : 便宜, 但塑膠骨架會產生共振(twist).
    3.  四軸中間的板子, 用硬碟機的鋁板最好. 玻璃纖維做的注意共震, 最好補以三明治工法 (跟震動有關)
2.  遙控器的部份, 如日後要有飛遠打算, 較不推薦Devo. RC 控制特別優化的 2.4G protocol 如台灣很普及 & 記錄優良的 Futaba FASST 系統, Futaba FASST C/P 比較推薦的是Futaba 14sg. Devo 很容易在飛場失去信號連接. 四軸變成放天燈.
3.  馬爸的建議, 是先從基本的四軸(6DOF)開始做, 能飛了之後, 再去修改增加東西.
4.  Frank 拿馬爸提供的航空夾板去掃描, 做成jpg檔案之後, 給鴻旗製作CAD檔案, 再約時間拿去雷切.

**用 MultiWii 造小四軸**

製作小型的飛行器優點是利於在室內飛行和測試。

飛控板： Arduino Pro Mini + MPU 6050 (自己組裝。會需要一個FTDI)
馬達：716 空心杯( 3.7V~4.2V ， 3.7V裝上46mm螺旋槳後，22000RPM, 0.85A)
遙控器：Andriod 手機( APP自己寫)
遙控接收器：用另外一個 Arduino Pro Mini + SC-06 BT module
機架：自行設計，3D列印
--

一個716空心杯馬達+46mm的小槳，4V(約0.7A)時只能提供18~20克的推力。所以想要作小四軸，自己用breakout boards組裝，因為重量的因素是很難達成的。
所以市售的小四軸套件，都非常精減。

有看到有賣家賣現成的 Arduino+ MPU6050
[http://goods.ruten.com.tw/item/show?21406221499167](http://goods.ruten.com.tw/item/show?21406221499167)

如果還是想要DIY
**方法1**:用減速齒輪降低轉速，然後換成5吋的槳，推力大約可以提升到35~40克。去玩具店觀察5吋槳的小四軸，就是用這種方式。
**方法2**:選用比較小的無刷馬達(會在2000KV以上)，用5吋的槳。這樣的組合推力遠高於方法一。


**2015/1/14**
1.  四軸雷切骨架已經完成, 也目視沒問題.
2.  編輯Multiwii arduino 專案, 以及MultiwiiConf 程式, 完成校正與組態設定動作.
3.  使用Futaba 遙控器, 透過接收器提供Multiwii飛控板控制信號, 可以從Multiwii conf 程式畫面看到指令與輸出動作.
4.  下週將安裝馬達, 電變, 電池, 飛控板, 電線, 螺旋槳. 完成後即可試飛.

**2015/1/21**
1.  今天設定好盈電變. 使用馬爸提供的電變燒錄卡.
    設定值如右圖
2.  買來的馬達是830KV的規格, 轉速可能不夠高, 容易影響四軸飛行器的穩定性. 因此馬爸建議換為930KV, 或更高轉速的馬達. 但若使用超過1000KV的馬達, 則槳可能要改八吋會比較穩定.
3.  馬達可用KV轉速偵測器, 來檢查KV值是否匹配. 只要數值沒差很多, 基本上可藉由飛控板的運算來維持平穩. 四軸的馬達與電變都是使用sensor less 版本.
4.  f電變安ㄦ裝時, 若需要延長接線, 則應延長馬達接線. 至於電源接線則應該盡量短.
5.


