引脚对应 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个参数如果加热器相同基本不需要修改,我的参数,谦虚的说只能保持+-3度左右的一个误差,细心的网友可以继续调一调。
程序多使用寄存器操作,具体详见手册。使用arduino框架。
程序里面包括了NTC热敏电阻的ADC,软件滤波,二分查表的内容,因为那个表格兼容性不好,所以这次只使用热电偶。
有能力的网友可以更改并使用,请阅读NTC.h #define TABLE_LONG (列表长度)
这个程序已经连续更改3次了,点开主页看以前的。
红 pid输出
蓝 当前温度
绿 目标温度
Arduino源程序如下:
- #include "Arduino.h"
- #include "NTC.h"
- #include "PID.h"
- #include "TIMER.h"
- #include "DELAY.h"
- #include "SPI_MAX6675.h"
- TEMP_PID heart(7.19, 0.40, 32.4, 1, 2048);
- TEMP_PID bed(10, 0.023, 305.4, 0.95, 2048);
- NTC NTC_1(A13);
- NTC NTC_2(A14);
- float MAX;
- void setup(void)
- {
-
- Serial.begin(115200);
- spi_init();
- heart.temp_pid_change_target(200);
- bed.temp_pid_change_target(0);
- temp_timer_port_init();
- temp_timer_on();
- }
- void loop(){
- MAX=spi_read_temp();
- delay_nms(1000);
- //NTC_1.temp_ntc_read();
- //NTC_2.temp_ntc_read();
- /*
- if(Serial2.available()>6){
- float a=Serial2.parseFloat();
- float b=Serial2.parseFloat();
- float c=Serial2.parseFloat();
- heart.temp_pid_change_kp(a);
- heart.temp_pid_change_ki(b);
- heart.temp_pid_change_kd(c);
- Serial2.println("***********************");
- Serial2.println(a);
- Serial2.println(b);
- Serial2.println(c);
- Serial2.println("***********************");
- }
- */
- }
复制代码
所有资料51hei提供下载:
2020_2_27 PID temperature.zip
(921.48 KB, 下载次数: 191)
|