标题: 单片机点焊机控制完整程序+PCB电路图 [打印本页]

作者: 王培旭    时间: 2019-8-24 23:38
标题: 单片机点焊机控制完整程序+PCB电路图
完整的点焊机控制完善论坛里不全的pcb工程程序一起附上

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:
  1. /*******************************************************************************
  2. *                                                                                                                                            *
  3. *                                        点焊机控制器                                                                           *
  4. --------------------------------------------------------------------------------
  5. * 结构说明:    51单片机计时控制                                                                                                   *
  6. *              在检测到点焊手柄发出的工作信号时,                                                           *
  7. *              立即接通点焊机的电源,点焊机开始工作,设定的时间结束后切断电源,*
  8. *              在设定的间隔时间内,不接收点焊手柄发出的工作信号。              *                                                                                             *
  9. *******************************************************************************/
  10. /*
  11. * 单片机P0^0~P0^4口分配给LCD5110使用:RET、CE、D/C、DIN、CLK(在LCD_5110.h中定义
  12. *       P0^5     设备等待(可以工作)信号灯
  13. *            P0^6     设备工作间隙(不接收点焊信号)信号灯
  14. *
  15. *            P1^0~P1^6   开关设置点焊时间(20毫秒为1单位,0~127单位)
  16. *            P1^7        工作间隙:0=5秒,1=10秒
  17. *******************************************************************************/

  18. #include<reg51.h>
  19. //#include<intrins.h>
  20. #include"LCD_5110.h"      //包含LCD显示驱动文件

  21. #define u8 unsigned char  //单字节
  22. #define u16 unsigned int  //双字节
  23. #define        u64 unsigned long //四字节

  24. #define        SZP1 P1           //P1口为初始设置的数据,低七位为定时数值(0-127)*20ms,                                                                                                  
  25.                           //第八位为间隙时间,0=5秒,1=10秒
  26. sbit LED_work = P0^5;     //设备工作信号(低电平点焊机接通)
  27. sbit LED_read = P0^6;     //设备就绪信号(低电平可以工作)
  28. sbit work     = P0^7;          //点焊按钮信号(低电平按下)
  29.                                                                                                                        
  30. //--定义全局变量--//
  31. u8  sdsj = 0;             //设定的点焊单位
  32. u64 shsj = 0;             //设定的点焊时间(双字节,以毫秒为单位)
  33. u8 wait = 5;                          //设置的间隔时间(5秒或10秒,根据P1.7确定)
  34.                                                           
  35. u8 time_work = 0;         //焊接时间计时(20毫秒/单位)
  36. u8 time_wait = 0;                  //等待时间计时(单位秒)
  37. bit time_1s = 0;              //秒信号
  38. bit time_20ms = 0;                  //20毫秒信号
  39. bit flag = 0;             //定时工作标志(0=待机或间隔,1=正在工作


  40. /*******************************************************************************
  41. * 函 数 名         : ReadSet
  42. * 函数功能                   : 读设置并显示
  43. * 输    入         : 无                                                                                                                                               
  44. * 输    出         : 无
  45. *******************************************************************************/
  46. void ReadSet(void)
  47. {
  48.         sdsj = SZP1;               //从P1口读入一个字节的数据
  49.         if (sdsj>127) wait = 10;   //最高位1,间隔时间=10秒
  50.         else wait = 5;
  51.         LCD_write_val(27,4,2,wait);//显示设定的间隔时间
  52.           
  53.         sdsj = (sdsj & 0x7f) + 3;  //取低7位定时值再加3(60毫秒)
  54.         shsj = sdsj * 20;                   //20毫秒基本单位
  55.         LCD_write_val(27,2,4,shsj);//显示设定的点焊时间
  56. }


  57. /*******************************************************************************
  58. * 函 数 名         : timehand
  59. * 函数功能                   : 20毫秒处理函数,即每隔20毫秒处理一次
  60. * 输    入         : 无
  61. * 输    出         : 无
  62. *******************************************************************************/
  63. void TimeHand(void)
  64. {
  65.     if (flag == 0)        //待机状态
  66.         {
  67.             if (work == 0)    //收到点焊按钮信号
  68.                 {
  69.                         flag = 1;     //设置工作标志
  70.                         time_work = sdsj;//取设定时间
  71.                         LED_work = 0; //开通工作电源
  72.                         LED_read = 1; //关闭等待信号灯
  73.                 }
  74.                 else                          //无点焊按钮信号
  75.                 {
  76.                         ReadSet();          //检查更新设置
  77.                 }                                                                       
  78.         }
  79.         else                          //工作状态
  80.         {
  81.                 time_work--;
  82.                 if (time_work == 0)//定时时间到
  83.                 {
  84.                         LED_work = 1;  //关闭点焊机电源
  85.                         LED_read = 1;  //取消准备好信号灯
  86.                         flag = 0;            //撤销工作标志
  87.                         time_wait = wait;//恢复间隔时间
  88.                         LCD_write_val(61,4,2,time_wait);//显示剩余间隔时间
  89.                 }
  90.         }
  91. }



  92. /*******************************************************************************
  93. * 函 数 名         :
  94. * 函数功能                   : T0中断服务函数
  95. * 输    入         : 无
  96. * 输    出         : 无
  97. *******************************************************************************/
  98. void InterruptTimer0() interrupt 1
  99. {
  100.         static u8 i = 0;           //毫秒
  101.         static u8 j = 0;           //20毫秒

  102.         TH0 = 0xFC;            //重新加载初值,定时1ms
  103.         TL0 = 0x66;

  104.         i++;
  105.         if (i > 19)                   //20毫秒计时到
  106.         {
  107.             i = 0;
  108.                 time_20ms = 1;           //置20毫秒标志
  109.             j++;
  110.             if (j > 49)        //1秒
  111.                 {
  112.                     j = 0;
  113.                         time_1s = 1;   //置1秒标志
  114.             }
  115.         }
  116. }


  117. /*******************************************************************************
  118. * 函 数 名         : main
  119. * 函数功能                   : 主函数
  120. * 输    入         : 无
  121. * 输    出         : 无
  122. *******************************************************************************/
  123. void main(void)
  124. {
  125. //设置初始屏幕显示
  126.     u8 i, x ,y;
  127.        
  128.         LED_work = 1; //测试
  129.         LED_read = 1;
  130.         LCD_init();                   //初始化5110屏幕

  131.         x = 8;                                   //显示的起始位置
  132.         y = 0;
  133.         for (i = 0; i < 5; i++)//显示“电子点焊机”
  134.         {
  135.                 LCD_write_char(x,y,i);//
  136.                 x = x +        14;        //下一字的显示位置
  137.         }
  138.         x = 0;
  139.         y = 2;
  140.         LCD_write_char(x,y,3); //显示“焊”
  141.         x = 14;
  142.         LCD_write_char(x,y,5); //显示“接”
  143.         x = 59;
  144.         LCD_write_char(x,y,8); //显示“毫”
  145.     x = 72;
  146.         LCD_write_char(x,y,9); //显示“秒”
  147.         x = 0;
  148.         y = 4;
  149.         LCD_write_char(x,y,6); //显示“间”
  150.         x = 14;
  151.         LCD_write_char(x,y,7); //显示“隔”
  152.         x = 44;
  153.         LCD_write_char(x,y,9); //显示“秒”
  154.         x = 76;
  155.         LCD_write_ASCII(x,y,12);//显示“s”

  156.         ReadSet();              //读取设定定时时间并显示
  157.         LCD_write_val(61,4,2,time_wait);//显示剩余间隔时间
  158.         LED_read = 0;           //显示准备好信号灯

  159.         TMOD = 0x01;            //设置T0为模式1
  160. //        TH0 = 0xF8;             //为T0赋初值0xF8CD,定时2ms
  161. //        TL0 = 0xCD;
  162.     TH0 = 0xFC;             //为T0赋初值0xFC67,定时1ms
  163.     TL0 = 0x66;
  164. //        TH0 = 0xFC;
  165. //        TL0 = 0xC3;                    //为T0赋初值0xFA02,定时1ms
  166.         ET0 = 1;                //开T0中断
  167.         TR0 = 1;                //启动定时器0
  168.         EA = 1;                 //开总中断
  169.        
  170.         while(1)
  171.         {
  172.                 if (time_1s == 1)   //每秒处理
  173.                 {
  174.                     time_1s = 0;    //重置秒标志
  175.                        
  176.                         if (time_wait > 0)
  177.                         {
  178.                             time_wait--;
  179.                         if (time_wait == 0)
  180.                             {
  181.                                 LED_read = 0;//显示就绪信号
  182.                             }
  183.                                 LCD_write_val(61,4,2,time_wait);//显示剩余间隔时间
  184.                    }
  185.                         else
  186.                         {
  187.                             if (LED_work == 1)
  188.                                 {
  189.                                     LED_read = ~LED_read;//等待时每秒闪一次
  190.                                 }
  191.                     }
  192.                 }       
  193.                        
  194.                 if (time_20ms == 1)
  195.                 {
  196.                         time_20ms = 0;          //重置20毫秒标志
  197.                         if (time_wait == 0)
  198.                         {
  199.                             TimeHand();   //调用20毫秒处理程序
  200.                         }
  201.                 }
  202.         }
  203. }
