Followup to the Onewheel XS
-
@samuraipunch I do have some of those car seat sensors recommended to me by @ed_co for a full sized pad but I'd need to cut them up to fit this 1/2 scale pad.
.
Edit 1 : Did some testing with the LEDs. Built the rear bar and found some PNP transistors that I could use to power these. Would use NPN but I used a common ground making it impossible without redoing the lightbars.
Also here's the power button using the same fade animation to test.
I'll need to build a little 3xPnP transistor board to power this lot. 1 for forward, 1 for reverse and 1 for the power button :)
.
Edit 2 : Designed a small PCB to drive the LEDS from the Arduino Pro Mini tucked under the FSESC. Getting real dense in this controller box. Will need to also run split connections off the hall sensors wires into the Arduino to figure out the rotation to change the lights but that's for another day.
Also I printed a half scale stand ;)
.
Edit 3 : I think I found a simple way to add a switch to the BMS without using external mosfets.
Wanted to use the fets on the BMS but couldn't figure out what I might need to do. Found the datasheet for the protection IC and think I might be able to simple cut the trace leading off pin 3 and run the switch wires between them.https://www.ablic.com/en/doc/datasheet/battery_protection/S8254A_E.pdf
Pin 11 also controls all apparently but I don't want to require the switch to be on to charge.
Not sure if this will work as I intend, after lots of research plenty have wondered about adding switches to larger BMS's and most seem to give up, use an anti-spark circuit or wire the switch into a thermistor to cause a fault and disable it. None that I can find toy with just intercepting the gate for the output fets. I can only assume for good reason but I want to see if it will work :)
-
Finally had enough progress to share an update on this.
Nearly finished those footpads. Cut out 2 new chunks of wood and made a bunch of jigs to get it right. Hardest part so far was routing out the rear pad to accommodate the slightly taller battery housing.
Did one pass down to the first glue layer then another pass 0.5mm into the next wood layer. Took forever with my old Parkside rotary tool.
Came out good and left enough space to fit the lid. Here's an inside look without the battery housing inside the rails.
After that I removed some wood from the nose/tail ends where the bumper angles up a bit. I got it pretty close and can do a bit more to close the tiny gap left.
Will later angle the footpad, for now it's flat.
Curve is just a few more attempts at sanding away from perfection too :)
Ports still line up which is a relief too.
Left the jig to print last night that assists sanding down the footpad at the right angle.
Used my belt sander for this like time but instead of mounting the sander to the table and pressing the pad to it I did it the sensible way this time.
Came out clean :)
Waiting on some offcut veneer strips that I will make the top layer from instead of using varnish to fake it. Will also let me cut out some slots for the FSR sensors to sit in so they don't petrude too much and show through the griptape later.
Rear pad done too, had to be careful not to sand into the battery lid cavity for this one.
Last step for the sanding is to bevel the edges a bit, add the top layer and countersink the holes for the screws.
In the meantime I'm printing a new battery housing to fit the BMS properly and read light bar.
Not done yet so left the bits out on show :)
Also on a quiet period earlier in the week I printed a scale stand ;)
Here is the pinout so far for the ports on the controller.
The "Batt Extras" is wider this way so getting it backwards won't destroy anything but just reverse the lights on the tail. Gnd is shared on Batt - after checking those actually were on the same line so it'd actually work. Reason for this is there isn't room for another 5 pin connector so I can't put Gnd on it seperately or key it like the "Motor Sensor" and "Footpad" connector. -
@lia -- I am in awe of your perfectionism!
-
@s-leon At this point it's become something of an art piece much like that trophy I made for Dax which I spent much longer on than I expected.
As such I can't help but make everything just right. With all the jigs I've made making another shouldn't be as hard.
-
I wanted to get the entire battery section done today. Been putting it off for a while if you couldn't tell. Not sure why but these 4 cells alone are intimidating me more than the 60 Sanyo 21700 cells I welded and frequently have stuck to my back on rides.
Regardless I decided I'd go about getting it all setup which required a bit of setup and planning before committing. First up was deciding how the wires would route. I've upgraded to 16AWG wire since I think I can get away with that and still have the cable fit around the axle. BMW is held into it's diagonal cradle with a printed brace atop preventing the battery wires pushing it out and shorting on the lid.
Remembered to solder the balance wires on before welding. Not a hug issue but helps prevent heat getting to the cells. Prepared the connector so I can actually remove the pack later if need be since the harness will be attached permanently after.
Got the KWeld out ready to put it together and wrap it in the blue wrap however turns out 1 of my 2 large Lipos was dead. Like dead dead. 1 cells was at 3v and another at 2.4v when the lowest they're meant to go is 3.2v >.> My charger allowed me to still charge it back up to a storage voltage of 3.7v each but I don't want to trust this pack pulling huge currents so left it there and will look at getting a second hand car battery for much safer and better power delivery like I did with the DIY welder a few years ago.
It all however folds neatly into place with enough slack to work with so I'm not skinning knuckles trying to separate the connectors. Hopefully I can get a battery soon and finish up the box to run the board off it's own power and see what current draw I can get away with.
Need to wire the headlight but waiting on some 30AWG wire to come for that since the 24AWG wire seemed a bit much and bulked the cable a bit.
Got V8 of the battery housing printing since the rear P+/- wires were a bit snug under the BMS leaving the housing so made accommodations for that. For now it all sits waiting on my desk for assembly.
-
Decided to charge up my salvaged lipo, paired it with the other and welded the pack together. Thankfully it doesn't appear to have diminished the integrity of the pack and worked fine doing the few welds.
Was on edge the whole time in case the Lipo with the black X on it went up in flames or I made a mistake and set the pack on fire. Thankfully neither happened and I'm in the process of putting the lipos back at a storage voltage.
Here's the pack without the shrink wrap on it. Not pretty but it works. The blue shrink wrap actually made it just too big to fit so opted to remove it. If I can shave like 0.5mm off some walls then I might be able to add it again.
As planned the battery can be removed easily with the way I wired it.
Small red and white wires are for the tail light. GND as previously mentioned is shared on Batt- so I didn't need to have another wire to connect. Here they are working :)
Need to add 2 more wires. SW+ and SW- which will be blue and green. I'll intercept the trace going from pin 3 on the BMS's chip and the output mosfets then wire between them through SW+/- to the power button. Fingers crossed that actually works.
Printing another housing (V9) which gives a bit more space and allows easier routing of the wiring with additional consideration around the tail light.
-
@lia Had some catching up to do here. Omg im speechless!
-
@maciak Aha lots to catch up on indeed, glad it's fun for everyone else to follow :)
I don't tend to share a lot on Reddit since it's really not built well for documenting stuff like this. Probably due to share it again there soon once I've done the LED driver side.Edit: V9 of the battery housing finished and with some adjustments I can now use the blue wrap on the battery. Looks sooooooo much better now :) Also added some foam to protect the balance leads from pinching when being wrapped.
Totally didn't cover the whole pack just like FM does to stay true to their design and not because I didn't want to redo it >.> -
It was going so well.
Intercepting the output of Pin3 on the BMS doesn't disable the discharge mosfets and the transistors on the LED driver seem to operate even when the gate isn't active.
I feel like I'm missing something on how transistors like this operate. Almost like the tiny pnp transistors (S9012) I got are reaching some breakdown voltage. As for the BMS... no idea. Even triggering a fault doesn't cut the output completely making me wonder if these tiny cheap BMS's actually work 0.o
Maybe a formal education in electronics would have helped if I could have gotten one >.>
-Dramatic recreation of me googling things for the past few hours while at work.
Edit:
Okay so checklist of stuff I need to figure out still.- Change the LED bars from common ground to common VCC so I can use more commonly used NPN transistors.
- Redo the driver board to use NPN transistors with the throughhole C557B ones I was testing with that I know work.
- Summon all the dark arts to get the BMS to do as I say. That ooooor.... I cheat and find a way to get the 3A button to take 10A.
- Footpad wiring. Still waiting on the FSRs >.>
-
New PNP transistors arrived aaaaaaand same issue. However...
I wired the transistors wrong on the PCB...
*literally screaming*
WHY IS ARE THE PINS NOT LAID OUT LIKE THE CIRCUIT DIAGRAM REEEEEEEEEEE
The through-hole components have the middle pin as base so I just assumed the SOT-23 ones would too :(
Who... Whom... Whomst did this! Why don't I read spec sheets properly D:
How have I gotten his far and not set fire to something yet.Rotated the little transistor, as tiny as it is I managed to get it in place in the wrong orientation to correct the misalignment and it now works.
I've done a bunch more but until I have the LED driver in and operating off the internal Arduino Pro Mini instead of my test Arduino Uno I'll hold off sharing the other bits.
Let this be a reminder that I, Lia, am indeed a moron.
-
@lia -- It looks to me like you are learning valuable lessons!
-
Today was almost very nearly a failure buuuut I clawed back some glory after taking a break to cool off and roll about with Slush in a circle.
I spent 4 hours wiring up the last connections in the controller after redesigning the charge and power button mount plus moving the Arduino as it was going to be a nightmare connecting it to the driver board if it was under the FSESC.
In doing this I melted the positive pin off the power button when my iron got stuck to it. I may be able to fix this without needing to order another one and wait like 6 weeks.
After putting it all together the bank of SOT-23 transistors didn't behave as expected. For some reason the LEDs would come on if both were the same colour but if I had white and red operating the white wouldn't come on. Turns out I accidentally used some A92 PNP transistors which I guess just... don't work right so swapped those for S9012 since they kinda matched the spec of the test transistors. I did however cook 2 of them >.> Nothing more fun than connecting the entire thing up then watching the front and rear LEDs all come on max brightness with some smoke seeping up from the controller lol.
Nonetheless it's now 2AM... and it works currently. Behold, the second most dense thing in my flat.
The power button is missing since I need to fix it still. For full functionality I need to wire up the hall sensors to the Arduino to read motor direction but I haven't even written code to operate the lights outside of modifying the stock "blink" code. Not sure how I'll get it to read rotation. Assuming they cycle high and low depending on direction I could just butcher some code together but we'll see.
Still also need to figure out the Power On/Off function. I might need to just make a basic "balance only" circuit and have the mosfets purely as a power function and leave the FSESC to handle LVC and the charger to handle HVC.
-
@lia Absolutely beautiful layout and wiring job on that controller box!
-
@biell Thanks :)
It's so unbelievably dense. Packing it all in has meant shaving parts down by 0.1mm at a time. Got to tidy the led drive wires a little by bundling them into some heat shrink. Been pushing to finish this as I want to feature the XS in a video I've been editing for the past few weeks.@S-Leon Definitely good for learning. Reinforced some things and made me think again about other bits I thought I knew. I can safely say without custom PCBs for the ESC I doubt anything smaller or more powerful is possible at this scale.
-
Just a quick update. LEDs are working, Arduino works and through some arcane magic I managed to resurrect the tiny power button with some
micro-surgeryspells.Haven't actually tested the charger up until this point since the port wasn't hooked up until yesterday. Here it is~
Need to adjust the flash timing on the power button a little but with the example fade code from the Arduino IDE (programmer) it works fine for demo purposes :)
Half scale XLR, half scale charger and it uses a USB C port as the power input... because there is no way I'm doing 230v AC to 16.8v DC in that space! Need to move the red and green LEDs from the charge circuit up to the indicator hole on the lid but that's for another day.
Current code that was used here.
int Wled = 5; // The PWM pin the Forward LEDs are attached to int Rled = 6; // The PWM pin the Reverse LEDs are attached to int Bled = 9; // The PWM pin the Power Button LED is attached to int Wbrightness = 240; // how bright the Forward LEDs are int Rbrightness = 255; // how bright the Reverse LEDs are int Bbrightness = 0; // how bright the Power Button LED is int fadeAmount = 5; // how many points to fade the LEDs by // the setup routine runs once when you press reset: void setup() { // declare pin 5, 6 and 9 to be an output: pinMode(Wled, OUTPUT); pinMode(Rled, OUTPUT); pinMode(Bled, OUTPUT); } // the loop routine runs over and over again forever: void loop() { // set the brightness of the pins: analogWrite(Wled, Wbrightness); analogWrite(Rled, Rbrightness); analogWrite(Bled, Bbrightness); // change the brightness for next time through the loop: Bbrightness = Bbrightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (Bbrightness <= 0 || Bbrightness >= 255) { fadeAmount = -fadeAmount; } // wait for 30 milliseconds to see the dimming effect delay(30); }
Nothing yet for detecting rotation direction, swapping the LEDs from forward to reverse or anything else really, just enough to get it working.
-
@lia Down to the charger block, the attention to detail is masterful.
-
@biell Couldn't resist, thinking of doing the Deep Shack stand too but that'll require me to learn steam bending and find a good way to do it ;)
I have an initial version of the charger before I redid the design meaning there's a little paperweight laying around that is too nice to throw away with the rest of the prototypes. Unsure if I should put together some of the better prototypes and give them away or something.
-
Assembled the new controller housing. Now on V12 and decided to show how it all goes together just to emphasise how dense this is. At some point I'd love to have these printed on a resin printer so the layer lines are less noticeable and the details come out cleaner. Too expensive right now though so at worst I might see if I can pay someone to print some parts on theirs.
Below are all the parts of the XS controller. Some pre-assembled into their modules like the charge port and power button.
First step is to mount the FSESC and get the footpad/motor sensor wires aligned then use the m2 screw to pull them through the holes and secured to the case. Capacitors will seat in 2 cradles either side of the handle cavity while the motor connector slots into the triangular hole.
Best to slot the lower IMU mount in between the FSESC and IMU to keep it mostly aligned. Also a good time to secure the power ports which will also hold the FSESC in place on the lower right tab.
Secure the motor connector with the small bracket that traps it in the opening.
Next the power button needs mounting.
Route the blue and green wires from the power button around the edge then secure the upper IMU mount in place. The IMU is now secure while also holding the FSESC down and stopping the blue/green wires from the power button for moving out of it's desired route.
LED bar can be mounted which will also secure the capacitors in place.
Charge port can be mounted in place which locks the capacitor wiring in place and also holds down the FSESC on the top right corner now having it secured on all 4 corners. Charge port can be connected to the FSESC module with the corresponding port.
LED driver module can be slot behind the handle cavity which press fits into a mount lower down. All connectors can now be fit onto the appropriate points.
The lid can now be secured :)
That should be the controller done. One really cool thing I noticed when testing later is the handle is warm when powered on. This is because I mounted the LED driver board right up against the handle cavity which gets warm (30-40c I guess, above ambient but not hot). Imagine if the other models had this, winter wouldn't suck so much when having to carry the board ;)
As a bonus here's the XS rolling fully by itself. No strings attached, no external power. Just me pushing it around and letting it return :)
I didn't capture it but I did miss catching it on one throw meaning the XS rammed my knee. Gonna bruise as it was going pretty fast all things considered. Total weight is 2KG so it's not just a gentle tap when it's going for you.
Left the lid off for the testing because I wanted easy access to check temps and see smoke ;) As I've not added the footpad sensors there are only 5 fail modes which'll stop it from endlessly trying to balance.
- Batt too high
- Batt too low
- Overcurrent
- Roll angle out of range
- Pitch angle out of range
With that in mind when I want to stop it balancing I just roll or pitch the nose till it stops. Balancing only resumes when the board reaches near level which if paired with the footsensors will function as expected :)
Hopefully I'll be able to record some shots tomorrow and finish a vid I was working on. The XS is meant to features in a few scenes so been trying to get to this stage in order to get those last shots.
-
2 kilograms and this 3D-printed tire keeps up good work holding grip at your carpet? Outstanding motion!
-
@lia -- Your jaw-dropping XS is certainly a rambunctious little rascal!