在論壇看到個普通氬弧焊改冷焊機程序的帖子挺有意思的,可惜只發了代碼部分。
我也有個氬弧焊機啊沒法了干脆自己動手也搞了個發上來一起研究下。
先上電路圖,
Schematic_氬弧焊電焊控制_2022-08-30.png (136.36 KB, 下載次數: 59)
下載附件
2022-12-14 18:55 上傳
看看嘉立創里的效果哈哈
51hei圖片20221214185748.png (318.16 KB, 下載次數: 65)
下載附件
2022-12-14 18:59 上傳
51hei圖片20221214185837.png (159.71 KB, 下載次數: 57)
下載附件
2022-12-14 18:59 上傳
51hei圖片20221214185847.png (137.06 KB, 下載次數: 57)
下載附件
2022-12-14 18:59 上傳
已經裝機了,沒有焊板子的圖了直接上裝機效果https://www.bilibili.com/video/BV1nW4y1u7tz/?spm_id_from=333.999.0.0&vd_source=319f267cc6110f5c414f91b611c5d0d8
代碼因為不是KEIL的隨便看看就好了,最后面會放編譯完的固件的。
- #define KEY_COUNT_DESHAKING 15//按鍵消抖時間15MS
- #define KEY_COUNT_LONGT 1000//長按按鍵判斷時間1000MS
- #define KEY_COUNT_DUAL 180//雙擊按鍵判斷時間180MS
- #define KEY_LONG_REPEAT 2000//長按按鍵時響應的時間間隔2000MS
- #define TASKS_MAX 4
- #define SMG_PORT P1
- #define SMG_PORT_MODE {P1M1=0x00;P1M0=0xff;}//P1推挽輸出
- #define SMG_WEI1 P3_5
- #define SMG_WEI1_OUT {P3M1&=~0x20;P3M0|=0x20;}//P3_5推挽輸出
- #define SMG_WEI2 P3_1
- #define SMG_WEI2_OUT {P3M1&=~0x02;P3M0|=0x02;}//P3_1推挽輸出
- #define SMG_WEI3 P3_6
- #define SMG_WEI3_OUT {P3M1&=~0x40;P3M0|=0x40;}//P3_6推挽輸出
- #define smg_lx0
- #define duan_0
- #define smg_clear
- #define smg_shunum
- #define smg_displa_dian
- #define smg_update_buf
- #include <STC8HX.h>
- uint32 sys_clk = 24000000;//設置PWM、定時器、串口、EEPROM頻率參數
- #include "myLib/LUNXUN.h"
- #include "shumaguan.h"
- #include "lib/eeprom.h"
- #include "myLib/EC11_51.h"//聲明庫頭文件
- #include "xiaogju.h"
- uint8 huilingjs = 0;
- uint8 dianhanzt = 0;
- uint16 i = 0;
- uint8 shezhishijian[3]={0,0,0};
- uint8 jianhc_A1;
- void Timer0Init(void) //100微秒@24.000MHz
- {
- AUXR &= 0x7f; //定時器時鐘12T模式
- TMOD &= 0xf0; //設置定時器模式
- TL0 = 0x38; //設定定時初值
- TH0 = 0xff; //設定定時初值
- }
- void T_IRQ0(void) interrupt 1 using 1{
- TaskReMarks(); //此函數在中斷中調用
- }
- void renwu1() {
- //↑ ↑ ↑顯示更新處理/100ms
- switch (shezhishijian[(int)(2)]) {
- case 0:
- smg_display_clear_bit(8);//數碼管清指定位
- smg_display_num(1-1,shezhishijian[(int)(0)]);//數碼管顯示數字
- break;
- case 1:
- smg_display_clear_bit(8);//數碼管清指定位
- smg_display_num(1-1,(shezhishijian[(int)(1)]<<1));//數碼管顯示數字
- smg_display_dian(2-1,1);//數碼管指定位控制小數點
- smg_display_dian(3-1,1);//數碼管指定位控制小數點
- break;
- case 2:
- smg_display_clear_bit(8);//數碼管清指定位
- smg_display_update_buf(1-1,15);//數碼管指定位顯示字符
- smg_display_update_buf(2-1,15);//數碼管指定位顯示字符
- smg_display_update_buf(3-1,0);//數碼管指定位顯示字符
- break;
- }
- if((huilingjs != 0) && (shezhishijian[(int)(2)] != 2)){
- huilingjs--;
- if(huilingjs == 0){
- shezhishijian[(int)(2)] = 0;
- eeprom_sector_erase(0); //EEPROM擦除指定扇區
- eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM寫數據
- }
- }
- }
- xdata tongdaoHC HC_A1 = {0,0,0,0,0,0,0};//聲明A1通道全局結構體緩存
- void renwu0() {
- //↑ ↑ ↑編碼器輸入處理/1ms
- smg_scan_callback(10);//數碼管掃描回調
- HC_A1.EC11_A_dq = P3_3;
- HC_A1.EC11_B_dq = P3_4;
- HC_A1.EC11_D_dq = P3_2;
- jianhc_A1 = Encoder_EC11_Scan(&HC_A1);
- switch ( jianhc_A1)
- {
- case 1:
- if(shezhishijian[(int)(2)] < 2){
- if(shezhishijian[(int)(shezhishijian[(int)(2)])] >= 12){
- shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] - 1;
- }
- huilingjs = 30;
- }
- break;
- case 2:
- if(shezhishijian[(int)(2)] < 2){
- if(shezhishijian[(int)(shezhishijian[(int)(2)])] < 255){
- shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] + 1;
- }
- huilingjs = 30;
- }
- break;
- case 3:
- if(shezhishijian[(int)(2)] < 2){
- if(shezhishijian[(int)(shezhishijian[(int)(2)])] >= 30){
- shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] - 10;
- }
- huilingjs = 30;
- }
- break;
- case 4:
- if(shezhishijian[(int)(2)] < 2){
- if(shezhishijian[(int)(shezhishijian[(int)(2)])] < 240){
- shezhishijian[(int)(shezhishijian[(int)(2)])] = shezhishijian[(int)(shezhishijian[(int)(2)])] + 10;
- }
- huilingjs = 30;
- }
- break;
- case 5:
- break;
- case 6:
- if(shezhishijian[(int)(2)] == 0){
- shezhishijian[(int)(2)] = 1;
- }
- else{
- shezhishijian[(int)(2)] = 0;
- eeprom_sector_erase(0); //EEPROM擦除指定扇區
- eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM寫數據
- }
- huilingjs = 30;
- break;
- case 7:
- if(shezhishijian[(int)(2)] != 2){
- shezhishijian[(int)(2)] = 2;
- eeprom_sector_erase(0); //EEPROM擦除指定扇區
- eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM寫數據
- }
- else{
- shezhishijian[(int)(2)] = 0;
- eeprom_sector_erase(0); //EEPROM擦除指定扇區
- eeprom_write_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM寫數據
- }
- break;
- case 8:
- break;
- }
- WDT_CONTR = 0X38;//在溢出設定時間到前調用
- }
- void renwu2() {
- //↑ ↑ ↑點焊處理/1ms
- if(shezhishijian[(int)(2)] == 2){
- if(P5_4){
- P3_7 = 0;
- smg_display_dian(1-1,0);//數碼管指定位控制小數點
- dianhanzt = 0;
- }
- else{
- P3_7 = 1;
- smg_display_dian(1-1,1);//數碼管指定位控制小數點
- }
- }
- else{
- if(P5_4){
- P3_7 = 0;
- smg_display_dian(1-1,0);//數碼管指定位控制小數點
- dianhanzt = 0;
- }
- else{
- switch (dianhanzt) {
- case 0:
- P3_7 = 1;
- smg_display_dian(1-1,1);//數碼管指定位控制小數點
- dianhanzt = 1;
- i = 0;
- break;
- case 1:
- i++;
- if(i >= shezhishijian[(int)(0)]){
- P3_7 = 0;
- smg_display_dian(1-1,0);//數碼管指定位控制小數點
- dianhanzt = 2;
- i = 0;
- }
- break;
- case 2:
- i++;
- if(i >= 1000){
- P3_7 = 1;
- smg_display_dian(1-1,1);//數碼管指定位控制小數點
- dianhanzt = 3;
- i = 0;
- }
- break;
- case 3:
- i++;
- if(i >= shezhishijian[(int)(0)]){
- P3_7 = 0;
- smg_display_dian(1-1,0);//數碼管指定位控制小數點
- dianhanzt = 4;
- i = 0;
- }
- break;
- case 4:
- i++;
- if(i >= (shezhishijian[(int)(1)]<<1)){
- P3_7 = 1;
- smg_display_dian(1-1,1);//數碼管指定位控制小數點
- dianhanzt = 3;
- i = 0;
- }
- break;
- }
- }
- }
- }
- void setup()
- {
- P5M1|=0x10;P5M0&=~0x10;//高阻輸入
- P3M1&=~0x80;P3M0|=0x80;//推挽輸出
- Timer0Init();
- TR0 = 1;// 定時器0開始計時
- EA = 1; // 控制總中斷
- ET0 = 1; // 控制定時器中斷
- TaskComps[0].Yun = 1;
- TaskComps[0].Run = 1;
- TaskComps[0].Timer = 10;
- TaskComps[0].ItvTimer = 10;
- TaskComps[0].TaskHook = renwu0;
- TaskComps[1].Yun = 1;
- TaskComps[1].Run = 1;
- TaskComps[1].Timer = 1000;
- TaskComps[1].ItvTimer = 1000;
- TaskComps[1].TaskHook = renwu1;
- TaskComps[2].Yun = 1;
- TaskComps[2].Run = 1;
- TaskComps[2].Timer = 10;
- TaskComps[2].ItvTimer = 10;
- TaskComps[2].TaskHook = renwu2;
- smg_init();//數碼管初始化
- smg_display_clear_bit(8);//數碼管清指定位
- eeprom_read_uchar(0,shezhishijian,(sizeof(shezhishijian)/sizeof(shezhishijian[0]))); //EEPROM讀數據
- P3M1|=0x04;P3M0&=~0x04;//P3_2高阻輸入
- P3M1|=0x10;P3M0&=~0x10;//P3_4高阻輸入
- P3M1|=0x08;P3M0&=~0x08;//P3_3高阻輸入
- }
- void loop()
- {
- TaskProcess();
- TaskProcess();
- TaskProcess();
- }
- void main(void)
- {
- setup();
- while(1){
- loop();
- }
- }
復制代碼 完工后面上干貨了。
51hei圖片20221214192859.png (39.18 KB, 下載次數: 62)
下載附件
2022-12-14 19:29 上傳
上圖8個文件下載:
氬弧焊脈沖點焊控制.rar
(474.88 KB, 下載次數: 76)
2022-12-14 19:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|