最近做了一個用單片機的點焊機控制裝置,使用的是89C51單片機、LCD5110顯示屏和微型繼電器,通過檢測按鈕信號,精確控制點焊機變壓器的導通時間和兩次焊接的間隔時間。變壓器導通時間從40毫秒到2600毫秒之間,按20毫秒為一檔連續可調,兩次焊接的間隔時間則為5秒和10秒兩檔,這兩個參數均通過7+1位撥碼開關由用戶根據需要動態設置,設置結果即時顯示在屏幕上。參見下圖:
131753t97glg29z7yljzji.jpg (44 KB, 下載次數: 108)
下載附件
2018-12-19 16:27 上傳
003電子點焊機.jpg(44 KB, 下載次數: 0)
下載附件
前天 13:17 上傳
屏幕中間顯示的是設置的點焊時間,以毫秒為單位,通過左起的7位撥碼開關設置。下部左邊顯示的的是設置的間隔時間,為5秒和10秒兩檔, 通過最右邊的撥碼開關設置。屏幕右下角顯示的是間隔時間倒計時,只有倒計時為零時,單片機才接收點焊按鈕的信號。下圖是點焊機的正面:
131605whz43xju4x64rtxd.jpg (140.45 KB, 下載次數: 114)
下載附件
2018-12-19 16:27 上傳
115控制板制作_通電測試.jpg(140.45 KB, 下載次數: 0)
下載附件
前天 13:16 上傳
機箱面板上有3個LED指示燈,最上面紅色的是電源指示燈,面板上開關打開接通控制電源后常亮。中間橙色的是工作指示燈,點焊機變壓器接通后點亮,關閉后即滅。下面綠色的是準備好信號燈,當倒計時為零時此燈閃爍,只有綠色信號燈閃爍時點焊按鈕才有效,這個信號燈在焊把上也同時存在。
下面是控制線路的原理圖:
131601obifr7kgxdsi3btf.jpg (138.18 KB, 下載次數: 142)
下載附件
2018-12-19 16:27 上傳
整個控制線路用了兩塊萬用板搭焊,一塊安裝了3個LED信號燈、LCD5110顯示屏和8位撥碼開關,另一塊則是單片機及外圍電路、微型繼電器以及7805穩壓塊等。
單片機源程序如下:
- /*******************************************************************************
- * *
- * 點焊機控制器 *
- --------------------------------------------------------------------------------
- * 結構說明: 51單片機計時控制 *
- * 在檢測到點焊手柄發出的工作信號時, *
- * 立即接通點焊機的電源,點焊機開始工作,設定的時間結束后切斷電源,*
- * 在設定的間隔時間內,不接收點焊手柄發出的工作信號。 *
- * 版本說明: 胡家峻@2018年8月 *
- *******************************************************************************/
- /*
- * 單片機P0^0~P0^4口分配給LCD5110使用:RET、CE、D/C、DIN、CLK(在LCD_5110.h中定義
- * P0^5 設備等待(可以工作)信號燈
- * P0^6 設備工作間隙(不接收點焊信號)信號燈
- *
- * P1^0~P1^6 開關設置點焊時間(20毫秒為1單位,0~127單位)
- * P1^7 工作間隙:0=5秒,1=10秒
- *******************************************************************************/
- #include<reg51.h>
- //#include<intrins.h>
- #include"LCD_5110.h" //包含LCD顯示驅動文件
- #define u8 unsigned char //單字節
- #define u16 unsigned int //雙字節
- #define u64 unsigned long //四字節
- #define SZP1 P1 //P1口為初始設置的數據,低七位為定時數值(0-127)*20ms,
- //第八位為間隙時間,0=5秒,1=10秒
- sbit LED_work = P0^5; //設備工作信號(低電平點焊機接通)
- sbit LED_read = P0^6; //設備就緒信號(低電平可以工作)
- sbit work = P0^7; //點焊按鈕信號(低電平按下)
-
- //--定義全局變量--//
- u8 sdsj = 0; //設定的點焊單位
- u64 shsj = 0; //設定的點焊時間(雙字節,以毫秒為單位)
- u8 wait = 5; //設置的間隔時間(5秒或10秒,根據P1.7確定)
-
- u8 time_work = 0; //焊接時間計時(20毫秒/單位)
- u8 time_wait = 0; //等待時間計時(單位秒)
- bit time_1s = 0; //秒信號
- bit time_20ms = 0; //20毫秒信號
- bit flag = 0; //定時工作標志(0=待機或間隔,1=正在工作
- /*******************************************************************************
- * 函 數 名 : ReadSet
- * 函數功能 : 讀設置并顯示
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void ReadSet(void)
- {
- sdsj = SZP1; //從P1口讀入一個字節的數據
- if (sdsj>127) wait = 10; //最高位1,間隔時間=10秒
- else wait = 5;
- LCD_write_val(27,4,2,wait);//顯示設定的間隔時間
-
- sdsj = (sdsj & 0x7f) + 3; //取低7位定時值再加3(60毫秒)
- shsj = sdsj * 20; //20毫秒基本單位
- LCD_write_val(27,2,4,shsj);//顯示設定的點焊時間
- }
- /*******************************************************************************
- * 函 數 名 : timehand
- * 函數功能 : 20毫秒處理函數,即每隔20毫秒處理一次
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void TimeHand(void)
- {
- if (flag == 0) //待機狀態
- {
- if (work == 0) //收到點焊按鈕信號
- {
- flag = 1; //設置工作標志
- time_work = sdsj;//取設定時間
- LED_work = 0; //開通工作電源
- LED_read = 1; //關閉等待信號燈
- }
- else //無點焊按鈕信號
- {
- ReadSet(); //檢查更新設置
- }
- }
- else //工作狀態
- {
- time_work--;
- if (time_work == 0)//定時時間到
- {
- LED_work = 1; //關閉點焊機電源
- LED_read = 1; //取消準備好信號燈
- flag = 0; //撤銷工作標志
- time_wait = wait;//恢復間隔時間
- LCD_write_val(61,4,2,time_wait);//顯示剩余間隔時間
- }
- }
- }
- /*******************************************************************************
- * 函 數 名 :
- * 函數功能 : T0中斷服務函數
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void InterruptTimer0() interrupt 1
- {
- static u8 i = 0; //毫秒
- static u8 j = 0; //20毫秒
- TH0 = 0xFC; //重新加載初值,定時1ms
- TL0 = 0x66;
- i++;
- if (i > 19) //20毫秒計時到
- {
- i = 0;
- time_20ms = 1; //置20毫秒標志
- j++;
- if (j > 49) //1秒
- {
- j = 0;
- time_1s = 1; //置1秒標志
- }
- }
- }
- /*******************************************************************************
- * 函 數 名 : main
- * 函數功能 : 主函數
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void main(void)
- {
- //設置初始屏幕顯示
- u8 i, x ,y;
-
- LED_work = 1; //測試
- LED_read = 1;
- LCD_init(); //初始化5110屏幕
- x = 8; //顯示的起始位置
- y = 0;
- for (i = 0; i < 5; i++)//顯示“電子點焊機”
- {
- LCD_write_char(x,y,i);//
- x = x + 14; //下一字的顯示位置
- }
- x = 0;
- y = 2;
- LCD_write_char(x,y,3); //顯示“焊”
- x = 14;
- LCD_write_char(x,y,5); //顯示“接”
- x = 59;
- LCD_write_char(x,y,8); //顯示“毫”
- x = 72;
- LCD_write_char(x,y,9); //顯示“秒”
- x = 0;
- y = 4;
- LCD_write_char(x,y,6); //顯示“間”
- x = 14;
- LCD_write_char(x,y,7); //顯示“隔”
- x = 44;
- LCD_write_char(x,y,9); //顯示“秒”
- x = 76;
- LCD_write_ASCII(x,y,12);//顯示“s”
- ReadSet(); //讀取設定定時時間并顯示
- LCD_write_val(61,4,2,time_wait);//顯示剩余間隔時間
- LED_read = 0; //顯示準備好信號燈
- TMOD = 0x01; //設置T0為模式1
- // TH0 = 0xF8; //為T0賦初值0xF8CD,定時2ms
- // TL0 = 0xCD;
- TH0 = 0xFC; //為T0賦初值0xFC67,定時1ms
- TL0 = 0x66;
- // TH0 = 0xFC;
- // TL0 = 0xC3; //為T0賦初值0xFA02,定時1ms
- ET0 = 1; //開T0中斷
- TR0 = 1; //啟動定時器0
- EA = 1; //開總中斷
-
- while(1)
- {
- if (time_1s == 1) //每秒處理
- {
- time_1s = 0; //重置秒標志
-
- if (time_wait > 0)
- {
- time_wait--;
- if (time_wait == 0)
- {
- LED_read = 0;//顯示就緒信號
- }
- LCD_write_val(61,4,2,time_wait);//顯示剩余間隔時間
- }
- else
- {
- if (LED_work == 1)
- {
- LED_read = ~LED_read;//等待時每秒閃一次
- }
- }
- }
-
- if (time_20ms == 1)
- {
- time_20ms = 0; //重置20毫秒標志
- if (time_wait == 0)
- {
- TimeHand(); //調用20毫秒處理程序
- }
- }
- }
- }
復制代碼
0.png (47.49 KB, 下載次數: 108)
下載附件
2018-12-19 16:27 上傳
所有資料51hei提供下載:
點焊機.rar
(708.39 KB, 下載次數: 252)
2018-12-19 12:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
Keil項目文件包
|