jbruce12000 / kiln-controller

Turns a Raspberry Pi into an inexpensive, web-enabled kiln controller.
189 stars 104 forks source link

31856 and type S not working #171

Open giorgiodidon opened 4 months ago

giorgiodidon commented 4 months ago

hi all, trying to upgrade kiln with max31856 and a type S thermocouple, but i'm having these errors, and have no idea what's the problem, already double checked pin out, wiring and config.py

2024-02-15 11:50:44,682 ERROR oven: Problem reading temp cold junction temp too high 2024-02-15 11:50:44,903 ERROR oven: Problem reading temp cold junction range fault 2024-02-15 11:50:45,123 ERROR oven: Problem reading temp cold junction range fault

thank you for your time giorgio

rondoc commented 4 months ago

Check that the thermocouple is isolated from ground. There cannot be a tc to ground loop. The 31856 depends on an isolated tc. If the tc wiring goes close to any metal there is a risk of a contact. Even a damp pathway might be a problem. Ceramic insulators work well when dry. Ronald.

On Thu, Feb 15, 2024, 2:55 AM giorgiodidon @.***> wrote:

hi all, trying to upgrade kiln with max31856 and a type S thermocouple, but i'm having these errors, and have no idea what's the problem, already double checked pin out, wiring and config.py

2024-02-15 11:50:44,682 ERROR oven: Problem reading temp cold junction temp too high 2024-02-15 11:50:44,903 ERROR oven: Problem reading temp cold junction range fault 2024-02-15 11:50:45,123 ERROR oven: Problem reading temp cold junction range fault

thank you for your time giorgio

— Reply to this email directly, view it on GitHub https://github.com/jbruce12000/kiln-controller/issues/171, or unsubscribe https://github.com/notifications/unsubscribe-auth/AXA65GYLBDUHOXQN7AD47YLYTXSQTAVCNFSM6AAAAABDKA2CPWVHI2DSMVQWIX3LMV43ASLTON2WKOZSGEZTMMRSGE3DSMA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

giorgiodidon commented 4 months ago

Thank you for your answer, I don't know how to check isolation from ground for the TC, anyway the raspberry, 31856 and TC are on my table far from anything else so the TC should be isolated from ground

rondoc commented 4 months ago

To check tc to ground you need a VOM meter on ohms . Measure from either side of tc to ground it should be infinite ohms, or open circuit.

On Thu, Feb 15, 2024, 11:06 AM giorgiodidon @.***> wrote:

Thank you for your answer, I don't know ho to check isolation from ground for the TC, anyway the raspberry, 31856 and TC are on my table far from anything else so the TC should be isolated from ground

— Reply to this email directly, view it on GitHub https://github.com/jbruce12000/kiln-controller/issues/171#issuecomment-1946998145, or unsubscribe https://github.com/notifications/unsubscribe-auth/AXA65G7IUOAYVLS4JMNDLJ3YTZMC5AVCNFSM6AAAAABDKA2CPWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNBWHE4TQMJUGU . You are receiving this because you commented.Message ID: @.***>

giorgiodidon commented 4 months ago

WhatsApp Image 2024-02-16 at 15 35 16 (1) WhatsApp Image 2024-02-16 at 15 35 16

hi, tc is isolated from ground tested with a VOM on ohms and it is isolated. also tested 31856 with a type k TC (after modified config.py) but same errors. any othe suggestion? giorgio

jbruce12000 commented 4 months ago

change to the kill-controller directory... post the output of git branch and git log|head -30 here. that will tell me what branch and commit you're running. you should also post config.py so we can check that for problems.

giorgiodidon commented 4 months ago

pi@raspberrypi:~/kiln-controller $ git branch

pi@raspberrypi:~/kiln-controller $ git log|head -30 commit 8c9d3881dc9e36e80ccd2cb99a6d0e22ebbd237c Author: jason bruce jbruce12000@gmail.com Date: Mon Dec 11 10:21:41 2023 -0500

