# Property of PMA Electrical Solutions, LLC. # # Eaton PowerXL DM1 micro VFD — Modbus RTU on the drive's own RS-485 terminals # (6 = A+, 7 = B-). NO OPTION CARD IS NEEDED: the manual's section is titled # "Modbus RTU on-board communications" and RS-485 ships set to Modbus RTU by # default. BACnet MS/TP and SmartWire-DT are the DM1 PRO alternatives on the # same port, not prerequisites for Modbus. # # Source: Eaton document MN040051EN, "PowerXL DM1 series VFD Communication # manual", December 2022 (supersedes May 2021). Section page ranges below are # the manual's own printed page numbers. # p. 8 RS-485 terminals and factory serial settings # p. 9-10 Commissioning parameters P11.1/P11.2, comm timeout, fault response # p. 13 Table 19 write example, Table 20 index table, Tables 21/22 process data # p. 14 Table 23 FB basic input table, Table 24 FB control word bits # p. 15 Table 25 FB basic output table, Table 26 FB status word, # Table 27 FB general status word # p. 145 Appendix A, Table 172 DM1 parameter ID list (actual-value IDs) # p. 159 Appendix B, Table 173 process data OUT values and fieldbus scales # p. 161+ Appendix C, Table 175 fault code list # The manual covers the DM1 series including DM1 PRO; only the DM1 is claimed # here. Nothing in this file is carried over from any other PowerXL model. # # ADDRESSING. Eaton documents 1-based 4xxxx PLC notation and gives every value # an "ID". Both reduce to the same 0-based protocol address: # 0-based address = (Eaton 4xxxx register) - 40001 = ID - 1 # FB control word, ID 2001 = 42001 -> 2000 # Table 19 confirms it independently: its worked example writes the control # word with starting address 0x07D0 = 2000, and calls that "holding registers # 2000-2001". The ONE documented exception is the fault code, ID 100, which # Table 20 places at 40099 -> 98, not 99. # Eaton also lists a 3xxxx image of the same data (30001.../32101...). That is # the FC04 input-register space; vfd-core reads HOLDING REGISTERS (FC03) ONLY. # No value here needs FC04 — the manual states "All values can be read with # function codes 3 and 4 (all registers are 3X and 4X reference)". # # FIELDBUS ENABLE IS IN THE CONTROL WORD. Table 24 bit 8 is "FB control on" # and bit 9 is "FB reference on", so every sequence below carries 0x0300. A # control word without those bits is acknowledged and ignored. # # SCALING IS THE FIELDBUS SCALE from Appendix B Table 173, not panel decimals. # Table 173 documents those scales for the process-data copies of these same # quantities; the monitor points below read them through their fixed # actual-value IDs instead, which is an inference the bench must confirm. name = "Eaton PowerXL DM1" vendor = "Eaton" device_type = "vfd" verified = false probe_register = 2100 # FB status word, readable whenever the fieldbus is alive [connection] summary = "Use the plain DM1's on-board RS-485 terminals 6/7. Modbus TCP is DM1 PRO-only and is not a path for this profile." warnings = ["Isolate and discharge the VFD before accessing the control board.", "Do not select BACnet or SmartWire on the shared DM1 PRO communications hardware when using this RTU profile."] [[connection.methods]] id = "onboard_rs485" title = "On-board Modbus RTU" transport = "serial" hardware = "built_in" port = "Control terminal 6 A+ and terminal 7 B-" connector = "Control-board terminal block" adapter = "Isolated USB-to-RS-485 adapter" cable = "Shielded twisted-pair RS-485 cable" parts = ["Small insulated screwdriver", "Endpoint termination"] wiring = [{ adapter = "D+ / B+", device = "6, A+", signal = "RS-485 positive" }, { adapter = "D- / A-", device = "7, B-", signal = "RS-485 negative" }] steps = ["Isolate the drive and locate control terminals 6 and 7.", "Land positive on terminal 6 A+ and negative on terminal 7 B-.", "Route the shielded pair away from power conductors and terminate only bus endpoints.", "Close the drive, restore power, and select the computer's serial adapter."] setup = ["Set P11.1/P11.2 protocol, address, baud, parity, timeout, and fault response for Modbus RTU.", "Select fieldbus control/reference and keep control-word bits 8 and 9 asserted."] warnings = ["DM1 PRO has a separate on-board Modbus TCP path; this exact profile claims the plain DM1 only."] source = "Eaton MN040051EN, printed pp. 8-10 and 13-15" # p. 8: Modbus RTU is the default protocol, address 1, 19,200 baud, even # parity, 8 data bits. Data bits are not settable. Stop bits follow parity — # the manual gives 2 stop bits only when parity is set to None. [serial] baudrate = 19200 parity = "E" stopbits = 1 [monitor] # Actual values, Appendix A Table 172. ID N -> 0-based N-1. output_frequency = { address = 0, scale = 0.01, unit = "Hz" } # ID 1 motor_speed = { address = 1, unit = "rpm" } # ID 2, 1 rpm/count motor_current = { address = 2, scale = 0.01, unit = "A" } # ID 3 motor_torque = { address = 3, signed = true, scale = 0.1, unit = "%" } # ID 4 motor_power = { address = 4, signed = true, scale = 0.1, unit = "%" } # ID 5 output_voltage = { address = 5, scale = 0.1, unit = "V" } # ID 6 dc_voltage = { address = 6, unit = "V" } # ID 7, 1 V/count latest_fault_code = { address = 98 } # ID 100 = 40099 # Process data, Tables 21/22 and 25. Fixed meanings, unlike process data # in/out 1-8 which are remappable by selector parameters. control_word = { address = 2000, bits = { 0 = "RUN", 1 = "REVERSE", 2 = "FAULT_RESET", 3 = "FB_DI1", 4 = "FB_DI2", 5 = "FB_DI3", 6 = "FB_DI4", 7 = "BYPASS_ENABLE", 8 = "FB_CONTROL", 9 = "FB_REFERENCE" } } speed_reference = { address = 2002, scale = 0.01, unit = "%" } status_word = { address = 2100, bits = { 0 = "READY", 1 = "RUN", 2 = "REVERSE", 3 = "FAULTED", 4 = "WARNING", 5 = "AT_REFERENCE", 6 = "BYPASS_ACTIVE", 7 = "RUN_ENABLE" } } general_status_word = { address = 2101, bits = { 0 = "READY", 1 = "RUN", 2 = "REVERSE", 3 = "FAULT", 4 = "WARNING", 5 = "AT_REFERENCE", 6 = "REF_ZERO_SPEED", 7 = "MOTOR_FLUX_ON" } } fb_actual_speed = { address = 2102, scale = 0.01, unit = "%" } # Table 22 / Table 24. The reference is PERCENT (0-100.00%), not Hz — 100.00% # is the drive's configured maximum frequency, so the Hz a given percent # produces depends on the drive's setup. [control] command_register = 2000 speed_register = 2002 speed_scale = 0.01 speed_unit = "%" # NOT Hz max_ref = 100.0 speed_signed = false # direction is control-word bit 1, not the reference sign step_delay = 0.05 # 0x0300 = FB control on (bit 8) + FB reference on (bit 9), run bit clear. stop = [0x0300] run_fwd = [0x0300, 0x0301] # + bit 0 RUN run_rev = [0x0300, 0x0303] # + bit 1 counter-clockwise # Bit 2 pulsed on top of the enabled-but-stopped word. Bit 0 stays CLEAR, so # this reset value is not also a run command. reset = [0x0300, 0x0304, 0x0300] # P11.2.5 "Communication timeout modbus RTU" (ID 593) defaults to 10,000 ms, # adjustable 0-60,000 ms. On expiry the drive FAULTS and stops — it does not # keep running — raising fault 83 "Fieldbus fault / FieldBus RTU fault". # P11.2.6 "Modbus RTU fault response" (ID 2516) defaults to 0, "only in # fieldbus control mode": a drive being commanded over Modbus is exactly the # case that trips. Setting it to 1 faults in every control mode. # 1 s keepalive sits well inside even a heavily shortened timeout. [control.watchdog] interval_ms = 1000 fault = "83 Fieldbus fault (FieldBus RTU fault)" [running_check] register = 2100 bit = 1 # Table 20 puts the fault code at 40099 -> 98. The manual documents no fault # history registers over Modbus, so `history` is deliberately absent rather # than guessed. Appendix A also exposes "Latest fault code" as ID 28 (0-based # 27), and process data out 8 defaults to the same value at 2110. [faults] register = 98 # Appendix C Table 175. Eaton's numbering is sparse — there are genuinely no # codes 4-8 or 12 — so gaps here are the manual's, not omissions. [faults.codes] 0 = "No fault" 1 = "Over current" 2 = "Over voltage" 3 = "Earth fault" 9 = "Undervoltage" 10 = "Input phase supervision" 11 = "Output phase supervision" 13 = "Drive under temperature" 14 = "Drive over temperature" 18 = "IP address conflict" 19 = "Power board EEPROM fault" 20 = "Control board EEPROM fault" 21 = "Serial flash fault" 22 = "Speed deviation" 23 = "STO mismatch fault" 25 = "MCU watchdog fault" 26 = "Start-up prevent" 37 = "Device change" 38 = "Device added" 39 = "Device removed" 40 = "Device unknown" 41 = "IGBT over temperature" 51 = "External fault 1" 52 = "Keypad communication fault" 54 = "Option card fault" 57 = "Motor ID fault" 58 = "Current measure fault" 67 = "Current limit control" 68 = "Over voltage control" 70 = "System fault (DSP parameter fault)" 80 = "Fieldbus fault - BACnet IP" 81 = "Fieldbus fault - SA Bus" 83 = "Fieldbus fault - Modbus RTU" 84 = "Fieldbus fault - Modbus TCP" 85 = "Fieldbus fault - BACnet MS/TP" 87 = "Fieldbus fault - Slot A" 90 = "Cold weather drive under temperature" 92 = "External fault 2" 93 = "External fault 3" 100 = "Fieldbus fault - SmartWire-DT" 101 = "Option card fault - SmartWire-DT card" 102 = "External fault from SmartWire-DT" 103 = "Drive over temperature warning" 111 = "Profibus firmware incompatible" 114 = "SmartWire-DT firmware incompatible" 115 = "Fieldbus fault - EtherNet/IP idle" 117 = "Pump over cycle" 118 = "Broken pipe" 133 = "Fieldbus fault - web UI" # No [parameters] section. Table 20 does mark IDs 101-1999 (0-based 100-1998) # as read/write parameters, but that is a swept range covering monitor-only # and model-specific entries, and this file has not been on a bench. Cloning # needs a verified writable list — the same reason atv320 carries none. # # No [rating] section: MN040051EN documents no frame-size or nameplate-current # register, so there is nothing to compare before a restore.