40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
|
import serial
|
||
|
import queue
|
||
|
import threading
|
||
|
|
||
|
|
||
|
class InductionHeater:
|
||
|
"""Interface to the MHS5200A function generator driving the LC tank"""
|
||
|
def __init__(self, port, induction_min, induction_max):
|
||
|
self.port = port
|
||
|
self.induction_min = induction_min
|
||
|
self.induction_max = induction_max
|
||
|
self.queue = queue.Queue(1)
|
||
|
|
||
|
def start(self):
|
||
|
self.serial = serial.Serial(self.port, 57600)
|
||
|
self.thread = threading.Thread(target=self.thread_target)
|
||
|
self.thread.start()
|
||
|
|
||
|
def thread_target(self):
|
||
|
while True:
|
||
|
amount = self.queue.get()
|
||
|
if amount is None:
|
||
|
break
|
||
|
|
||
|
amount = max(min(amount, 0.5), -0.5)
|
||
|
freq = ((self.induction_min + self.induction_max)/2
|
||
|
+ amount*(self.induction_max - self.induction_min))
|
||
|
|
||
|
command = ":s1f{:010d}\n".format(int(freq*1e2))
|
||
|
self.serial.write(command.encode())
|
||
|
self.serial.readline()
|
||
|
|
||
|
def set(self, amount):
|
||
|
self.queue.put(amount, block=False)
|
||
|
|
||
|
def stop(self):
|
||
|
self.queue.put(None, block=True)
|
||
|
self.thread.join()
|
||
|
self.serial.close()
|