复制代码

所有资料51hei提供下载:
点焊机程序.zip (717.83 KB, 下载次数: 257)
点焊控制.zip (1.33 MB, 下载次数: 253)



作者: lls5201    时间: 2019-9-7 07:02
楼主优秀,好文章,支持
作者: 王培旭    时间: 2019-9-11 16:41
lls5201 发表于 2019-9-7 07:02
楼主优秀,好文章,支持

谢谢.有什么缺陷可以提出来我再做改进
作者: 1302798532    时间: 2019-10-11 09:50
7805电路的输入输出电容需要加上去,LDO进出都没有电容电路稳定性不行。还有P0端口我记得是需要加上拉电阻吧。
作者: wbwcf13e    时间: 2019-10-19 15:28
我按照你提供电路图焊了一块万用板子,发现显示屏不显示,是怎么回事?
作者: wbwcf13e    时间: 2019-10-20 07:26
我按楼上的提示给它接了5.1千欧的上拉电阻,结果有显示。我记得别的同型号单片机例子,没接上拉电阻也照样显示,这个单片机电路就不行!就是不知道接多大电阻合适?
作者: wbwcf13e    时间: 2019-10-23 15:12
看来大家不喜欢玩电子点焊机,没人跟帖,也没人发现该帖子的电路图有问题,我一直在搞点焊机,没有成功,我怀疑这个电路有问题!
作者: zeng1228    时间: 2019-10-23 15:43
终于有高手发表了,刚好用
作者: nec123    时间: 2020-2-15 21:54
怎样改变 20毫秒一个单位,变成5毫秒一个单位?
作者: 哇哈哈哈    时间: 2020-4-9 14:29
拿走用了,待实验成功以后在回来回复
作者: ccl00757    时间: 2020-4-15 18:17
不错,下载学习下哈
作者: 双赢电子    时间: 2020-4-15 20:36
好帖子,多谢楼主分享。学习了
作者: tom1234516    时间: 2020-4-15 22:58
好贴学习了,资料非常详细。
作者: 1ylh    时间: 2020-4-17 21:25
我也打算自己diy一个点焊机,现在硬件完成了,开始着手程序的编制,希望能成功,要是成功了也来这分享。
作者: hucode    时间: 2020-5-11 17:41
楼主制作成功了吗?
作者: zv1185    时间: 2020-5-11 22:53
点焊机早就做好了,就等个好控制,完美后下载上机试
作者: wuxishun    时间: 2020-5-11 23:40
感谢分享
作者: 山鬼摇    时间: 2020-12-28 19:12
1ylh 发表于 2020-4-17 21:25
我也打算自己diy一个点焊机,现在硬件完成了,开始着手程序的编制,希望能成功,要是成功了也来这分享。

