Sovol S0-1 Plotter Printer Uses Marlin Firmware


Marlin logo from https://marlinfw.org

In chasing after better results from my Sovol SO-1 Plotter, one of the places where optimization could be made is with the controller  firmware.   Looking at the board (the image below is a photo taken from the manual PDF), if I zoom in on the chip, it is an ATMega1284P, which is an 8 bit microcontroller.  Arduino devices I have used uno and nano use Atmega328p and the mega which uses atmega2560, which are also 8 bit microcontrollers.  Newer 3D printers seem to come with 32 bit microcontroller boards now.  Also, from the photo, I can see the stepper drivers are A498, which is a relatively older chip for driving a bipolar stepper.  At some point, I may try to upgrade the controller board with a 32 bit controller and nicer stepper drivers, but that is not the focus of this post.





I want to see what firmware is being used to control the plotter.  For most devices SOVOL sells, you can download the firmware off their website, but curiously it is missing for the Sovol SO-1.
In 3d printing, Marlin firmware is common and Grbl is a firmware that seems to be used more often in cnc and laser projects (although mpcnc uses marlin).  I suspected the Sovol SO-1 plotter would use one of these two options for the firmware. 
I examined the beginning commands of some of the 20 G code file examples that can be downloaded from SOVOL at the link:
https://drive.google.com/file/d/12bSmdtdNIdxoBupyJ6tL3uAluI2kDjJs/view
I hoped that examining the gcode would help me infer which firmware is being used.
The first example file I picked starts with the following G code commands:
M280P0S30 
G90
G21
G1 F3000


M28P0S30 sets a servo at a 30 degree angle, G90 sets absolute positioning, G21 units in mm, G1 F3000 means feed rate of 3000mm/min

Most diy pen plotters described which use atmega controllers use Grbl-servo and that uses M3 commands to set the servo angle, but this one doesn't include M3,  that rules down Grbl-servo.
Therefore, Marlin is more likely to be the firmware.
The next step on this adventure is to try to connect to the device and get some information from it directly.
A micro USB cable is needed to connect to the Sovol SO-1 plotter printer.  
I have Repetier Host installed on my macbook already, which I have used to communicate over USB to 3d printers and some other motion control devices.  The port selected going to vary depending on which USB port I plug in the usb cable.  One has to know the baud rate to connect to the device.  I couldn't find this published anywhere for Sovol SO-1 plotter so basically  I tried different baud rates until I was able to successfully connect with baud rate of 115200.  Here is a screenshot of my settings:

  
I was then able to get the following output which confirmed it has Marlin firmware installed:
  7:18:42 PM: Attempting to connect to printer
  7:18:42 PM: Connection opened
