Monday, September 09, 2019

MRR ESPE 3D printer control board with I2S stepper stream

In addition to working on the MRR ESPA, which is a basic 3D printer control board based on the ESP32 microcontroller, I am also working on the MRR ESPE, a slightly improved version of the board that uses I2S to control the stepper motors.

Basically, I2S is used to send serial data to 74HC595 chips, which convert the serial data to parallel data, effectively working as an output pin expander. As the ESP32 is a 32-bit microcontroller, it is easy to get an additional 32 outputs using I2S by daisy-chaining four 74HC595 chips (each can output 8 bits).

This is the current prototype.

The additional outputs free up native ESP32 pins. Basically, three native pins are used to achieve 32 output pins. The lower 16 pins can be used for the stepper drivers (which needs 3 pins each: EN, DIR, and STEP) to support 5 stepper drivers. The other pins can be used for a variety of purposes. In the prototype right now, I am using them to control the various MOSFETs (heated bed, hot end, part cooling fan, even addition fans like the hot end fan, case fan, plus an additional controllable fan). I am also using one pin for the beeper, because the freed native pins can then be used to control a LCD controller (like the LCD controller I have on the Ender-3). Of course, with Wi-Fi and running the custom Marlin fork that supports the ESP3D webUI, there is really no need for an LCD controller.

"Wow, this sounds so much better than the MRR ESPA, so why even spend time on that basic version?"

Well... that's because the I2S stepper stream is still quite experimental. Right now, there are issues getting it to work with linear advance. The extruder motor just refuses to turn when linear advance is enabled via the I2S stepper stream. Another issue is babystepping. Trying to use babystepping when the motors are driven via I2S will cause an immediate firmware reboot. So until these issues can be worked out, the basic version, the MRR ESPA, offers something that will just work. It may not have all the bells and whistles, but it will handle all the basic day-to-day stuff.

Note: I used various color male header pins on the prototype because I was running low on black male header pins. 😅
 
Update January 23, 2021: I found that someone has actually posted the design in his name on PCBWay. This is the page. Whoever this Oleg person is, he is in no way related to me nor this project and does not have the rights to post the design on PCBWay. I made the project open source but open source is not free, and it definitely does not mean you can take credit for something you did not create. It means you can use it if you give proper credit to the creators of the work.

No comments: