- moving docs to a directory

This commit is contained in:
jbruce
2018-12-24 19:45:25 -05:00
parent 6e2ac3c05b
commit 8e3368103a
3 changed files with 0 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
# start a run
curl -d '{"cmd":"run", "profile":"cone-05-lo"}' -H "Content-Type: application/json" -X POST http://0.0.0.0:8081/api
# skip the first part of a run
# restart the kiln on a specific profile and start at minute 60
curl -d '{"cmd":"run", "profile":"cone-05-lo","startat":60}' -H "Content-Type: application/json" -X POST http://0.0.0.0:8081/api
# stop a schedule
curl -d '{"cmd":"stop"}' -H "Content-Type: application/json" -X POST http://0.0.0.0:8081/api
+49
View File
@@ -0,0 +1,49 @@
Tuning PID Vaules
=================
## The Goal
A controller with properly tuned PID values reacts quickly to changes in the set point, but does not overshoot much. It settles quickly from any oscillations and hovers really close to the set point. What do I mean by close? The average error for my kiln on a 13 hour schedule is .75 degrees F... and I have a noisy thermocouple, so it is possible to do even better.
## Try the Existing Values
My kiln is Skutt KS-1018 with a kiln vent. Try the current settings for pid_kp, pid_ki, and pid_kd and if they work for you, you're done. Otherwise, you have some experimentation ahead of you. The following exercise took me about 2 hours of testing.
## The Tuning Process
in config.py set the PID values like so...
pid_kp = 1.0
pid_ki = 0.0
pid_kd = 0.0
run a test schedule. I used a schedule that switches between 200 and 250 F every 30 minutes.
What you are looking for is overshoot (in my case 25F) past 200F to 225F. The next thing the controller should do is undershoot by just a little below the set point of 200F. If these two things happen, great. If not, you will need to change pid_kp to a higher or lower value.
Once you get the overshoot and minimal undershoot, you need to record some values. First grab the overshoot... in my case 25F.
pid_kp = 25
Measure the time in seconds from high peak to low peak. In my case this was 725 seconds. Multiply that number by 1.5 to get the Integral. So 725 * 1.5 = 1088.
pid_ki = 1088
Now set the derivative at 1/5 of the Integral. So 1088/5 = 217
pid_kd = 217
in essence these values mean...
| setting | Value | Action |
| ------- | ----- | ------ |
| pid_kp | 25 | react pretty slowly |
| pid_ki | 1088 | predict really far forward in time and make changes early |
| pid_kd | 217 | heavily dampen oscillations |
Now, run the test schedule again and see how well it works. Expect some overshoot as the kiln reaches the set temperature the first time, but no oscillation. Any holds or ramps after that should have a smooth transition and should remain really close to the set point [1 or 2 degrees F].
## Troubleshooting
* only change one value at a time, then test it.
* If there is too much overshoot, decrease pid_kp.
* If the temp is always below the set point, increase pid_ki.
+84
View File
@@ -0,0 +1,84 @@
Troubleshooting
==========
When I started this project, I'd never worked with RPi gpio. I think I got
just about everything backwards possible. I blew up a MAX-31855 chip... POOF,
up in smoke!
So, invest a little time to learn the hardware and the software available to
you to verify everything works as expected.
## Breadboard Orientation
![Image](https://github.com/jbruce12000/kiln-controller/blob/master/public/assets/images/breadboard.png)
If you're using a breadboard with a labeled break-out board, verify:
* where pin one is using a multimeter. it sounds stupid, but it will save you time.
* measure the voltage between all the 3V3 pins and a GND pin
* measure the voltage between all the GND pins and a GND pin
* measure the voltage between the 5V pins and a GND pin
## Test Each GPIO Pin
I thought at one point that I had fried my RPi. I needed to verify that it
still worked as expected. Here's what I did to verify GPIO on my pi.
```gpio readall```
and you'll get output that looks something like this...
```
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 0 | 7 || 8 | 0 | IN | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 1 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 0 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 0 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 0 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
```
make sure all the GPIO pins you want to test have a **Mode** of **IN** to make it in input
if not, set the mode for each..
so, for example, to set **BCM** pin 4 as an input
```gpio -g mode 4 input```
verify it got set correctly using
```gpio readall```
enable pull-down resistor for pin 4 to make sure **V** stays zero when nothing is connected to the input
```gpio -g mode 4 down```
This will show you the output of gpio readall every 2 seconds. This way you can concentrate on
moving a wire to each gpio pin and then look up to verify **V** has changed as you expect without
having to type.
```watch gpio readall```
* connect a 3V3 pin in series to a 1k ohm resistor
* connect the other end of the resistor to each gpio pin one at a time
* when it is connected V should be 1
* when it is disconnected V should be 0