Unterschiede zwischen den Revisionen 36 und 37
Revision 36 vom 02.09.2009 18:36
Größe: 17516
Autor: FredericG
Kommentar: Work in progress
Revision 37 vom 02.09.2009 18:43
Größe: 17875
Autor: FredericG
Kommentar: Wo
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 110: Zeile 110:
 * '''-d FILENAME''': With this option, all samples will be dumped in a text-file. This file can later be used for further analysis. This file can for example be inported in MS Excel or OpenOffice Calc to make graphs of the vibration signal. e.g. "-d motor1.txt"  * '''-d FILENAME''': With this option, all samples will be dumped in a text-file. This file can later be used for further analysis. This file can for example be inported in MS Excel or OpenOffice Calc to make graphs of the vibration signal. When the file does not exist yet, the file will be created, otherwise the new data will be added. All measurements dumped in the same file should have the same number of samples (see the "-s" option) e.g. "-d motor1.txt"
Zeile 154: Zeile 154:
/!\ TODO The "-d" option allows to dump the measured signal in a text-file. This is a "comma-separated" text file that can easily be imported in MS Excel or OpenOffice Calc.

TableOfContents

Current Project status

/!\ I am still experimenting and working on the first version of the tool. Also this documentation is not complete yet. /!\

The current implementation is very basic, it is a "command-line" tool without any graphical user-interface.

Currently the tool was only tested on PC/Windows with FC 1.3 hardware. Theoretically the tool should also run on MAC and Linux.

What is the VibrationTest Tool and how does it work?

The tool evaluates the vibration generated by the motors using the MK build-in sensors, so no extra hardware is required. This allows to balance motor/prop assemblies and to experiment with different motor-mounts.

Reducing vibration is very important especially for Aerial Photography or Video. Vibrations produce blurry footage. Some claim that high frquency vibrations can be picked up by the Optical Image Stabilization lens assembly which is incorporated in almost all recent cameras. The OIS is not designed for these vibrations and makes thing worse, even when you switch the feature off in the camera menu. In addition the FlightControl sensors pickup the vibrations and this deteriorates performance; the new FC ME comes with vibration dampers in order to reduce the vibrations transferred to the FC.

