标题: STC单片机自制贴片元件拆焊台MAX6675控温程序 [打印本页]

作者: 冰冰洁洁    时间: 2019-1-2 21:52
标题: STC单片机自制贴片元件拆焊台MAX6675控温程序
因维修点小东西,自己做了个24V单片机拆焊台,能拆贴片元件和更换LED小灯,我主要就是这个灯和贴片电阻不好拆,才自制的,很好用。一个24vX4.5A电源,2个12v电热管串起来,TB有2块钱吧,3D打印机用,一个铝合金散热器,单片机和MAX6675温控器,降压芯片,继电器(没有pwm控MOS管,这个真用不着高大上的哈),开关只有加减温度,默认上电195度,这个温度拆焊正好,上图上程序,也算开源吧。

制作出来的实物图如下:


单片机源码:
  1. #include<reg51.h>
  2. #define uchar unsigned char//只有256
  3. #define uint unsigned int//有16位但占内存。
  4. #define ulong  unsigned long
  5. #include  <intrins.h>   
  6. sbit rs=P2^6;//
  7. sbit rw=P2^5;//
  8. sbit en=P2^7;//
  9. sbit k1=P1^0;//按键+
  10. sbit k2=P1^1;//按键-

  11. uchar set=195;//初始化温度
  12. sbit OUT=P1^2;//定义输出



  13. void delay (int a)//毫秒级延时
  14. {
  15. int x,y;
  16. for(x=a;x>0;x--)
  17.     for(y=110;y>0;y--);
  18. }

  19. //定义温度数据变量
  20. float wdd = 0;//单精度浮点型变量眼3.4*10^38----(-3.4*10^38)  占4个字节小数点后7-8位
  21. //double wdd = 0;//双精度浮点型变量    小数点后15-16位
  22. ulong x = 0;//长整数型温度
  23. uint  wd;//定义一个温度用于显示
  24. sbit  SO=P3^2;  //P1.0口与SO相连
  25. sbit  CS=P3^3;  //P1.1口与CS相连
  26. sbit  SCK=P3^4; //P1.2口与SCK相连

  27. /*******************************延时函数**********************************************/
  28. void Delay1Ms(uint t)
  29. {
  30.      uchar i;
  31.      for (;t>0;t--)
  32.         {
  33.         for (i=0;i<138;i++)
  34.             {
  35.             _nop_();_nop_();_nop_();_nop_();_nop_();
  36.             _nop_();_nop_();_nop_();_nop_();_nop_();
  37.             }
  38.         }   
  39. }
  40. void Delay1s(uchar t)
  41. {
  42.     for (;t>0;t--)
  43.         {
  44.         Delay1Ms(250);
  45.         Delay1Ms(250);
  46.         Delay1Ms(250);
  47.         Delay1Ms(250);
  48.         }   
  49. }
  50. void delayus()//us微秒延时
  51. {
  52. _nop_();
  53. _nop_();
  54. _nop_();
  55. _nop_();
  56. }
  57. unsigned long Re_Convert() //热电偶数据--读取温度
  58. { uchar i;
  59.   unsigned long Temp_2;
  60.   Temp_2=0;
  61.   CS=1;
  62.   SCK=0;
  63.   Delay1Ms(120); //不低于(52机)100MS不然数据无法刷新  
  64.   _nop_();_nop_();
  65.   CS=0;
  66.   for(i=0;i<16;i++)//16位数据读取
  67.      {
  68.       Temp_2<<=1;//向右移一位
  69.       _nop_();
  70.        SCK=1;//上升
  71.        if(SO==1)
  72.        {Temp_2=Temp_2|0x01;}
  73.        else
  74.        Temp_2=Temp_2|0x00;
  75.        _nop_();                                                                        
  76.        SCK=0;
  77.       _nop_();
  78.      }     
  79.   Temp_2=Temp_2<<1;    //向左移一位,取0-14位
  80.   Temp_2=Temp_2>>3;    //向右移4位,取3-14位
  81.   //Temp_2=1024.123456;//测试正常运行不要
  82.   return(Temp_2); //返回温度  
  83. }

  84. void write_com(uchar com)//写命令
  85. {
  86. rs=0;//
  87. rw=0;
  88. en=0;
  89. P0=com;
  90. delay(2);
  91. en=1;
  92. delay(5);
  93. en=0;
  94. delay(2);
  95. }
  96. void write_dat(uchar dat)//写数据
  97. {
  98. rs=1;//
  99. rw=0;
  100. en=0;
  101. P0=dat;
  102. delay(2);
  103. en=1;
  104. delay(5);
  105. en=0;
  106. delay(2);
  107. }
  108. void write_zfc(uchar *p)//定义一个带指针的函数?(字符串)
  109. {
  110.     while(*p!=0)//不能用";"
  111.     write_dat(*p++);
  112. }
  113. void init_1602()//1602初始化
  114. {
  115. write_com(0x38);//设置16X2显示
  116. delay(1);
  117. write_com(0x0C);//0e光标不闪//0c不显//0f闪烁显示
  118. delay(1);
  119. write_com(0x06);//光标移位加1
  120. delay(1);
  121. write_com(0x01);//清屏
  122. delay(1);
  123. write_com(0x80);
  124. write_zfc("Set=");

  125. }
  126. void write_TH(uchar set)//高温显示
  127. {
  128. uchar qian,bai,shi,ge;
  129.     qian=set/1000;
  130.     bai=set%1000/100;
  131.     shi=set%100/10;
  132.     ge=set%10;
  133.    
  134. write_com(0x80+4);
  135. // write_dat(0x30+qian);  
  136.     write_dat(0x30+bai);
  137.     write_dat(0x30+shi);
  138.    write_dat(0x30+ge);
  139.     write_dat(0xdf);//显上0
  140.     write_dat('C');

  141. }


  142. void display(uint tvalue)//4位显示子函数
  143. {
  144.    uchar qian,bai,shi,ge;
  145.     qian=tvalue/1000;
  146.     bai=tvalue%1000/100;
  147.     shi=tvalue%100/10;
  148.     ge=tvalue%10;
  149.    
  150.     write_com(0xc0+3);
  151.   write_zfc("WD =");
  152.    //write_dat(0x30+qian);
  153.      write_dat(0x30+bai);
  154.      write_dat(0x30+shi);
  155.    write_dat(0x30+ge);
  156.      write_dat(0xdf);//显上0
  157.    write_dat('C');

  158. }
  159. void keyscan()
  160. {
  161. if(k1==0)
  162. {
  163. // delay(5);
  164. //while(!k1);
  165. set++;
  166.      if(set>250)set=250;
  167. write_TH(set);
  168. }

  169. if(k2==0)
  170. {
  171. //delay(5);
  172. //while(!k2);
  173. set--;
  174.     if(set<30)set=30;
  175. write_TH(set);
  176. }


  177. }
  178. void main()
  179. {  
  180.     init_1602();
  181.     while(1)
  182.   {   
  183.         keyscan();
  184.         write_TH(set);//设置温度
  185.          
  186.           x=Re_Convert(); //读取温度//X=读到的值
  187.             wdd=25*x;//温度量化 X 0.25//取后两位就X25     
  188.              wd =(uint)wdd;//浮点型变量转换成uint型变量16位
  189.           //wd=wd-48;//计算                        
  190.           wd=wd/200;//计算           
  191.             display(wd);
  192.           if(wd>set)
  193.             {
  194.             OUT=1;
  195.             write_com(0x80+11);
  196.       write_zfc("<off>");   
  197.             }
  198.             else
  199.             {
  200.             if(wd+1<=set)    //让这回到5C之下才又开始加温,防闪烁                        
  201.             {
  202.                 OUT=0;//加热开始
  203.                 write_com(0x80+11);
  204.         write_zfc("<ok!>");   
  205.             }
  206.             }   
  207.         
  208.      
  209. }
  210. }

