-
-
Notifications
You must be signed in to change notification settings - Fork 19.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FR] MMU3 Feature #26523
Comments
@ellensp thanks for the info... Status update, I was able to communicate with MMU3 last night... The CRC8 stuff is working properly... For prototyping purposes, I'm currently filtering out the CRC8 stuff from the MMU3 and add back to the commands coming from Marlin... Next, what I want to do is to obtain the Prusa firmware (the currently shared source code I think is still communicating with MMU2s version 2.1.9, there is a MMU300 branch to be investigated) and see how different it is from the current implementation in Marlin. |
@eoyilmaz Anything above 3.13 will only work with MMU3 FW 3.0 and above. 3.12 and below will only work with 1.06 and below. |
We should also consider doing the same to be honest, at least we should remove the old MMU stuff completely. |
To prevent breaking builds for users who upgrade Marlin, but run an older MMU/MMU firmware, we’d just need to add notes to the MMU config section with compatible MMU & MMU firmware versions. |
@thisiskeithb sure, but I was reffering the MMU1 stuff, the oldest version that nobody is probably using anymore. Of course, we should keep everything related to MMU2/MMU2s.
sure thing, I'll base my code to 3.13... From Marlin's perspective, MMU with a firmware version of 1.0.6 is considered the |
We don't remove support because something is old. There's no reason to remove it. |
ah, sure then, it was already too early to talk about this tbh... let's add the MMU3 support, then we can talk about the rest 👍 |
Instead of deep diving into the work directly, I would like to approach this in a more structured and professional manner, create an EPIC, investigate it with a SPIKE, divide the work in small manageable chunks etc. as we normally do in our studio. So I'm moving back to my own repository, will create all the work tickets there, I'll update this ticket most probably with the list of feature tickets that needs to be implemented and create PRs as I gone through them. |
Here is some progress on destructing the new protocol: eoyilmaz#2 (comment) |
Hey folks, let me do some progress reports:
Otherwise, I was just able to compile Marlin with MMU3 support and will test it after my current print finishes and I'll report back... I'm not expecting it to work out of the box tbh. Yeah, that's all for now, cheers... |
Surprise surprise 😄 it is mostly working 🎊 I had to fix the required MMU firmware version in Marlin from 3.0.1 to 3.0.2. As I see PrusaFirmware requires an exact match of the MMU firmware otherwise disables the MMU communication after reporting something like "MMU requires FW Update disabling" or so. Things are working:
Things are broken:
anyways, I'm very excited as I was not expecting anything to function not even a little 😄 |
Another progress report: I just completed my first successful print with the MMU3 that had 36 filament changes (very small test print)... The main functions are now fully working, and I'm quite happy with my progress... I still need to work on the LCD reporting & interaction and EEPROM & PersistentStore stuff though... You can track my todo list here btw: eoyilmaz#3 |
I also worked on the LCD and EEPROM related stuff and it is theoretically done. I'll test and report back. So this is as good as or better than the current MMU2s implementation and I'm very close to creating a PR 👍 |
Latest changes:
I'm kind of ready to tidy up the code and create the PR... And then I have some improvements that I want to make over the Prusa implementation:
|
sure sure 👍
Strange, I'm on macOS too... let me upload the original version... oh it is bigger than what GitHub accepts, here is a download link: https://www.dropbox.com/scl/fi/xu2r8mjhy4p8k2s9vyult/IMG_2856.MOV?rlkey=j1e25qas8fwxjbiugy83nhl63&dl=0 |
@thisiskeithb I have a question, I'm working on enabling the SpoolJoin feature, I introduced the The SpoolJoin feature requires checking a couple of conditions to decide to run "M600 AUTO" or not and one of the conditions is using From what I understand from the function name and the content it should return When I start the job (through OctoPrint by the way) it returns |
I was able to run the SpoolJoin, but there is an issue... At least with my setup. The issue is that, as in my case, if the distance between the extruder gears to the nozzle tip is smaller than the distance between MMU FINDA sensor to MMU pulley gears, when the extruder pushes back the filament it will not be able push the filament back as much so that the pulley gears can grab them. I hope it makes sense... The filament stuck inside the tube between MMU FINDA and extruder, in a position nothing can pull it back or forth. I modified the code so that it will try consuming the filament completely before loading the next filament instead of retracting it back. I'm sure Prusa people also wanted to do this as one of the functions they are using to decide if it is time to run SpoolJoin, is called |
Interestingly, I was able to achieve what I was offering, so the filament change only occurs when the filament is completely consumed, and it is working fine... Except, after MMU loads the next filament a "Purge More" / "Continue" screen appears, I was hopping to skip this screen... Let's see... |
The SpoolJoin is now working as intended. I had to add two new parameters to the I also made the "SpoolJoin Consumes All Filament" an experimental and optional feature and added the following to the /**
* SpoolJoin Consumes All Filament -- EXPERIMENTAL
*
* SpoolJoin normally triggers when FINDA sensor untriggers while printing.
* This is the default behaviour and it doesn't consume all the filament
* before triggering a filament change. This leaves some filament in the
* current slot and before switching to the next slot it is unloaded.
*
* Enabling this option will trigger the filament change when both FINDA
* and Filament Runout Sensor triggers during the print and it allows the
* filament in the current slot to be completely consumed before doing the
* filament change. But this can cause problems as a little bit of filament
* will be left between the extruder gears (thinking that the filament
* sensor is triggered through the gears) and the end of the PTFE tube and
* can cause filament load issues.
*/
// #define MMU_SPOOL_JOIN_CONSUMES_ALL_FILAMENT |
That’s a lot of text, especially for a text-based 2004 LCD like the |
This is only displayed when you request more info on the matter, tbh. And there is actually a short web url also displayed as in "prusa.io/04504" to get even more info, which I didn't include yet. |
Finally, I was able to properly implement the "Fullscreen Error Messages & Actions" feature: IMG_2954_480p.movIn the "More Info" screen the second page is displayed with a button click, that might not be very Marlin style. If required we can improve it by utilizing the encoder so that the user can scroll between pages and return to the previous screen with a button click... But I'm going to leave it to another issue ticket, and let this be reviewed and hopefully merged soon... |
@psharma04 you're very lucky :) I was using a SKR Mini E3 V3 before my current board. The issue that you need solve first is that the MMU board is 5V TTL and SKR Mini E3 v3, like many other 32-bit boards, is 3.3V TTL. So you need to use a Level Shifter in between. I used this for that purpose: https://www.amazon.co.uk/gp/product/B095H64XSV/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1 Here is my custom board to host the level shifter: https://oshwlab.com/eoyilmaz/level-shifter And also connect the RX port of one board to the TX port of the other and vice versa. Do not connect the RST pin, which is not needed. |
the SKR Mini E3 V3 TFT port is using PA2 (USART2_TX) /PA3 (USART2_RX) |
That's correct as per the datasheet and I'm using the same port on a BTT GTR. |
@ellensp I remember that I checked the datasheet for STM32G0B1RE when I was setting up the MMU. But, I'm not an Electrics & Electronics Engineer and I might have read it incorrectly I thought the TX pin was 4.4V tolerant and the RX was 8.4V tolerant (they give a formula based on VDD etc.). But, that might not be correct, in anyways, I'm happy that I'm using the level shifter between 3.3V TTL and 5V TTL boards, and I believe that's the general suggestion. |
I managed to figure it out, turns out the problem was a badly crimped cable (one that I made, not from Prusa). No level shifter needed, it just... worked as is. For future reader's reference, if you're using the MMU3 cable for the Mk3 (the one with a 5 pin header), the default order is If you'd like an extra test environment, I'm happy to test firmware changes on my machine (Ender 5-based CoreXY). |
Can i get some assistance please.
_ I am running firmware MMU3_FW3.0.2+878 The MMU3 receives transmits from the SKR 3 so I can run M709 S1 and the MMU3 turns on and a blue light flashes then I can run a M709 S0 and the light turns off, but the whole time the SKR 3 is reporting it can't communicate with the MMU3 as per below screenshots. |
@SpankyDevil I'll try to return as soon as I have time. |
Thanks, I then tried the PR version and set my board model and enabled MMU3 and set Serial Port then enabled each feature as required to build and tested and i could turn MMU on/off but I have added a 1K and 2K resistor to the MMU3 Tx line to step the voltage down to about 3.3v just incase this was causing an issue but that was done before trying your branch Note when MMU is set to on there is a blue flashing light only and when set to off there is no ights, when i power it on the green lights come up then turn off and when set to off the green lights come on again then go off. |
Just wondering if anyone has this working with the current PR? |
I have this working with my printer. I use a MKS_SGEN_L_V2 board though. |
Would you mind confirming a few things for me please
|
This version of Marlin for MMU3 requires you to have a screen enabled, so not having one physically connected but having Marlin think there is one isn't causing you any issues and running your MMU3 off of the EXP Serial. Are you connecting through USB and manually inputting the codes to control the MMU3 which you would normally access through the Screen? when you first power on your printer can you advise the LED status on your MMU3 |
I use an LCD with my printer, just not a TFT touch screen. I control the MMU3 via the LCD menus. On boot the orange LED pulses because the main board resets it. Then LED5 flashes rapidly while the other LEDs are on and then they all turn off. |
The header you highlight in the picture is not used by the LCD. The two connectors on the very bottom of that picture are used by the LCD. |
I know 😄 I was clarifying/highlighting it for @SpankyDevil. |
If this is working for everyone else i must have faulty hardware, which is a real shame since the MMU3 is brand new and brought for me as a birthday gift. I will connect the mainboard up using MMU2 method today this will eliminate the daughter board and use another cable in case either of them are at fault. I still find it odd though that the PR branch never acknowledges the MMU3 been on but the Ender 3 branch knows when its Off/On |
OK, wiring the MMU3 without the daughter board and using a different cable has got communication working. |
Has anyone got this working with an MMU3? like one with the daughter board not just a flashed firmware MMU2 ? I can get it working if wire directly to the MMU3 mainboard (MMU2 Wiring) but if I connect the daughter board Marlin doesn't detect the MMU3 When i go into MMU Menu and click on MMU off to change it to on nothing happens. I purchased a new screen because my TFT didn't support Marlin Mode thinking maybe this was causing an issue, i have also purchased a new daughter board and cable. I am starting to get quite frustrated as I don't understand why it won't work and I've spent a lot of money on this which has been sitting there doing nothing for 3 months now :( |
Thank You @dust Issue resolved.
The correct Pinout is White Plug from the top gnd,gnd,24v,24v,reset,gnd,tx,rx 5 Pin Header Plug RESET GND TX(out) RX(in) and then the blank pinhole @eoyilmaz Any chance of getting the PR updated with the latest Bug Fix version of Marlin? |
It's really awesome to finally be able to use this, thank you and great work. I have noticed a couple of Menu items not working, unsure if this is due to not being implemented yet or just unaware.
|
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
Is your feature request related to a problem? Please describe.
I started working on the MMU3 interface, and I wanted to report this feature request to consolidate all future efforts in one place. So, anybody interested please feel free to join the discussion here.
I already have an MMU3 setup, albeit working on an Ender 3 Pro + SKR 3 EZ board with the 1.0.6 firmware of the MMU2s. Just updated the MMU firmware to version 3.0.2 today and I had to adjust some StalGuard thresholds and motor currents so the Idler homes properly. The communication between the boards is not working right now. My setup includes an Arduino Mega 2560 board inbetween the Marlin and MMU boards so that I can intercept the messages between these two boards more easily. The MMU code base is very clean and very easy to read, and it is surprisingly easy to build (I didn't expect that tbh).
So, yeah, let's do it!
Are you looking for hardware support?
Yes, I'm interested in MMU3 support.
Describe the feature you want
Fully working MMU3 with the advertised:
Additional context
My MMU3 Project Page
The text was updated successfully, but these errors were encountered: