Eachine H8 Quadcopter Custom Firmware Rates/Settings

I recently flashed my new Eachine H8 with some custom firmware (Silver13’s CFW, to be particular) and I spent some time tuning it to be flyable in acro mode with the stock remote. Overall, I think this firmware is super cool and really strokes my roots as a hardware engineer and reverse engineer. Not to mention, it flies as good or better than the stock firmware and is tons of fun to tinker with! Here’s my config.h file, for those who might be interested in a good place to start:

//config.h, edited by jaygreco

#include "defines.h"

// rate pids in pid.c
// angle pids in apid.h ( they control the rate pids)
// yaw is the same for both modes

// not including the "f" after float numbers will give a warning
// it will still work

// rate in deg/sec
// for low rates ( acro mode)
#define MAX_RATE 180.0f
#define MAX_RATEYAW 200.0f

// multiplier for high rates
// devo/module uses high rates only
#define HIRATEMULTI 3.0f
#define HIRATEMULTIYAW 4.0f

// max angle for level mode (in degrees)
// low and high rates(angle?)
#define MAX_ANGLE_LO 35.0f
#define MAX_ANGLE_HI 55.0f

// max rate for rate pid in level mode
// this should usually not change unless faster / slower response is desired.
#define LEVEL_MAX_RATE_LO 360.0f
#define LEVEL_MAX_RATE_HI 360.0f

// disable inbuilt expo functions
//#define DISABLE_EXPO

// use if your tx has no expo function
// also comment out DISABLE_EXPO to use
// -1 to 1 , 0 = no exp
// positive = less sensitive near center 
#define EXPO_XY 0.6f
#define EXPO_YAW 0.25f


// Hardware gyro LPF filter frequency
// gyro filter 0 = 260hz
// gyro filter 1 = 184hz
// gyro filter 2 = 94hz
// gyro filter 3 = 42hz
// 4 , 5, 6
#define GYRO_LOW_PASS_FILTER 3

// software gyro lpf ( iir )
// set only one below
//#define SOFT_LPF_1ST_023HZ
//#define SOFT_LPF_1ST_043HZ
//#define SOFT_LPF_1ST_100HZ
//#define SOFT_LPF_2ND_043HZ
//#define SOFT_LPF_2ND_088HZ
//#define SOFT_LPF_4TH_088HZ
//#define SOFT_LPF_4TH_160HZ
//#define SOFT_LPF_4TH_250HZ
#define SOFT_LPF_NONE

// this works only on newer boards (non mpu-6050)
// on older boards the hw gyro setting controls the acc as well
#define ACC_LOW_PASS_FILTER 5


// Headless mode
// Only in acro mode
// 0 - flip 
// 1 - expert
// 2 - headfree
// 3 - headingreturn
// 4 - AUX1 ( gestures <<v and >>v)
// 5 - AUX2+ ( none )
// 6 - Pitch trims
// 7 - Roll trims
// 8 - Throttle trims
// 9 - Yaw trims
// 10 - on always
// 11 - off always
// CH_ON , CH_OFF , CH_FLIP , CH_EXPERT
// CH_HEADFREE , CH_RTH , CH_AUX1 , CH_AUX2 , CH_AUX3 , CH_AUX4
// CH_PIT_TRIM, CH_RLL_TRIM, CH_THR_TRIM, CH_YAW_TRIM
#define HEADLESSMODE CH_OFF


// rates / expert mode
// 0 - flip 
// 1 - expert
// 2 - headfree
// 3 - headingreturn
// 4 - AUX1 ( gestures <<v and >>v)
// 5 - AUX2+ ( none )
// 6 - Pitch trims
// 7 - Roll trims
// 8 - Throttle trims
// 9 - Yaw trims
// 10 - on always
// 11 - off always
// CH_ON , CH_OFF , CH_FLIP , CH_EXPERT
// CH_HEADFREE , CH_RTH , CH_AUX1 , CH_AUX2 , CH_AUX3 , CH_AUX4
// CH_PIT_TRIM, CH_RLL_TRIM
#define RATES 1


