## E-Bike system – Part 2 – CAN Interface

The first part of the E-bike system will be a computer interface to connect to all the nodes using the CAN-bus. This will be used for diagnostics, parametrization and software flashing. This makes it the logical starting point before developing the other parts of the system.

There are several commercial tools for this. Of course I could have used one of them, but it’s more fun, and cheaper to build my own. The tool I’m used to, is CANalyzer from Vector which is extremely competent but also extremely expensive. CANalyzer woll be a big inspiration for the windows application I build to communicate with the hardware interface.

#### Windows application

The windows application will have some basic features for setting up a signal database and debug generic messages, but also some specific features for communication with the different parts of the E-bike system. The application is created in C# .NET using Microsofts free Community edition of Visual Studio

#### Charger

A “dumb” standard Lithium battery charger like the one I have for my previous E-bike could be used as a start, but it would be nice if the charger was connected to the CAN-bus and let the BMS handle the charge and current control.

#### Mechanics

The mechanics will be the same ase described in for example [these] posts. The difference is that the bike will be touched up quite a lot with both paint and parts.

## Dual pulse battery spot welder

I recently bought 20 Sanyo NCR18650GA Lithium batteries. 12 of them will be used for developing a BMS for a upcoming E-bike project. From the other cells I will put together 2 battery packs for my bicycle lights, 4 cells each in 2s2p configuration.

This type of cells are usually spot welded together using thin nickel strips. I’ve read that many have been successful soldering the cells together but how fun is that when you can build a DIY battery spot welder.

Most designs that I have found is based on a SSR (Solid State Relay) controlled MOT (Microwave Oven Transformer) with the secondary replaced by few turns of heavy wire which converts mains voltage to high welding current. This doesn’t seem like a good solution since the current comes in 100 Hz pulses which makes welding energy control very difficult. I know some SSR can only break the current at the zero-crossing-point of the mains voltage resulting in a pulse time resolution of 10 ms. I don’t think this is good enough to get a consistent result.

There are also variants which discharge a large capacitor bank through a MOSFET which seems like it would give a much higher degree of control. I also found a similar design using a car starter battery instead of capacitors which seemed even more interesting.

I don’t have any spare car batteries, instead I’ll use some high power LiPo batteries. I have a pack of 4 Turnigy 6S 20C 5Ah batteris that I could connect in parallell. This will result in a 6s4p 20C 20Ah pack capable of delivering  ~20 V 400 A continuous. It will not have any problem delivering enough current for battery tab welding in short ~10 ms pulses.

The main focus of the build was to use as much parts from my junk-bin as possible.

#### Electrodes

The electrodes are built om 10 mm copper rods sharpened in one end and threaded with an M10 thread in the other. On the threaded end a 25 mm² welding cable are connected. To set off the welding pulse I have placed a small button on the top of one electrode.

#### Electronics

To switch the current I found six FDP8440 MOSFETs rated at 40 V with a very low RDSon of 2.2 mΩ. If the welding current reach 1200 A they will handle 200 A each resulting in ~90W losses. This will easily be handled for a few hundredths of a second every 10 s or so. Especially since they are mounted on a thick copper busbar.

The mosfets will be controlled by a Microchip TC4421 from a 8-bit PIC microcontroller. Haven’t used a 8-bit PIC in ages, nowdays i prefer ARM Cortex-M processors, mainly the STM32 and LPC series. Since I’m building this on a veroboard I needed a DIP-casing so I decided to use an ancient PIC16F648A from the junkbin. This processor was perfect for a quick job like this, extremely simple keeping the datasheet reeding to a minimum

It has an internal 4 MHz 1% oscillator which will work fine for this application since there are no asynchronous communication, and 1% precision of the pulse timing is more than enough, no need for an external crystal oscillator. The reset-pin can be turned off with the config bits and all I/O-pins on Port B have internal pull-ups saving me a few resistors.

To program the processor I used Microchip MPLAB X IDE, XC8 compiler, and a PICkit 2 programmer. I’ve never used MPLAB X before, but it worked rather well. This is the application firmware, perhaps a little bit overdone, but why not?

The pulse length is currently hard coded in the application, it’s easy enough to update. If needed i will later add a switch with a few presets. The microcontroller has no A/D-converter, otherwise a potentiometer for setting this would have been nice.

There is a lot to read about pulse welding online, essentially the first pulse is to break any oxide layers and the second performs most of the welding. I have set pulse 2 to 10 ms, and pulse 1 to 1,25 ms which works fine for 8 x 0,18 mm Nickel strips.