< 7:18:42 PM: Bstart
> 7:18:42 PM: N1 M110 *2
< 7:18:42 PM: echo: External Reset
> 7:18:42 PM: N2 M110 *1
< 7:18:42 PM: Marlin 1.1.6
> 7:18:42 PM: N3 M115 *5
> 7:18:42 PM: N4 M105 *3
< 7:18:42 PM: echo: Last Updated: 2019-12-16 | Author: SO-1
> 7:18:42 PM: N5 M111 S6 *66
< 7:18:42 PM: echo:Compiled: Mar 16 2020
> 7:18:42 PM: N6 M220 S149 *74
< 7:18:42 PM: echo: Free Memory: 10510  PlannerBufferBytes: 1232
> 7:18:42 PM: N7 M111 S12 *117
< 7:18:42 PM: echo:V41 stored settings retrieved (498 bytes; crc 36405)
< 7:18:42 PM: echo:  G21    ; Units in mm
< 7:18:42 PM: echo:  M149 C ; Units in Celsius
< 7:18:42 PM: echo:Filament settings: Disabled
< 7:18:42 PM: echo:  M200 D1.75
< 7:18:42 PM: echo:  M200 D0
< 7:18:42 PM: echo:Steps per unit:
< 7:18:42 PM: echo:  M92 X80.00 Y80.00 Z400.00 E140.00
< 7:18:42 PM: echo:Maximum feedrates (units/s):
< 7:18:42 PM: echo:  M203 X300.00 Y300.00 Z5.00 E25.00
< 7:18:42 PM: echo:Maximum Acceleration (units/s2):
< 7:18:42 PM: echo:  M201 X1000 Y1000 Z100 E1000
< 7:18:42 PM: echo:Acceleration (units/s2): P<print_accel> R<retract_accel> T<travel_accel>
< 7:18:42 PM: echo:  M204 P1000.00 R1000.00 T1000.00
< 7:18:42 PM: echo:Advanced: S<min_feedrate> T<min_travel_feedrate> B<min_segment_time_ms> X<max_xy_jerk> Z<max_z_jerk> E<max_e_jerk>
< 7:18:42 PM: echo:  M205 S0.00 T0.00 B20000 X10.00 Y10.00 Z0.40 E5.00
< 7:18:42 PM: echo:Home offset:
< 7:18:42 PM: echo:  M206 X0.00 Y0.00 Z0.00
< 7:18:42 PM: echo:Material heatup parameters:
< 7:18:42 PM: echo:  M145 S0 H185 B45 F0
< 7:18:42 PM:   M145 S1 H240 B70 F0
< 7:18:42 PM: echo:PID settings:
< 7:18:42 PM: echo:  M301 P29.76 I2.93 D75.58
< 7:18:42 PM: echo:Z-Probe Offset (mm):
< 7:18:42 PM: echo:  M851 Z0.00
< 7:18:48 PM: echo:TF init fail
< 7:18:50 PM: echo:TF init fail
< 7:18:50 PM: FIRMWARE_NAME:Marlin Creality 3D SOURCE_CODE_URL:https://github.com/MarlinFirmware/Marlin PROTOCOL_VERSION:1.0 MACHINE_TYPE:SO-1 EXTRUDER_COUNT:1 UUID:cede2a2f-41a2-4748-9b12-c55c62f367ff
< 7:18:50 PM: Cap:EEPROM:1
< 7:18:50 PM: Cap:AUTOREPORT_TEMP:1
< 7:18:50 PM: Cap:PROGRESS:0
< 7:18:50 PM: Cap:PRINT_JOB:1
< 7:18:50 PM: Cap:AUTOLEVEL:0
< 7:18:50 PM: Cap:Z_PROBE:1
< 7:18:50 PM: Cap:LEVELING_DATA:0
< 7:18:50 PM: Cap:SOFTWARE_POWER:0
< 7:18:50 PM: Cap:TOGGLE_LIGHTS:0
< 7:18:50 PM: Cap:CASE_LIGHT_BRIGHTNESS:0
< 7:18:50 PM: Cap:EMERGENCY_PARSER:0
< 7:18:50 PM: echo:DEBUG:INFO,ERRORS
< 7:18:50 PM: echo:DEBUG:ERRORS,DRYRUN

Knowing the firmware used and default settings are helpful so that we can optimize how the plotter works.  In particular, the X and Y federate and acceleration settings can be adjusted which should give better quality drawings.  The default feed rate in X and Y dimensions is 300mm/second.  
As a starting point, I will arbitrarily decrease the feedrate from 300mm/sec to 100mm/sec with the following command somewhere in the start of my gcode files:
M203 X100.00 Y100.00 Z5.00 E25.00

I don't think changing the Z feed rate with this setting will change anything, as the SO-1 controls the Z by servo not by a stepper motor like on a 3d printer, so I just left it as it was.
Also, the E setting doesn't matter, we don't have an extruder.

Also as a starting point, I will arbitrarily decrease the maximum acceleration of X and Y from 1000mm/s2 to 100mm/s2 with the following command (again I didn't change Z or E because they are irrelevant):
M201 X100 Y100 Z100 E1000

I haven't tried it with this machine, but usually these gcode commands could be sent by Repetier Host to the device and then saved in the eeprom by issuing M500.  At this point, I think I will just include the M203 and M201 commands in the start of my gcode files.

Disclaimer
The author does not make any warranties about the completeness, reliability and accuracy of this information. Any action you take upon the information on this site is strictly at your own risk, and the author will not be held liable for any losses and damages in connection with the use of this information.




Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Comments