复制代码


作者: 冰冰洁洁    时间: 2019-1-2 22:04
本来做的2个加热管并联用12V电源,电流10A太大线路发热,才改24V现在才3.1A左右。开始想做220V的,加热管也有,但不安全,我们又不是天天用,不用考虑节能的,安全最重要,我电烙铁都是自制12.6V锂电池的,调压是0-24V,很安全,T12那种进口头子,9V正常焊接,15V能烧的像电热丝一样红,秒杀了无数人。6个18650旧电池用2个小时没问题,改天也发一下。
作者: ls0899    时间: 2019-1-3 08:30
请问感温用什么元件18b20达不到195度?? 热电偶??
作者: 冰冰洁洁    时间: 2019-1-3 20:59
ls0899 发表于 2019-1-3 08:30
请问感温用什么元件18b20达不到195度?? 热电偶??

感温用MAX6675热电偶,几百度没问题了。
作者: zuse1021    时间: 2020-5-21 08:42
嗯,正好有相似的应用,学习一下lz的思路和程序。谢谢
作者: QQ820270087    时间: 2020-6-22 15:28
ls0899 发表于 2019-1-3 08:30
请问感温用什么元件18b20达不到195度?? 热电偶??

【DS18B20关键特性】
独特的1-Wire®接口仅占用一个通信端口
内置温度传感器和EEPROM减少外部元件数量
测量温度范围:-55°C至+125°C (-67°F至+257°F)
-10°C至+85°C温度范围内测量精度为±0.5°C
9位至12位可编程分辨率
无需外部元件
寄生供电模式下只需要2个操作引脚(DQ和GND)
多点通信简化分布式温度测量
每个器件具有唯一的64位序列号,存储在器件ROM内
用户可灵活定义温度报警门限,通过报警搜索指令找到温度超出门限的器件
提供8引脚SO(150 mils)、8引脚μSOP、3引脚TO-92封装

