標(biāo)題: PID熱電偶溫控器制作 Arduino源程序(最終版) [打印本頁(yè)]

作者: fbn20050523    時(shí)間: 2021-3-21 18:04
標(biāo)題: PID熱電偶溫控器制作 Arduino源程序(最終版)
引腳對(duì)應(yīng)       avr            arduino

加熱器1       PB4            10                        只能使用PB_XX端口
加熱器2       PH5            8                          只能使用PH_XX端口, 詳細(xì)見TIMER.h     #define

熱電偶MAX6675   硬件spi
CS                PB0               53                     詳細(xì)見SPIMAX6675.h,只能使用PB_XX端口

SCk              PB1               52                     不要改

S0                PB3(MISO)     50                     不要改
加熱棒       12v   40W (3d打印機(jī)噴頭)

PID的3個(gè)參數(shù)如果加熱器相同基本不需要修改,我的參數(shù),謙虛的說(shuō)只能保持+-3度左右的一個(gè)誤差,細(xì)心的網(wǎng)友可以繼續(xù)調(diào)一調(diào)。

程序多使用寄存器操作,具體詳見手冊(cè)。使用arduino框架。
程序里面包括了NTC熱敏電阻的ADC,軟件濾波,二分查表的內(nèi)容,因?yàn)槟莻(gè)表格兼容性不好,所以這次只使用熱電偶。
有能力的網(wǎng)友可以更改并使用,請(qǐng)閱讀NTC.h     #define TABLE_LONG  (列表長(zhǎng)度)


這個(gè)程序已經(jīng)連續(xù)更改3次了,點(diǎn)開主頁(yè)看以前的。









紅      pid輸出
藍(lán)      當(dāng)前溫度
綠      目標(biāo)溫度

Arduino源程序如下:
  1. #include "Arduino.h"
  2. #include "NTC.h"
  3. #include "PID.h"
  4. #include "TIMER.h"
  5. #include "DELAY.h"
  6. #include "SPI_MAX6675.h"

  7. TEMP_PID heart(7.19, 0.40, 32.4, 1, 2048);
  8. TEMP_PID bed(10, 0.023, 305.4, 0.95, 2048);

  9. NTC NTC_1(A13);
  10. NTC NTC_2(A14);
  11. float MAX;

  12. void setup(void)
  13. {
  14.   
  15.   Serial.begin(115200);
  16.   spi_init();
  17.   heart.temp_pid_change_target(200);
  18.   bed.temp_pid_change_target(0);
  19.   temp_timer_port_init();
  20.   temp_timer_on();

  21. }

  22. void loop(){
  23. MAX=spi_read_temp();
  24. delay_nms(1000);
  25.   //NTC_1.temp_ntc_read();
  26.   //NTC_2.temp_ntc_read();
  27.   /*
  28. if(Serial2.available()>6){
  29. float a=Serial2.parseFloat();
  30. float b=Serial2.parseFloat();
  31. float c=Serial2.parseFloat();

  32. heart.temp_pid_change_kp(a);
  33. heart.temp_pid_change_ki(b);
  34. heart.temp_pid_change_kd(c);
  35. Serial2.println("***********************");
  36. Serial2.println(a);
  37. Serial2.println(b);
  38. Serial2.println(c);
  39. Serial2.println("***********************");
  40.   }
  41.   */
  42. }
復(fù)制代碼

所有資料51hei提供下載:
2020_2_27 PID temperature.zip (921.48 KB, 下載次數(shù): 191)

作者: 1051798957    時(shí)間: 2021-3-28 16:07
建議采集ADC不要用開發(fā)板自帶的因?yàn)榫炔桓,您可以加個(gè)其他的ADS采集精度高的?赡軙(huì)降低誤差
作者: redtxd    時(shí)間: 2021-4-8 21:24
謝謝樓主分享,這個(gè)可以用來(lái)做電烙鐵嗎?
作者: fbn20050523    時(shí)間: 2021-4-11 14:11
redtxd 發(fā)表于 2021-4-8 21:24
謝謝樓主分享,這個(gè)可以用來(lái)做電烙鐵嗎?

