Add initial feed

The MCU board now lets the printer pull in the carrier until the new
paper in sensor is triggered for the first time and then starts the
print like before. The new "initial feed" provides an alignment of the
carrier which is exactly the same every time. Of course, the carrier now
needs two markings.
master
fruchti 2015-10-04 11:51:38 +02:00
parent 8ac4d886e5
commit 2f9c8f51c7
4 changed files with 103 additions and 67 deletions

View File

@ -27,10 +27,11 @@ The main hardware difference between E260d and E360d is the use of a different o
The hardware modifications are mainly the same as in [the original instructable](http://www.instructables.com/id/Modification-of-the-Lexmark-E260-for-Direct-Laser--1). But, because the motor directly pulls in the carrier, an additional clutch is needed to keep the rollers stopped unless the carrier actually should move. The printer provides a solenoid, which is able to block the rollers, on its left side. Cut the low-side cable at the printer's controller board and connect it to the new MCU board. Leave the other end connected to 24V. The MCU board also needs a connection to a hall sensor of the motor in order to be able to check if it is running. I tapped the lowest pin on J17, but any of the three sensor lines should work. Just be sure that you do not connect the MCU to one of the motor windings (the three wires with the ferrite bead over them), as they are driven with 24V.
I made also some smaller modifications:
I made some additional modifications:
- I use a 18cm wide and 30cm long carrier. The 60cm long carrier proved to be way to long for me.
- I swapped the forked light barrier "new paper in sensor" for a reflective sensor (SFH900-2). This way I can use a piece of tape on the carriers bottom instead of a hole. If you use the original approach, you have to invert the signal in the AVR's source code.
- My carrier has two markings for the reflective light sensor. The new first marking triggers the sensor when the carrier is pulled in just slightly. The MCU board uses this to feed the carrier into the printer into the exact same starting position every time. Especially for double-sided PCBs this is useful as it provides better alignment. The markings on my carrier are now 113mm and 181mm from the top with the reflective light sensor being 100mm in front of the first axle.
### New MCU board

View File

@ -1,57 +1,59 @@
:100000001AC091C0A7C030C02FC02EC02DC02CC0B8
:100010002BC02AC029C028C027C027C025C024C0A3
:1000200023C022C021C0E2C0F1C00CC120C12EC13A
:1000300049C164C17DC111241FBECFEDCDBF10E009
:10004000A0E6B0E0ECE6F3E002C005900D92A23627
:10005000B107D9F720E0A2E6B0E001C01D92A836B2
:10006000B207E1F785D080C1CBCF1F920F920FB6B8
:100070000F9211248F939F93AF93BF93809164004D
:1000800090916500A0916600B09167000196A11D56
:10009000B11D8093640090936500A0936600B093B7
:1000A00067008091640090916500A0916600B09116
:1000B0006700892B8A2B8B2B59F48FEF9FEFDC0184
:1000C0008093640090936500A0936600B0936700EE
:1000D000809163008823F1F080916000909161002D
:1000E00001969093610080936000809160009091F0
:1000F0006100892B31F48FEF9FEF90936100809323
:1001000060008091600090916100069710F4959ACC
:1001100001C09598BF91AF919F918F910F900FBEA5
:100120000F901F9018951F920F920FB60F921124E7
:100130008F9380916300833021F08091630082303F
:1001400019F481E0809363008F910F900FBE0F90A0
:100150001F9018951F920F920FB60F9211241092B4
:100160006100109260000F900FBE0F901F901895C5
:100170008E9A8D9A8C9A969A959A949AC09AC19AC8
:10018000B99AC29ABA9AC39ABB9ABC9AC49A82E0A4
:1001900080BF83E083BF8CE786BF81E089BF85B7DE
:1001A000826085BF8BB780648BBF85B7846085BF55
:1001B0008BB780688BBF78941092640010926500B2
:1001C00010926600109267001092630081E097E041
:1001D00026E035E044E053E062E0E0916300F0E0C7
:1001E000E830F105D0F7ED5EFF4F0994C090640050
:1001F000D0906500E0906600F090670078E8C71640
:1002000073E1D706E104F10440F3ABC0C19AC29A8E
:10021000C39A969AC4989498E0916000F091610016
:100220003697D8F6B099D9CFC49A949A9698609395
:1002300063001092640010926500109266001092A4
:100240006700CBCFC0906400D0906500E09066005E
:10025000F090670077EEC7167DE0D706E104F10461
:1002600008F4BBCFC498C29850936300B6CFB09B3C
:10027000B4CFC198969A10926400109265001092C3
:1002800066001092670040936300A7CFC09064009F
:10029000D0906500E0906600F090670072E8C716A5
:1002A00076E0D706E104F10408F497CFC3981092E2
:1002B00064001092650010926600109267003093FF
:1002C00063008BCFC0906400D0906500E090660022
:1002D000F090670073EAC71671E0D706E104F104F5
:1002E00008F47BCFC29A10926400109265001092BD
:1002F000660010926700209363006FCFC090640087
:10030000D0906500E0906600F090670076E7C71631
:1003100072E0D706E104F10458F0C19A109264002B
:10032000109265001092660010926700909363002F
:10033000C0906400D0906500E0906600F090670087
:1003400079E9C71676E0D706E104F10408F445CF51
:10035000C39A109264001092650010926600109289
:0C03600067008093630039CFF894FFCF52
:02036C00060089
:100000001CC093C0A9C032C031C030C02FC02EC0A8
:100010002DC02CC02BC02AC029C029C027C026C093
:1000200025C024C023C0E6C0F5C008C115C129C140
:100030002DC13BC156C171C18AC111241FBECFED74
:10004000CDBF10E0A0E6B0E0EAE8F3E002C0059022
:100050000D92A236B107D9F720E0A2E6B0E001C0C8
:100060001D92A836B207E1F785D08DC1C9CF1F9286
:100070000F920FB60F9211248F939F93AF93BF935C
:100080008091640090916500A0916600B091670036
:100090000196A11DB11D8093640090936500A0930B
:1000A0006600B09367008091640090916500A09114
:1000B0006600B0916700892B8A2B8B2B59F48FEF48
:1000C0009FEFDC018093640090936500A09366002D
:1000D000B0936700809163008823F1F08091600005
:1000E00090916100019690936100809360008091EF
:1000F000600090916100892B31F48FEF9FEF909316
:10010000610080936000809160009091610006978B
:1001100010F4959A01C09598BF91AF919F918F91DE
:100120000F900FBE0F901F9018951F920F920FB651
:100130000F9211248F9380916300853021F080917C
:100140006300833019F481E0809363008F910F90F6
:100150000FBE0F901F9018951F920F920FB60F921F
:10016000112410926100109260000F900FBE0F904A
:100170001F9018958E9A8D9A8C9A969A959A949A21
:10018000C09AC19AB99AC29ABA9AC39ABB9ABC9AAF
:10019000C49A82E080BF83E083BF8CE786BF81E0A2
:1001A00089BF85B7826085BF8BB780648BBF85B7F9
:1001B000846085BF8BB780688BBF78941092640091
:1001C0001092650010926600109267001092630012
:1001D00081E099E028E037E046E055E064E073E034
:1001E000A2E0E0916300F0E0EA30F105D0F7ED5EC7
:1001F000FF4F0994C0906400D0906500E0906600C5
:10020000F0906700E8E8CE16E3E1DE06E104F104D1
:1002100040F3B6C0C19AC29AC39A969AC498949869
:10022000E0916000F09161003697D8F6B099D9CF8F
:10023000C498949A9698A0936300D3CFB09BD1CFE3
:10024000C49A70936300109264001092650010923B
:10025000660010926700C5CFC0906400D090650022
:10026000E0906600F0906700E7EECE16EDE0DE0667
:10027000E104F10408F4B5CFC498C2986093630018
:10028000B0CFB099AECF50936300ABCFB09BA9CFA6
:10029000C198969A109264001092650010926600C0
:1002A00010926700409363009CCFC0906400D09090
:1002B0006500E0906600F0906700E2E8CE16E6E0A8
:1002C000DE06E104F10408F48CCFC39810926400B8
:1002D00010926500109266001092670030936300E0
:1002E00080CFC0906400D0906500E0906600F090F0
:1002F0006700E3EACE16E1E0DE06E104F10408F46B
:1003000070CFC29A1092640010926500109266003D
:10031000109267002093630064CFC0906400D09077
:100320006500E0906600F0906700E6E7CE16E2E038
:10033000DE06E104F10458F0C19A109264001092B4
:100340006500109266001092670090936300C09061
:100350006400D0906500E0906600F0906700E9E9E5
:10036000CE16E6E0DE06E104F10408F43ACFC39AC3
:10037000109264001092650010926600109267005F
:0A038000809363002ECFF894FFCFA6
:02038A0006006B
:00000001FF

View File

@ -84,10 +84,21 @@ int main(void)
// blocked by carrier
if(HallSensorTimer < T_HALL_L && !(I_NPPINS & (1 << P_NPPINS)))
{
// Block carrier
O_CLUTCH |= (1 << P_CLUTCH);
// Unblock carrier
O_CLUTCH &= ~(1 << P_CLUTCH);
O_LED_GN |= (1 << P_LED_GN);
O_LED_RD &= ~(1 << P_LED_RD);
State = AlignFeed;
}
break;
case AlignFeed:
// Check if carrier has moved to the first marked position
if(I_NPPINS & (1 << P_NPPINS))
{
// Block carrier
O_CLUTCH |= (1 << P_CLUTCH);
State = ClutchDelay;
MillisecondCounter = 0;
}
@ -101,6 +112,15 @@ int main(void)
// Enable manual paper feed sensor
O_MNPFSO &= ~(1 << P_MNPFSO);
State = WaitingForFeed;
}
break;
case WaitingForFeed:
// Check if the end of the alignment marking on the carrier is
// hit (this state is needed because the alignment marking would
// lead to skipping the WaitingForPaperIn state right away)
if(!(I_NPPINS & (1 << P_NPPINS)))
{
State = WaitingForPaperIn;
}
break;

View File

@ -7,14 +7,27 @@
typedef enum
{
PowerOnWait,
Idle,
ClutchDelay,
WaitingForPaperIn,
ExitOnDelay,
ManualPaperFeedOffDelay,
PaperInOffDelay,
ExitOffDelay
PowerOnWait, // Power-on test state with all outputs
// enabled
Idle, // Waiting for print job
AlignFeed, // Initial pulling in for proper align-
// ment of the carrier
ClutchDelay, // Delay before main carrier feed
WaitingForFeed, // Waits for the end of the carrier
// alignment mark
WaitingForPaperIn, // Waits for the paper in mark on the
// carrier
ExitOnDelay, // Wait for print to be completed
ManualPaperFeedOffDelay, // Various delays
PaperInOffDelay, // for disabling the
ExitOffDelay // sensor signals again
} State_t;
int main(void);