成功了吗?
作者: 13503412974    时间: 2020-12-28 23:15
刚好需要一个,先收藏了
作者: 上帝的左手    时间: 2021-1-4 09:15
PDF原理图和PCB图不一样,不利于咋小白学习呀,能弄个对应的或者说明最好。为了下载,专门来赚币。
作者: 上帝的左手    时间: 2021-1-4 09:18
非常感谢,器件还在准备中,就是PDF原理图和PCB的图相差这么大,设计的机理还没研究,小白不容易啊。
作者: 上帝的左手    时间: 2021-1-10 00:57
今晚上终于有时间来上台测试一下,还蛮好的,焊接时间调整正常,间隔时间切换正常。程序运行没啥问题。,下一步做板了再来。感谢楼主。

点焊机1.jpg (227.5 KB, 下载次数: 180)

点焊机器件测试

点焊机器件测试

作者: Leolbb    时间: 2021-1-21 14:18
看着不错,试试,谢谢楼主
作者: 轻杯浅醉    时间: 2021-2-13 22:30
这个拨码原理图和pcb不一样呀??
作者: nlming    时间: 2021-2-16 13:11
好物件,谢谢楼主
作者: 轻杯浅醉    时间: 2021-2-17 10:50
JP1是输出JP2是电源么?
作者: sq456    时间: 2021-11-14 22:02
亲测有用,不过作者用拨码开关调节时间,逻辑不容易搞懂,得多熟悉熟悉,电路及程序没问题,不过我用的微波炉变压器改的,最大160毫秒点0.15的镍片,好像大于200毫秒的时间没啥用,150的焊点都黑了。
作者: sq456    时间: 2021-11-14 22:03
上帝的左手 发表于 2021-1-4 09:15
PDF原理图和PCB图不一样,不利于咋小白学习呀,能弄个对应的或者说明最好。为了下载,专门来赚币。

我亲测好用,只是作者用拨码开关调节时间,不容易适应
作者: pq1972    时间: 2021-11-15 17:21
有成功的,谢谢。马上下载,制作
作者: xk1963    时间: 2022-2-25 14:50
自己有一块加了密磨掉芯片型号的,现在坏了想修修无从下手,这篇很有参考价值,谢谢楼主。
作者: xujiequn    时间: 2022-4-9 12:14
有直流微点焊机吗?谢谢楼主
作者: shenhaitao1986    时间: 2022-8-7 12:18
改个编码器的多好

作者: mick32    时间: 2022-8-7 18:18
Q1 transistor must be NPN
作者: mick32    时间: 2022-8-7 18:25
It is better to use Triac , relay is slow for some applications
Then you can use time and phase control together
Also use switching power supply for CPU board

作者: hongjunhyy    时间: 2023-5-13 11:04
好东西,非常感谢分享
作者: fyc4480    时间: 2023-6-11 08:08
王培旭 发表于 2019-9-11 16:41
谢谢.有什么缺陷可以提出来我再做改进

续流二极管D1接地端不应该用VCC
作者: 68775899    时间: 2023-9-12 14:55
好帖子,多谢楼主分享。学习了
作者: Sunny_Boy    时间: 2023-9-18 15:57
感觉不错的项目,就是继电器能不能抗住这样的开关频率,




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