前言
現在,很多人手上都有一兩個電子設備,但是卻很少有人清楚其中比較關鍵的部分(PCB電路板)是如何制作出來的。我雖然懂點硬件,但是之前設計的簡單系統都是自己在萬能板上用導線自己焊接的(如下圖左),復雜的都是模塊拼接的(如下圖右):
工作中原理圖和PCB也有專門的工程師來制作,因此我對這一塊了解比較少。而最近閑來無事,又因為手頭上確實少一個四線二項步進電機驅動模塊。起初是在淘寶上找了很久才找到一個適合的,結果實驗了一下午還是不行;又考慮自己在萬能板上焊接,可是發現該模塊外圍需要10個左右的電阻電容,連線焊接不方便。最后也就決定自己嘗試“造”一個了,有時候不賣出一地步永遠不知道前面是坑還是路!下面是整個的制作過程(存在一些不成熟之處還請見諒)~
PCB的繪制、打板、元件焊接與測試
PCB繪制可以用很多種軟件,如下圖一個社區內的投票。其中Eagle是CadSoft Computer公司已經開發并銷售EAGLE軟件包超過20年。總部位于德國的CadSoft擁有龐大的用戶群,從業余愛好者到全球跨國公司如3M,AT&T,BMW, DaimlerChrysler, Hewlett Packard,IBM等。EAGLE(Easily Applicable Graphical Layout Editor)(易應用圖形布局編輯器)是一款低價格、界面豐富、人性化、易于學習和使用且功能強大的原理圖和PCB設計工具,它有很多高級功能:例如在線正反向標注功能、批處理命令執行腳本文件、覆銅以及交互跟隨布線器等功能。EAGLE從20世紀90年代初開始,就是歐洲市場上此類軟件中的暢銷產品。曾5次被一家重要的德國電子雜志選為“年度產品”,EAGLE在北美也已取得相當大的成功。EAGLE目前有標準版及專業版,可用于Windows?、 Linux? 、 Mac?平臺。(你在Ubuntu的應用商店上經常看見的那個評分還不錯的大紅鷹軟件就是它了!)
Altium Designer 是原Protel軟件開發商Altium公司推出的一體化的電子產品開發系統,主要運行在Windows操作系統。這套軟件通過把原理圖設計、電路仿真、PCB繪制編輯、拓撲邏輯自動布線、信號完整性分析和設計輸出等技術的完美融合,為設計者提供了全新的設計解決方案,使設計者可以輕松進行設計,熟練使用這一軟件必將使電路設計的質量和效率大大提高。Altium Designer 除了全面繼承包括Protel 99SE、Protel DXP在內的先前一系列版本的功能和優點外,還增加了許多改進和很多高端功能。該平臺拓寬了板級設計的傳統界面,全面集成了FPGA設計功能和SOPC設 計實現功能,從而允許工程設計人員能將系統設計中的FPGA與PCB設計及嵌入式設計集成在一起。 由于Altium Designer 在繼承先前Protel軟件功能的基礎上,綜合了FPGA設計和嵌入式系統軟件設計功能,Altium Designer 對計算機的系統需求比先前的版本要高一些。
Protel99SE是應用于Windows9X/2000/NT操作系統下的EDA設計軟件,采用設計庫管理模式,可以進行聯網設計,具有很強的數據交換能力和開放性及3D模擬功能,是一個32位的設計軟件,可以完成電路原理圖設計,印制電路板設計和可編程邏輯器件設計等工作,可以設計32個信號層,16個電源--地層和16個機加工層。
Altium公司作為EDA領域里的一個領先公司,在原來Protel 99SE的基礎上,應用最先進的軟件設計方 法,于2002年率先推出了一款基于Windows2000和Windows XP操作系統的EDA設計軟件Protel DXP。并于2004年推出了整合Protel完整PCB板級設計功能的一體化電子產品開發系統環境——Altium Designer2004版。與99SE的區別(來源網上):protel99對于xp的兼容性差點、不太穩定,可以滿足大部分設計需要;protel dxp引入了設計工程的思想,它的設計工程文件雖然只起到了一個和不同源文件間的鏈接作用,但可以方便組織起多層次的設計,另外好像在自動布線和集成元件庫上更完善。
鏗騰電子科技有限公司(Cadence Design Systems, Inc;NASDAQ:CDNS)是一個專門從事電子設計自動化(EDA) 的軟件公司,由SDA Systems和ECAD兩家公司于1988年兼并而成。是全球最大的電子設計技術(Electronic Design Technologies)、程序方案服務和設計服務供應商。其解決方案旨在提升和監控半導體、計算機系統、網絡工程和電信設備、消費電子產品以及其它各類型電子產品的設計。產品涵蓋了電子設計的整個流程,包括系統級設計,功能驗證,IC綜合及布局布線,模擬、混合信號及射頻IC設計,全定制集成電路設計,IC物理驗證,PCB設計和硬件仿真建模等。 其總部位于美國加州圣何塞(San Jose),在全球各地設有銷售辦事處、設計及研發中心。
從上面簡單的投票可知國內用AD和99的人是比較多的,我也緊跟潮流下了個AD14。既然有工具了,接下來就該著手設計原理圖了,經過千辛萬苦終于找到一款適合我用的芯片——ST的L6219四線二項步進電機驅動芯片:
然后閱讀其datasheet知道:The L6219 is a bipolar monolithic integrated circuits(雙極性單片集成電路) intended to control and drive both winding(雙繞組,即四個線) of a bipolar(雙極性) stepper motor or bidirectionally(直接地) control two DC motors. The L6219 with a few external components form a complete control and drive circuit for LS-TTL or microprocessor controlled stepper motor system(比較少的外設就能構成一個系統). The power stage is a dual full bridge capable of sustaining 46V and including four diodes for current recirculation. 此外,該芯片有雙列直插和貼片兩種樣式:
最后在其后面找到了其典型應用的原理圖(這就是我們最需要的啦)
然后根據原理圖在AD14軟件中繪制原理圖
再接著用AD14自帶的PCB生成功能自動生成并自動布線
最終效果如下
其3D效果如下
最后就是在淘寶上聯系一個PCB打樣的,將.PcbDoc文件發給他,和他確認好采用多厚的pcb板(1mm1.2mm1.6mm2mm...)、什么顏色的pcb板(黑白綠紫紅藍...)、如果生產廠家更專業還會問是用無鉛噴錫有鉛噴錫沉金等。我當時設計時賣家說黑色的要另外交50元,我就忍痛割愛選擇了藍色的!當時的價格是30元10片(每片小于4x5cm)。不知道是我做的好(^o^)/~還是店家爽快,我讓他幫我看看對不對,他說沒問題,然后我也就爽快地下單了~(就喜歡這么爽快的交易,哈哈)
上面把pcb交給賣家生產了,接下來要考慮的問題是哪里去購買這些電子元件呢~當然貼片的L6219是比較好買的(唯一嘛),但是上面的電阻電容就麻煩了~如果是正規生產,一般是pcb和boom表都發給生產廠家進行pcb生產、貼片、測試等全套過程,你只要出錢最后就能拿到和3D顯示效果一樣的東西了!但是,由于量小,貼片成本太大,我就自己得看boom來采購、貼片、測試了!下面是boom表:
為什么電阻和電容購買遇到了問題呢?是因為這里的電阻電容分別采用C2012和R2012封裝的,而淘寶上賣的比較多的是0805、1206等封裝。更坑的是我先把PCB發給賣家生產了,于是就得看看1206或0805那種封裝能替代2012封裝的,最后分別拿1206和0805的電容和2012的電容進行比較,最終發現0805封裝的是可以替換2012封裝的,于是每種電阻電容各買500個:(對于100uF的電容實在找不到適合的0805結果就買了個10uF的1206---->如下圖中第二行第一室,明顯比0805大,所以焊接的時候也給我帶了點麻煩)
就這樣在十一過后焦急地等待了3天,電子元件和pcb都過來了(十一他們不工作滴)
其實在十一之前我還做了件事,就是購買一套焊接裝備(自己貼片當然少不了烙鐵、風槍、吸錫器啥的啦)
下圖是我的“車庫”,工具齊全,環境良好
經過我的風槍吹、烙鐵焊、吸錫器、鑷子等反復蹂躪
最終弄出來一個
其實,到上一步還不算結束,我們還需要測試一下新模塊到底行不行、有沒有虛焊啥的。接下來就是看家本領了,嵌入式開發想要控制它還不容易!從上面的原理圖我們知道——I01I11I02I12Ph1Ph2六個引腳是和MCU相連來控制的引腳,引腳1、21、2、5接4線步進電機對應的四線,我把電源輸入強制都用5V的外部供電(其實有點不合理的)。 從它的datasheet中我們又獲取下列信息:即當把I01I11I02I12全部接地同時Ph1和Ph2輸入00、10、11、01周期性的信號時,四線二項步進電機工作在FULL STEP MOTOR DRIVE狀態。
由于整個工程特別大,這里只貼出驅動該模塊并控制步進電機的驅動部分:這里B7和B9兩個引腳就是連接在我們只做的驅動模塊的Ph1和Ph2上,看下面代碼可知周期性輸入10、11、01、00是一種轉向,周期性輸入01、11、10、00是另外一種轉向,從而根據輸入left的TRUE OR FALSE來控制步進電機的轉動方向,而參數n表示要連續控制步進電機轉多少個這樣的周期從而達到精確轉某個角度的需求。
1 #define SET_A GPIO_SetBits(GPIOB, GPIO_Pin_7) 2 #define RESET_A GPIO_ResetBits(GPIOB, GPIO_Pin_7) 3 #define SET_B GPIO_SetBits(GPIOB, GPIO_Pin_9) 4 #define RESET_B GPIO_ResetBits(GPIOB, GPIO_Pin_9) 5 void smallGo(int n, bool left) 6 { 7 int i; 8 if(left == TRUE) 9 { 10 for(i = 0; i < n; i++) 11 { 12 SET_A; 13 RESET_B; 14 OSTimeDlyHMSM(0, 0, 0, DelaySmall); 15 SET_A; 16 SET_B; 17 OSTimeDlyHMSM(0, 0, 0, DelaySmall); 18 RESET_A; 19 SET_B; 20 OSTimeDlyHMSM(0, 0, 0, DelaySmall); 21 RESET_A; 22 RESET_B; 23 OSTimeDlyHMSM(0, 0, 0, DelaySmall); 24 } 25 } 26 else 27 { 28 for(i = 0; i < n; i++) 29 { 30 RESET_A; 31 SET_B; 32 OSTimeDlyHMSM(0, 0, 0, DelaySmall); 33 SET_A; 34 SET_B; 35 OSTimeDlyHMSM(0, 0, 0, DelaySmall); 36 SET_A; 37 RESET_B; 38 OSTimeDlyHMSM(0, 0, 0, DelaySmall); 39 RESET_A; 40 RESET_B; 41 OSTimeDlyHMSM(0, 0, 0, DelaySmall); 42 } 43 } 44 }
由于這里我們采用下面的步進電機,其每轉步數為48,也就是說上面函數調用中n=12即可實現步進電機旋轉一周的目的,也因此最小可控轉角為360/12=30°。再通過計算求出旋轉一步連接螺母可以移動的距離就能實現精確的距離控制,從而做一些機器人手臂、3D打印、噴墨、光盤托盤等機械部件的精確驅動模塊。不過這里每步30°精度不太高,我在該項目中用的另一個商業版的步進電機驅動可以支持每轉步數10000,是不是很厲害丫~
說明:
最近如何為編程愛好者設計一款好玩的智能硬件暫時停止更新(目前已至十),不是因為我要放棄該DIY的更新,而是因為當我把無線、顯示、傳感器等模塊的驅動封裝好之后,發現少一個核心的支持點對點、點對多以及廣播的穩定的通信協議。于是,接下來一段時間可能會先談linux內核專題,等時機成熟我再帶一個適合X-OS的通信協議繼續DIY我們的積木物聯網系統。
編輯:hfy
-
pcb
+關注
關注
4318文章
23022瀏覽量
396424 -
altium
+關注
關注
47文章
942瀏覽量
118042 -
物聯網
+關注
關注
2904文章
44306瀏覽量
371460
發布評論請先 登錄
相關推薦
評論