2018年10月27日 星期六

自幹世界線變動率探測儀(Nixie Tube Clock):後記

世界線變動率探測儀系列文終於接近尾聲了,能看到這邊想必大家也煩了,做一趟電路自己也學到很多,覺得非常值得;如果能讓看系列文的大家也學到東西,我想這前後加起來 8 篇快 14000 字的文章就有寫的價值。
是說自從我發了文之後,好像真的有不少人覺得世界線變動率探測儀是不是真的在探測什麼東西XDDD,其實它就只是個輝光管做的時鐘而已 (._.),真的很想知道它為什麼叫這個名字…就請去看 Steins;Gate

從8月左右開始動工,動工到現在連 Steins;Gate 0 都已經演完了,東西才做出來。

若說這次學到最大的教訓,就是:限流電阻很重要,限流電阻很重要,限流電阻很重要。說來漸愧,上路之前都沒好好看 spec 或是看人做的東西,有些地方一定要加限流電阻的都忘了加XDD。
例如 nixie tube 限流是 3 mA ,剛拿到高壓電路一時興起就給它直接打下去,當然 nixie tube 是沒壞啦(俄國管子真耐操www),但就高電流把管子內打出一堆電漿,還在疑惑怎麼拍起照來都是一團糊糊的,後來看看才發現要加 22K 限流電阻,小數點則是實驗後發現要 75 K 限流電阻。
然後 TLP521 也是,沒加 220 ohm 限流電阻 5V 直接灌下去,馬上就超過 arduino 的限流 40 mA,然後疑或為啥 arduino 電壓輸出到不了 5 V。
另外也不要偷懶,每個元件例如 LED, nixie tube ,限流電阻該加的每個元件都要加一個,共用電阻是絕對 NG,如同這裡說的:那是因為每個元件會有不同的特性,調小電阻的同時,就可能有元件吃到過大的電流導致燒毀,畫 layout 的時候一度把所有 nixie tube 的電阻用同一個,幸好有一天睡前躺在床上突然大徹大悟把它改掉了。

