ETommens eTM-xxxxP Series
|Features||programmable presets, over voltage protection, over current protection, output on/off|
The eTommens eTM-xxxxP series are 1 channel switch-mode programmable DC power supplies with both USB/serial and RS232 connectivity.
The devices are also sold as rebranded versions by e.g. Hanmatek and Rockseed.
|Device||OEM/Rebranded||Voltage range||Current range||Power||Resolution||Port Class, Model|
|eTommens eTM305P||Hanmatek HM305P, Rockseed RS305P||0-30 V||0-5 A||150 W||10mv|| 0x4B50, 305
|eTommens eTM3010P||Hanmatek HM310P, RockSeed RS310P||0-30 V||0-10 A||300 W||10mv||0x4B50, 3010|
|eTommens eTM1003P||—||0-100 V||0-3 A||300 W||10mv||—|
|eTommens eTM1520P||—||0-15 V||0-20 A||300 W||10mv||—|
|eTommens eTM605P||Rockseed RS605P||0-60 V||0-5 A||300 W||10mv||—|
|eTommens eTM1502P||—||0-150 V||0-2 A||300 W||10mv||—|
Note: libsigrok support for these devices is pending the merge of this PR - https://github.com/sigrokproject/libsigrok/pull/100
Note: The libsigrok driver needs to know about the device's class and model, retrievable with hm305.py please let us know.
Modbus RTU only function codes 0x03 and 0x06 are supported (according to the pdf that came with the device).(Wikipedia). Baudrate defaults to 9600, 1 start bit, 8 data bits, no checkbits and 1 stop bit. Registers are 16bits, bigendian.
|Output Power high bits||0x0012||R|
|Output Power low bits||0x0013||R|
|OPP Value high bits||0x0022||RW|
|OPP Value low bits||0x0023||RW|
1. There is actually no OPP button on the power supply, but the protocol documentation lists, the address for it. Not relevant at the moment for a driver, since sigrok seems to have no OPP support anyway. 2. In the protocol documentation there is no mention of how to set the presets M1 to M6. But it seems they start at address 0x1000. This needs to be researched still, but I currently do not know how to handle presets in sigrok, so I need to find that out too. Also there is some other addresses listed in config files that are with the software provided, these need to be researched too.
3. The Protection State registers contains looks as follow and the designated bit goes high if the protection state is active:
|0||OVP||Over Voltage Protection|
|1||OCP||Over Current Protection|
|2||OPP||Over Power Protection|
|3||OTP||Over Temperature Protection|
|4||SCP||Short Circuit Protection|
the 2nd byte does not give any information, and seems to always be 0.
4. The decimals registers contains the the decimal information for Voltage, Current and Power. The lower 12 bits are used with 4bits for each value. If the register content is 0x0321, it means Voltage has 3 decimals, Current 2 and Power 1.
|Voltage upper Limit (UH)||0xC11E||R||4 bytes long, contains high voltage limit (like the limit you get when turning the knob on the device), did not even try to write to it, values are same as current in format so divide int value by 10^digits|
|Current upper Limit (IH)||0xC12E||R||4 bytes long, contains high current limit (like the limit you get when turning the knob on the device), did not even try to write to it, values are same as current in format so divide int value by 10^digits|
|Voltage lower Limit? (UL)||0xC110||R||4 bytes long, not sure what this is, it contains the value 10. But my supply outputs at 1 already.|
|Current lower Limit? (IL)||0xC120||R||4 bytes long, not sure what this is, it contains the value 21. And my power supply actually only starts outputting when set to 21mA or above.|
|Buzzer||0x8804||RW||2 bytes long, you can enable (write 0x0001) or disable (write 0x0000) the buzzer. It beeps on every single click (and on startup ) so probably no one wants to enable this ever.|
|defaultshow||0x8802||?||2 bytes long, no idea what it is about|
|powerstat||0x8801||?||2 bytes long, no idea what it is about|
|scp||0x8803||R||2 bytes long, no idea what it is about, i can't write to it, maybe my model just has no scp support?|
|sdtime||0xCCCC||?||2 bytes long, no idea what it is about|
|settimespan||0x0032||?||2 bytes long, timespan till it auto disables output, but only if you use the preset list function. Don't see how this is useful for anything since the value only matters per preset.|
|preset voltage||0x1000+(0 to 5)*10||RW||2 bytes long, registers for presets M1 to M6|
|preset current||0x1001+(0 to 5)*10||RW||2 bytes long, registers for presets M1 to M6|
|preset timespan||0x1002+(0 to 5)*10||RW||2 bytes long, registers for presets M1 to M6, max value 9999 (this is seconds, so max is about 2,78h)|
|preset enabled (included in list)||0x1003+(0 to 5)*10||RW||2 bytes long, registers for presets M1 to M6|