可以的。不過(guò)加熱器需要更換,升溫,恒溫。降溫再調(diào),非常耗費(fèi)時(shí)間,需要耐心。如果改端口需要注意下,如#define SPI-CS-PIN。  DDRB/=(1<<SPI-CS-PIN);。這端口也僅僅限制于PBxx了。改成PAxx就需要DDRB用DDRA替換。也就是說(shuō)你需要一張芯片端口圖和arduino端口圖,在proteus中可以找到。理論上除了硬件spi,其他端口都可以更改。
作者: dxxiaoyun    時(shí)間: 2021-4-21 09:23
本帖最后由 dxxiaoyun 于 2021-4-21 15:30 編輯

下載下來(lái)的庫(kù)文件頭文件放怎么放到arduino IDE目錄里?
我用的是繼電器,不用PDI 直接溫度到了動(dòng)作差+0~6度。


作者: dxxiaoyun    時(shí)間: 2021-4-21 09:24
我用的是繼電器,不用PDI 直接溫度到了動(dòng)作差+0~6度。
作者: fbn20050523    時(shí)間: 2021-4-24 00:17
dxxiaoyun 發(fā)表于 2021-4-21 09:23
下載下來(lái)的庫(kù)文件頭文件放怎么放到arduino IDE目錄里?