然後功率的部分也要認真對待,為了這個 project 久違的把我的工程計算機拿了出來,幾個元件電阻的功率都要算一下,不過 IN-14 相對來說,1.5 mA 的電流不算大,這上面所有的電阻都能用 0603 解決,比較危險的只有陽極驅動的 470k 電阻。
所有設計都在 github ,主要就是 code 跟電路板 gerber layout,高興的話拿去跟板廠說要洗板他就會幫你洗板子出來,買個元件插一插,就能做出自己的世界線變動率探測儀,或者其實我有多洗一些板子,要的話也可以跟我買(誤。
最終整體成本大概如下:電路板 4000 元,輝光管 2000 元,元件加一加約莫 800 元吧,當然跟外面賣的產品比還是便宜一半,花自己時間就是了。

其實這版 1.01 問題不少,包括先前提過的:
  • 腳太近:控制 180 V 的 MPSA42/92 選了 TO-92 的 footprint,它的腳位間距只有 0.25 mm,不及 180 V 建議需要的 0.4 mm,某種程度上可能會有危險。
  • 看錯輝光管的腳位,導致數字 1-9 全部反過來,該打屁股。
  • LED 關不掉又太亮了,這個可能是最輕微的啦,而且可以再買電阻修正。
  • Layout 不夠緻密,浪費面積
以上未來可能出一個 v1.02 來修正吧,但我說真的沒實際驗證過,出個 v1.02 做錯了害大家噴錢我又不能負責(yay,而且 easyEDA 改 layout 好麻煩,想到就不想做XDDD。

如果未來哪天我想不開,也許有可能會做個第二版,不過我是覺得不會這麼快啦,我目前給自己第二版的目標,包括至少要有:
  • 雙層板,下層控制上層放燈管,挑戰總面積最小,不然像這版寬度達到 10 幾公分,根本不能像動畫裡面那樣拿起來。
  • 使用 MC34063 以外,高頻一點的開關電路,做到更高頻、效率更好的升壓方式,例如網路上有人販售的高壓電路板,可以做到非常小,效率又高,用電池就能推得動一堆管子。
  • 嘗試使用 SMT 的晶片,元件能用平面的就用平面,縮小面積。
我猜至少要幾年以上吧,現下有第一版就非常滿意了,有機會的話想找人做個木盒跟壓克力盒把它裝在裡面www。

本作品的完成,有許多要感謝的人:
  • 強者我同學 小新大大 起了頭,讓我們有動力完成製作。
  • 強者我同學 強強林大大 在過程中給予幫助,出借工具、焊接空間。
  • 戀戀科技的 Marten 大大給予硬體電路板製作的指導。
  • 強者我學妹 昱廷大大 幫買淘寶高壓電路板。
  • JKL 代購幫助我買到 ebay nixie tube。
  • 在製作過程中大量參考 復古咖啡大大 的製作。
  • 工作狂人大大 的網站助我學到許多 PCB 相關的知識,有一次整個週末都在刷大大的網站。
還有瀏覽了許多網站,幫助我解除設計上疑惑,像是 Arduino 官網、論壇,都多少幫了點忙,在此不一一介紹。

回首開工的日子,果然能好好做好一件事,會需要時間,但回頭來看,也非常值得,我想就用一張藍光的 Steins;Gate 世界線來收個尾吧。

這張超明顯的顯示 LED 太亮的問題呀(yay

自幹世界線變動率探測儀(Nixie Tube Clock):寫 code

到了這邊木已成舟(無誤,電路板沒做好的話,程式寫再多都沒有用www,只能硬著頭皮去修或者認命掏銀子出來重洗了),再來就是不斷的寫 code 跟燒 code,在洗板的時候已經預留了燒錄程式碼的接點,只要把對應的針腳從作為燒錄器的 Arduino 板子接到電路板上就能燒錄了。
寫Code的時候要注意,如果一不小心把所有的燈管都打開,高壓電路有可能會推不動,淘寶上買的高壓電路板是推得動,我的不行,我猜跟電感的好壞有關;這版電路因為有用上 74HC238跟 74CD4514,原則上來說是不會發生這種事。

建議可以先從低壓的部分先測試,因為我們在 78M05 輸出到所有需要 5V 的電路上有斷路器,這樣就可以先斷路,用外接的 5V 驅動整個電路了。
測試 LED,把 LED 腳位輪流打開就行了:

靠北,超級炫砲……
LED 5050 RGB,我藍、紅是用 270 歐姆,綠色用 620 歐姆,結果他爸還是超級亮…我個人是覺得有點太亮,測程式的時候都快被閃瞎了,有點妨害看燈管,如果可以的話應該要再換大一點的電阻,把光度調小一點。
Github 裡面有附上 74HC238 跟 74CD4514 的測試程式,可以執行後一個一個量測兩個晶片的輸出,看看有沒有正常動作。

軟體中燈管要顯示的數字存在 Byte 裡面,0-9 對應 0-9,左點跟右點分別是 10 跟 11,照著 Byte 的位元寫給 74CD4514,12-15 則是會把 74CD4514 的 INH 降下來把燈管關掉。
void writeNum(byte num) {
  if (num >= 12) {
    digitalWrite(DISPLAY_E, HIGH);
  } else {
    byte mappedNum = mapNum(num);
    digitalWrite(DISPLAY_E, LOW);
    digitalWrite(DISPLAY_3, (mappedNum >> 3) & 0x1);
    digitalWrite(DISPLAY_2, (mappedNum >> 2) & 0x1);
    digitalWrite(DISPLAY_1, (mappedNum >> 1) & 0x1);
    digitalWrite(DISPLAY_0, (mappedNum >> 0) & 0x1);
  }
}
這裡要特別注意一下,如果要取出數字裡某個 bit 的時候,要用的運算符號是 & bitwise and ,不是 ^ bitwise xor 噢 ^.<
為什麼會有那個 mapNum ,其實是我 v1.01 的 layout …畫錯了,不確定是不是用的 footprint 的問題還是我自己蠢,總之陰極控制的接線是錯的,從 1-9 的接線完全反過來了,幸好這個 bug 可以用軟體修正回來,寫一個函式去轉數字就好了,這個也是 v1.02 修正。我覺得機率最高的原因,是我在看參考資料的圖的時候,沒有注意到它是 Bottom view,在設定 schematic to layout 的時候寫反了,最後 layout 也就錯了。
燈管的選擇 writeTube 和這裡一樣,0-7 各 bit 送給 74HC238 的三個腳位,就能開關某一支燈管,很簡單可以打包成一個函式來選擇燈管,首先我們就先寫一個掃描的程式,用 for loop確認每個燈管每隻腳位都有正常運作。
正常。
有了這兩個小函式,可以把燈管的值保存在全域變數陣列 display,然後用一個函式來更新它,只要這個函式在 loop() 中,燈管就會不斷顯示 display 的值;delay 只能是 delay(1) 或 delay(2) ,算是實驗得到的經驗值,不放 delay 的話切換速度太快,所有管子的數字會混在一起,delay(3) 的話則是看得出有點在閃。
void updateTube() {
  for (int tube = 0; tube < NTUBE; tube++) {
    writeTube(tube);
    writeNum(display[tube]);
    delay(2);
  }
}

使用 DS1307 記錄時間:

知道如何顯示數字之後,再來就是去接 RTC 時間,這裡我是使用別人包好的 DS1307RTC,照著範例把 library 引入之後,在 setup 呼叫 setSyncProvider(RTC.get);
即可和 DS1307 同步,之後就可以很方便的用 year(), month() 等函式拿到現在的時間值,非常方便。

DS1307 Interrupt:

DS1307 的 SQW 腳位能設定穩定輸出方波,搭配 arduino interrupt 就能每秒呼叫函式做點事情,我們已經把 DS1307 的 SQW 腳位接給 ATmega328p 的 digital pin 2,只要透過 Wire 向 ds1307 設定(請參考 ds1307 datasheet),其中 DS1307_ADDR 是 DS1307 的 I2C 位址 0x68,再對偏移 0x7 的位址寫入設定 0x10 即可,DS1307 可以設定輸出 1kHz, 4.096 kHz, 8.192 kHz 和 32.768 kHz 的方波:
Wire.begin();
Wire.beginTransmission(DS1307_ADDR);
Wire.write(0x07);
Wire.write(0x10);  // Set Square Wave to 1 Hz
Wire.endTransmission();
設定完 ds1307 就會輸出頻率 1Hz 的方波,我們可以把這個方波接給 ISR 來做計算開機秒數的工作:
void ISR_RTC() {
  toggle = !toggle;
  ++secCount;
}
attachInterrupt(digitalPinToInterrupt(RTC_SQW), ISR_RTC, RISING);
後來發現算秒數好像不能幹嘛XDDD

使用 DS1307 NV RAM 記錄資訊:

為了記錄世界線的資料,我們要用 DS1307 上面 56 bytes 的 NVRam 記錄資訊,不知道為什麼 DS1307 library 都不支援這功能,參考 arduino 論壇包了兩個函式來讀寫 NVRam,RAM_OFFSET 是 0x8,這樣就能把世界線的資料記錄在 NVRam 裡面了。
void writeNVRam(byte offset, byte *buf, byte nBytes) {
  Wire.beginTransmission(DS1307_ADDR);
  Wire.write(RAM_OFFSET + offset);
  for (int i = 0; i < nBytes; i++) {
    Wire.write(buf[i]);
  }
  Wire.endTransmission();
}

void readNVRam(byte offset, byte *buf, byte nBytes) {
  Wire.beginTransmission(DS1307_ADDR);
  Wire.write(RAM_OFFSET + offset);
  Wire.endTransmission();
  Wire.requestFrom( (uint8_t)DS1307_ADDR, nBytes);
  for (byte i = 0; i < nBytes; i++) {
    buf[i] = Wire.read();
  }
}
剩下的好像就是把上面的 code 猛攪一陣,就可以做出各種不同功能了。
要讀取按鈕的動態,可以參考官方文件 Debounce
整個 loop 裡面的流程,大概就是保存一個 state 的變數:然後依序
檢查 button 1 有沒有按下,有的話做一點事 -> 檢查 button 2 有沒有按下,有的話做一點事;再來依不同的 state ,設定 LED 跟輝光管顯示值的 display 陣列,最後呼叫 updateLED() 跟 updateTube() 顯示資訊。
我是設計有五個模式:自動切換/時間HH.MM.SS/日期YYYYMMDD/世界線顯示/全關省電模式,詳情請參考 github repository,這樣把自己寫的爛 code 展現在大家眼前感覺真是羞恥。

整體 code 差不多就是這樣啦,硬體能動之後改軟體什麼的都不算太難了,想玩的話可以弄一些,像是發送第一封 D-Mail:

2018年10月25日 星期四

自幹世界線變動率探測儀(Nixie Tube Clock):焊接

靜候三天,板子終於送到了,我在等的週末去光華把 BOM 表印出來去光華搬了一批元件,最貴的還是 LED 跟 BJT,其他買一堆電阻不過小錢…。
空板照,我是選藍色的阻焊,如果照動畫設定應該是黃色的,不過不管啦我喜歡藍色。

正面照:
背面照:

板子回來發現意外的順利,所有插件的腳位都沒問題可以直接穿過。
另外也有一些錯誤,中間高壓陽極的控制電路,MPSA92 的 footprint,我不小心用成 TO-92 腳位,以致焊點間的距離只有 0.25 mm,應該要用 TO-226 的腳位會比較好;第一個是焊接的時候很容易不小心就糊在一起,第二是高壓離這麼近其實有點危險,我覺得某幾個地方是真的有點漏電,即便管子控制全關的時候,還是會看到管子有很微弱的發光,可能升到 v1.02 的時候改進吧。
在焊接的時候有一位神級大大幫忙,才知道原來不小心焊錫糊在一起,用助焊劑一抹就開了,太神啦,對助錫劑刮目相看。

銲接之前工具要準備好,除了必備的烙鐵之外,推薦要買一隻好的尖頭鑷子,尖到可以刺人穿刺傷害 +20% 的那種,因為我們用的零件如 0603 尺寸都非常小,要好好的焊它就需要一支尖頭鑷子才行。

因為是二手管的關係,我們要對付的就是那該死的針腳,不知道到底是從哪裡拆/怎麼拆的,可以拆成這樣每支腳的長度都不一樣?甚至還有一支腳短到不能用的,因為我們沒有管座可用(它那腳位的狀況大概也不能用管座),我這裡的解法是去買 1 * 40 圓孔排針長腳,可以一支一支用鉗子剪開來,再一支一支,這樣我們就可以隨意插拔輝光管。
不能用普通的排母,輝光管的針腳太細,在排母裡面無法固定,圓孔排針裡面的彈簧才固定得住;也有人會用杜邦端子,用夾的把針腳夾住也是可以,只是杜邦端子要解開也沒那麼容易,不符合我們快速插拔的本意。


總之就是先把輝光管像上圖一樣插滿排針,接著將圓孔 IC 座一一插進 PCB 孔中,很不巧圓孔 IC 座的尺寸,跟我畫的 PAD 大小 0.914mm 超接近,然後這批管腳又塗了某種膠,讓它不像一般的元件一樣好折,在那邊用尖嘴鉗喬啊喬的,光插管子就插了快 1 hr 左右吧,說實在 Nixie Clock 愈做愈覺得這東西真是淘汰的好呀,要高壓驅動、浪費電、體積大、腳位又多又呈圓形很難安裝,真的還是懷古就好。
好不容易插好之後,一樣將 IC 針腳焊到電路板上,本來是不想焊的,不過發現不焊多少有點接觸不良。

其他部分大概都沒什麼,焊接只有一個要點就是:焊錫會黏在熱的東西上面,我的操作一般的拿烙鐵、焊點、焊錫三點相對位置呈三角,烙鐵頂住焊點加熱,焊錫輕碰烙鐵融化後就會自然流到焊點上了,如果是 SMD 元件的話簡化的步驟大概如下:
  • 在要放元件的一端先上一點焊錫。
  • 用鑷子夾起元件一端插入剛才上好的焊錫內(重新加熱焊錫讓它包住元件),拿開烙鐵,焊錫冷卻之後元件就被固定住;切記一定要先拿開烙鐵再放開鑷子,如果先放開鑷子,元件就會因為焊錫的表面張力而立起來或歪掉
  • 接著焊元件另外一端,因為元件已被固定這裡簡單焊就好了。
如果有助焊劑的話,上點助焊劑可以焊的比較漂亮一點,但也比較花時間。
還有一個常見的…直覺?一般而言通常是由烙鐵融化焊錫,讓焊錫自然流到焊點上,不過有時候,因為角度之類的關係,焊錫就是不會流過去,只會一直留在烙鐵上面;這時候的直覺反應就是不斷的給焊錫,但其實愈給只是停愈多在烙鐵上面,它不上到焊點只是角度不對而不是焊錫不夠多,這時候把烙鐵抹乾淨換角度重來會比較好。

這樣全焊完大概兩個工作天,趁著國慶假日借強者我同學強強林的實驗室把元件都焊完,全部粗估大概有 600 個焊點吧 (yay),幸好回家上電之後:
拿鱷魚夾夾二極體的輸出點,高壓電路正常動作:


用外接 5V 測試,LED 電路正常動作,也可以用 TX/RX 介面燒 code 進去跑:


測試過後,高壓電路、5V 電路、控制電路、LED 電路、RTC 電路都有正常運作,兩天的辛苦都值得了。

自幹世界線變動率探測儀(Nixie Tube Clock):電路板實作

下面就真的要開始用 easyEDA 畫 Layout 了。
EasyEDA 能做簡單的模擬,不過基本上功能非常的弱,只能模擬一些節點的電壓,大部分的元件也沒有模型可供模擬,所以請放棄在 easyEDA 模擬的念頭。

第一步:畫 schematic,調整 footprint

是在 easyEDA 上面畫 schematic ,如前幾篇文章出現的高壓電路的 schematic;在畫 schematic 的時候,就可以想想 Layout 大概要用什麼元件,簡單的元件如電阻、電容、電感、二極體等等會出現在左邊的選單裡,並且可以選擇所要的型號,像電阻就有 0201, 0402等平面元件跟插件 Axial 0.3-1.2 等 16 種可選。
比較複雜的元件可以從上面的選單 Place -> Component,打入關鍵字,插入找到的元件,通常同一個元件都能搜尋到 SMD 跟 DIP 兩種版本,記得要插入正確的;插入元件之後要取一個好的名字,方便在 Layout 跟焊接的時候,能夠快速知道是哪一個元件。

編輯中也能在上面的選單找到 Footprint Manager,裡面可以編輯每一個元件對應的 footprint,還有元件符號跟 footprint 腳位的對應,來跟真實元件對應;例如不知道為什麼,我買到一批 5050 RGB LED,腳位跟預設的腳位就是不一樣,因此用 footprint manager 調整過;另外像是0603的電阻因為預設的 footprint 有一個 silk 框,我想畫得密集一點就換了個沒有 silk 的 footprint。

建議上每畫一個區塊的 schematic ,就定時按一下 Update to PCB,讓 easyEDA 把 schematic 上的元件放到 PCB 上,然後安排一下 layout footprint 的位置;因為如果等畫完再一次轉換,會造成所有的 footprint 都擠在一起,讓你分不出誰是誰,一次轉一些安排位置,或至少分個群,之後在 layout 會方便很多。

第二步:擺放 footprint 

在 Layout Editor 上面畫 PCB,進到 Layout Editor 之後,首先先設定 Design Rule 跟網格等資料。
網格可以用 mm 或是 mil 當單位(用 inch 當單位是有一點太大了),easyEDA 預設是用 mil 當單位,如果要用 mm 當單位的話記得一定要把 grid size / snap size 從 0.254 mm 換成比較好看的數字,如 0.1mm
Design Rule 請參考廠商給的資料,例如下面是我選用的 JetPCB 的製程資料;easyEDA 畢竟是免費軟體,提供的規則檢查只有線寬、線距、鑽孔大小、線長;不像 kicad 除了這些,還能做更多的像是各層獨立規則。
只截取 DRC 部分的規範:
  • 線寬 0.25 mm
  • 線距 0.25 mm
  • Via 直徑 0.5mm
  • Via 鑽孔直徑 0.3mm
畫好 schematic 之後,Layout Editor 上面應該已經有所有元件的 footprint,先做好放好位置、調整方位等,如果看到有 footprint 不是自己想要的,也可以隨時回 schematic 修改然後再 update。
個人經驗是,因為 easyEDA 功能不全的關係,一但畫了走線之後如果又修改 footprint 的腳位對應,要再改走線就非常費工,所以畫走線之前,一定要確認好 footprint 腳位跟 schematic 都已經是正確的。

第三步:畫 Layout 走線

放好位置之後就能開始畫走線,雖然 easyEDA 有提供 auto router,但我個人不建議使用,它只會儘量畫最短路徑畫,反而沒什麼規則,例如我的輝光管部分,因為輝光管的陰極同數字是全部接在一起的,它就真的給我照最短路徑畫得亂七八糟。
不過 auto router 也可以當一個指標,如果你的 layout 開了 auto router 跑不到 90% 以上,表示你的 layout 還不夠簡單,可以看看 auto router 都是哪裡繞不出來一直在重試;簡而言之:easyEDA 的 AutoRouter 只會繞出一堆垃圾,請還是乖乖用手畫。

在 easyEDA 裡面用 track 畫走線,照著 ratlines 用走線連起來就行了,在輝光管部分的畫線要點在於分開上下板,我是下板走垂直線、上板走水平線,這樣子上下板的線就不會打架,如下圖所示:

另外有一些其他 layout 的注意事項:
  • 為了燒錄,要把 5V, GND, TX, RX, Reset 拉出來
  • 用個 jumper 隔離外接 5V 跟 78M05 的輸出,這樣可以單獨測試所有控制電路的功能。
  • 這個是我做的時候沒想到的,在通往 LED 的 5V 電源線上加上 jumper ,這樣覺得 LED 太亮的時候,可以用硬體的方式關掉 LED。
  • 電阻、電容、LED 可以的話儘量選 0603 省空間,我覺得 0603 是覺得可以輕鬆焊的極限,0402 或更小就很抖了。
  • 在 MC34063 那邊的限流電阻,因為在最大電流下,功率可能會升到 100 多 mW,所以我是用 1206 的電阻;我也是現在才知道原來電阻的尺寸是跟它能承受的功率有關。
  • 高壓電路的地方,依這個論壇所言,讓電感與二極體還有MOS位置最短。
  • 所有的晶片,在 VCC 的接點前都保留一個 0603 約 100n 的電容做為穩壓。
  • 依照晶體振盪器 datasheet 的建議,在振盪器周圍一個範圍要鋪地,避免信號線出現,以免影響時脈的準度。
JetPCB 也有提供一些參考規範,我大致整理一下這次畫 Layout 的規則:
  • 電源線寬為︰1 mm - 1.2 mm,如果有更大電流的應用,請參考線寬計算機
  • 信號線寬建議為︰0.2-0.3 mm,我是用 0.4 mm;其實 PCB 承受電流的能力很大,1oz 的銅、0.25 mm 差不多就能走 1A 了,所以畫細一點是沒差的。
  • Via 有兩種,外徑/內徑為 1mm/0.5mm 跟 1.6mm/1mm ,分別用在訊號線跟電源線的 via。
  • 鋪銅間距:因為我們的電路板會走高壓電,在網路上找到一款間距計算機,我們最高的電壓應該是200 伏特,算出來的安全間距是0.4 mm ,因此我是用 0.6 mm 作為鋪銅間距。

第四步:鋪銅與 DRC, LVS 與他

Layout Editor 左邊的 Design Manager 打開,裡面有三個選項:Components,Nets 跟 DRC Errors
Component 方便你找元件用,比較沒這麼重要;Nets 跟 DRC Errors 分別是 LVS 跟 DRC;完成走線的時候, Nets 裡面應該只有 GND 是錯誤的,因為我們還沒有鋪銅,把整個地連起來。
鋪銅選擇工具的 Copper Area,把要鋪銅的部分框起來,easyEDA 就會自動完成鋪鋼,正反兩面都需要鋪銅,鋪完之後再從工具列選 Copper Area Manager 去調整鋪銅間距。
鋪完銅的時候,LVS 就要可以通過了;DRC 的話在鋪銅前跟鋪銅後都要跑過一次,第一次是要修掉走線的錯誤,第二次的是要確認整個 layout 沒有問題,畫完大概會像這樣:

上板走線:

下板走線:

上下板走線:

基本上我是畫的超寬鬆的,寬度因為受限於輝光管比較難縮,高度其實可以再縮一點,元件排更密一點,我覺得縮 1-2 cm 不是問題,不過第一次畫 layout 自然是小心為上。
個人經驗是不要讓焊點間的距離小於 0.7 mm 左右,再小第一個焊的時候容易短路,烙鐵也可能不小心戳到不該戳的地方。

第五步:收尾下單

做完這些,就可以匯出 layout 成 Gerber 檔下單製造了,最後還有一些,像是留下未來打銅柱的鑽孔,留一些文字等等。
在真正下單之前一定要再次檢查,把 Top Layer 跟 Bottom Layer 匯出成 pdf,用印表機 1:1 分別印出,對照有沒有哪裡有問題,手邊買好的元件是否能正確的對到印出來的穿孔,畢竟板子做了就是做了,做壞要用暴力修的難度也很高,多檢查幾次不吃虧,我就有對照的時候發現 schematic 的地方有畫錯,差點整塊板子變廢物,Board is dead, mismatch
洗板選用戀戀科技 Marten 大大推薦的 JetPCB,好到連日本人都來用?(雖然說他們的問答版上,有一個回答就是不服務台灣以外的顧客owo),不過他們的網站需要先註冊為會員才能下線。

easyEDA 下載好的 gerber 檔,裡面的 PasteMask 可以直接刪掉沒關係,其他的打包送給 JetPCB,工程人員會再次幫你檢查電路板,看看有沒有太大的問題,我是選三天到貨的方案, 電路板尺寸 264 mm X 104 mm,總價是 4200 NTD。
可…可惡,早知道當年在學校的時候就該來做 nixie clock,在學校就能用學校的洗板機免費自己洗驗證板了,現在都要花大錢去外面洗板子,畫錯錢就直接噴飛QQQQ。

總之電路板最後終於成功下線,之後就是靜待三天,等電路板寄到就可以開始焊電路啦。

2018年10月23日 星期二

自幹世界線變動率探測儀(Nixie Tube Clock):電路板基礎

介紹了這麼多,我們終於要進到電路板了,之前介紹的許多東西在這邊一口氣要全部發揮出來,我是沒有很確定輝光管用洞洞板會不會有問題,不過要整合起來還是洗電路板比較潮。

電路板 - 也就是 Layout - 這種東西一定要用軟體幫忙輔助,例如小畫家,專業人士跟企業可能會用 altium ,我們沒錢的當然也有沒錢的玩法:例如開源軟體 kicad、網路的電路板軟體 easyEDA(需要註冊,可用 Google 帳號)、Eagle(需要註冊),其他兩個都要註冊,真正開源自由使用的其實是 kicad。

在這裡我是選用 easyEDA 來進行 layout,原因很簡單,因為 easyEDA 允許大家自由分享他們畫的元件跟 layout,我用的輝光管 IN-14 已經有人畫好插孔的 layout,我可以直接引入使用,不像 Kicad 還要自己下載其他人分享的描述檔匯入,方便性上比 Kicad 高一些。
當然 easyEDA 也是有壞處的,相比 Kicad 它的功能少了不少,像是 DRC,能檢查的只有基本的線寬、線距、鑽孔大小,用 electron 實作的網頁介面,進行一些大量操作的時候速度會明顯慢下來(例如大量元件 lock/unlock 會很明顯的頓一下),我個人的體驗是 Firefox 跑得明顯比 chrome 還要快跟穩www。

Layout 就請參考這個連結,裡面有完整介紹 pcb layout 的詳細步驟。
Layout 有兩種可能的設計:放在一塊板子或是把控制板跟插管板分成兩塊,我最後是選擇縮在一塊板子裡面,這樣只要洗一塊比較便宜(yay),不過相對來說也畫得沒那麼漂亮,從上面看除了輝光管之外還有一堆電子零件會比較醜,其實我不確定能不能兩塊畫在同一塊然後請板廠幫我切開,如果板廠是算面積計價,這樣對他們來說應該也沒差太多才對。

下面簡單介紹一下 easyEDA 在 Layout Editor 層的設定,還有跟 Layout 共同的概念,下一章再來提真正的實作,其實這篇我一直在考慮怎麼分成兩篇,畢竟內容太相關了,但合在一章內容好像又太多了:
  • Top/Bottom Layer
走線的部分,分別是正面金屬跟背面金屬,用這兩層畫連線。
隨著大家對小型化的要求,像我這樣單層、雙層的 layout 已經無法再微縮,市面的產品就有更多層…我查到最多六層的板子,easyEDA 也有支援 4 個 inner layer,不過我們只要雙層板就很夠啦。
  • Top/Bottom Silk Layer
正面文字/背面文字,用來寫字、元件名稱等,通常都是把元件集中在正面,背面文字是不需要用的。
  • Top/Bottom Paste Mask Layer
  • Top/Bottom Solder Mask Layer
Paste Mask 跟 Solder Mask 分別是焊膏防護層跟阻焊層
看到 Mask 這個關鍵字城鎮中心的鈴鐺就要噹噹一下,這表示這兩個東西畫的是負片,跟上面幾個正片相反,正片是哪裡畫東西,哪裡有東西;負片是哪裡有畫東西,就表示哪裡沒東西。
阻焊層應該比較好理解,哪裡有畫東西,哪裡就不會上阻焊層。
焊膏防護層它的目的是要在機器生產的時候貼 SMD 用的,因為我們是手焊所以可以不要管它,這層是在上錫膏的時候,依照這層的負片做成鋼板,把鋼板放在電路板上面之後塗錫膏再移除鋼板,所以造成錫膏層是正片的結果,詳細可以參考這部影片

  • RatLines:

這個是畫完 schematic 的時候 easyEDA 自動幫你產生的,標示哪個節點要走去哪個節點,理論上再畫完所有走線之後,應該只有 GND 的 Ratlines 會顯示出來;上完鋪銅之後則是完全不會有 RatLines。

  • BoardOutline

標示整個電路板的製造邊界。

  • MultiLayer

在 easyEDA 裡面,有三種不同的孔:Pad, Via 跟 Hole,這幾個有機會用到 MultiLayer。
相關內容可以參考工作狂人(這個網站幾乎找 PCB 資料一定會找到,超專業的硬體生達達人),我猜這純粹是用詞不統一的關係,總之他們的關係是這樣的:
Hole:正式名稱是(NPTH,Non Plating Through Hole,非電鍍通孔):單純的用鑽針在電路板上鑽一個洞,不做任何事,洞裡只有玻璃纖維,上下層亦不導通,事實上 easyEDA 最後鋪銅的時候,會自動繞過 Hole 以免短路,它的用途也就只有鎖銅柱固定電路板。
Pad:可選擇 Top/Bottom/Multi layer,如果選 Top, Bottom 的話就是一塊裸露沒上 solder mask 的金屬,easyEDA 會在 Solder Mask Layer 加上 Pad 的部分,讓這塊最後不上阻焊層;如果是 Multi layer 的話,則是正式名稱的 PTH(Plating Through Hole,電鍍通孔),鑽孔之後會在內部鍍鋼導通上下層,所有 DIP 元件的腳位都是走 Multi Layer 的 Pad,因此焊接只要焊背面,畫走線的時候無論 Top/Bottom 都能導通。
Via:Via 只有 Multi layer 的選項,和 Multilayer Pad 的差別,在於 Via 不會有 solder mask 的對應,也就是說它最後會被 solder mask 的綠漆蓋住,如果是高價位一點板子還會用把 Via 塞起來以免焊錫流進去,因此不能在 Via 焊東西,它只是用來導通電流的。
如果是多層板,還會有如埋孔跟盲孔等東西,不過這已經超出本文的範圍了。

我們上面提了這麼多,其實 easyEDA 在帶入元件的 footprint 的時候,他就幫我們畫好元件接腳 MultiLayer 的 Pad,只要用上下層金屬把各接點連起來就好,所以真正要編輯的層,其實也就只有 Top/Bottom Layer 連線,打一些 Via 來連接走線,加上 Top/Bottom Silk Layer 的註解;其他包含阻焊層、PTH、NPTH 鑽孔資訊,easyEDA 都會在匯出 Gerber 的時候幫我們處理好,除非有特別設計不然在 easyEDA 上阻焊層是留空就好。

整個電路板實作的流程大概是這樣:

  1. 依照元件,畫 schematic。
  2. 將 schematic 轉成 layout ,代入元件 footprint。
  3. 擺位置,各元件放到容易繞線不打架的位子上。
  4. 畫走線,鋪銅,上元件之外其他說明文字
  5. 列印 layout 檢查,匯出 gerber 檔下線製作

下篇文章就來走一次這個流程吧。
Related Posts Plugin for WordPress, Blogger...