-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Soak stage too short #7
Comments
I have tested all 3 profiles. For Lead 217, the actual temp matched the profile pretty well (of course there was a bit of lag initially) until the reflow stage where it failed to reach the peak temp of the profile. For Lead 138, there was quite a lot of overshooting in preheating, which I believe was caused by the setting of the 'preheat_until' value which was too high for such a low temp profile. For Lead 183, as you have seen the picture, it's almost perfect. The lag only happened at the beginning of a 'cold start', in which case it needed some time to catch up with the profile, but after that, the rate of heating up at full throttle was well enough to meet the requirements of any of those 3 profiles. My oven rated 800 watts, and only costed me about 12.5 EUR, I guess any oven on the market can be as good in terms of the rate of heating up. So in my point of view, it's mainly a parameter tuning issue. In the current version, the inner timer which is used to look up the corresponding target temp in the profile will be reset to zero when the actual temp reaches the low end of the profile (that's also when the 1st red dot shown on the plot), this is the moment when the temp control logic starts to sync the actual temp with the ideal profile. I have a few proposals:
|
My first thought was defining
I thought that Or did you mean to keep
I'm not so sure about that. Theoretically the PID params should describe the behavior of the heater & measurement, so they should be independent from the profile. Once the ideal values are found, they should work well with any profile. The current problems your described probably arise from less-than-optimal PID values. Unfortunately I have no clue how to do PID tuning.
Yes, I agree. Most people probably use only 1 or 2 solder pastes. But I'd like to make additional profiles for other purposes, such as one for baking components (get rid of moisture), and one for constant reflow (for reworking on the hot plate, e.g. replace components). That should easily be possible. |
|
We could have a look at how 3D printers do PID auto-tuning, since the temperatures are in a similar range. I run RepRap firmware on my printer and the tuning works very well. I found the snippet of source code that does the tuning. It's also well documented within the code: Pid.cpp |
Auto tuning is great, but the major differences need to be considered: 1. the thermal inertia is so much smaller for the 3D printer; 2. the working temp of the hot end and the heated bed are constant. |
I tuned my PIDs and improved the behavior a lot, but one fundamental problem that always remained is that the heater takes a while from the start until the measured temperature curve rises, so the actual curve always lacked behind and that made it very hard for the PID do react properly in the soak stage. I solved this by making a simple change to the profile (so far only Sn96.5): I added 15 seconds of delay at the beginning (with temperature 30C). Due to the Your machine would probably also benefit from this. It's not ideal to have this delay in the profile... it would be preferable to have an option in As there were no further issues with |
I got you. Your plate needs a bit longer to warm up (to achieve a higher rate of heating up), so extra time is needed before the temp control logic starts to sync with the target temp. Definitely I agree that it's preferable to have it in the config than change the profile file. As soon as the chart is about to draw the 1st point (and sync with target temp), it will wait until the set delay time is passed. My oven is ok, as I sealed the chamber of the oven, as well as wrapped it with thick ceramic fiber cotton, so the soak stage is just fine once the PID is properly tuned. |
I added a pre-delay warm-up to deal with either the heating element is too slow (not powerful enough, which is my case) or the thermal inertia is too great (which is the case of your plate). Below is the effect of a cold start from 20 degree, now both preheat & soak curves are followed nicely. The The update has been pushed to |
|
I merged this into my branch and will test. This is definitely better than defining a delay in the profile (since it's related to the machine and not to the solder paste). I also merged two commits from my branch back into beta2: one with an option of enable the integration term of the PID in all stages, and another one that renames two profiles, e.g. the profile name for Sn42/Bi57.6/Ag0.4 was changed from "Lead 138" to "NoPb 138" since it doesn't contain any lead. |
With the latest code, my machine always reads the temperature as 0.0 degrees :( |
That's strange. I didn't make any change on temperature measuring. |
Yes, the most plausible explanation would be that my thermocouple got disconnected, but it's all mounted within the enclosure and I didn't even open it, so there was no mechanical force on it. I will keep investigating. |
@pastaclub Did you get a chance to test it? Any feedback? :-) |
No, I still had the software freezing (with relatively recent code) and then the new problem with the thermocouple reading 0.0 degrees. I'm planning to test it with a different ESP32 on Bibbbi's PCB, but haven't ordered the PCB yet since I want to order more different PCBs together to save on international shipping. I'm a bit worried about running into more problems with that PCB since it doesn't seem well supported and I'm not sure how the touch is supposed to work as the pins are not connected. We'll see... |
As can be seen in screenshots (e.g. this one, heaters are a bit slow and the actual temperature curve lags behind the intended profile.
In the current implementation this leads to a soak phase which is too short. In the Lead217 profile, the specified soak stage is from 90s to 180s with the temperature raising from 150C to 175C, i.e. a 25C increase over 90s. The actual (measured) temperature reaches 150C only with a delay, yet the device soon heats more to transition to the reflow phase. It's not soaking long enough, and the temperature rises too quickly, which is not good for the components.
As a simple remedy, I suggest syncing the actual curve with the profile up to a specified temperature, for example 90C. That means that during the pre-heat stage, whenever the temperature is measured, the profile is shifted on the time-axis so that the actual temperature matches the temperature specified in the profile. For example, when the heater is slower, the profile will be shifted right in the screenshot, until reaching 90C. At 90C both curves are crossing. From there on, the behavior would be just as before.
The text was updated successfully, but these errors were encountered: