19-FEB-2019: This is a preview for the MagSW v20a. The content is subject to change.
I have had this one in mind since I worked on the previous v10a version. MagSW v20a is an extended variant of the MagSW v10a. The v20a uses a tiny microcontroller instead of the D-type flip-flop for the switch memory. The rest of the circuit remains identical. Adding a small microcontroller to the system was extremely tempting. The microcontroller allows for features which are difficult to implement without it. The key and only difference in functionality between the MagSW v10a and MagSW v20a is that the latter monitors the onboard voltage and signalizes its minimal detected level through the LED (aka brownout detection). More on this later.
Technical data are mostly identical to the v10a variant.
|Operating voltage range||3-18V|
|Maximum continuous current||4.43A|
|Typical on-resistance||typ. 34mΩ|
|Standby current||<3.5 uA|
|Operating temperature||-40 to 80°C|
|Dimensions||15x8mm (bare PCB)|
|Weight||0.48g (bare PCB)|
|Protections||overcurrent, overtemperature, starts always-on|
|Status indicator||1x LED, lits or blinks different patterns to signalize voltage level|
|Required magnetic field||>63mT|
|Memory||typ. 7s (the off state only)|
I described the fundamentals of a magnetic switch for R/C applications in the previous article which covers the v10a version. For this reason, I am going to describe only additional functionality.
In my opinion, most of the reliability issues in R/C applications have something to do with onboard power. Servos can draw current up to several amps when they change position quickly and under load. For this reason, it is important that the battery pack which supplies electronics has very low internal resistance. However, as batteries in the pack age, the internal resistance increases and causes sudden voltage drops under the load. This may cause spurious resets of the microcontroller in the receiver and result in connectivity issues, sudden freezing or complete system lockout.
The MagSW v20a measures output voltage every 1ms and compares the value with the pre-set threshold. The switch has three voltage thresholds with four functional states. System changes the functional state once the voltage reaches the next lower threshold. The LED signalizes one of the functional states with a different blinking pattern. The system can change the functional state only from the top to the bottom (HIGH->MEDIUM->LOW->CRITICAL). Only the power cycle resets the state back to a higher level if present.
It is important to understand that the MagSW v20a does not inform you about the remaining capacity in the battery!!! It only reports that onboard net voltage dropped below the certain level during the flight (operation) and you should consider doing something about it (e.g. charging or replacing the pack). Most modern batteries have a very flat discharging curve and estimating remaining capacity based on voltage is highly inaccurate, if not impossible.
You may modify following macros if you desire to change voltage thresholds:
/* Thresholds for the voltage measurement */ # define ADC_LEVEL_HIGH N/A /* High Level >= 4.84V */ # define ADC_LEVEL_MID 120 /* Medium Level < 4.84V */ # define ADC_LEVEL_LOW 100 /* Low Level < 4.03V */ # define ADC_LEVEL_CRIT 87 /* Critical Level < 3.51V */
Example for the ADC_LEVEL_MID macro:
- N - is resolution of the AD converter (8b),
- Vref - is voltage reference (3.3V),
- Vout - is desired voltage threshold (here 4.84V),
- R4, R2 - are resistors in the sensing divider,
- D - is calculated value for the macro.
- I don’t cover Battery Eliminator Circuits (BECs) here because it is not a typical application for a magnetic switch such as the MagSW.
- In reality, the problem with internal resistance is even worse because of connectors, their wear and wires resistance.
Hall Sensor Signal Filtering
Unlike the previous version with low-pass RC filtering the v20a removes possible glitches coming from the hall sensor in the firmware. The principle is very simple. A valid trigger impulse from the hall sensor must be longer than 100ms (set by macro HALL_DEGLITCH_PERIOD_MS). Any pulses shorten than this de-glitch period are ignored. This, together with the highly insensitive hall sensor, provide enough robustness to suppress spurious turn-ons and -offs.
The firmware is written in ANSI C programming language and contains only a single source file (main.c). The code is simple, documented and self-explanatory for anyone familiar with embedded programming. Scroll to the end of the source file for notes. I used the MPLAB X IDE v 5.10 with the free version of the XC8 v2.0 compiler. The project compiles with zero warnings, zero errors. The generated binary file (HEX) uses approximately 28% of Data and 60% of the program memory of the microcontroller. The complete project, source file as well as compiled binary file can be found in the Design Data section.
Refer to the previous version.
Using the MagSW v20a
The video below shows how the prototype reacts to input voltage changes with the LED signalizing all four states.
Building Your Own Copy
Refer to the previous version.
MagSW v20a Complete KiCad 5.0.2 Project
MagSW v20a Schematic - PDF
MagSW v20a Gerbers
MagSW v20a BOM - MS Excel
MagSW v20a Interactive BOM
MagSW v20a MPLABX project
MagSW v20a fw v1.0.1 binary file
The 2018 season showed that the v10a version is a reliable solution. The v20a version just adds the voltage detection feature and makes the device more intelligent. The tiny microcontroller in the system increases complexity due to programming but may also identify problems related to onboard power.
Q: What is the difference between the v10a and v20a version
A: The v20a version monitors the onboard voltage and reports back the minimum voltage level detected.
Q: Which hardware tool do I need to program the MCU.
A: You need a USB programmer which supports the PIC10F322 MCU, e.g. I find PicKit3 to be the most versatile option (check eBay, just be aware that Chinese clones may or may not always work…).
All HW design data are licensed under CERN Open Hardware License v.1.2 or later. If you like the design, please consider buying me a beer (PayPal). All firmware data are released as open-source, public domain.