change autodection so only SW SPI needs pins listed in config.py

commit 9fb5ec940f929e3c1ce0e450ae70c7daeb6184d2 Author: jbruce12000 jbruce12000@gmail.com Date: Thu Dec 7 10:29:29 2023 -0500

adding section

commit d66ce7b616e621264a3fc5a26e2edef0c2d0c9b1 Author: jbruce12000 jbruce12000@gmail.com Date: Tue Dec 5 21:59:13 2023 -0500

another fixme

commit 267c999152dde7d778a2809977bd3104e3d9e3b2 Author: jbruce12000 jbruce12000@gmail.com Date: Tue Dec 5 15:27:27 2023 -0500

change subject

commit 97879168de7e027d76d829efd22ed48d6b84d723 Author: jbruce12000 jbruce12000@gmail.com Date: Tue Dec 5 15:00:00 2023 -0500

fix code block

config.py: import logging import os from digitalio import DigitalInOut import busio

######################################################################## #

General options

Logging

log_level = logging.INFO log_format = '%(asctime)s %(levelname)s %(name)s: %(message)s'

Server

listening_port = 8081

########################################################################

Cost Information

#

This is used to calculate a cost estimate before a run. It's also used

to produce the actual cost during a run. My kiln has three

elements that when my switches are set to high, consume 9460 watts.

kwh_rate = 0.40 # cost per kilowatt hour per currency_type to calculate cost to run job kw_elements = 3.0 # if the kiln elements are on, the wattage in kilowatts currency_type = "€" # Currency Symbol to show when calculating cost to run job

######################################################################## #

Hardware Setup (uses BCM Pin Numbering)

#

kiln-controller.py uses SPI interface from the blinka library to read

temperature data from the adafruit-31855 or adafruit-31856.

Blinka supports many different boards. I've only tested raspberry pi.

#

First you must decide whether to use hardware spi or software spi.

Hardware SPI

#

- faster

- requires 3 specific GPIO pins be used on rpis

- no pins are listed in this config file

Software SPI

#

