Both the original Arduino and the PIC18F series used in my ELS are 8 bit processors. As @PaulL says there are now Arduino compatible processors that are a lot faster using a 32 bit processor and multiple cores. The ESP32 for example has WiFi on one core and you can run your application on the other. I have a box full of different Arduino type modules. Very useful for things like my currently on hold Kiln controller.
The newer Integrated Development Environment (IDE) for the Arduino now offers a little bit of what real IDEs for other embedded systems offer but it's still a toy. At least now you can use break points instead of print statements to debug code. And the library to deal with external devices is frankly amazing.
But, and it's a huge but for embedded systems, not being able to look at the underlying generated assembler is a distinct disadvantage. And those libraries, nice as they are, can leak memory so that 73.6 hours after starting they suddenly reset or freeze. And you have no idea of why or how.
I ported the 8 bit C code into a PIC32 with almost no effort. The interrupt routine that deals with checking ESTOP, runs the on board Micro-Stepping driver, does the trajectory motion changed from taking about 35uS to just over 3uS. A 10x improvement.
All I needed from the development board was an adapter that translated 3.3V signals to 5V signal levels and moved pins around to match the original 40 pin DIP processor. Ignore U2 and U3 as those are the empty sockets on the board.
For testing the ICD-3 programmer/debugger let me insert break points to stop inside the interrupt routine and even single step the assembler language.
So why the assembler? Each compiler generates and optimizes the code slightly differently. Although Object Oriented Programming (OOP) is very useful at the source code level for programmers to have understandable code, it often creates very slow code. Not a problem with that fast 1000x faster PC. Deciding to make a variable a local, global or object member and looking at how it's used can cut microseconds off your interrupt routine.
So where, although it's rarely mentioned, the Arduino based electronic gearing systems are limited to about 1800 RPM for the spindle because after that the encoder used generates edges too quickly. You can't run it with a 100 line encoder like LinuxCNC and work with 6000 RPM spindles.
The reply from the developers of the Arduino systems are no one uses a spindle above 1800. Lack of I/O is another issue but they seem to like a couple of buttons and a knob for selecting stuff. None of the commerical CNC systems have tiny keypads. Now that there are 32 bit based Arduino modules that may well have changed.
OTOH, there are some pretty nice processors out there like this dual core TI unit. I started porting my ELS to this too just to see how it would work. Still want to try that as it has features the PIC32 doesn't.
Has the hardware encoder modules, CAN bus, etc. and isn't that expensive plus the built in programmer and free IDE.
The newer Integrated Development Environment (IDE) for the Arduino now offers a little bit of what real IDEs for other embedded systems offer but it's still a toy. At least now you can use break points instead of print statements to debug code. And the library to deal with external devices is frankly amazing.
But, and it's a huge but for embedded systems, not being able to look at the underlying generated assembler is a distinct disadvantage. And those libraries, nice as they are, can leak memory so that 73.6 hours after starting they suddenly reset or freeze. And you have no idea of why or how.
I ported the 8 bit C code into a PIC32 with almost no effort. The interrupt routine that deals with checking ESTOP, runs the on board Micro-Stepping driver, does the trajectory motion changed from taking about 35uS to just over 3uS. A 10x improvement.
All I needed from the development board was an adapter that translated 3.3V signals to 5V signal levels and moved pins around to match the original 40 pin DIP processor. Ignore U2 and U3 as those are the empty sockets on the board.
For testing the ICD-3 programmer/debugger let me insert break points to stop inside the interrupt routine and even single step the assembler language.
So why the assembler? Each compiler generates and optimizes the code slightly differently. Although Object Oriented Programming (OOP) is very useful at the source code level for programmers to have understandable code, it often creates very slow code. Not a problem with that fast 1000x faster PC. Deciding to make a variable a local, global or object member and looking at how it's used can cut microseconds off your interrupt routine.
So where, although it's rarely mentioned, the Arduino based electronic gearing systems are limited to about 1800 RPM for the spindle because after that the encoder used generates edges too quickly. You can't run it with a 100 line encoder like LinuxCNC and work with 6000 RPM spindles.
The reply from the developers of the Arduino systems are no one uses a spindle above 1800. Lack of I/O is another issue but they seem to like a couple of buttons and a knob for selecting stuff. None of the commerical CNC systems have tiny keypads. Now that there are 32 bit based Arduino modules that may well have changed.
OTOH, there are some pretty nice processors out there like this dual core TI unit. I started porting my ELS to this too just to see how it would work. Still want to try that as it has features the PIC32 doesn't.
LAUNCHXL-F28379D | Buy TI Parts | TI.com
LAUNCHXL-F28379D - F28379D LaunchPad™ development kit for C2000™ Delfino™ MCU
www.ti.com