Friday, 17 February 2017

Pressure Sensor Anatomy

At the core of over five thousand BlueFly devices is the MS5611 pressure sensor. One of the first blog posts about the BlueFly, almost six years ago, described the theoretical performance of this sensor, then about a year after that I posted about the success in testing. Back in 2011 there was not too much information about the MS5611 on the internet; only the manufacturer data sheet. Now the MS5611 is used in most of the varios which are similar to the BlueFly, and is widely used in hobby RC flying.

In this post I get technical about how the sensor works, and some of the things worth knowing about as you take care of your vario. This comes from having personally tested thousands of BlueFlys. I try to demystify how these sensors work in an accessible way, although I know it will still be pretty technical for many pilots. I focus on light sensitivity and some failure modes.

The MS5611

The image below shows the MS5611[01BA03] pressure sensor assembled on a BlueFly device. The sensor is 3 x 6 mm and is constructed of a small metal cap on top of a green circuit board. Solder pads underneath the sensor are used to connect it to the underlying BlueFly PCB, and provide power and the data interface. The BlueFly devices connect to the sensor using its SPI interface (instead of I2C) as it provides the best performance. To further improve performance the BlueFly provides power via a PI filter.

The image below shows the inside of the sensor with the metal cap removed. Inside the sensor there are two main components: a pizeoresistive absolute pressure sensing element, and a high resolution Analog to Digital Converter (ADC). It is reasonably easy to relate the functional block diagram from the datasheet to the physical layout inside.

The pizeoresistive element on the left is the MS7101. There is not too much information about it online, but you can see a few specs in this brochure. It is 1.25 x 1.25 mm, and to the naked eye looks like a grain of black sand. Infinitesimally small movements in the top of this sensor is part of where the magic happens for us. The top of the sensor is a very thin membrane of silicon with resistors etched on the surface in a particular pattern. This is like the skin of a drum on top of a hollow cavity. The silicon membrane is pushed in when you drop 10cm in altitude and about 20 trillion more molecules rush inside the metal cap of the sensor; this causes the surface resistors to change slightly. The resistors are part of a circuit which alters a voltage by a tiny bit, and the job of measuring pressure is half done. What is important for us is that it is super sensitive and repeatable as the silicon membrane flexes in and out. However, there are other things which can affect the resistance etched into the silicon other than flexing caused by pressure changes.

You can read more about piezoresistive sensing elements at the following links:

On the right is the ADC. Its main job is to turn the voltage from the pizeoresistive element to a digital signal. The component is more than just a standard super sensitive ADC, it also includes temperature compensation, some memory to store calibration coefficients, a digital filter, and sufficient digital circuity to allow communication the micro controller of the BlueFly. The temperature compensation removes most of the temperature induced inconstancy from the etched surface resistors in the sensing element, while the calibration coefficients allow for manufacturing inconsistency to be removed. Together these can present a super accurate digital signal. The magic of the MS5611 is that the ADC is very accurate and is designed to work at high clock speeds. This allows the BlueFly to get pressure measurements 50 times per second at 10 cm resolution, and with further processing in the BlueFly this means we can detect altitude changes very quickly.

Physical Vulnerability

The image below is taken from a slightly different angle. Here you can more easily see the vulnerability of the sensor. The holes in the cap, although tiny, are large enough for dust, grit, water, solvents, and even brush bristles, to get in. The most obvious vulnerability are the fine gold wire bonding connections. If any one of these wire connections is damaged then the sensor will not function correctly, even though it may still report a digital signal.

In addition, each of the sensor sub-components is coated in a clear sticky gel like substance; I guess for corrosion protection and perhaps some other stabilizing effect. This gel does not dissolve in water, acetone, or isopropyl alcohol, but it does seem to attract bits of dust and grit, which I think can affect either component in some circumstances.

Light Sensitivity

