GBAmp3 Mod PCB Order Now
also available at retromodding.com

Monday, September 28, 2015

Neato Botvac Lidar Repair Part 2: Lidar PCB Replacement

So the final fix will be replacing Lidar turret. But as I said in the part 1 of Neato Botvac Lidar Repair I could not find Botvac Lidar turret to replace. But there are many XV Lidar turrets available on eBay and Amazon.
And they are different. XV series turret has mechanical data and power connection between spinning turret head and base using sliding contacts. This is major point of failure of XV series turrets. And Botvac turret has optical data connection to the base and wireless power, so no contacts would fail. Well how do we replace the Botvac turret using XV series turret if they are not compatible?

Let's take them apart and compare. I removed housing from both units.
As you can see there is a bit different lens and different laser diode housing.

The same 3 wires from laser diode and 5 wires from Lidar PCB soldered to the base. Also a note, that connector for a laser diode may go loose because of rotating vibrations and such. This is a point of failure which cause "can not see" errors. Easy to fix though, just pull it out and reseat. Also cleaning might help, and also metal pins inside laser wire part can be loosen and should be squeezed to sit tighter in the pcb connector.

This is how data and power transferred to Lidar PCB. XV one has rotary sliding connections. And Botvac one has optical data feed and power transfer inductor coil (like wireless Qi charging). There is another coil inside Botvac which produces power and this coil on the Lidar base pcb is receiving power.

Here on the Botvac Lidar base pcb you can clearly see ir detector diode to receive data and ir led to send data back to Botvac. Also there is diode bridge with linear voltage regulator ic to convert AC power from coil to DC power needed for Lidar.

OK, here is a main part. I desoldered Lidar PCBs from bases. Take a closer look. What do you see? Yes, they are exactly the same. They have the same revision/model number and date. So they should be interchangeable. Botvac one has flux residue all over the place because I was retouching it like there was no tomorrow.
They may have different firmware version though. I actually forgot to check that. Because when I soldered Lidar PCB from XV to the base PCB from Botvac and run tests, it just works. Here what the output looks like with working Lidar turret. No 8055 error codes. There was several 8035 errors, but it is because turret head cap has "legs" which cause Lidar to think that something is too close. But robot "knows" about turret cap and ignores that errors.
getldsscan
AngleInDegrees,DistInMM,Intensity,ErrorCodeHEX
0,664,229,0
1,662,266,0
2,670,222,0
3,682,249,0
4,687,306,0
5,684,281,0
...
352,676,464,0
353,678,472,0
354,681,477,0
355,684,440,0
356,688,437,0
357,692,422,0
358,696,422,0
359,700,386,0
ROTATION_SPEED,5.12

And this is how bright laser diode should look like through IR webcam.
Much brighter than on the picture from part 1, isn't it?
Botvac is fixed and works pretty fine since then.

Thursday, August 6, 2015

Neato Botvac Lidar Repair Part 1: IR Camera, Lidar Laser Driver Schematics, Debugging


Here goes a bit of story how I get there, for those who bored of text jump straight to the juicy pictures.

I acquired a broken Neato Botvac

robot vacuum on eBay recently. Seller has said that vacuum asks to turn power switch on, which is hidden in the dust bin compartment. But switching it on does not help and robot won't start cleaning. Otherwise it looks in good condition. Ok, easy fix I thought.

When I received my new robot I turned that hidden switch on and it helped, robot recognized that switch is in on position. I have not started vacuum cleaning that time but gone to clean robot itself first including filter. Next time I turn it on and it asks for that switch again, ok bad contacts perhaps. I flicked that switch couple dozen times and robot started to recognize it every time, fixed :) I do not know why that switch is there, is it some kind of battery kill/safety feature for transportation?

Well, nothing left just to try cleaning procedure. I started it by pushing button with home icon, robot moved away from it's charging bay and started vacuum motor, Lidar spinnig and then brush motors. But it was doing nothing but stopping itself and respin all motors. Then it threw 4000 error to me. I tried several time and everything I've got is a bunch of 4k errors, 400x, 40xx errors. That errors means something wrong with Lidar unit. It can be motor which can not handle specific 5RPM or it can not "see" because of dirt on lens and so on.



That "hat" over Lidar unit is easily removable. So I removed it and cleaned lens and it does not help at all. Lidar was spinning fine though. Ok, not easy fix anymore :)

Now to debugging. There is an USB port on the robot inside dust bin compartment alongside that mystery switch. It is like RS232 USB bridge, just a serial port you can talk to. No drivers needed (if you are on Linux for example). I used "GetLifeStatLog" command which is described in official Neato Programmer's Manual. But is does not work. Botvac is new series of vacuum robots made by Neato Robotics and they removed some useful commands from it. This "GetLifeStatLog" could help me with Lidar debugging, but oh well we'll find another way.

To make a long story short, I was getting the same output from Lidar unit as this guy at robotreviews.com.
TestMode On
SetLDSRotation On
GetLDSScan
AngleInDegrees,DistInMM,Intensity,ErrorCodeHEX
0,0,0,8055
1,0,0,8055
2,0,0,8055
3,0,0,8055
4,0,0,8055
... all the way to 359.
RPM was from 4.98 to 5.12 which is totally fine and correct. Basically this output means that Lidar can not "see" a thing. Either it is blocked lens, broken CMOS sensor, dead Laser diode or dead Laser Driver circuit, all sort of things. But at least Lidar unit can talk and respond to main system.