// level / acro mode switch
// CH_AUX1 = gestures
// 0 - flip 
// 1 - expert
// 2 - headfree
// 3 - headingreturn
// 4 - AUX1 ( gestures <<v and >>v)
// 5 - AUX2+ ( none )
// 6 - Pitch trims
// 7 - Roll trims
// 8 - Throttle trims
// 9 - Yaw trims
// 10 - on always
// 11 - off always
// CH_ON , CH_OFF , CH_FLIP , CH_EXPERT
// CH_HEADFREE , CH_RTH , CH_AUX1 , CH_AUX2 , CH_AUX3 , CH_AUX4
// CH_PIT_TRIM, CH_RLL_TRIM
#define LEVELMODE CH_AUX1

// channel to initiate automatic flip
#define STARTFLIP CH_FLIP

// aux1 channel starts on if this is defined, otherwise off.
#define AUX1_START_ON

// use yaw/pitch instead of roll/pitch for gestures
//#define GESTURES_USE_YAW

// comment out if not using ( disables trim as channels, will still work with stock tx except that feature )
#define USE_STOCK_TX

// automatically remove center bias ( needs throttle off for 1 second )
#define STOCK_TX_AUTOCENTER

// throttle angle compensation in level mode
// comment out to disable
#define AUTO_THROTTLE

// enable auto throttle in acro mode if enabled above
// should be used if no flipping is performed
// 0 / 1 ( off / on )
#define AUTO_THROTTLE_ACRO_MODE 0


// enable auto lower throttle near max throttle to keep control
// comment out to disable
//#define MIX_LOWER_THROTTLE

// options for mix throttle lowering if enabled
// 0 - 100 range ( 100 = full reduction / 0 = no reduction )
#define MIX_THROTTLE_REDUCTION_PERCENT 100
// lpf (exponential) shape if on, othewise linear
//#define MIX_THROTTLE_FILTER_LPF

// battery saver ( only at powerup )
// does not start software if battery is too low
// flashes 2 times repeatedly at startup
#define STOP_LOWBATTERY

// under this voltage the software will not start 
// if STOP_LOWBATTERY is defined above
#define STOP_LOWBATTERY_TRESH 3.3f

// voltage too start warning
// volts
#define VBATTLOW 3.5f

// compensation for battery voltage vs throttle drop
// increase if battery low comes on at max throttle
// decrease if battery low warning goes away at high throttle
// in volts
#define VDROP_FACTOR 0.60f

// voltage hysteresys
// in volts
#define HYST 0.10f


// enable motor filter
// hanning 3 sample fir filter
#define MOTOR_FILTER


// clip feedforward attempts to resolve issues that occur near full throttle
//#define CLIP_FF

// motor transient correction applied to throttle stick
//#define THROTTLE_TRANSIENT_COMPENSATION

// motor curve to use
// the pwm frequency has to be set independently
#define MOTOR_CURVE_NONE
//#define MOTOR_CURVE_6MM_490HZ
//#define MOTOR_CURVE_85MM_8KHZ
//#define MOTOR_CURVE_85MM_32KHZ

// pwm frequency for motor control
// a higher frequency makes the motors more linear
//#define PWM_490HZ
//#define PWM_8KHZ
#define PWM_16KHZ
//#define PWM_24KHZ
//#define PWM_32KHZ

// failsafe time in uS
#define FAILSAFETIME 1000000 // one second


// level mode "manual" trims ( in degrees)
// pitch positive forward
// roll positive right
#define TRIM_PITCH 0.0f
#define TRIM_ROLL 1.0f


// ########################################
// things that are experimental / old / etc
// do not change things below

// invert yaw pid for hubsan motors
//#define INVERT_YAW_PID

//some debug stuff
//#define DEBUG

// disable motors for testing
//#define NOMOTORS

// enable serial out on back-left LED
//#define SERIAL


// enable motors if pitch / roll controls off center (at zero throttle)
// possible values: 0 / 1
#define ENABLESTIX 0

// only for compilers other than gcc
#ifndef __GNUC__