- slower (which will not matter for reading a thermocouple

- can use any GPIO pins

- pins must be specified in this config file

#######################################

SPI pins if you choose Hardware SPI

#######################################

On the raspberry pi, you MUST use predefined

pins for HW SPI. In the case of the adafruit-31855, only 3 pins are used:

#

SPI0_SCLK = BCM pin 11 = CLK on the adafruit-31855

SPI0_MOSI = BCM pin 10 = not connected

SPI0_MISO = BCM pin 9 = D0 on the adafruit-31855

plus a GPIO output to connect to CS. You can use any GPIO pin you want.

I chose gpio pin 5:

#

GPIO5 = BCM pin 5 = CS on the adafruit-31855

#

Note that NO pins are configured in this file for hardware spi

#######################################

SPI pins if you choose software spi

#######################################

For software SPI, you can choose any GPIO pins you like.

You must connect clock, mosi, miso and cs each to a GPIO pin

and configure them below based on your connections.

#######################################

SPI is Autoconfigured !!!

#######################################

whether you choose HW or SW spi, it is autodetected. If you list the PINs

below, software spi is assumed.

#######################################

Output to control the relay

#######################################

A single GPIO pin is used to control a relay which controls the kiln.

I use GPIO pin 23.

try: import board spi_sclk = board.D17 #spi clock spi_miso = board.D27 #spi Microcomputer In Serial Out spi_cs = board.D22 #spi Chip Select spi_mosi = board.D10 #spi Microcomputer Out Serial In (not connected) gpio_heat = board.D23 #output that controls relay except (NotImplementedError,AttributeError): print("not running on blinka recognized board, probably a simulation")

#######################################

Thermocouple breakout boards

#######################################

There are only two breakoutboards supported.

max31855 - only supports type K thermocouples

max31856 - supports many thermocouples

max31855 = 0 max31856 = 1

uncomment these two lines if using MAX-31856

import adafruit_max31856 thermocouple_type = adafruit_max31856.ThermocoupleType.S

here are the possible max-31856 thermocouple types oven: Problem reading temp cold junction range fault

ThermocoupleType.B

ThermocoupleType.E

ThermocoupleType.J

ThermocoupleType.K

ThermocoupleType.N

ThermocoupleType.R

ThermocoupleType.S

ThermocoupleType.T

######################################################################## #

If your kiln is above the starting temperature of the schedule when you

click the Start button... skip ahead and begin at the first point in

the schedule matching the current kiln temperature.

seek_start = True

######################################################################## #

duty cycle of the entire system in seconds

Every N seconds a decision is made about switching the relay[s]

on & off and for how long. The thermocouple is read

temperature_average_samples times during and the average value is used.

sensor_time_wait = 2

######################################################################## #

PID parameters

#

These parameters control kiln temperature change. These settings work

well with the simulated oven. You must tune them to work well with

your specific kiln. Note that the integral pid_ki is

inverted so that a smaller number means more integral action.

pid_kp = 7.849466047285052 # Proportional 25,200,200 pid_ki = 14.711412131887194 # Integral pid_kd = 226.60766791897024 # Derivative

######################################################################## #

Initial heating and Integral Windup

#

this setting is deprecated and is no longer used. this happens by

default and is the expected behavior.

stop_integral_windup = True

######################################################################## #

Simulation parameters

simulate = False sim_t_env = 65 # deg sim_c_heat = 500.0 # J/K heat capacity of heat element sim_c_oven = 5000.0 # J/K heat capacity of oven sim_p_heat = 5450.0 # W heating power of oven sim_R_o_nocool = 0.5 # K/W thermal resistance oven -> environment sim_R_o_cool = 0.05 # K/W " with cooling sim_R_ho_noair = 0.1 # K/W thermal resistance heat element -> oven sim_R_ho_air = 0.05 # K/W " with internal air circulation

if you want simulations to happen faster than real time, this can be

set as high as 1000 to speed simulations up by 1000 times.

sim_speedup_factor = 1

######################################################################## #

Time and Temperature parameters

#

If you change the temp_scale, all settings in this file are assumed to

be in that scale.

temp_scale = "c" # c = Celsius | f = Fahrenheit - Unit to display time_scale_slope = "h" # s = Seconds | m = Minutes | h = Hours - Slope displayed in temp_scale per time_scale_slope time_scale_profile = "m" # s = Seconds | m = Minutes | h = Hours - Enter and view target time in time_scale_profile

emergency shutoff the profile if this temp is reached or exceeded.

This just shuts off the profile. If your SSR is working, your kiln will

naturally cool off. If your SSR has failed/shorted/closed circuit, this

means your kiln receives full power until your house burns down.

this should not replace you watching your kiln or use of a kiln-sitter

emergency_shutoff_temp = 2264 #cone 7

If the current temperature is outside the pid control window,

delay the schedule until it does back inside. This allows for heating

and cooling as fast as possible and not continuing until temp is reached.

kiln_must_catch_up = True

This setting is required.

This setting defines the window within which PID control occurs.

Outside this window (N degrees below or above the current target)

the elements are either 100% on because the kiln is too cold

or 100% off because the kiln is too hot. No integral builds up

outside the window. The bigger you make the window, the more

integral you will accumulate. This should be a positive integer.

pid_control_window = 5 #degrees

thermocouple offset

If you put your thermocouple in ice water and it reads 36F, you can

set set this offset to -4 to compensate. This probably means you have a

cheap thermocouple. Invest in a better thermocouple.

thermocouple_offset=0

number of samples of temperature to take over each duty cycle.

The larger the number, the more load on the board. K type

thermocouples have a precision of about 1/2 degree C.

The median of these samples is used for the temperature.

temperature_average_samples = 10

Thermocouple AC frequency filtering - set to True if in a 50Hz locale, else leave at False for 60Hz locale

ac_freq_50hz = False

########################################################################

Emergencies - or maybe not

########################################################################

There are all kinds of emergencies that can happen including:

- temperature is too high (emergency_shutoff_temp exceeded)

- lost connection to thermocouple

- unknown error with thermocouple

- too many errors in a short period from thermocouple

but in some cases, you might want to ignore a specific error, log it,

and continue running your profile instead of having the process die.

#

You should only set these to True if you experience a problem

and WANT to ignore it to complete a firing.

ignore_temp_too_high = False ignore_tc_lost_connection = False ignore_tc_cold_junction_range_error = False ignore_tc_range_error = False ignore_tc_cold_junction_temp_high = False ignore_tc_cold_junction_temp_low = False ignore_tc_temp_high = False ignore_tc_temp_low = False ignore_tc_voltage_error = False ignore_tc_short_errors = False ignore_tc_unknown_error = False

This overrides all possible thermocouple errors and prevents the

process from exiting.

ignore_tc_too_many_errors = False

########################################################################

automatic restarts - if you have a power brown-out and the raspberry pi

reboots, this restarts your kiln where it left off in the firing profile.

This only happens if power comes back before automatic_restart_window

is exceeded (in minutes). The kiln-controller.py process must start

automatically on boot-up for this to work.

DO NOT put automatic_restart_state_file anywhere in /tmp. It could be

cleaned up (deleted) by the OS on boot.

The state file is written to disk every sensor_time_wait seconds (2s by default)

and is written in the same directory as config.py.

automatic_restarts = True automatic_restart_window = 15 # max minutes since power outage automatic_restart_state_file = os.path.abspath(os.path.join(os.path.dirname( file ),'state.json'))

########################################################################

load kiln profiles from this directory

created a repo where anyone can contribute profiles. The objective is

to load profiles from this repository by default.

See https://github.com/jbruce12000/kiln-profiles

kiln_profiles_directory = os.path.abspath(os.path.join(os.path.dirname( file ),"storage", "profiles"))

kiln_profiles_directory = os.path.abspath(os.path.join(os.path.dirname( file ),'..','kiln-profiles','pottery'))

########################################################################

low temperature throttling of elements

kiln elements have lots of power and tend to drastically overshoot

at low temperatures. When under the set point and outside the PID

control window and below throttle_below_temp, only throttle_percent

of the elements are used max.

To prevent throttling, set throttle_percent to 100.

throttle_below_temp = 300 throttle_percent = 20

thank you all giorgio

giorgiodidon commented 2 months ago

hi all, if it seems to be all ok with config.py and wiring i will try with a new 31856, my last thought is my 31856 is not working. let me know if you can thank you for your time giorgio

rondoc commented 2 months ago

Make sure that the tc 56 or 55 board has a capacitor across the tc connection and also across the 5 volt input . This is needed to keep electrical noise from accessing the board. The value of the cap. isn't critical I would suggest 0.1 to 1.0 mfd. ceramic type. 10 volt or above ok. They need to be next to the board. Ronald

On Fri, Apr 12, 2024, 12:08 AM giorgiodidon @.***> wrote:

hi all, if it seems to be all ok with config.py and wiring i will try with a new 31856, my last thought is my 31856 is not working. let me know if you can thank you for your time giorgio

— Reply to this email directly, view it on GitHub https://github.com/jbruce12000/kiln-controller/issues/171#issuecomment-2051137978, or unsubscribe https://github.com/notifications/unsubscribe-auth/AXA65G7DM6TQZPZCROTSGQ3Y46CATAVCNFSM6AAAAABDKA2CPWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANJRGEZTOOJXHA . You are receiving this because you commented.Message ID: @.***>

jbruce12000 commented 3 days ago

hi @giorgiodidon , did you ever get this fixed? I see your on the blinka branch with the latest code [at the time of the post].

giorgiodidon commented 3 days ago

Not yet, the only thought is hardware failure somewhere, the 31856 or the thermocouple but I had no time to (and money!) to buy a new one, but I will let you know as soon as I will have news. Thank you for your time.