I haven’t received the nickel strips I ordered yet, so my first test subject was some pieces of box cutter blades. It worked perfectly, but perhaps I need to shorten the pulses a little with the much thinner nickel strips.

#### Future plans

I will use this to build a few batteries, if the design works well, I’ll probably make a new PCB with a display, rotary encoder and a more modern processor.

## Hacking Viasat branded version of Netgear WN602 v2 wireless bridge

The Viaplay package of my satellite receiver contained two Netgear WN602 v2 wireless network bridges to connect the satellite box to my network. These are a Viasat branded version with custom software for easy setup. To get the wireless bridge working I just had to connect the network cables, power them up and press the WPS setup button.

My house will soon get a fiber internet connection, to prepare for that I’m installing a wired network instead in the house and these boxes became superfluous. Instead I was thinking of using these as access points to extend my wireless network. This should be possible with the original Netgear firmware, but the Viasat firmware did not expose any interface for changing settings or update firmware.

Opening up the device i found a pin header with 4 pins, and i know these units often expose a TTL-serial port. Pin #1 is marked with a white dot and I could measure 3.3 V between pin 1 & 4, and made the assumption that pin 2 & 3 was the Rx & Tx pins. Using an FTDI-based serial adapter with 3,3V TTL levels I detected by trial and error that I could get a console bye connecting the adapter Rx to pin 2 (Tx) and the adapter Tx to pin 3 (Rx). The communication settings should be 115200 baud, 8 databits, no parity and one stop bit, otherwise you would just receive garbage.

The console access was not very helpful since i needed the root password to perform anything useful, this password was most likely kept secret by Viasat. Directly after power up the bootloader, U-Boot, instead called the router WRN612, which seemed very similar. Some googling verified that the WN602 essentially is a WNR612 with the WAN port removed. U-Boot also prompted for a key-press together with a down counter to abort the normal boot and enter a command prompt for the bootloader:

Luckily U-Boot is rather well documented, from here, loading a new firmware should be easy.

My first choice would have been to install dd-wrt instead which is an open source firmware for routers. Sadly dd-wrt had no support for neither WN602 nor WNR612, the D-Link DIR-601 A1 would perhaps work since it is based on the exact same chips, and these units are usually very similar to the chipset manufacturer reference design. The main processor in these are an Atheros AR7240 and the wireles network chip is an Atheros  AR9285. I decided to try OpenWRT instead, which is a similar project that had an excellent wiki entry for WNR612 on which most of this guide is based.

To flash the router with Open WRT I did like this:

1. Connect a serial console to the hardware serial port described above. I used a FTDI based USB to Serial adapter from Sparkfun together with PuTTY as a terminal application. Be sure not to connect the 3,3 V pin, GND, Rx and Tx is enough. Connecting the power pin could damage the router, serial adapter and/or your USB-port
2. Power up the router and be ready to press the “any key” when the bootloader asks for it.
3. When the boot have been interrupted and you are in the boootloader console enter:

to disable flash write protection, and then:

to activate a TFTP server waiting for firmware upload
4. Enter a static IP address from the 192.168.1.0/24 series on your computer and connect it to one of the network ports on the device.
5. Use a TFTP client on your computer to upload the firmware to address 192.168.1.1, i used TFTP Utility to upload the file named openwrt-ar71xx-generic-wnr612v2-squashfs-factory.img from the openwrt firmware repository.

DONE!

Now I can use both wireless bridge devices as wireless access points instead of putting them on a shelf somewhere and forget about them.

## Upgrading Turnigy 9x with er9x firmware

A couple of weeks ago I ordered a Turnigy 9x RC radio transmitter. This is a cheap but capable transmitter sold by HobbyKing. I’m very impressed by the quality of the hardware and the thing have more buttons, switches and channels than I’ll ever use, but I’m not really satisfied with the firmware.

Luckily there are a lot of custom firmwares for this radio and from what I’ve read, the one named er9x is currently the preferred one. Guides on how this update is done can be found on many places (for example here), this is how I did it:

I used a USBasp AVR programmer, these can be bought off eBay for a couple of dollars. Since i generally prefer PIC processors, this was nothing I had so I ordered one. But I guess you could use any programmer supported by AVRDUDE.

When you have your programmer, there is a software called eepe that is a specially made AVRDUDE frontend for programming er9x firmware. I downloaded and installed that program.

Then you need to connect your programmer to the processor, this is the hardest part, but not really that hard. First unscrew the six screws on the back of the radio. Then disconnect the cable hold the two halves of the radio together.