#pragma diag_warning 1035 , 177 , 4017

#pragma diag_error 260

#endif
// --fpmode=fast ON

3D Printer Review: QU-BD OneUp

Background

I’m a Senior at the University of Colorado, earning a Bachelors Degree in Electrical Engineering. While working on our senior capstone project, my team has used done enough 3D printing for me to consider purchasing one myself. One of my teammates has access to an expensive Stratasys Objet, which has amazing print quality but costs an arm and a leg to fill with resin, and is always in use since it’s owned by the company he works for. After following the 3D printing buzz for several years, I decided now would be a good time to jump in. Printers are affordable and easy to get ahold of, and there are plenty of brands and models to choose from.

I’d been researching different printers for a while, so I had an idea of what type of printer I wanted to invest in. I liked the early MakerBots, but their push to closed-source consumer turned me off. The formlabs form1 is a beautiful and very capable printer, but the cost is too high, and I’d like something that I can tinker with. There are a bunch of other printers, like the XYZprinting Da Vinci, that have a great design but have one or two fatal flaws (The Da Vinci, for example, has proprietary filament “cartridges”, which can be manually reloaded but are a apparently a big pain). Eventually, I found a Kickstarter printer that I’d bookmarked about a year back, the QU-BD OneUp.

Screen Shot 2014-12-29 at 4.00.05 PM

The QU-BD OneUp and TwoUp are the exactly the type of printer I had been looking for: relatively inexpensive, open source, and self-assembled with a large user base and many publicly available improvements and mods. Assembling the printer is a big hurdle for some, but I’m all about it. There’s no better way to figure out how something works that putting it together yourself. It also lends to easier diagnosis and repair when something inevitably doesn’t work right.

The reception from the Kickstarter campaign was lukewarm; many early backers were rubbed the wrong way when their printers were long delayed and missing various parts, but those who got their printers assembled were overall pleased with the construction and print quality. I’d read more than a few upset posts on the fabric8r forums regarding poor communication and arguably slimy behavior on part of QU-BD. Much of this behavior I chalked up to needy or whiny Kickstarter backers. At this point, it’s pretty much common knowledge that almost nothing on Kickstarter ships on time. I multiply any promised product ship date by two. Early backers can be entitled and unforgiving when ship dates slip, and I took that into account when reading product reviews. The Kickstarter campaign ended over a year ago, and it appeared that all backers had received their printers. Erring on the side of caution, I decided to spring for the $199 OneUp rather than the $299 TwoUp in the off chance that I did have an unpleasant experience.

Shipping

I ordered my OneUp on November 8th, and QU-BD gave an estimated shipping time of 2-4 weeks. Then came the waiting. Following my rule of thumb, I estimated 6-8 weeks for delivery, and planned on getting my printer as an early Christmas present to myself. After all I’d read, I knew it would be slow to ship. And boy, was it slow to ship. It took just over three weeks for the order to change to the “preparation in progress” stage on December 1st. From there, another 10 days until the order was actually marked as “shipped”.

Screen Shot 2014-12-29 at 11.47.29 AM

This is one stage in the order process where I can sympathize with some upset customers. When an order is marked as “shipped”, one would assume that means it’s in the mail. Not quite. I don’t know exactly how QU-BD runs their shipping, but I’d guess they pile a bunch of orders together, and then schedule one big pickup date. My order, for example, was marked as shipped on December 11th. The pre-shipment information was sent to USPS on December 12th, but the order wasn’t actually picked up by USPS until the 19th of December.

Screen Shot 2014-12-29 at 11.47.59 AM

My OneUp was shipped via Priority Mail 2-Day, and was scheduled for delivery by Monday, the 22nd of December. However, I grew concerned when the tracking info wasn’t updated after the initial departure scan. Monday came and went, and (to no one’s surprise), there was no delivery. I suspect the package was knocked to the side at a sorting facility and got ahold of USPS. To their credit, the package was found, and was sitting on my front porch come Christmas eve.

Photo Dec 24, 3 14 25 PM

 

