找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13880|回復: 21
收起左側(cè)

PID熱電偶溫控器制作 Arduino源程序(最終版)

  [復制鏈接]
回帖獎勵 75 黑幣 回復本帖可獲得 3 黑幣獎勵! 每人限 1 次(中獎概率 50%)
ID:276685 發(fā)表于 2021-3-21 18:04 | 顯示全部樓層 |閱讀模式
引腳對應       avr            arduino

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

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

SCk              PB1               52                     不要改

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

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

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


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

2021_03_21_17_51_IMG_3872.JPG

2021_03_21_17_22_IMG_3870.JPG

2021_03_21_17_22_IMG_3871.JPG

2021_03_21_18_35_IMG_3874.JPG

紅      pid輸出
藍      當前溫度
綠      目標溫度

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. }
復制代碼

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

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:435676 發(fā)表于 2021-3-28 16:07 | 顯示全部樓層
建議采集ADC不要用開發(fā)板自帶的因為精度不高,您可以加個其他的ADS采集精度高的?赡軙档驼`差
回復

使用道具 舉報

ID:32574 發(fā)表于 2021-4-8 21:24 | 顯示全部樓層
謝謝樓主分享,這個可以用來做電烙鐵嗎?
回復

使用道具 舉報

ID:276685 發(fā)表于 2021-4-11 14:11 | 顯示全部樓層
redtxd 發(fā)表于 2021-4-8 21:24
謝謝樓主分享,這個可以用來做電烙鐵嗎?

可以的。不過加熱器需要更換,升溫,恒溫。降溫再調(diào),非常耗費時間,需要耐心。如果改端口需要注意下,如#define SPI-CS-PIN。  DDRB/=(1<<SPI-CS-PIN);。這端口也僅僅限制于PBxx了。改成PAxx就需要DDRB用DDRA替換。也就是說你需要一張芯片端口圖和arduino端口圖,在proteus中可以找到。理論上除了硬件spi,其他端口都可以更改。
回復

使用道具 舉報

ID:907804 發(fā)表于 2021-4-21 09:23 | 顯示全部樓層
本帖最后由 dxxiaoyun 于 2021-4-21 15:30 編輯

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

回復

使用道具 舉報

ID:907804 發(fā)表于 2021-4-21 09:24 | 顯示全部樓層
我用的是繼電器,不用PDI 直接溫度到了動作差+0~6度。
回復

使用道具 舉報

ID:276685 發(fā)表于 2021-4-24 00:17 | 顯示全部樓層
dxxiaoyun 發(fā)表于 2021-4-21 09:23
下載下來的庫文件頭文件放怎么放到arduino IDE目錄里?

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

使用道具 舉報

ID:276685 發(fā)表于 2021-4-24 00:31 | 顯示全部樓層

RE: PID熱電偶溫控器制作 Arduino源程序(最終版)

dxxiaoyun 發(fā)表于 2021-4-21 09:23
下載下來的庫文件頭文件放怎么放到arduino IDE目錄里?

我用的定時器0所以是OCR0A,CS02,CS01,CS00。你如果要是新手的話先示波器看一遍波形。proteus仿真一下加熱器大概了解一下,心里有底再買些材料再回來實驗。
回復

使用道具 舉報

ID:276685 發(fā)表于 2021-4-28 20:17 | 顯示全部樓層
有部分網(wǎng)友反應不會添加項目文件到IDE,這里我直接分享一個全部添加好了的


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

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

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:934508 發(fā)表于 2021-6-8 13:59 | 顯示全部樓層
您好,想問問如果測溫熱電偶要從max6675改到ntc100k需要改哪些參數(shù),以及使用ramps時需要怎么接線(有沒有實際接線引腳圖或說明)?非常感謝!
回復

使用道具 舉報

ID:276685 發(fā)表于 2021-6-9 00:00 | 顯示全部樓層
liu97 發(fā)表于 2021-6-8 13:59
您好,想問問如果測溫熱電偶要從max6675改到ntc100k需要改哪些參數(shù),以及使用ramps時需要怎么接線(有沒有 ...



這里加熱器1(加熱棒)應該連接的是第10引腳也就是PB4,熱敏電阻A13,A14.目前就兩個加熱器,理論上你可以擴展n個
NTC.h,#define TABLE_LONG  (列表長度)更改你自己的
列表展示了ADC 0~1024,對應的溫度值(攝氏度)請依據(jù)實驗和上拉電阻的大小靈活調(diào)整。相鄰兩數(shù)據(jù)進行線性插補,二分法進行快速查表。
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  更改成這個樣子


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
回復

使用道具 舉報

ID:215949 發(fā)表于 2021-6-29 09:34 | 顯示全部樓層
感謝樓主分享,正好在做一個需要PID溫度控制的課題,參考一下
回復

使用道具 舉報

ID:462629 發(fā)表于 2021-12-28 10:12 | 顯示全部樓層
能改成51的嗎?
回復

使用道具 舉報

ID:228452 發(fā)表于 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..
回復

使用道具 舉報

ID:276685 發(fā)表于 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..

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

以下建議希望對你有幫助max31855可以使用軟件spi進行通訊。你可以直接下載開源庫進行通訊,然后xxx.temp_pid_manger(”A::這里直接輸入一個攝氏溫度即可“)計算參數(shù)后注入軟件pwm占空比;。要注意的是A段程序是刷新溫度.而不是!發(fā)送測量質(zhì)量等待然后返回!。測量指令要在loop里面執(zhí)行。
回復

使用道具 舉報

ID:992285 發(fā)表于 2022-4-11 15:24 | 顯示全部樓層
謝謝樓主,最近折騰PT100
回復

使用道具 舉報

ID:593198 發(fā)表于 2022-10-8 09:48 | 顯示全部樓層
下載了,學習一下PID.
回復

使用道具 舉報

ID:1052464 發(fā)表于 2022-11-17 16:24 | 顯示全部樓層
為啥庫文件導不進去呀
回復

使用道具 舉報

ID:276685 發(fā)表于 2022-11-21 21:36 | 顯示全部樓層
小黑黑2333 發(fā)表于 2022-11-17 16:24
為啥庫文件導不進去呀

是不是因為文件名稱大寫,或者你直接下載IDE版本的.沒刷出來手動弄一下
回復

使用道具 舉報

ID:1063633 發(fā)表于 2023-2-20 18:11 | 顯示全部樓層
最近在學習溫控,學習下
回復

使用道具 舉報

ID:1087019 發(fā)表于 2023-7-3 14:51 | 顯示全部樓層
最近在學習溫控,學習學習
回復

使用道具 舉報

ID:941557 發(fā)表于 2023-7-19 09:01 | 顯示全部樓層
最近在學習PID溫控,感謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表