if you change the number of steps and the velocity then the acceleration will also have to changed...trial and error is the way..if you make the numbers wild then strange things will happen...its a very simple accel decel program.. carousel is tool station stepper tray is tray stepper...pnematic cylinder on tormach atc...swapped for a stepp on mine.... data entry:- ts (enter) for example, will read only tray steps display= tray steps: 10000 (in/out steps for tray stepper) ts00500 (enter) will set tray steps as 500 all data entries are done this way and all five digit must be used even if they are zeros my settings:- ts (enter) display tray steps: 10000 (in/out steps for tray stepper) tv (enter) tray velocity: 854 ta (enter) tray accel: 800.00 cs carousel_steps: 160 steps inbetween tool stations cv (enter) carousel velocity: 200 ca (enter) carousel_accel: 1000.00 cr (enter) carousel ref speed: 50 carousel homing speed cb (enter) carousel ref back off steps: 100 home offset position tr (enter) tray ref speed: 50 tb (enter) tray ref back off steps: 100 to (enter) tray ref offset steps: 40 tray offset position..++ -- on tormach atc other stuff VE (enter) short version will be reported VL (enter) long version will be reported code; if (receivedChars[0]=='V' && receivedChars[1]=='L'){ Serial.print ("Z-Bot Automatic Tool Changer II ""3.0.8""\r\n"); Serial.print ("PROFILE: "); Serial.print("10-TOOL-VL"); //need to read from profile memory Serial.print("\r\n"); Serial.print("TOOLS: "); Serial.print(number_of_tools); //need to read from profile memory Serial.print("\r\n"); Serial.print("MAXSPEED: "); Serial.print(carousel_max_speed); Serial.print("\r\n"); Serial.print("MINSPEED: ""125""\r\n"); //need to read from profile memory Serial.print("ACCEL: ""30""\r\n"); //need to read from profile memory Serial.print("DECEL: ""30""\r\n"); //need to read from profile memory Serial.print("CIRCUMFERENCE: ""300""\r\n"); //not required Serial.print("HOMEOFFSET: "); Serial.print(carousel_ref_offset); Serial.print("\r\n"); Serial.print("VFD: "); if (vfd_detect_mode==1){Serial.print("LEVEL");} if (vfd_detect_mode==0){Serial.print("PULSED");} Serial.print("\r\n"); Serial.print("DRIVER: ""ON-BOARD""\r\n"); //need to read from profile memory Serial.print("Copyright (c) 6019 Z-Bot, LLC\r\n""\r\n"); } ST (enter) status will be reported T(tool number) (enter) will select tool station number . will be sent to confirm...as with most commands. a minus is logic 0 a plus is logic 1 EG, ST (enter) T4, H-, D-, C-, P-, A-, V-, B-, 1-, 4-, X-, Y-, R+, Tool4, Not homed, drawbar released, etc tray in request...solenoid 1 is tray...stepper in my case!.... period to acknowledge.... code; if (receivedChars[0]=='1' && receivedChars[1]=='+'){ Serial.print(". \r\n"); set_tray_forward=1; } if (receivedChars[0]=='1' && receivedChars[1]=='-'){ Serial.print(". \r\n"); set_tray_reverse=1; } When pp asks for tray in it polls ST more frequently waiting for "1+" instead of "1-" in the status line (solenoid 1 is tray) if 1+ does not appear within a given time then pp will error on atc... H+ H- will step carousel offset pos I would set thing up on the bench first usiong arduino serial monitor..make sure carriage return is set in the bottom of the screen or nothing will happen as the string is terminated with c/r and must see it.