找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9695|回复: 18
打印 上一主题 下一主题
收起左侧

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. }

复制代码

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏21 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:358930 发表于 2019-1-2 22:04 | 只看该作者
本来做的2个加热管并联用12V电源,电流10A太大线路发热,才改24V现在才3.1A左右。开始想做220V的,加热管也有,但不安全,我们又不是天天用,不用考虑节能的,安全最重要,我电烙铁都是自制12.6V锂电池的,调压是0-24V,很安全,T12那种进口头子,9V正常焊接,15V能烧的像电热丝一样红,秒杀了无数人。6个18650旧电池用2个小时没问题,改天也发一下。
回复

使用道具 举报

板凳
ID:36525 发表于 2019-1-3 08:30 | 只看该作者
请问感温用什么元件18b20达不到195度?? 热电偶??
回复

使用道具 举报

地板
ID:358930 发表于 2019-1-3 20:59 来自手机 | 只看该作者
ls0899 发表于 2019-1-3 08:30
请问感温用什么元件18b20达不到195度?? 热电偶??

感温用MAX6675热电偶,几百度没问题了。
回复

使用道具 举报

5#
ID:29594 发表于 2020-5-21 08:42 | 只看该作者
嗯,正好有相似的应用,学习一下lz的思路和程序。谢谢
回复

使用道具 举报

6#
ID:695384 发表于 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封装
回复

使用道具 举报

7#
ID:695384 发表于 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
工业
回复

使用道具 举报

8#
ID:744744 发表于 2020-6-22 20:20 | 只看该作者
这个还是很实用,拆铝基板最好用
回复

使用道具 举报

9#
ID:288930 发表于 2020-8-11 11:59 | 只看该作者
功能太多了也没用,有时间学习一下楼主的思路,谢谢分享!
回复

使用道具 举报

10#
ID:813313 发表于 2020-8-11 19:05 | 只看该作者
有时间学习一下楼主的思路,谢谢分享!
回复

使用道具 举报

11#
ID:813473 发表于 2020-8-12 11:31 | 只看该作者
很好的学习贴,有时间一定好好学习
回复

使用道具 举报

12#
ID:821940 发表于 2020-9-30 10:43 | 只看该作者
最近也想做一个拆焊台,打算抄一个用用,学习了
回复

使用道具 举报

13#
ID:826022 发表于 2020-10-6 02:45 | 只看该作者
标记一下,一直想着用什么来做发热元件的.这个发热管不错,够便宜.
回复

使用道具 举报

14#
ID:414556 发表于 2020-10-8 15:45 | 只看该作者
底下最好垫块小瓷砖,不然烧桌子
回复

使用道具 举报

15#
ID:64825 发表于 2020-10-14 20:05 | 只看该作者
不上PID,温度会不会波动厉害?
回复

使用道具 举报

16#
ID:138956 发表于 2021-6-3 10:38 | 只看该作者
MAX6675有些贵
回复

使用道具 举报

17#
ID:712493 发表于 2021-8-29 09:14 | 只看该作者

好用就行 又不做产品  自己用还是考虑精度 稳定
回复

使用道具 举报

18#
ID:419034 发表于 2022-1-30 09:36 | 只看该作者
好用就行 又不做产品  自己用还是考虑精度 稳
回复

使用道具 举报

19#
ID:245629 发表于 2023-7-4 16:19 | 只看该作者
请问温度误差大吗?设置好一个温度当达到这个温度时停止加热,温度低于多少又开始加热?这个温差可以在软件哪里调整吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表