本项目由负熵生之光大佬提供。
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 不就相当直接接到高电位了,这样大概不合适吧?
代码比较简单。只几百行。
做了必要的注释!
经过验证,代码可编译!!
- #include
- #include
- #include
-
- #ifdef U8X8_HAVE_HW_SPI
- #include
- #endif
- #ifdef U8X8_HAVE_HW_I2C
- #include
- #endif
-
- U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
-
- byte k1 = 0 ; // +按键,低调平有效
- byte k2 = 2 ; // -按键,低电平有效
- byte k3 = 13 ; // 模式按键,低电平有效
-
- byte g1 = 14; // 焊件检测
- byte ADC = A0; // 电池电压检测
- byte mos = 12; // MOS 控制
-
- float V = 0; // 电池电压v
- int hms; // 焊接延时
- int yms; // 延时焊接
- volatile byte ms = 0; // 模式,这里其实用不到 volatile 吧,总共就0~4
-
- /* 中断程序,执行模式切换 */
- ICACHE_RAM_ATTR void zd1()
- {
- ms++;
- }
-
- /* 调参函数,参数,参数上限 */
- void key(int &a , int b)
- {
- if(digitalRead(k1) != digitalRead(k2)) // KEY1&KEY2 不在同一电平状态
- {
- long int t = millis(); // 记录当前时间
- if(digitalRead(k1) == LOW) // KEY1 按下
- {
- a++; // 参数增加
- while(digitalRead(k1) == LOW) // 长按情况
- {
- if(millis() - t > 1200) // 长按大于 1200ms
- {
- a = a + 10; // 增加步长为 10
- }
- if(a > b) // 大于参数上限
- a = b ;
- delay(10);
- oled(a); // 显示参数 a
- }
- }
- else // KEY2 按下
- {
- a--; // KEY2 按下分析过程同 KEY1 按下
- while(digitalRead(k2) == LOW)
- {
- if(millis() - t > 1200)
- {
- a = a - 10;
- }
- if(a < 0){ a = 0 ; }
- delay(10);
- oled(a);
- }
- }
- sjx(hms, yms); // EEPROM写入数据
- }
- oled(a);
- }
-
- /* 写入Flash数据,焊接延时,延时焊接 */
- void sjx(int a, int b){
- EEPROM.begin(1024);
- EEPROM.put(0, a);
- delay(10);
- EEPROM.put(4, b);
- delay(10);
- EEPROM.commit(); //保存更改的数据
- }
-
- /* 读取Flash数据,焊接延时,延时焊接 */
- void sjd(){
- EEPROM.begin(64);
- EEPROM.get(0, hms);
- delay(10);
- EEPROM.get(4, yms);
- }
-
- /* 供电电压读取 */
- void BAT(){
- V = map(analogRead(A0),0,1023,0,1000);
- V = V*31.3/1000;
- }
-
- /* 0.420 LED 显示 */
- void OLED(){
- u8g2.clearBuffer(); //清除内存中数据缓冲区
- u8g2.setFont(u8g2_font_ncenB12_tr); //设置字体
-
- u8g2.setCursor( 0, 12);
- u8g2.print(V);
-
- u8g2.setCursor(48, 12);
- u8g2.print("V");
-
- u8g2.setCursor(62, 12);
- u8g2.print(ms);
-
- u8g2.setCursor( 0, 26);
- u8g2.print(hms);
-
- u8g2.setCursor(48, 26);
- u8g2.print("ms");
-
- u8g2.setCursor( 0, 40);
- u8g2.print(yms);
-
- u8g2.setCursor(48, 40);
- u8g2.print("ms");
-
- u8g2.sendBuffer(); //绘制缓冲区的内容
- }
-
-
- /* 调参界面显示 */
- void oled(int a)
- {
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_ncenB12_tr);
- u8g2.clearBuffer();
- u8g2.setCursor(0, 14);
- if(ms == 3){ // 焊接等待时间调参
- u8g2.print("weld ms"); // 焊接等待时间
- }else{ // 等待焊接时间调参
- u8g2.print("wait ms"); // 等待焊接时间
- }
- u8g2.setCursor(0, 40);
- u8g2.print(a);
- u8g2.sendBuffer();
- }
-
-
- /* 延时函数(ms) */
- void sj(int a)
- {
- long int i = millis();
- while((millis() - i) < a)
- OLED();
- }
-
- /* 自动模式 */
- void zdhj()
- {
- if(digitalRead(g1) == HIGH) // 检测是否有焊件
- {
- sj(yms); // 延时函数充电(ms)
- digitalWrite(mos,HIGH); // 导通MOS放电
- sj(hms); // 延时放电时间
- digitalWrite(mos,LOW); // 关闭MOS
- }
- }
-
- /* 手动模式 */
- void sddh()
- {
- if(digitalRead(g1) == HIGH) // 检测是否有焊件
- {
- if(digitalRead(k1) == LOW || digitalRead(k2) == LOW ) // KEY1/KEY2按下
- {
- sj(yms); // 延时函数充电(ms)
- digitalWrite(mos,HIGH); // 导通MOS放电
- sj(hms); // 延时放电时间
- digitalWrite(mos,LOW); // 关闭MOS
- }
- }
- }
-
- /* 调节焊接延时时间 */
- void hjms()
- {
- key(hms, 1000);
- }
-
- /* 调节延时焊接时间 */
- void ysms()
- {
- key(yms, 3000);
- }
-
- void setup()
- {
- u8g2.begin();
- pinMode(k1 ,INPUT_PULLUP);
- pinMode(k2 ,INPUT_PULLUP);
- pinMode(k3 ,INPUT_PULLUP);
- pinMode(g1 ,INPUT);
- pinMode(mos ,OUTPUT);
-
- digitalWrite(mos,LOW);
- /* 中断函数 */
- attachInterrupt(k3, zd1, RISING); // 上升沿触发,按键松开触发
-
- sjd(); // 读取Flash数据
-
- }
-
- void loop()
- {
- BAT();
- switch(ms)
- {
- case 0 : OLED();
- break;
-
- case 1 : zdhj(); // 自动模式
- OLED();
- break;
-
- case 2 : sddh(); // 手动模式
- OLED();
- break;
-
- case 3 : hjms(); // 焊接时间调参
- break;
-
- case 4 : ysms(); // 延时焊接调参
- break;
-
- default: ms = 0; // 超出置0
- break;
- }
- }
参考:
项目资料:
链接:https://pan.baidu.com/s/1cm7Nr6hIkZjasgeOpbPCCQ
提取码:k7d3
给以后做点焊机提供了思路,是一个好项目!值得学习!
感谢开源!