Skip to content

Commit ffbc7a8

Browse files
committed
Initial Commit.
A small helper library for dps5005 power supplies using minimalmodbus
0 parents  commit ffbc7a8

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

pydps.py

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import minimalmodbus, serial
2+
3+
# Example Usage:
4+
# import pydps
5+
# dps = pydps.dps_psu('COM3', 1) # port name, slave address
6+
# print(dps.getModel())
7+
# print(dps.getVoltage())
8+
9+
10+
class dps_psu(minimalmodbus.Instrument):
11+
12+
def __init__(self, portname, slaveaddress):
13+
minimalmodbus.Instrument.__init__(self, portname, slaveaddress,mode='rtu')
14+
self.serial.baudrate = 9600
15+
self.serial.bytesize = 8
16+
self.serial.parity = serial.PARITY_NONE
17+
self.serial.stopbits = 1
18+
self.serial.timeout = 0.5
19+
20+
def getVoltage(self):
21+
return self.read_register(0x0002,2)
22+
23+
def getCurrent(self):
24+
return self.read_register(0x0003,3)
25+
26+
def getPower(self):
27+
return self.read_register(0x0004,2)
28+
29+
def setVoltage(self,volt):
30+
self.write_register(0x0000,volt,2)
31+
32+
def setCurrent(self,curr):
33+
self.write_register(0x0001,curr,3)
34+
35+
def setOutput(self,on):
36+
self.write_register(0x0009,(1 if on else 0),0)
37+
38+
def getInputVoltage(self):
39+
return self.read_register(0x0005,2)
40+
41+
def getFwVersion(self):
42+
return self.read_register(0x000C,0)
43+
44+
def getModel(self):
45+
return self.read_register(0x000B,0)
46+
47+
def setKeyLock(self, lock):
48+
self.write_register(0x0006,(1 if lock else 0),0)
49+
50+
# Read all interesting status registers at once
51+
def getFullData(self):
52+
buf = self.read_registers(0x00,10)
53+
dat = {"u-set" : buf[0]*0.01, "i-set": buf[1]*0.001, "u-out":round(buf[2]*0.01,2), "i-out":round(buf[3]*0.001,3), "power":round(buf[4]*0.01,2), "u-in":buf[5]*0.01, "lock":buf[6], "protect":buf[7], "cvcc":buf[8],"on":buf[9]}
54+
return dat

test_dps.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import pydps,time
2+
3+
# dps Test Example
4+
5+
def main():
6+
dps = pydps.dps_psu('COM3', 1) # port name, slave address (in decimal)
7+
print(dps.getModel())
8+
print(dps.getFullData())
9+
dps.setVoltage(0)
10+
dps.setOutput(True)
11+
for v in range(0,1400,50):
12+
dps.setVoltage(v*0.01)
13+
time.sleep(0.25) #wait for stable voltage
14+
dat=dps.getFullData()
15+
print(str(dat["i-out"]) + 'A ' + str(dat['u-out']) + 'V')
16+
dps.setOutput(False)
17+
18+
19+
if __name__ == "__main__":
20+
main()

0 commit comments

Comments
 (0)