I spent a bit of time trying to understand the causes of light sensitivity. The video below shows the light sensitivity effect up close based on illumination from the LED's on my microscope. I think that at this range they provide the same order of magnitude light intensity as sunlight. The video pretty clearly shows that light sensitivity is due to the piezoresistive element. With a little internet research I found some theoretical descriptions of why this is the case. However, for our purposes the key is to know that protecting the sensor from light is vital to ensuring it works properly.

Sensor Protection

You need to protect your pressure sensor if you want your vario to perform well, but it also needs to be exposed to the air. The three strategies for protection are:
  • Put the whole vario in a case, although note that the translucent sky blue case used for the BlueFly does not block the light enough. 
  • Use the neoprene. I have spent some time testing different types of foam to find one which is effective at blocking the light, but permeable enough to air. The soft squishy side should be on the sensor, not the sticky side, which would block the holes. Every vario I send out has neoprene attached to the PCB in the right place, or in the kit if you are going to assemble it yourself.
  • Use a folded piece of black electrical tape, making sure that the sticky part of the tape is folded over on top of the sensor. This is a quick hack that can be done if you have lost your neoprene.
See the image below for a few examples.

Sunday, 15 January 2017

BlueFlyVario_Bluetooth_USB_v12 released

The first batch of the new BlueFlyVario_Bluetooth_USB_v12 model has been produced and all pre-orders have been shipped. I announced in the last blog post the new features of the v12 compared to the v11. In this post I will provide a more detailed description of the new design and describe the assembly procedure.

What is in the bag?

The v12 model of the BlueFly is supplied with the following components:
  • The BlueFlyVario_Bluetooth_USB_v12 mainboard. There is a small piece of neoprene covering the pressure sensor; glued at one end to hold it in place. 
  • The sky blue enclosed case. 
  • A 750 mAh singe cell Lithium Polymer battery. 
  • 4 x 5 mm M3 black nylon hex standoffs and 4 x 5 mm M3 black nylon screws. 


Assembly is pretty simple and will take most people less than 10 minutes. I still recommend the procedure described in this previous blog post, but I have refined a few of the steps as described below:

Install Step 1 - Prepare the case 

[Optional] The first part of this step is only needed if you want to put a small lanyard on the vario. Drill a couple of holes into the case at the opposite end from the USB cutout. Use a slow speed drill and only the force needed. Make sure the holes are not too close together or the small plastic in between might break if you use too much force on the lanyard. Size the holes according to whatever cord you will use. Note that on the v12 the mainboard is slightly longer than the v11 so you will need to drill the holes so that the lanyard is under where the circuit board is going to be close to the end of the case.

Next you will probably want to slightly enlarge the inside of the USB hole. I use a sharp pointed knife and just remove a small chamfer from all of the inside edges of the USB hole as shown below. This helps the micro-USB connector fit in nicely.

Install Step 2 - Screws and standoffs

Screw the hex standoffs and screws into the BlueFlyVario_Bluetooth_USB_v12 module as shown below, but be careful not over-tighten the screws; finger tight is normally enough. The hex standoffs keeps the module properly spaced from the base of the case.  You can shorten the standoffs by about 0.5mm with a sharp knife to improve the fit into the case.

Install Step 3 - Place it into the case

This is the only tricky part. Use only the force needed to place the module correctly in the case. It is possible to break either the button or the usb connector if you use too much force. Place the module in the base of the case so the button protrudes from the hole. You may find the USB connector will need a little pressure from above to push it into the hole. The edge of the PCB should be close up to the cutout end of the case and the USB connector shroud will move into the cutout (as shown below). Also see the photo from step 3 in this previous post for more information about where to gently press on the main board.  

Install Step 4 - Packing material

Put something at the other end of the PCB to keep it pressed against the USB cutout end of the case. The gap on the v12 model is about 1-2mm and I use a small piece of paper folded and placed as shown in the image below. Note the small lanyard threaded below the board.

Install Step 5 - Battery

In the v12 there is no longer any need to use double sided tape to secure the battery to the board as the lid holds it in place. Note the wires need to be neatly folded and placed as shown.

Install Step 6 - Close the case

