0.1.5
* adjust M220 feed rate modifier calculations
This commit is contained in:
parent
7f1ae5a24b
commit
c00285b1b2
@ -474,19 +474,51 @@ class BambuVirtualPrinter:
|
||||
gcode_command = commands.SEND_GCODE_TEMPLATE
|
||||
percent = int(data.replace("M220 S", ""))
|
||||
|
||||
if percent is None or percent < 1 or percent > 166:
|
||||
return True
|
||||
def speed_fraction(speed_percent):
|
||||
return math.floor(10000 / speed_percent) / 100
|
||||
|
||||
speed_fraction = 100 / percent
|
||||
acceleration = math.exp((speed_fraction - 1.0191) / -0.814)
|
||||
feed_rate = (
|
||||
2.1645 * (acceleration**3)
|
||||
- 5.3247 * (acceleration**2)
|
||||
+ 4.342 * acceleration
|
||||
- 0.181
|
||||
)
|
||||
speed_level = 1.539 * (acceleration**2) - 0.7032 * acceleration + 4.0834
|
||||
speed_command = f"M204.2 K${acceleration:.2f} \nM220 K${feed_rate:.2f} \nM73.2 R${speed_fraction:.2f} \nM1002 set_gcode_claim_speed_level ${speed_level:.0f}\n"
|
||||
def acceleration_magnitude(speed_percent):
|
||||
return math.exp((speed_fraction(speed_percent) - 1.0191) / -0.8139)
|
||||
|
||||
def feed_rate(speed_percent):
|
||||
return 6.426e-5 * speed_percent ** 2 - 2.484e-3 * speed_percent + 0.654
|
||||
|
||||
def linear_interpolate(x, x_points, y_points):
|
||||
if x <= x_points[0]: return y_points[0]
|
||||
if x >= x_points[-1]: return y_points[-1]
|
||||
for i in range(len(x_points) - 1):
|
||||
if x_points[i] <= x < x_points[i + 1]:
|
||||
t = (x - x_points[i]) / (x_points[i + 1] - x_points[i])
|
||||
return y_points[i] * (1 - t) + y_points[i + 1] * t
|
||||
|
||||
def scale_to_data_points(func, data_points):
|
||||
data_points.sort(key=lambda x: x[0])
|
||||
speeds, values = zip(*data_points)
|
||||
scaling_factors = [v / func(s) for s, v in zip(speeds, values)]
|
||||
return lambda x: func(x) * linear_interpolate(x, speeds, scaling_factors)
|
||||
|
||||
def speed_adjust(speed_percentage):
|
||||
if not 30 <= speed_percentage <= 180:
|
||||
speed_percentage = 100
|
||||
|
||||
bambu_params = {
|
||||
"speed": [50, 100, 124, 166],
|
||||
"acceleration": [0.3, 1.0, 1.4, 1.6],
|
||||
"feed_rate": [0.7, 1.0, 1.4, 2.0]
|
||||
}
|
||||
|
||||
acc_mag_scaled = scale_to_data_points(acceleration_magnitude,
|
||||
list(zip(bambu_params["speed"], bambu_params["acceleration"])))
|
||||
feed_rate_scaled = scale_to_data_points(feed_rate,
|
||||
list(zip(bambu_params["speed"], bambu_params["feed_rate"])))
|
||||
|
||||
speed_frac = speed_fraction(speed_percentage)
|
||||
acc_mag = acc_mag_scaled(speed_percentage)
|
||||
feed = feed_rate_scaled(speed_percentage)
|
||||
# speed_level = 1.539 * (acc_mag**2) - 0.7032 * acc_mag + 4.0834
|
||||
return f"M204.2 K{acc_mag:.2f}\nM220 K{feed:.2f}\nM73.2 R{speed_frac:.2f}\n" # M1002 set_gcode_claim_speed_level ${speed_level:.0f}\n
|
||||
|
||||
speed_command = speed_adjust(percent)
|
||||
|
||||
gcode_command["print"]["param"] = speed_command
|
||||
if self.bambu_client.publish(gcode_command):
|
||||
|
2
setup.py
2
setup.py
@ -14,7 +14,7 @@ plugin_package = "octoprint_bambu_printer"
|
||||
plugin_name = "OctoPrint-BambuPrinter"
|
||||
|
||||
# The plugin's version. Can be overwritten within OctoPrint's internal data via __plugin_version__ in the plugin module
|
||||
plugin_version = "0.1.4"
|
||||
plugin_version = "0.1.5"
|
||||
|
||||
# The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin
|
||||
# module
|
||||
|
Loading…
x
Reference in New Issue
Block a user