Propellors can be balanced the traditional way. However it was discovered that also the motors need balancing. One way to accomplish this is let a small unbalance in the prop compensate the motor unbalance, so the orientation of the prop is important (see [http://www.rcgroups.com/forums/showpost.php?p=12832508&postcount=228 this post]). Looking at the vibarions of a running motor allows to balance the prop/motor assembly as a whole.

The standard FlightControl program samples all sensors periodically and provides a command to read the latest sample from all sensors. The MKTool uses this command to generate graphs of analog values. In a first approach I used this standard command to monitor vibrations. The problem is that is mechanism only allows to sample the values 30 times a second. The actual shape of the signals cannot be determined and one can only hope to catch the peak values. In order to get reliable results one needs to monitor the values for a long time (a minute for example).

This new approach is based on dedicated FlightControl software providing a dedicated command. The command instructs teh FC to sample one of the sensors as fast as possible and store the info in its internal memory. Afterwards the recorded data can be read to analysuis. This allows to grab a reliable signal in a very short time.

This is an example of the signal measured by the Roll-ACC sensor:

attachment:test.jpg

How do I install the tool?

The tool is written in programming language [http://en.wikipedia.org/wiki/Python_(programming_language) Python]. The most logic and clean way, is to install support for Python on your PC (if you do not have it already). Python is also available for Linux and MAC; the tool should also run on these platforms, but I have never tried it.

If you do not feel like installing Python, I also provide a version that is compiled to a windows executable.

So, you have two options.

Option 1: Install Python

For a Windows machine I propose you install:

Once you have Python support on your PC, unzip [http://www.rc-flight.be/VibrationTest/VibrationTest_0_0.zip VibrationTest_0_0.zip] to a directory on your PC.

Option 2: Get the compiled version

unzip [http://www.rc-flight.be/VibrationTest/VibrationTestExe_0_0.zip VibrationTestExe_0_0.zip] to a directory on your PC

How do I use the tool?

Prepare your MK

Secure your MK

I use luggage straps to secure my MK to the table while it is still able to vibrate:

attachment:mk1InTest.jpg

Installing the FlightControl software

The VibrationTest tool works in combination with a special version of the FlightControl software. It must be flashed in the FC board before using the test and you need to reinstall your regular software version afterwards. This just takes a few minutes. Switching the software is done the usual way, using the MKTool.

You will find the required hex file "VibrationTest-FC.hex" in the same directory with the VibrationTest tool.

The command line

The current implementation of the tool does not have a graphical user interface. The simplest way to use the tool is from the command prompt.

On Windows XP open een command shell by selcting Start>Run and typing "cmd".

On Windows Vista, click Start and type "cmd.exe" in the "Start Search" box.

Now, if you have for example unzipped the tool in directory "D:\MK\VibrationToolExe" you should go to that directory by typing:

D:
cd \MK\VibrationToolExe

Now, the tool can be started by just typing "VibrationTest.py" if you have installed Python or "VibrationTest" if you use the compiled version. Without any parameters, it tool should display a description of the required parameters.

attachment:cmdLine.jpg

The command line parameters

The tool expects to be started with a few paramters. When the tool is started without or invalid parameters, a brief description of the expected parameters is displayed:

VibrationTest.py COMPORT MOTORS SPEEDS CHANNELS [-m MINSPEED] [-s NBSAMPLES] [-n NAME] [-d FILENAME] [-v]
 COMPORT         Serial port to use. e.g. COM4
 MOTORS          Motors to activate during test. Multiple motors can be used at the same time. e.g. 1,2,3,4
 SPEEDS          Indicates at what speeds the motors need to be tested.
                   Format 1:  e.g. 50,110,140            Tests at speeds 50, 110 and 140
                   Format 2:  e.g. 100-200:50            Tests at speeds 100, 150 and 200
 CHANNELS        Channels to monitor. e.g. 5,6,7
                   Channel 0 = GyroYaw
                   Channel 1 = GyroRoll
                   Channel 2 = GyroNick
                   Channel 3 = Pressure
                   Channel 4 = Batt
                   Channel 5 = AccTop
                   Channel 6 = AccRoll
                   Channel 7 = AccNick
 -m MINSPEED     Minimum speed of the motor(s)
 -s NBSAMPLES    Number of samples
 -n NAME         Name of the test
 -d FILENAME     File to which the measured values will be logged in
 -v              Verbose

4 parameters are mandatory: COMPORT MOTORS SPPEDS and CHANNELS

  • COMPORT: The serial port that is connected to the MK e.g. "COM4"

  • MOTORS: List of motors (comma-separated) that need to run during the test. Typically only one motor will be selected. It is also possible to activate all motors to evaluate the global vibrations before and after calibration for example. e.g. "1" or "1,2,3,4"

  • SPEEDS: List of speeds at which will be tested. The "speed" is the I2C value that will be sent to controller and is a value between 0 and 255. Typically interesting values for vibration-testing vary between 100 and 200. BRThere are 2 formats possible. First there is the simple list of speeds, e.g. "100,150,190,200". The second format specifies the minimum, maximum speed and step, e.g. "100-200:20" will test at 100,120,140 ... 200

  • CHANNELS: List of channels that will be monitored. A channel is in fact one of the MK analog sensors. Measuring the pressure or battery does not make much sense in this context, but is it possible. It is my experience that channel 6 and 7 produce best vibration signals, but YMMV.

BR In addition, these optional parameters can be provided

  • -m MINSPEED: The motor(s) will first be started at "idle" speed before being spooled up to the speed at which the measuremnt will take place. By default, this speed is 25 but it can be changed with this option. Your motors need to run smootly and start reliably at this speed.

  • -s NBSAMPLES: During a measurement, the FlightControl baord will monitor a given channel and store 1000 samples in memory. Afterwards the VibrationTool will read these samples. These samples can be dumped in a file (see the "-d" option) and will be used to find the amplitute of the signal (the difference between the minimum and maximum measured value). BRIt is important to read enough samples to cover a few periods. By default 400 samples are read but with this option, the number of samples can be modified (with a maximum of 1000).

  • -n NAME: An indication of what you are tested. This string will be added to the dumps (see "-d" option) and should not contain spaces e.g. "-n AfterBalancing"

  • -d FILENAME: With this option, all samples will be dumped in a text-file. This file can later be used for further analysis. This file can for example be inported in MS Excel or OpenOffice Calc to make graphs of the vibration signal. When the file does not exist yet, the file will be created, otherwise the new data will be added. All measurements dumped in the same file should have the same number of samples (see the "-s" option) e.g. "-d motor1.txt"

  • -v: With this option, the tool will be much more verbose; it will indicate what it is doing. Also when an error occurs, the tool will provide more technical details (the callstack)

The output

The results on the screen

Without the "-v" option, only the results of the test is displayed:

C:\DATA\temp\VibrationTestExe>VibrationTest COM5 1 100,150 6 -n Demo
      Demo Speed=100 U=12.1V Channel=AccRoll    Min=497 Max=506 pp=  9 *
      Demo Speed=150 U=11.9V Channel=AccRoll    Min=498 Max=508 pp= 10 **
  • "Demo" This is the name of the test as we provided with the "-n" option.

  • "Speed=100" Indicates the motor speed for this measurement

  • "U=12.1V" The measured battery voltage when the measurement was done

  • "Channel=AccRoll" The measured channel

  • "Min=497" Lowest value of all samples

  • "Max=506" Highest vale of all samples

  • "pp=9" Difference between Min and Max, this is the actual result

  • "**" The number of stars gives a quick indication of the pp-value

With the "-v" option more details are provided:

C:\DATA\temp\VibrationTestExe>VibrationTest COM5 1 100,150 6 -n Demo -v
comPort  = COM5
motors   = ['1']
minSpeed = 25
speeds   = ['100', '150']
channels = ['6']
nbSamples= 400
fileName = None
testName = Demo
Opening comPort...
Version: 0.74
Voltage: 12.1V
Minimum Voltage: 10.5V
Starting motor(s) (speed=25)...  OK
Setting speed to 100 ...
Getting data...        Demo Speed=100 U=12.1V Channel=AccRoll    Min=496 Max=508 pp= 12 **
Setting speed to 150 ...
Getting data...        Demo Speed=150 U=11.9V Channel=AccRoll    Min=497 Max=508 pp= 11 **

The dumped signal

The "-d" option allows to dump the measured signal in a text-file. This is a "comma-separated" text file that can easily be imported in MS Excel or OpenOffice Calc.

Proposed procedure to balance prop/motor assembly

First we need to find what what sensor provides the "best" image of the vibrations. The largest signal is probably the best. Candidates are Gyro and Acc signals. My experience is that AccNick (channel 7) and especailly AccRoll (channel 6) provide the nicest signal, but YMMV. The vibration will typically peak at a certain motor speed. So, first I do a sweep between speeds 100 to 200 and look at channels 6 and 7 and choose a channel and speed I will concentrate on.

Next I check if the prop can be balanced a bit better. I stick small strips of tape to the prop, close to the center. One strip to the side wehere the prop-dimention is mentioned I call "-1", one strip on the other side, I call "+1". I test different configurations and check what gives the best results for my chosen channel and speed.

Now that the prop is better balanced, I start to rotate the prop in relation to the motor. As names for the test I use "XsA" where "X" is the number of strips and "A" is the angle; e.g. "+1s60" means 2 strips oposite to the prop-marking and rotated by 60 degrees (compared to the starting position). Again I try to find the best position.

Once we have found the best rotation, we can rebalance the prop in the same way as before.

After all this we should have found the best combination. We can perform the swipe again to compare with the starting point.

Example 1

Finding what sensor provides best information at what speed:

VibrationTest.py COM5 3 100-200:20 6,7
      Speed=100 U=11.3V Channel=AccRoll    Min=492 Max=505 pp= 13 **
      Speed=100 U=11.3V Channel=AccNick    Min=498 Max=507 pp=  9 *
      Speed=120 U=11.3V Channel=AccRoll    Min=489 Max=503 pp= 14 **
      Speed=120 U=11.3V Channel=AccNick    Min=497 Max=507 pp= 10 **
      Speed=140 U=11.2V Channel=AccRoll    Min=469 Max=519 pp= 50 **********
      Speed=140 U=11.2V Channel=AccNick    Min=495 Max=508 pp= 13 **
      Speed=160 U=11.1V Channel=AccRoll    Min=478 Max=517 pp= 39 *******
      Speed=160 U=11.1V Channel=AccNick    Min=493 Max=511 pp= 18 ***
      Speed=180 U=10.9V Channel=AccRoll    Min=479 Max=511 pp= 32 ******
      Speed=180 U=10.9V Channel=AccNick    Min=493 Max=514 pp= 21 ****
      Speed=200 U=10.7V Channel=AccRoll    Min=479 Max=515 pp= 36 *******
      Speed=200 U=10.7V Channel=AccNick    Min=493 Max=513 pp= 20 ****

VibrationTest.py COM5 3 130-160:10 6
      Speed=130 U=11.1V Channel=AccRoll    Min=484 Max=511 pp= 27 *****
      Speed=140 U=11.1V Channel=AccRoll    Min=469 Max=524 pp= 55 ***********
      Speed=150 U=11.1V Channel=AccRoll    Min=475 Max=520 pp= 45 *********
      Speed=160 U=11.1V Channel=AccRoll    Min=479 Max=518 pp= 39 *******

So, lets concentrate on channel 6 at speed 140.

Now, the preliminary balancing of the prop:

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 0s0
  0s0 Speed=140 U=11.0V Channel=AccRoll    Min=470 Max=521 pp= 51 **********

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s0
  1s0 Speed=140 U=11.0V Channel=AccRoll    Min=482 Max=513 pp= 31 ******

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 2s0
  2s0 Speed=140 U=11.0V Channel=AccRoll    Min=475 Max=520 pp= 45 *********

For now, 1 strip seems best.

Now, lets rotate the prop:

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s0
  1s0 Speed=140 U=10.9V Channel=AccRoll    Min=481 Max=513 pp= 32 ******

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s60
 1s60 Speed=140 U=10.9V Channel=AccRoll    Min=480 Max=512 pp= 32 ******

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s120
1s120 Speed=140 U=10.9V Channel=AccRoll    Min=477 Max=514 pp= 37 *******

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s180
1s180 Speed=140 U=10.9V Channel=AccRoll    Min=482 Max=509 pp= 27 *****

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s240
1s240 Speed=140 U=10.9V Channel=AccRoll    Min=482 Max=510 pp= 28 *****

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s300
1s300 Speed=140 U=10.9V Channel=AccRoll    Min=482 Max=514 pp= 32 ******

VibrationTest.py COM5 3 140 6,6,6 -d motor3.txt -n 1s360
1s360 Speed=140 U=10.9V Channel=AccRoll    Min=482 Max=515 pp= 33 ******

Rotating the prop by 180 degrees produces best results, now lets try to balance the prop again:

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s180
1s180 Speed=140 U=10.9V Channel=AccRoll    Min=483 Max=509 pp= 26 *****

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 0s180
0s180 Speed=140 U=10.9V Channel=AccRoll    Min=472 Max=519 pp= 47 *********

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 1s180
1s180 Speed=140 U=10.9V Channel=AccRoll    Min=483 Max=510 pp= 27 *****

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 2s180
2s180 Speed=140 U=10.9V Channel=AccRoll    Min=489 Max=508 pp= 19 ***

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 3s180
3s180 Speed=140 U=10.9V Channel=AccRoll    Min=483 Max=512 pp= 29 *****

So, 2 stickers is best

VibrationTest.py COM5 3 140 6 -d motor3.txt -n 2s180
2s180 Speed=140 U=10.9V Channel=AccRoll    Min=488 Max=508 pp= 20 ****

VibrationTest.py COM5 3 140 6,6,6 -d motor3.txt -n end
  end Speed=140 U=10.8V Channel=AccRoll    Min=487 Max=510 pp= 23 ****

Now, we can perform a sweep in order to compare with the starting-point:

VibrationTest.py COM5 3 100-200:20 6,7
       Speed=100 U=11.1V Channel=AccRoll    Min=493 Max=501 pp=  8 *
       Speed=100 U=11.1V Channel=AccNick    Min=499 Max=507 pp=  8 *
       Speed=120 U=11.1V Channel=AccRoll    Min=489 Max=507 pp= 18 ***
       Speed=120 U=11.1V Channel=AccNick    Min=497 Max=508 pp= 11 **
       Speed=140 U=11.0V Channel=AccRoll    Min=489 Max=507 pp= 18 ***
       Speed=140 U=11.0V Channel=AccNick    Min=498 Max=509 pp= 11 **
       Speed=160 U=10.9V Channel=AccRoll    Min=482 Max=508 pp= 26 *****
       Speed=160 U=10.9V Channel=AccNick    Min=496 Max=510 pp= 14 **
       Speed=180 U=10.7V Channel=AccRoll    Min=489 Max=505 pp= 16 ***
       Speed=180 U=10.7V Channel=AccNick    Min=495 Max=508 pp= 13 **
       Speed=200 U=10.6V Channel=AccRoll    Min=482 Max=508 pp= 26 *****
       Speed=200 U=10.6V Channel=AccNick    Min=491 Max=509 pp= 18 ***

Links

BR

AttachList