Place the top on the case (which is now the bottom in the image shown below). I now normally run clear tape around the case to ensure the lid is held in place; this is shown as brown kapton tape below so it stands out in the image. On the v12 the battery fits snugly, and if you do not slightly shorten the standoffs in step 3 then the lid might pop off just when you don't want. 

Plug it in to recharge. The red light should come on. A single press on the button will switch it on, and a long press will turn it off. See the Hardware Settings Manual for more technical setup. 

Install Step 7 (optional)

Some pilots like to mount the vario on a flightdeck. You can use a 50 x 30mm piece of velcro (not included). To make velcro stick better heat it up with a hairdryer prior to sticking it on.

--- Technical Stuff ---

For most pilots, this is about as far as you need to read through this post. However, if you want to get technical and understand more about your BlueFly then read on. 

Firmware Changes

There are not too many firmware changes relevant for users between the last firmware from the v11 (see here for 11.M13), and the first firmware for the v12 (12.M14). In summary:
  • The UART related code has been updated to change the way data is sent with the new analog switch. It works like this:
    • If Bluetooth is not connected data is only sent and received from the Bluefly via the USB-serial chip. 
    • If Bluetooth is connected then data is sent to both the Bluetooth and USB-serial connection, but only received from the device connected via the Bluetooth connection.
  • The default hardware settings have been changed, particularly some of those associated with audio thresholds. They now reflect my preferred settings. At some stage I will update the hardware settings manual. 
  • Changing the secondsBluetooothWait hardware setting now re-enables the bluetooth module if it has been disabled. 
Hardware Design

The layout of the key components on the mainboard is described in the image below:

Some key changes from the v11:
  • The addition of the FTDI 230X USB-Serial converter now enables a data connection in the miro-USB port (instead of just charging). This makes it much easier to adjust hardware settings on a Windows PC. 
  • The addition of an analog switch controls serial data sent as described above in the firmware section. 
  • Components are spaced better and aligned more neatly. This is not just for visual appeal, but is is a 'design for manufacture' feature which makes it easier for me to assemble. 
  • The board is now about 3 mm longer, and the holes have been moved a little closer to the corners. This maximizes the space available for components and the board fits better into the sky blue case. 
All of the exposed pins are now in one row along the top side as shown in the image of the bottom of the board below:

Some key points:
  • You will not use the programming pads for the PIC or the RN4677 unless you are a super hacker and writing your own firmware from scratch. 
  • The external speaker connector is for when you want to remove the micro speaker and use a separate 16 ohm speaker. You might be able to use a 8 ohm speaker but you will need to check the levels with your test equipment and you might need to change the resistor biasing the transistor. 
  • The USB PWR jumper should be closed ONLY if you want to power the BlueFly solely from the micro USB connection, and not use the battery. DO NOT CLOSE IT WHEN USING A BATTERY - because if you did then unregulated 5V power would be provided directly to the battery which might case it to fail. 
  • Along the right:
    • The U1 V+, Tx, Rx, Gnd connectors are for connecting an external GPS as described in previous blog posts. I am considering new shields for this model. 
    • The I2C V+, SCL, SDA and GND pins are used for connecting the airspeed sensor described in previous posts. In future versions of the firmware this might also be used for other external devices. 
    • RA7 is a general purpose digital IO which is currently used for enabling and disabling an external GPS connected to U1. 
    • RB10 is a general purpose digital IO which is currently used for the calibration button on the airspeed shield. 
    • RB11 is a general purpose digital IO which is used for an indicator LED on the airspeed shield. 
    • RB4 can be a general purpose digital IO or provide an analog input. The firmware does not currently read it, but in the future I am planning to add some code to read the analog input from something like a fuel level sensor. 
    • BTN is connected to one edge of the main button. A momentary connection to VBAT will power up the vario and enable the voltage regulator. Subsequent momentary connections will then simulate a button press. 
    • VBAT is connected to the positive supply for the LiPo Battery. 
Future work

You may be able to tell that am  hopelessly addicted to trying to make the BlueFly better. Expect more stuff in the future - let me know your ideas.