#!/usr/bin/python # HAL userspace component to calculate corrected temperature values for reprap # ntc thermistors # Copyright (C) 2009 Joachim Steiger # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from math import * import sys import time import hal if len(sys.argv) > 1: num = int(sys.argv[1]) else: num = 1 c = hal.component("repraptemp") for foo in range(0, num): c.newpin("repraptemp.%02d.in" % foo, hal.HAL_FLOAT, hal.HAL_IN) c.newpin("repraptemp.%02d.out" % foo, hal.HAL_FLOAT, hal.HAL_OUT) c.newparam("repraptemp.%02d.r0" % foo, hal.HAL_U32, hal.HAL_RW) c.newparam("repraptemp.%02d.t0" % foo, hal.HAL_S32, hal.HAL_RW) c.newparam("repraptemp.%02d.beta" % foo, hal.HAL_U32, hal.HAL_RW) c.newparam("repraptemp.%02d.v" % foo, hal.HAL_FLOAT, hal.HAL_RW) c.newparam("repraptemp.%02d.r2" % foo, hal.HAL_U32, hal.HAL_RW) c['repraptemp.%02d.r0' % foo] = 100000 c['repraptemp.%02d.t0' % foo] = 25 c['repraptemp.%02d.beta' % foo] = 4066 c['repraptemp.%02d.v' % foo] = 5.0 c['repraptemp.%02d.r2' % foo] = 4700 c.ready() try: while 1: # select.select(fds, [], [], .01) for foo in range(0, num): k = c['repraptemp.%02d.r0' % foo] * exp(-(c['repraptemp.%02d.beta' % foo]) / (c['repraptemp.%02d.t0' % foo] + 273.15)) r = c['repraptemp.%02d.r2' % foo] * c['repraptemp.%02d.in' % foo] / (c['repraptemp.%02d.v' % foo] - c['repraptemp.%02d.in' % foo]) c['repraptemp.%02d.out' % foo] = (c['repraptemp.%02d.beta' % foo] / log (r / k)) - 273.15 time.sleep(.001) except (KeyboardInterrupt,): raise SystemExit, 0