Here’s my take on QU-BD’s shipping process, which some think might be their biggest weakness. Yes, it’s painfully slow. Was I upset about the shipping time? No. In the end, I got the printer, and the small mix-up in the mail was in no way a fault of QU-BD. In the era of free Amazon 2-day shipping, it’s easy to get spoiled and frustrated with the long lead times and slow shipping of a smaller, family-run company. But you’re paying almost nothing for one of these printers. QU-BD is basically sourcing all of the parts, bundling them together, and shipping them out for less than you, as an individual consumer, could do on your own. Not to mention that lead times on equivalent parts from China would be equal to, if not greater than, the lead time of the printer from QU-BD. These guys are making razor-thin margins on these printers by selling them so cheap. Moreover, from my understanding, there are only a few of them running the whole operation. I absolutely agree that faster shipping times would be nice, but as consumers, we can’t have our cake and eat it too. I could have a comparably-spec’ed printer sitting on my desk tomorrow, shipped with FedEx Next Day Air, but I wouldn’t be paying 200 dollars for it. It would be more like $1500. In the end, if you want a decent, but inexpensive printer, you’ll probably end up waiting a while for it. If you want it right now, it’s going to cost you more, plan and simple.

Assembly

Upon opening the box, I found it very nicely packed.

Photo Dec 24, 3 15 24 PM

QU-BD is able to fit a surprisingly large amount of parts into the medium flat-rate box they ship in.

Photo Dec 24, 3 16 51 PM

Nothing has room to shift around too much during shipping, which in theory should keep all the parts intact. That being said, a few of the thinner MDF parts in my kit came fractured. They all snapped at very thin points. None were completely broken, however, so they were saved with a little bit of CA glue. I took a quick inventory, and, as expected, I was missing some parts. Namely, my kit didn’t have the 6 M3 flat washers or the 4 M4x25 hex head bolts. QU-BD sends out one shipment of missing hardware for free, so I wasn’t too torn up about it. I ended up going to my local hardware store and getting all of the missing parts for less than a buck, since I just wanted to put it together. As many build logs suggested, I cleaned off all of the machined rods and laser cut parts before beginning.

Photo Dec 25, 12 06 44 PM

The actual assembly of the printer was, in my honest opinion, a total blast. As a kid who blew through countless Lego sets, it felt very familiar. The instructions are well-made and pretty easy to follow. Some of the ALL CAPS assembly notes feel a bit “yell-ish”, but they did a good job of catching my attention. The part naming convention was also a bit strange, but it’s clear they were named from an engineering perspective.

Screen Shot 2014-12-29 at 12.41.26 PM

During my assembly, a few simple things came to mind that would really improve the build experience. The first is labeling of individual hardware bags with their part name and designator. I kept having to flip back and forth to the BOM at the beginning of the assembly to verify I was using the correct part. Furthermore, actually identifying the parts inside their bags was a little tricky. I was able to figure out what parts were which using a Bolt Size-It gauge, but some buyers might have a harder time. A laser-printed sticker on each bag would cost almost nothing and make a big difference.

bag

In addition to labeled part bags, a small identifier on each MDF part would be super useful. Depending on the part, this could be etched by the same laser cutting machine QU-BD uses to cut the parts, or a small sticker. Once again, it would be a simple and cheap change, but would really improve the user experience.

label

Lastly, a single-page spreadsheet BOM, either shipped with the parts, or included in the manual would rock. Cross-checking parts against their name and designator would take about half the time as it currently does. Once again, these aren’t deal breakers, but would be easy changes for QU-BD. I have a hunch they might also help QU-BD ship all of the parts in the kit.

All in all, assembly went pretty smoothly. I do have a few minor quality gripes. My Geeetech Printrboard clone came with a very poorly soldered SD card slot which probably shouldn’t have made it past QC (assuming they have QC). I have access to a solder reflow station in the lab I work in, so I’m just going to heat it up and fix it myself. Not a huge deal considering the board works flawlessly otherwise.

Photo Dec 24, 3 43 29 PM