after that you need to locate the connection points where the programmer should be connected. These are all around the processor in the lower part of the radio. NOTE: I have the v2 version of this radio, the connection points differ on the older v1 of this radio!

To connect the USBasp programmer I made a custom cable like this

Note that the leads 3, 6, 8 & 10 are cut off and not used.

I soldered the cable to the connection points and followed the instructions for eepe. When I was done, I left the soldered cable inside the radio if I want to flash it again someday.

## Updates on the RepRap build

Last week I received 5 NEMA 17 stepper motors for my Prusa Mendel RepRap. They are pretty small and I’m a bit worried that they will be to weak for some parts of the printer (mainly the extruder) but I have to wait and see.

I also ordered a complete RAMPS kit and 1 kg of plastic filament from 3D Gadgets. The shipment from china with FedEx was super fast but since I work office-hours it seems impossible for FedEx to deliver it to me.

I hope I’ll find a solution to get my package and will post some pictures on both RAMPS and the steppers when it arrives.

I also discovered that I could run the whole RepRap on 24 V using RAMPS or that I could divide it so the steppers and extruder run on 12 V using the 5 A fuse on the board and the heatbed running on 24 V using the 11 A fuse allowing me to push 264 W of power into the heatbed. Should be enough.

• Extruder
• Power supply
• Endstops
• Piece of glass to use as print surface.

## Prusa Mendel printbed

I put together a heated printbed for my Reprap using three parallel 10 Ω 100 W power resistors. The resistors are screwed onto a 220 mm x 200 mm x 5 mm aluminum sheet. This will make the whole printbed a 3.3 Ω 300 W heating element.

On top of the sheet I will place a 220 mm x 220 mm sheet of glass to use as a print surface.

When printing the printbed should be between 60° C and 110° C depending on which plastic is used.

Since the main voltage used on the reprap is 12 V, maximum power that can be achieved is

$\frac{U^2}{R} = \frac{12^2}{3.3} = 44 W$

My guess is that it will take at least two eternities before it gets hot enough, but for a start I’ll use the printbed temperature logic built into the RAMPS controller card.

Later on I think I’ll build my own temperature controller with either a step-up or a separate power source with a higher voltage to get more power out of the printbed.

## Propeller driven Lego car.

Lego Technic is perfect for creating quick prototypes of pretty much anything, combine this with RC stuff and you can create really fun stuff. One simple example is the robot i describe in this post:
Sunday afternoon robot

My old Lego is usually stuffed away in a box in the basement, but when we have kids visiting we usually bring it up to the apartment. I suspect I’m the one enjoying it most and this time I built a RC lego car

After a few testruns I added a propeller protection bar to minimize the risk of running into something with the propeller.

Runs great, I’ll probably update this post with a video when I’ve recorded one.

## Have somebody seen my magic smoke?

A little while since the last post, this is maybe old information if you have read my posts on Endless Sphere or the Swedish Electronics Forum. We played around for the whole weekend with the moped until the motor got enough. My guess is that several hard accelerations during a short period of time heated the stator enough for the insulation to melt.

Not pretty! I’m afraid I’ll have to torment my hands with another rewind. A member on SEF is good enough to donate a large roll of 1,5 x 2,5 mm flat copper wire to me which I will use for the rewind. I have three different actions to prevent this from happening again.

• Increase the gear ratio. Less torque on the motor means less current.
• Increase kv, one less turn of copper wire will increase kv to match the higher gear ration and reduce the resistance. It will also leave more room for air to flow through the motor
• Forced cooling, I’ll put a fan in one end of the motor to force more air through.

I’ve also ordered a spare motor from china. The 80-100 is very hard to get nowdays, but I found a 80-85 motor with the same mounting profile and axle. But i’ll keep a close watch on the stock of the 80-100 motor.

## First testrun of the E-Puch

Today I’ve made the first test-run of the E-Puch. As I’ve written about before it is an old ICE moped that I’ve removed the engine and replaced with an electric BLDC outrunner.

Today, me and my brother threw everything together for a quick testrun just to see that everything works, and try out the performance.

I will soon write a post about the motor controller which I ordered from a guy named Lyen on the Endless Sphere forum. It is currently set to limit battery current around 40 A, but I think I could increase the current limit by 50% without any modifications. Which would give 50% more torque.

The motor is mounted on two 5 mm aluminum sheets that are bolted in the original motor holes in the frame.

Except for the motor and motor sprocket the drivetrain is original.

I use 4 bricks of 6S 5 Ah Turnigy 20C batteries mounted in 12S2P configuration. For now these are in a plastic box on the rear end of the moped.

And at last a video of my father trying the moped.