I've created a small Arduino sketch that rapidly polls the quadrature rotation encoder of a Canon Pixma MX340 multi-function inkjet and parse that long stream of data into a concise list of movements. I hoped it would help me break down what the print engine is doing. At the moment I won't be able to translate this data into actual printing functionality, that would come after I correlate these motions to what I'll discover upon further mechanical teardown.

timestamp,count,min_us_enc
16,1799,28
3785088,2701,36
4262908,-1800,-29
4407660,-1799,-28
7253384,28019,36
11663472,2699,36
11917992,-2699,-38
12176620,-15000,-68
13994420,1800,28
16146804,-1799,-28
16290108,1799,28
16441336,-1799,-28

My tool recognized 12 movements in the system power-up sequence.

  • 7 of them are movements of 1800 encoder positions, at a fast speed of ~28 us/enc. 3 in the positive direction, 4 in the negative direction. (In this system, negative is the direction of paper feed during actual printing.) Some of them are closely paired: negative immediately following positive, but some are interspersed with other motions.
  • 3 of them are movements of 2700 encoder positions, at a slower speed of ~36 us/enc. 2 in the positive and 1 in the negative direction. The second positive 2700 move is immediately followed by the -2700 move.
  • 1 long movement of 28020, at a speed of ~36 us/enc similar to the 2700 movements.
  • 1 long movement of -15000 at a slower speed of ~68 us/sec.

Looking at the system stand-by sequence, I see much of the same components in the list of 15 movements. (It's not pasted here but available on the companion GitHub repository.)

  • 9 x 1800 @ 28, 5 positive and 4 negative.
  • 2 x 2700 @ 36, 1 positive and 1 negative.
  • 1 x 28020 @ 36
  • 1 x -15000 @ 68

But there were two unique to the stand-by sequence:

  • 1 x 251200 @ 28, a very long roll.
  • 1 x -25120 @ 28 that immediately followed.

I had expected the standby sequence to have unique movements related to putting away the ink cartridges, so these two are good candidates. Other than that, I was surprised to see it repeated much of the same movements as the power-up sequence. I had expected to see something unique during power-up related to getting the ink cartridges ready, but apparently not. Perhaps "get ink cartridge ready" doesn't occur until the actual printing sequence, which is much more complicated.

  • -49720 @ 24
  • -1310 @ 160
  • Rocking back and forth with 4 x 1800 @ 28.
  • -22421 @ 19. Both the gear and paper sensors changed state during this movement. Did the 4x1800 engage a mechanical clutch or something? I have to look for that.
  • 3000 @ 20
  • -12300 @ 20. (The gear sensor changed state again somewhere in here.)
  • 6200 @ 36
  • -1200 @ 28

Then a long list of 82 x -961 @ 38 movements, each corresponding to the print head putting down a line of ink. Around the 72th iteration, the paper sensor changed state as the bottom edge of the sheet fed beyond the paper tray where the sensor lived. After the 82nd single-line movement, there was another sequence to eject the printed sheet.

  • -3475 @ 20
  • -12905 @ 14
  • -3282 @ 38

Very interesting there were three separate movements in the paper feed direction, at three different speeds.

  • 2700 @ 36, our old friend returns.
  • -1600 @ 29

That's a lot of movements unique to printing a page. I'm not sure I could link them all to specific mechanical functionality, but at least I'll have this data on hand as reference when taking this gearbox apart. Better to have it and not know what it means, than to not have it and wishing I did later when the gearbox is in pieces. But right now, I want to map these encoder counts to physical movement.


This teardown ran far longer than I originally thought it would. Click here to rewind back to where this adventure started.

Captured CSV and Excel worksheets are included in the companion GitHub repository.