作者: QQ820270087    时间: 2020-6-22 15:29
ls0899 发表于 2019-1-3 08:30
请问感温用什么元件18b20达不到195度?? 热电偶??

【MAX31855关键特性】
冷端补偿
14位、0.25°C分辨率
转换器的温度分辨率为0.25°C,
温度读数为-270°C 至+1800°C,
对于K型热电偶,在-200°C至+700°C温度范围内,保持±2°C精度。
提供K、J、N、T和E型热电偶器件版本
简单的SPI兼容接口(只读)
检测热电偶对GND或VCC短路
检测热电偶开路
应用
电器设备
汽车
HVAC
工业

作者: axiongzhang    时间: 2020-6-22 20:20
这个还是很实用,拆铝基板最好用
作者: 祝云章    时间: 2020-8-11 11:59
功能太多了也没用,有时间学习一下楼主的思路,谢谢分享!
作者: ddvvddyy    时间: 2020-8-11 19:05
有时间学习一下楼主的思路,谢谢分享!
作者: Anlant    时间: 2020-8-12 11:31
很好的学习贴,有时间一定好好学习
作者: zhougechen    时间: 2020-9-30 10:43
最近也想做一个拆焊台,打算抄一个用用,学习了
作者: zhaocz    时间: 2020-10-6 02:45
标记一下,一直想着用什么来做发热元件的.这个发热管不错,够便宜.
作者: amandv    时间: 2020-10-8 15:45
底下最好垫块小瓷砖,不然烧桌子
作者: qzsulin    时间: 2020-10-14 20:05
不上PID,温度会不会波动厉害?
作者: 大漠游民    时间: 2021-6-3 10:38
MAX6675有些贵
作者: fj51hei    时间: 2021-8-29 09:14
大漠游民 发表于 2021-6-3 10:38
MAX6675有些贵

好用就行 又不做产品  自己用还是考虑精度 稳定
作者: xzhqwzx    时间: 2022-1-30 09:36
好用就行 又不做产品  自己用还是考虑精度 稳
作者: chenbl    时间: 2023-7-4 16:19
请问温度误差大吗?设置好一个温度当达到这个温度时停止加热,温度低于多少又开始加热?这个温差可以在软件哪里调整吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1