自制一個串列埠帶時鐘的加密狗
首先是器件選型問題:
MCU 選一個 STC12C5A16S2 LQFP 44
其實就是51微控制器,如果你沒有玩過51微控制器,就把它理解成一臺超微型的電腦主機就可以了,裡面有Flash儲存器(可以理解成PC的硬碟,不過空間不大),還有RAM(可以理解成PC的記憶體,當然空間也不大)等等。至於為什麼選STC這個品牌呢,因為燒寫程式介面容易定義,直接用串列埠就可以進行程式的燒寫了,所以選擇用STC。為什麼用12C5A系列呢,因為它的速度要比89C系列快,還有12T的模式,為什麼要選16S2型號呢,因為有16k的Flash,當然還有08、32、40、48、52、56、60、62等型號,分別是指他們的Flash空間大小,S2表示支援雙串列埠,還有AD的(表示數模轉換IO口),為什麼選擇 LQFP 44 封裝呢,因為這個封裝比較容易焊接,LQFP 48 的話就太小了,對於手工板來說不好製作,也不方便焊接,如果用DIP40,又太大了,對於加密狗這種裝置還是小點好看。
通訊層器件 選擇 MAX232 SOP 16
這是串列埠通訊的一個基本器件,是將MCU的IO輸出轉RS232 TTL電平的晶片(其實就是個電壓轉換晶片),因為串列埠通訊的電壓是用9v,而MCU的IO腳的耐壓能力沒那麼高,輸出電壓也沒那麼高,因為它只能輸出5V或接受5V以內的電壓,過高的電壓會讓MCU燒燬,所以需要將MCU輸出的5V電壓轉換成9V發出去,讓收到的9V電壓轉換成5V供進來,這樣才能解決串列埠通訊上9V電壓的通訊問題,當然,其實也可以用9014、9015這樣的三極體來自己搭電路解決這個問題,但既然有現成的轉換模組,外圍電路也不多,成本也不高(買得便宜的話還有RMB 0.8元/塊 的)。用 SOP 16封裝的理由是:貼片封裝,小巧好看省空間
時鐘晶片 選擇 DS12C887 或 DS12C887+
這一款時鐘晶片雖然樣子大了點,但是好處是可以充電,每次充滿電後,在沒有任何供電的情況下,這個晶片可以自己呼叫內部電池的電自行工作,理論上可以跑10年。當然,也可以選擇 DS1302 這樣的晶片,有貼片封裝的,不過要外接3V的電池和晶振。通常一個鈕釦電池可以跑兩年左右。不過我這裡就只介紹DS12C887的方式。
完成基本器件選型後我們來設計好電路原理圖
先安裝一個 Protel DXP2004 或者 Protel 99 或者 Altium Designer Winter 09 之類的軟體,然後開始設計原理圖,這裡我就不細說工具的使用部分了
先說一下供電部分電路
這個圖裡有4個器件,JP1是一個電源介面,可以用排針來弄,也可以直接弄成個焊盤直接焊接上電線。
C1是一個電解電容,因為無極性的電容沒那麼大的,所以就用電解電容,我使用貼片的,但看起來也不小
C2是一個無極性的貼片電容,用0805的就可以了,0603的太小不好焊接。
這兩個電容主要用來濾波用的,作用是讓電壓更平穩的輸出到後面的電路中。
LED1是一個發光二級管,也稱LED,主要是用來顯示是否已經上電的狀態,R1是幫他接的500歐的電阻,因為LED的工作電壓通常在1.5-3V左右,用這個電阻起到降壓的作用,讓他不至於燒燬。
這時的 VCC 就代表一個平穩的 +5V 供電,GND 就代表地。
我們再來看看 MCU 部分的電路
MCU 要能工作需要幾個固定條件
1、供電,這款MCU供電是 5V 的,所以在 38 腳我們接上 VCC, EA腳註意也接上 VCC
2、接地,要電路能運轉,必須形成電路的迴路,根據 MCU 管腳定義,所以我們在 16腳接墒 GND(地)
3、上晶振,就像 PC 的 CPU 一樣,MCU 也有時鐘頻率,PC 的 CPU 振盪頻率是內部的,而這款 MCU 的是在外部振盪的,所以我們必須在外部給他接個晶振。而外部的振盪電路如下:
根據 MCU IO口定義,我們將振盪電路的兩端接到 MCU 的第 14、15 口上。
Y1是表示晶振,頻率是 22.1184 兆赫茲,為什麼要用這個頻率呢?主要是方便串列埠通訊的時鐘頻率。
C7 和 C8 是兩個 33皮法的無極貼片電容,因為晶振頻率高,每個振盪都有可能影響下面的地產生振盪,所以用兩個比較小的電容進行濾波。其實用 20pf - 35pF 都可以的。
這樣一來,MCU 所需基本的條件就有了,只要一供電,MCU就會讀取內部的程式進行工作了。
但是程式是哪來的呢?當然是使用者自己燒寫進去的啦,那怎麼燒寫,通過什麼地方燒寫呢?上面我有提過,是通過串列埠燒寫,所以,下一步我們就來看看這款MCU的串列埠通訊部分的電路。
4、串列埠通訊
這款MCU有兩個串列埠,共4個IO管腳來處理串列埠通訊。我們只需要用到一個串列埠,所以我們使用第5腳和第7腳來進行串列埠通訊的收發處理。
為什麼非要用第5和第7腳呢,因為這是廠家出廠時定義給使用者用作串列埠通訊用的兩個管腳,燒寫程式也是用這兩個管腳傳輸資料後燒寫的,如果只作為通訊,任何IO口都可進行串列埠通訊(但需要自己在程式裡模擬處理整個通訊包過程),但是如果使用這個口,只需要設定幾個引數,就很方便的可以直接使用中斷處理串列埠通訊內容。
然而,串列埠通訊的電壓標準是9V,也就是說,傳送出去的電壓是9V。接收的電壓也是9V,我們使用的 MCU IO 口是 5V 的,如果這個電壓直接送到 MCU 的 IO 口,後果可想而知,所以我們必須作電壓轉換,這裡我們採用 MAX232 作為電平轉換晶片。以下是 MAX232 的基本電路。
根據 MAX232 的外圍電路標準,電容是在 0.1 微法到 1 微法到之間,主要是根據連線串列埠的電纜線長度而決定的。電容越大,線纜就可以越長,電容越小,線纜就越短,但是長度通常都用 1.5M,所以不用太在意這個值。我們這裡使用 1微法,這樣能保證線纜能儘可能的長的條件下可以進行通訊。C3、C4、C5、C6 都是 1 微法無極性的 0805 貼片電容,將第 10 腳接到 MCU 的第7腳,將第9腳接到 MCU 的第5腳,第7腳和第8腳分別接到PC串列埠上的2、3腳上,供電和接地部分看上圖就清楚了,我也不多說了
5、時鐘
這一款時鐘晶片主要是8位並行通訊的,所以儘量將他的資料口直接到 MCU 的一組 IO 口上,我這裡是接到了 MCU 的 P0 口上,這樣方便程式的讀寫操作。在管腳連線上,儘量避免 P1.4-P1.7的 IO 口,因為這幾個口是 SPI 腳的定義口,弄不好會影響程式燒寫的,因為雖然說STC是通過串列埠燒寫,但其實它是內部模仿 SPI 燒寫的,所以儘量避免接這種可返回和設定的裝置埠在這裡使用。
到此為止,基本的原理圖我們已經作出來了,剩下來的就是製作 PCB 圖和製版寫程式了。
根據上面的原理圖,設計PCB圖
設計時PCB圖
列印時PCB圖
PCB 的製作的細節我就不多說了,用一下DXP就知道了。
下面我們來看看製作電路板的過程:
材料準備:
熱轉印紙(可以用那種貼刻字剩下的那種背面有臘的那種紙)
鐳射印表機(列印圖紙用)
過塑機(用來熱轉印)
三氯化鐵(腐蝕電路板用)
天納水(清潔轉印的炭粉用)
小電鑽和小鑽頭(用來鑽孔,0.6mm、0.8mm、1mm的小鑽頭,點鑽最好用小臺鑽)
一小節網線(用來弄過孔)
電烙鐵
焊錫絲
松香
電路所需的電子元件
第一步:列印PCB
第二步:熱轉印
先將覆銅板用800-1000的沙紙大磨光亮,然後再把列印好的熱轉印紙剪出來放到覆銅板上,到過塑機上過幾遍(注意:溫度在180度-220度之間),等待板子冷卻(可以用風扇加快冷卻時間),最後將轉印製慢慢撕下來,這樣印表機的炭粉就被轉印到覆銅板上了。
第三步:填線
用一些記號筆將轉印不是很好的部分填好,這樣腐蝕出來的板子才漂亮。
第四步:腐蝕電路板
準備一個盆子,然後向裡面倒入清水,在放入三氯化鐵攪拌均勻,然後才放入你要腐蝕的覆銅板。
腐蝕的過程中雖好搖晃一下盆子,這樣會加快腐蝕效果。
第五步:鑽孔
通常手工板用0.6的鑽頭來鑽,普通焊盤用0.8mm或1mm的鑽頭來鑽。
第六步:清潔板子
用捲筒紙佔一些天納水將板子上的黑色炭粉擦掉,然後再用1000的沙紙打磨光滑
第七步:處理過孔
用一小段剝了皮的網線心作為過孔連線材料,將網線心插入過孔處,然後用烙鐵焊接到板子的兩面上
第八步:焊盤上錫
將所有的焊盤先上好錫,然後再處理電子元件
第九步:焊接元件
遵循一個規則,先焊接小的矮的,從外到內的方式焊接就方便了。
因為這個板子設計的時候是直接插到串列埠卡的,所以最終就像下圖所視
這是成品板的樣子(打板的就是和自己的山寨貨不同,很漂亮吧,呵呵)
好了,板子做好了,下面就是燒寫程式了。STC的燒寫程式在官網有下載:http://www.stcmcu.com
下面就是下位機程式和上位機程式的事情了。
本人提供這個範例的下位機程式和上位機API介面,大家可以用這些程式做個範例
我們現在將板子供電、然後接好PC串列埠就可以開始燒寫程式了:
第一步:先啟動STC的燒寫軟體
第二步:設定
選擇好CPU型號和你的裝置所接的串列埠號
選擇 OpenFile/開啟檔案 按鈕選擇 Dog.hex
然後點選 “Download/下載” 按鈕
等到提示“請給 MCU 上電...” 的時候你再給你的裝置插上電源
燒寫程式將會自動把程式燒寫到你的MCU中。
然後可以啟動我提供的範例程式來除錯。
至於下位機的開發工具,可以去下載一個 Keic 8 進行程式開發,使用的是 C 語言。我過一段時間也會發表一些關於 Keil C 的一些基本應用的文章。