本人是單片機小白,來學習的新人,還望大家多多照顧噢
前段時間去大姐夫家玩,發現大姐夫有很多lsuc這種超級電容,非常適合做儲能式點焊機,而且現在點焊18650等電池也越來越多,于是便親自操刀做一個玩玩!
設計三層電路板,模塊化設計,最底層是固定超級電容的均衡電路板,中間層是mos管矩陣電路板,最上邊是單片機控制電路板
下圖是用TL431做的均衡充電板,LSUC超級電容耐壓2.8v容量3000F,均衡起控電壓2.78v 均衡電流800mA
webwxgetmsgimg (12).jpg (91.25 KB, 下載次數: 114)
下載附件
2019-12-22 18:08 上傳
熱轉印pc為了降低內阻特意買了銅排進行關鍵部位連均衡和mos矩陣板放在一起試一下
webwxgetmsgimg (7).jpg (2.44 MB, 下載次數: 131)
下載附件
2019-12-22 18:10 上傳
打孔加工
webwxgetmsgimg (4).jpg (2.56 MB, 下載次數: 129)
下載附件
2019-12-22 18:10 上傳
安裝上一個,感覺很漂亮啊
webwxgetmsgimg (3).jpg (2.39 MB, 下載次數: 135)
下載附件
2019-12-22 18:10 上傳
裝好的mos管矩陣電路板
webwxgetmsgimg (6).jpg (1.91 MB, 下載次數: 116)
下載附件
2019-12-22 18:10 上傳
組裝在一起看下效果,感覺還是很漂亮的
webwxgetmsgimg.jpg (2.5 MB, 下載次數: 123)
下載附件
2019-12-22 18:10 上傳
webwxgetmsgimg (1).jpg (1.81 MB, 下載次數: 121)
下載附件
2019-12-22 18:10 上傳
接下來進入正題,進行時間控制板的程序設計和pcb設計
單片機源程序如下:
#include "reg51.h" //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16;//對數據類型進行聲明定義
typedef unsigned char u8;//對數據類型進行聲明定義
sbit P30=P1^0; //數碼管第1位
sbit P31=P1^1; //數碼管第2位
sbit k1=P1^6; //將單片機的P3.2端口定義為時間加
sbit k2=P1^5; //將單片機的P3.3端口定義為時間減
sbit k3=P1^7; //將單片機的P3.4端口定義為檢測點焊筆
sbit out=P1^4; //驅動脈沖輸出
//數碼管真值表//
u8 code LED_CODE[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //顯示0~F的段碼
u16 Cntms1=0,Cntms2=0,num1,num2;ke;
u8 num; //定時變量=毫秒
void Delay(unsigned long int t)
{
while(--t);
}
/*===加按鍵檢測===*/
/*當此函數檢測到有效按鍵時返回1,沒有檢測到有效值時返回0*/
bit skey0(void)
{
static unsigned char a = 0;
if(k1 == 0) //如果檢測到按鍵引腳有低電平,記數變量開始累加.
{
if(a < 50) //控制延時計數返0,因為當按鍵不松開時,j一直在累加
a++; //CPU每檢測到一次按鍵引腳為低電平0,j就累加1次.
}
else //如果按鍵沒有按下或者按下后有高電平(抖動)j清0
a = 0;
if(a == 49) //如果變量j的值累加到49,說明按鍵已跨過抖動區.
return 1; //返回1,說明已檢測到按鍵有效值.
else
return 0; //返回0,說明沒有檢測到有效值.
}
/*===減按鍵檢測===*/
/*當此函數檢測到有效按鍵時返回1,沒有檢測到有效值時返回0*/
bit skey1(void)
{
static unsigned char i = 0; //定義靜態變量,用來記錄延時用.
if(k2 == 0) //如果檢測到按鍵引腳有低電平,記數變量開始累加.
{
if(i < 50) //控制延時計數返0,因為當按鍵不松開時,i一直在累加.
i++; //CPU每檢測到一次按鍵引腳為低電平0,i就累加1次.
}
else //如果按鍵沒有按下或者按下后有高電平(抖動)i清0
i = 0;
if(i == 49) //如果變量i的值累加到49,說明按鍵已跨過抖動區
return 1; //返回1,說明已檢測到按鍵有效值.
else
return 0; //返回0,說明沒有檢測到有效值.
}
bit skey2(void)
{
static unsigned int l = 0; //定義靜態變量,用來記錄延時用. unsigned long int
if(k3 == 0) //如果檢測到按鍵引腳有低電平,記數變量開始累加.
{
if(l <5000) //控制延時計數返0,因為當按鍵不松開時,i一直在累加
l++; //CPU每檢測到一次按鍵引腳為低電平0,i就累加1次.
}
else //如果按鍵沒有按下或者按下后有高電平(抖動)i清0
l = 0;
if(l == 4999) //如果變量i的值累加到4999,說明點焊筆已經做好準備,可以焊接了.
return 1; //返回1,說明已檢測到按鍵有效值.
else
return 0; //返回0,說明沒有檢測到有效值.
}
/********************************
數碼管動態顯示程序
********************************/
void display()
{
static u8 i=0;
if(i==0)
{
P30=1;
P31=0;
P3=LED_CODE[num/10];
for(ke = 0;ke <100;ke++); //延時一段時間
P31=1;
P3=0Xff;
i=1;
}
else
{
P31=1;
P30=0;
P3=LED_CODE[num%10];
for(ke = 0;ke <100;ke++); //延時一段時間
P30=1;
P3=0Xff; //消隱
i=0;
}
}
//主函數//
void main()
{
bit m = 0,m1 = 0,m2=0; //聲明一個位變量.用來存儲按鍵狀態.
unsigned char i;
out=1; //初始化輸出端口
num=40;//定時變量賦初值
k1 = 1; //加按鍵輸入端口電平置高
k2 = 1; //減按鍵輸入端口電平置高
k3 = 1;
while(1) //主循環
{
m = skey0(); //采集加按鍵
m1 = skey1(); //采集減按鍵
m2 = skey2(); //采集按鍵
if(m == 1) //如果采集到加按鍵值.
{
if(num < 99)
num++; //計數自增
}
if(m1 == 1) //如果采集到減按鍵值.
{
if(num >1)
num--; //計數自減
}
if(m2 == 1)
{ for(i=0;i<2;i++) //加入 for循環,表明for循環大括號中的程序循環執行2次
{
out=0; //將P1.0口賦值 0,對外輸出低電平
Delay(num*50); //調用延時程序;更改延時數字可以更改延時長度;用于改變輸出脈沖時間
out=1; //將P1.0口賦值 1,對外輸出高電平
Delay(3000);
}
}
display();//數碼管動態顯示
}
}
程序及引腳定義完,接下來設計pcb
IMG_20190430_085126.jpg (2.55 MB, 下載次數: 149)
下載附件
2019-12-22 18:18 上傳
IMG_20190430_111510.jpg (1.95 MB, 下載次數: 125)
下載附件
2019-12-22 18:18 上傳
第一次使用綠油技術
IMG_20190430_152334.jpg (2.82 MB, 下載次數: 122)
下載附件
2019-12-22 18:18 上傳
接下來下載程序,調試一下
IMG_20190501_140156.jpg (2.49 MB, 下載次數: 116)
下載附件
2019-12-22 18:18 上傳
至此大功告成
IMG_20190506_083651.jpg (2.38 MB, 下載次數: 121)
下載附件
2019-12-22 18:18 上傳
IMG_20190506_083715.jpg (2.14 MB, 下載次數: 142)
下載附件
2019-12-22 18:18 上傳
測試一下點焊效果
IMG_20190506_083633.jpg (1.81 MB, 下載次數: 135)
下載附件
2019-12-22 18:18 上傳
用力
IMG_20190506_083831.jpg (2 MB, 下載次數: 134)
下載附件
2019-12-22 18:34 上傳
焊的還是很牢固
IMG_20190506_083847.jpg (1.92 MB, 下載次數: 134)
下載附件
2019-12-22 18:34 上傳
感謝大家觀看!
|