您好,arduino ide。點(diǎn)擊項(xiàng)目,添加文件(有的版本不能一次添加,需要操作數(shù)次)繼電器根場(chǎng)效應(yīng)管控制的最大區(qū)別就是pwm頻率。單片機(jī)自帶的硬件pwm頻率很顯然不適用,因?yàn)樗l率太高了,會(huì)降低加熱棒壽命。我采用ctc中斷模式進(jìn)行軟件pwm大約7.68hz,更改中斷頻率就可以降低pwm頻率,OCR0A寄存器和CS20/21/22?梢哉{(diào)整你想要的頻率。

作者: fbn20050523    時(shí)間: 2021-4-24 00:31
標(biāo)題: RE: PID熱電偶溫控器制作 Arduino源程序(最終版)
dxxiaoyun 發(fā)表于 2021-4-21 09:23
下載下來(lái)的庫(kù)文件頭文件放怎么放到arduino IDE目錄里?

我用的定時(shí)器0所以是OCR0A,CS02,CS01,CS00。你如果要是新手的話先示波器看一遍波形。proteus仿真一下加熱器大概了解一下,心里有底再買些材料再回來(lái)實(shí)驗(yàn)。
作者: fbn20050523    時(shí)間: 2021-4-28 20:17
有部分網(wǎng)友反應(yīng)不會(huì)添加項(xiàng)目文件到IDE,這里我直接分享一個(gè)全部添加好了的


PID_TEMP_2021_4_24.zip (7.78 KB, 下載次數(shù): 46)

如果哪位網(wǎng)友想想學(xué)習(xí)PIO開發(fā)環(huán)境的可以參考以下鏈接
https://blog.csdn.net/qq_39080978/article/details/114879766
https://blog.csdn.net/acktomas/article/details/115393834


作者: liu97    時(shí)間: 2021-6-8 13:59
您好,想問(wèn)問(wèn)如果測(cè)溫?zé)犭娕家獜膍ax6675改到ntc100k需要改哪些參數(shù),以及使用ramps時(shí)需要怎么接線(有沒有實(shí)際接線引腳圖或說(shuō)明)?非常感謝!
作者: fbn20050523    時(shí)間: 2021-6-9 00:00
liu97 發(fā)表于 2021-6-8 13:59
您好,想問(wèn)問(wèn)如果測(cè)溫?zé)犭娕家獜膍ax6675改到ntc100k需要改哪些參數(shù),以及使用ramps時(shí)需要怎么接線(有沒有 ...



這里加熱器1(加熱棒)應(yīng)該連接的是第10引腳也就是PB4,熱敏電阻A13,A14.目前就兩個(gè)加熱器,理論上你可以擴(kuò)展n個(gè)
NTC.h,#define TABLE_LONG  (列表長(zhǎng)度)更改你自己的
列表展示了ADC 0~1024,對(duì)應(yīng)的溫度值(攝氏度)請(qǐng)依據(jù)實(shí)驗(yàn)和上拉電阻的大小靈活調(diào)整。相鄰兩數(shù)據(jù)進(jìn)行線性插補(bǔ),二分法進(jìn)行快速查表。
TIMER.cpp 第77行更改如下;

   77    PWM.temp_soft_pwm1_duty=(int) heart.temp_pid_manger(NTC_1.temp_ntc_now());
   78    PWM.temp_soft_pwm2_duty=(int) bed.temp_pid_manger( NTC_2.temp_ntc_now());





main.cpp  更改成這個(gè)樣子


28 //MAX=spi_read_temp();
29  delay_nms(500);




30  NTC_1.temp_ntc_read();
31  NTC_2.temp_ntc_read();











RAMPS_1.4_PIN.jpg (237.26 KB, 下載次數(shù): 230)

RAMPS_1.4_PIN.jpg

作者: Beautful    時(shí)間: 2021-6-29 09:34
感謝樓主分享,正好在做一個(gè)需要PID溫度控制的課題,參考一下
作者: woyaodwn    時(shí)間: 2021-12-28 10:12
能改成51的嗎?
作者: mick32    時(shí)間: 2022-4-9 01:11
"Can it be changed to 51?"
For 51 it is quite different  but possible..

Maybe it is time to switch to
MAX31855
K-, J-, N-, T-, S-, R-, or E-type thermocouple. The data is output in a signed 14-bit, SPI...
Thanks for code..
作者: fbn20050523    時(shí)間: 2022-4-9 20:06
mick32 發(fā)表于 2022-4-9 01:11
"Can it be changed to 51?"
For 51 it is quite different  but possible..

首先謝謝你的建議。細(xì)心看這個(gè)程序是由許多不足的。首先這里spi通訊是針對(duì)寄存器和儀表轉(zhuǎn)換芯片寫的驅(qū)動(dòng),兼容性就差了許多,此外還缺少一個(gè)觀察器來(lái)檢測(cè)系統(tǒng)運(yùn)行狀態(tài)。遺憾的是我手頭沒有51系列開發(fā)板也沒有這方面的編程經(jīng)驗(yàn),這個(gè)項(xiàng)目下一步會(huì)有一個(gè)自動(dòng)pid校準(zhǔn)器與可調(diào)溫度曲線類似回流焊。并使用32位芯片來(lái)接替。

以下建議希望對(duì)你有幫助max31855可以使用軟件spi進(jìn)行通訊。你可以直接下載開源庫(kù)進(jìn)行通訊,然后xxx.temp_pid_manger(”A::這里直接輸入一個(gè)攝氏溫度即可“)計(jì)算參數(shù)后注入軟件pwm占空比;。要注意的是A段程序是刷新溫度.而不是!發(fā)送測(cè)量質(zhì)量等待然后返回!。測(cè)量指令要在loop里面執(zhí)行。
作者: leichangrun    時(shí)間: 2022-4-11 15:24
謝謝樓主,最近折騰PT100
作者: zjs500217    時(shí)間: 2022-10-8 09:48
下載了,學(xué)習(xí)一下PID.
作者: 小黑黑2333    時(shí)間: 2022-11-17 16:24
為啥庫(kù)文件導(dǎo)不進(jìn)去呀
作者: fbn20050523    時(shí)間: 2022-11-21 21:36
小黑黑2333 發(fā)表于 2022-11-17 16:24
為啥庫(kù)文件導(dǎo)不進(jìn)去呀

是不是因?yàn)槲募Q大寫,或者你直接下載IDE版本的.沒刷出來(lái)手動(dòng)弄一下
作者: sophiajee    時(shí)間: 2023-2-20 18:11
最近在學(xué)習(xí)溫控,學(xué)習(xí)下
作者: xzsre    時(shí)間: 2023-7-3 14:51
最近在學(xué)習(xí)溫控,學(xué)習(xí)學(xué)習(xí)
作者: Yale666    時(shí)間: 2023-7-19 09:01
最近在學(xué)習(xí)PID溫控,感謝分享




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1