Lens is clean, I can not "test" anything here. But I can test laser. Lidar laser diode is an IR laser diode. But it is not just regular IR diode which you have in your tv remotes. Regular remotes has 930-950nm wavelength IR diodes and you can "see" them just by looking through your phone's camera for example, try it. But Lidar unit has 785nm wavelength IR which you can not see good enough through that camera. I want clearly see if laser works or not.

Let's make IR sensitive camera

from a regular webcam. Regular cameras has IR filter in front of it's sensor, we need to remove it to make it more sensitive to lower wavelength. I used a laptop webcam module for this purpose, it's cheap HD, it's USB and it's easy to remove IR filter from. Also I can change focus range, more on that later. Sorry for the pictures quality, my normal camera was busy on another installation. This is how it looks.
I already soldered USB wire. Camera suppose to work with 3.3v power. But it works ok with 5v supplied from USB too.
You need to unscrew lens from the camera. There is a microphone in the middle and camera to the right. Lens is adjusted for infinity focus and glued in place. Just scrape glue off and unscrew lens. Then flip it upside down.
On the bottom you can see IR filter glass. You need to remove it to make camera more sensitive to IR wavelength. This filter is glued to the lens housing, just pry it with something sharp and remove. Mine filter was broken in process.
Now you need to screw lens back to the webcam and adjust focus to infinity. Basically connect it to the PC and keep screwing lens until object in the far is in focus. But you can also adjust focus so you can use it as inspection microscope or taking macro photos, but quality is obviously bad, you need much more light that I had. This is silicone die inside 5050 RGB leds with built-in driver IC (WS2812 and APA102C)



QFN32 soldering inspection on home made pcb.

Debugging

So when I've taken pictures of lidar working I could not see laser beam at all. Laser was not working at all. All I could see is IR optical data connection between rotating lidar head and base unit (light in the middle of rotating head). I will use black and white pictures due to quality.

Seems something wrong with IR laser driver or laser diode itself. I disassembled Lidar unit and reversed laser driver to schematics. It maybe a bit wrong, but mostly correct.

It's a bit hard to identify sot-23 transistors and mosfets. So the laser diode driver has 3 controls and 2 feedbacks. There is power on signal to turn power on to the laser diode and driver unit. This signal is constantly on when lidar start spinning. There is also constant PWM signal it also constant when lidar head spinning. And there is some kind of modulation, there are 2 types of pulses modulation. Botvac change this modulation each time lidar start spinning, so next time you get second modulation type. Also this can be laser diode constant current control or it is shared with constant PWM signal.

I disconnected laser diode and tested it with power supply.


It was kind of working. That means driver circuit is dead. I tested Q2 and Q1 and they were dead I replaced them with similar parts. I also shunt Q3, there are jumper pads on the driver pcb. And a result was not that great. Laser diode was working but it was not producing much light than it should.


You can see it's barely visible at all. Then I made a small pcb with 2 color leds and attached it to driver pcb on the spinning lidar head to check control signals. That's how I know there are PWM and modulation.


You can see PWM and modulation here.

All signals seems OK, but laser diode is dim. I think it was damaged when transistors were blown. The only fix is to replace lidar unit now, but I could not find Botvac unit available for sale nor laser diodes available. There is difference between Botvac and XV series lidar heads. XV uses sliding mechanical contacts for data connection between lidar spinning head and the base. But Botvac uses optical data connection.

Let's finally repair it in the second part: Neato Botvac Lidar Repair Part 2: Lidar PCB Replacement

Saturday, February 7, 2015

Oaxis InkCase for iPhone and Note II Teardown


Today I'm going to teardown a pair of Oaxis InkCase thingies. It is a protective case for your phone which has a second screen and the screen is eInk type screen, black and white. This type of screens used for eBook readers like Amazon Kindle. So in theory this "case" should work much longer than your phone on it's battery. A case connects to your phone through Bluetooth 2.0 for N2 and through Bluetooth BLE for i5.
I received these units for beta test in Jan 2014 and found them unusable at that time. Especially N2 case which was chewing batteries like crazy, it would not hold a day without recharging. Also often loosing connection without being able to reconnect without disabling and re-enabling bluetooth first. So I wrote it all to the guys at Oaxis and put units away.
A little tip on how it works. It's very simple. Phone just sends a single image to the case through bluetooth, that's all. All the image compositing done in the phone's app.
Now I see they are released new InkCase Plus model which is designed to fit to almost any android phone.
Enough waffle, let's tear it down starting with N2 model.
 So basically it is just a refitted eBook reader. It has 4 buttons, left, right, select and hidden reset. You can switch to previous images that phone sent. Images in this case is screen updates, like weather, pictures and so on. There is no processing on this device except showing images.
Back side made of smooth plastic with will not scratch your phone.
As you can see, inside it has a generic eBook SoC Allwinner F1 E200 and supporting circuitry. Also they added bluetooth in the corner. 820mAh battery. So this is it for N2. Nothing exiting, right?

Next i5 model.
Again, back is made of very smooth plastic. Take a peek inside.
Battery is half capacity of N2 model 460mAh. But this case is using BLE which is much lower power than Bluetooth 2.0.

Ok, the circuit is completely different to N2. This one has a Rockchip RK2818 SoC which used in low-end android phones. Also to note, i5 model has only one single button.
While I was playing with i5 disassembling it and reassembling, trying to charge a battery etc. I somehow entered into a recovery mode. And what do you know, this thing has an actual Android OS inside. So iPhone has a protective case which has Android in it :)