• 【ESP8266点焊机】基于 ESP8266 for Arduino


    本项目由负熵生之光大佬提供。

    B站链接:ESP8266 点焊机 3.0 / 开源自制

    OSHWHub:ESP8266 点焊机 3.0

    由于大佬提供了 V3.0 和 V2.0 版本,本着追新不追旧的原则,还是研究 V3.0 项目是怎么实现的!

    项目预览:

    上板与中板通过四根排针相连接,底板就是普通底板,无实际作用。


    点焊机原理

    点焊机两极点瞬间放点,因接触点的接触电阻比较大,在电流通过的瞬间产生大量的能力而产生热熔接,形成熔核进而达到焊接目的。

    本项目是由电容来提供瞬间大电流的。


    放电电路

    通过控制 MOS 管的通断,来达到瞬间导通、瞬间放电的效果。

    放电电容采用外接方式!接在CN1接口。


    控制电路

    主控周边

    电平设置部分就是一堆上拉、下拉电阻。设置端口为上拉/下拉。

    2.54排针是和中板(放电板)相连控制的接口。

    杂项目

    电压采集 30V 是什么意思呢?是电压输入限制在了 30V 。

    照明电路是给两电极提供照明的。

    电源部分

    过流过压保护此VCC由中板提供!这是控制板的电源来源。但是,这个保险选定不行吧!

    ME3116是降压稳压器,采用PWM控制模式。

    SX1308升压芯片:2V到24V的宽输入电压范围。VIN通过 +5V or BAT 提供电源。

    外部接口

    板载CH340,不必要吧。还自动下载电路。确实这样方便了。

    TP4054 单颗锂电池充电管理芯片。

    显示部分

    采用的 0.42 OLED 进行显示。

    中板控制电路

    采用 TC4427 驱动芯片对MOS管进行驱动。

    焊件检测问题:如果电容/供电电压达到较高值,那么 VDD 不就相当直接接到高电位了,这样大概不合适吧?


    程序

    代码比较简单。只几百行。

    做了必要的注释!

    经过验证,代码可编译!!

    1. #include
    2. #include
    3. #include
    4. #ifdef U8X8_HAVE_HW_SPI
    5. #include
    6. #endif
    7. #ifdef U8X8_HAVE_HW_I2C
    8. #include
    9. #endif
    10. U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
    11. byte k1 = 0 ; // +按键,低调平有效
    12. byte k2 = 2 ; // -按键,低电平有效
    13. byte k3 = 13 ; // 模式按键,低电平有效
    14. byte g1 = 14; // 焊件检测
    15. byte ADC = A0; // 电池电压检测
    16. byte mos = 12; // MOS 控制
    17. float V = 0; // 电池电压v
    18. int hms; // 焊接延时
    19. int yms; // 延时焊接
    20. volatile byte ms = 0; // 模式,这里其实用不到 volatile 吧,总共就0~4
    21. /* 中断程序,执行模式切换 */
    22. ICACHE_RAM_ATTR void zd1()
    23. {
    24. ms++;
    25. }
    26. /* 调参函数,参数,参数上限 */
    27. void key(int &a , int b)
    28. {
    29. if(digitalRead(k1) != digitalRead(k2)) // KEY1&KEY2 不在同一电平状态
    30. {
    31. long int t = millis(); // 记录当前时间
    32. if(digitalRead(k1) == LOW) // KEY1 按下
    33. {
    34. a++; // 参数增加
    35. while(digitalRead(k1) == LOW) // 长按情况
    36. {
    37. if(millis() - t > 1200) // 长按大于 1200ms
    38. {
    39. a = a + 10; // 增加步长为 10
    40. }
    41. if(a > b) // 大于参数上限
    42. a = b ;
    43. delay(10);
    44. oled(a); // 显示参数 a
    45. }
    46. }
    47. else // KEY2 按下
    48. {
    49. a--; // KEY2 按下分析过程同 KEY1 按下
    50. while(digitalRead(k2) == LOW)
    51. {
    52. if(millis() - t > 1200)
    53. {
    54. a = a - 10;
    55. }
    56. if(a < 0){ a = 0 ; }
    57. delay(10);
    58. oled(a);
    59. }
    60. }
    61. sjx(hms, yms); // EEPROM写入数据
    62. }
    63. oled(a);
    64. }
    65. /* 写入Flash数据,焊接延时,延时焊接 */
    66. void sjx(int a, int b){
    67. EEPROM.begin(1024);
    68. EEPROM.put(0, a);
    69. delay(10);
    70. EEPROM.put(4, b);
    71. delay(10);
    72. EEPROM.commit(); //保存更改的数据
    73. }
    74. /* 读取Flash数据,焊接延时,延时焊接 */
    75. void sjd(){
    76. EEPROM.begin(64);
    77. EEPROM.get(0, hms);
    78. delay(10);
    79. EEPROM.get(4, yms);
    80. }
    81. /* 供电电压读取 */
    82. void BAT(){
    83. V = map(analogRead(A0),0,1023,0,1000);
    84. V = V*31.3/1000;
    85. }
    86. /* 0.420 LED 显示 */
    87. void OLED(){
    88. u8g2.clearBuffer(); //清除内存中数据缓冲区
    89. u8g2.setFont(u8g2_font_ncenB12_tr); //设置字体
    90. u8g2.setCursor( 0, 12);
    91. u8g2.print(V);
    92. u8g2.setCursor(48, 12);
    93. u8g2.print("V");
    94. u8g2.setCursor(62, 12);
    95. u8g2.print(ms);
    96. u8g2.setCursor( 0, 26);
    97. u8g2.print(hms);
    98. u8g2.setCursor(48, 26);
    99. u8g2.print("ms");
    100. u8g2.setCursor( 0, 40);
    101. u8g2.print(yms);
    102. u8g2.setCursor(48, 40);
    103. u8g2.print("ms");
    104. u8g2.sendBuffer(); //绘制缓冲区的内容
    105. }
    106. /* 调参界面显示 */
    107. void oled(int a)
    108. {
    109. u8g2.clearBuffer();
    110. u8g2.setFont(u8g2_font_ncenB12_tr);
    111. u8g2.clearBuffer();
    112. u8g2.setCursor(0, 14);
    113. if(ms == 3){ // 焊接等待时间调参
    114. u8g2.print("weld ms"); // 焊接等待时间
    115. }else{ // 等待焊接时间调参
    116. u8g2.print("wait ms"); // 等待焊接时间
    117. }
    118. u8g2.setCursor(0, 40);
    119. u8g2.print(a);
    120. u8g2.sendBuffer();
    121. }
    122. /* 延时函数(ms) */
    123. void sj(int a)
    124. {
    125. long int i = millis();
    126. while((millis() - i) < a)
    127. OLED();
    128. }
    129. /* 自动模式 */
    130. void zdhj()
    131. {
    132. if(digitalRead(g1) == HIGH) // 检测是否有焊件
    133. {
    134. sj(yms); // 延时函数充电(ms)
    135. digitalWrite(mos,HIGH); // 导通MOS放电
    136. sj(hms); // 延时放电时间
    137. digitalWrite(mos,LOW); // 关闭MOS
    138. }
    139. }
    140. /* 手动模式 */
    141. void sddh()
    142. {
    143. if(digitalRead(g1) == HIGH) // 检测是否有焊件
    144. {
    145. if(digitalRead(k1) == LOW || digitalRead(k2) == LOW ) // KEY1/KEY2按下
    146. {
    147. sj(yms); // 延时函数充电(ms)
    148. digitalWrite(mos,HIGH); // 导通MOS放电
    149. sj(hms); // 延时放电时间
    150. digitalWrite(mos,LOW); // 关闭MOS
    151. }
    152. }
    153. }
    154. /* 调节焊接延时时间 */
    155. void hjms()
    156. {
    157. key(hms, 1000);
    158. }
    159. /* 调节延时焊接时间 */
    160. void ysms()
    161. {
    162. key(yms, 3000);
    163. }
    164. void setup()
    165. {
    166. u8g2.begin();
    167. pinMode(k1 ,INPUT_PULLUP);
    168. pinMode(k2 ,INPUT_PULLUP);
    169. pinMode(k3 ,INPUT_PULLUP);
    170. pinMode(g1 ,INPUT);
    171. pinMode(mos ,OUTPUT);
    172. digitalWrite(mos,LOW);
    173. /* 中断函数 */
    174. attachInterrupt(k3, zd1, RISING); // 上升沿触发,按键松开触发
    175. sjd(); // 读取Flash数据
    176. }
    177. void loop()
    178. {
    179. BAT();
    180. switch(ms)
    181. {
    182. case 0 : OLED();
    183. break;
    184. case 1 : zdhj(); // 自动模式
    185. OLED();
    186. break;
    187. case 2 : sddh(); // 手动模式
    188. OLED();
    189. break;
    190. case 3 : hjms(); // 焊接时间调参
    191. break;
    192. case 4 : ysms(); // 延时焊接调参
    193. break;
    194. default: ms = 0; // 超出置0
    195. break;
    196. }
    197. }

    参考:

    U8g2库的详细使用

    项目资料:

    链接:https://pan.baidu.com/s/1cm7Nr6hIkZjasgeOpbPCCQ
    提取码:k7d3


    总结

    给以后做点焊机提供了思路,是一个好项目!值得学习!

    感谢开源!

     

  • 相关阅读:
    在windows上安装 chocolatey.1.1.0.nupkg
    K8S基础笔记
    「设计模式」建造者模式
    k8s之有状态服务部署基石(基础知识)
    STM32F1和STM32F4系列DMA的不同之处——对STM32的DMA的工作机制和场景的一些理解[原创www.cnblogs.com/helesheng]
    C# 通过ARP技术来观察目标主机数据包
    Java项目:ssm实验室设备管理系统
    Mysql_实战_从入门到高级
    小程序【云开发】模式基本介绍 | 云开发项目初始化
    Android Bundle putBinder传输超过1MB数据,Kotlin
  • 原文地址:https://blog.csdn.net/qq_41650023/article/details/125909339