I also had a bit of a laugh at the some of the acrylic parts that ship with the kit. What was my Y-drive cut with, scissors? Again, no loss, since I plan on printing a well-proven Y-drive upgrade on Thingiverse once I get more filament.

Photo Dec 25, 9 57 21 PM

I didn’t include too many pictures during assembly, since it’s rather uninteresting. Here’s a few pictures of the major milestones:

Photo Dec 26, 1 03 01 PM

Completed extruder and hotend, attached to the X-drive. I had some 1/8” TechFlex sleeving laying around and covered my extruder and thermistor wires. I really like the look, and it keeps the wires bundled and out of the way. I’m planning on removing the ugly, stiff plastic covering on all of the stepper wires and replacing it with the same sleeving. If it’s one thing this printer design lacks, it’s cable management!

Photo Dec 26, 1 02 33 PM

Completed base and Y-Drive assembly.

Photo Dec 26, 11 06 22 PM

Final printer assembly completed! All in all, it took me about 4 hours to assemble the entire printer, barring breaks, distractions, and trips to the hardware store.

Setup and first print

During my ~2 month wait, I’d taken the liberty of setting up Repetier Host and Slic3r on my MacBook. I watched a few YouTube videos [1] [2] that helped me set up the host software with little trouble. I connected the printer, heated the extruder, fed in some filament, and….nothing came out. After being sufficiently stumped for about an hour, I took off the extruder nozzle and found it was severely clogged with brass filings from the milling process. It took me forever to unclog it, even with a 400 micron drill bit. I eventually got it unclogged, but in the process, I believe the nozzle was damaged. The hole is slightly larger than the original 0.4mm, and I suspect it’s not perfectly round. I’m hoping that I can get a replacement from QU-BD since, after all, it did come in an unusable form.

Photo Dec 26, 11 18 15 PM

After unclogging the nozzle, I ran a quick test print of a 20x20x20mm cube. The printer was working! After some tuning in Slic3r and Repetier Host, I’m getting decent print quality, even with my damaged nozzle. I didn’t bother calibrating for the filament, since I only had a few meters of the stuff. Once my shipment of Hatchbox filament arrives, I’ll calibrate for flowrate and do some temperature tuning.

Photo Dec 29, 1 39 09 PM

So far, I’ve printed a small fan bracket and fan guard for the 40mm fan that’s included in the kit. I’m pretty happy with the quality of these first-day prints!

Photo Dec 29, 1 39 17 PM

I also added a few ultra-bright blue LEDs under the extruder stepper to light the bed. They’re just tied to a 5V output on the Printrboard’s expansion headers. They illuminate the build platform, and they also do a good job of looking cool. Everyone loves blue LEDs!

Final Thoughts

All in all, I’m really happy with my QU-BD OneUp. The price, arguably the lowest in the industry, is hard to beat. Even though there are some tradeoffs for such an inexpensive printer, I believe what you get for your money is quite good. If you do decide to get this printer, just be prepared for the long wait time before you see it at your front door. QU-BD might be in over their heads in terms of order quantity, but you will eventually get your printer. Even then, it’s probably 8-12 hours away from being able to print anything. As I mentioned earlier, you’d be hard-pressed to find all of these parts on your own for the same price as this kit. Even though the setup isn’t for the faint of heart, it’s more than doable for anyone with a little bit of patience and some basic problem-solving skills. Not to mention that my day one prints rival those of an out-of-box MakerBot, which is pretty impressive. All things aside, I’m happy with my decision to get this printer. Not only is it a good entry-level printer, but I’ve learned a ton about 3D printing.

IMG_3304

It’s also worth nothing that I’m not affiliated with QU-BD in any way. I just wanted to share my experience with QU-BD and the OneUp so far. Do you have an experience with QU-BD or any other 3D printer you’d like to share? Leave a comment below. I’d like to hear what you’ve got to say.

 

Update 1: I got ahold of QU-BD and asked about a replacement nozzle. Chelsea was super quick to get back to me and very professional. I had a new one sitting at my doorstep in just a few days! The quality of this one is much better and I can verify that the prints are already coming out cleaner than before. Whoo!