2013年5月28日 星期二

每周一印:Gear

玩3D printer的社群,主要分成兩個方向,一是重新開發新的機器,另一種是開發新的應用。
所以今天我就嘗試新的應用--印齒輪。了解一下目前手上的3D printer可以印到多小模數的齒輪。

要印之前先介紹一下齒輪的參數,最常控制的就是齒數模數。
調整齒數來組合出所需的齒輪比,而同一組齒輪對需要相同模數才能配合轉動。
一個常用的公式就是 T(齒數) x M(模數) = D (節徑),簡稱:他(T) x 媽(M) = 的(D)。
不過因為某些深奧的原因,齒數越來代表齒根被切得越深,進而造成強度不足。
所以常用的齒輪最少不會低於17~14齒,除非做轉位。

好吧,以上簡單撇個幾句,只是為了交待為什麼我這次先用20齒(儘量少的齒數,但又不能太少)。然後配合模數0.5、1.0、2.0畫了三個齒輪。(其實是畫了一個,直接放大2倍、4倍)

先印模數 0.5 ,齒數20的齒輪看看,如下圖。很不幸地,他的profile已經被破壞殆盡。
當然精度的問題首先來自於機構的不穩定性,但生成G-Code的Skeinforge軟體也好不到那去!
總之我手上的這一台看來是無法做模數 0.5的齒輪了!

再來印了一個模數1.0,同樣20齒的。
這次看來好多了,雖然還是沒有漸開線,但已經有明確的"齒"了。
我也再多印一個來互相轉動看看,看來到模數 1.0就可以做實驗用了!


2013年5月27日 星期一

每周一印:門檔 door stopper

在印了這麼多東西之後,倒還沒有為了解決生活小問題印個東西。
今天剛好有個機會,就是印一個門檔來固定門的位置,避免它擺來擺去。

我書房的門因為後面有放背包,所以沒有辦法自然開到最大。
空間上看起來就卡卡的,甚至有時候風一吹就大力地關上,十分不方便!
所以常見的方便小物就是門檔,如下圖中綠色物件所示:

藉由門欲向右邊開啟時,帶有楔形的門檔 (其實就是一個楔型塊)會被往下壓,
而由地面反作用到楔形塊的正向力就變大,同時也形向左的摩擦力。
這個摩擦力就可以使得門被卡在當下的位置上。

下面就是成品的照片,一個簡單小物!




2013年5月26日 星期日

2013年5月18日 星期六

2013年5月16日 星期四

Arduino範例13:Get frequency from Optical encoder by Arduino (量測encoder的訊號)

In past articles, we know how to control a small DC motor by PWM signal.
直流馬達的速控 (一) : 使用555產生PWM 驅動馬達

直流馬達的速控 (二) : 使用Ardunio產生PWM 驅動馬達

But if we want to do feedback control, we should know rotation speed.
So today, I practice using Arduino to get frequency from motor.

Below picture is a small DC motor with optical encoder.
This is tear down from inkjet printer.

You can see that, it has 448 "line" per Revolution, so I could get 448 pulses in every one turn.


2013年5月15日 星期三

Arduino範例12:Control RC Servo Motor by Arduino (控制RC伺服馬達)


做過直流馬達、步進馬達的控制,接下來要做的是RC伺服馬達的控制。下圖是伺服馬達的原理圖。伺服馬達廣義的定義,就是一顆已經帶有sensor的馬達,可以做回授的控制。而我們要使用的RC Servo Motor,使用十分方便,只需要供應指定寬度的PWM訊號,那他就會到達我們所想要的角度。


2013年5月11日 星期六

Arduino範例11:用可變電阻+Arduino 控制步進馬達位置

上一篇已經介紹用Arduino+ULN2003來驅動步進馬達了,
但只能要求速度與前進的總步數,尚無法要求停止的位置。
所以這次將利用可變電阻給予的電位訊號,來要求步進馬達所停位置。

當轉動可變電阻之後,電位(val)改變了,比較上一個時間電位(previous),
兩個的差值(val - previous)就當作馬達前進的步數。

接線圖

Video

2013年5月10日 星期五

母親節快樂,來印個東西吧!

這幾天狂在做馬達的控制,好久沒有印東西了!
為此,我今年決定用3D印表機印一個全世界都沒有的母親節紀念小品。
不過很可惜,今天pro/E的license有問題,無法改圖。
但就是一個小心意了!



Arduino範例10:用Arduino+ULN2003驅動步進馬達

上一篇用了最土炮的方法推動步進馬達,這次就直接改用Arduino的板子來給訊號。不過Arduino的板子本身只有用USB接電腦,不夠我們去驅動步進馬達。所以上網看了一下,發現有一種超好用的晶片ULN2003,可以用來協助我們推動馬達。

ULN2003是個有7個達靈頓電晶體的包裝陳列(Darlington Array),有7個NPN達林頓管組成,並且加上反向器,使引腳1~7輸入高電壓時,引腳16~10變成低電位,讓外面的電流流入。有這個就方便多了,不用再自己搭達靈頓電路,而且集極/射極的電壓達50V很夠用。


2013年5月9日 星期四

利用555晶片驅動步進馬達

初步介紹完步進馬達,接下來就是要驅動它了。原則上,我會先用最基本的方法來驅動馬達,通過老式的方法,對原理做最直接深入的了解。然後再用微控制晶片(Ardunio)做控制,這才是未來我打算用的方法。

今天要介紹的就是用555的晶片來驅動步進馬達(只控速度,計數的功能未來放在Ardunio直接決解)

使用的馬達為單極驅動、四相、12V的步進馬達,應該有5條線。可以用三用電表量測,找出共用點。

電路圖

2013年5月8日 星期三

步進馬達的介紹

之前已利用PWM的脈波進行直流馬達的控制,甚至抓取轉速的訊號進行回授的控制,這是閉迴路控制最典型的方法之一。現在我們要做的是另一種,也就是開迴路控制:步進馬達。

但步進馬達百百款,到底我們用的是那一款?怎麼用?之前都傻呼呼地,套件配那一種,就用那一種。可是我後來才發現自己的倉庫裡有四條線的,五條線的,六條線的,有圓扁形的,有方形的…笒等之類的。所以這次我才真正找資料好好地了解。

1. 從轉子的構造來分:
(1) PM:permanent magnet
            外側為電磁鐵的定子,內為NS交互磁化的永磁轉子(無齒型)
(2) VR:variable relutance 可變磁阻型
            轉子是利用齒型與定子吸引所發生的轉力,
            因而VR型在無激磁的時候,並不發生保持轉矩。
            (另外PM的磁極會互相吸引+推斥,但VR的只有互相吸引而已。)
(3) HB:Hybrid
            結合PM與VR的類型。
            轉子為永磁,有齒形,但磁化方向不同PM。
            以軸向截面交互磁化,所以可以分得更多的磁極。
            所以定子在軸向也分成不同截段。


2013年5月7日 星期二

Arduino範例09:利用7段顯示器進行倒數

之前做過另一篇「4026+七段顯示器」這個東西,現在我要改用Ardunio來做了!
(其實我很早就為自己規畫這一系列相關練習,前後呼應!)

操作目的
就是用Ardunio叫它依序對七段顯示器的那幾隻腳位進行輸出,然後就是要顯示出來倒數的樣子。

Video


2013年5月6日 星期一

Arduino範例08:控制喇叭發聲

之前拆了收音機並且獲得的喇叭(8歐姆3瓦)兩顆,外加兩個壓電片。
所以配合Ardunio的板子,我們做一個發聲的範例。(可參考"喇叭Tear down")

我們知道各音符剛好對應的就是Hz,例如Do(523Hz), Re (587Hz), Mi(659Hz), Fa(698Hz), So(784Hz), La(880Hz), Si(988Hz),所以如果我們要叫Ardunio輸出這些音符,就需要這些Hz數。很幸運地是,Ardunio已經幫我們建立好對應表了,就是內建 pitches.h 這個檔案。

所以接下來我就挑了小蜜蜂當作練習的曲目,讓Ardunio輸出一系列的脈波給喇叭發聲。

Video


2013年5月5日 星期日

Tear down: 喇叭

之前有一篇"收音機tear down",當時有拆下兩顆喇叭,
這次特別針對喇叭做更進一步拆解。


從背面來看,其中大顆的是喇叭,小顆黃黃舊舊的是一塊壓電片(常用於蜂嗚器)。
 

Arduino範例07:LED燈依序發亮

這次要做的是利用陣列來產生依序的輸出,主要用的是 for ( ) 語法。
如下圖所示,表達的就是 0~99 的數列,共100個數字。

所以我們們將用 for 函數輸出 0~5等6個數字,再對應數位出輸的腳位。
輸出的腳位接上LED燈,就可以看到燈從第一個依序亮到最後一個,
再由最後一個亮回第一個,並且在第一個停留0.5秒。

Video

2013年5月4日 星期六

Arduino範例06:利用光敏電阻來控制小型DC馬達

既然我們已經學會用PWM控制馬達,又學會用Ardunio做PWM的輸出,現在又可以從光敏電阻輸入類比訊號。那我們就整合一下做一個小段落的結尾:利用光敏電阻來控制馬達的轉速!

操作目的 
製作一個可循光跡轉動的馬達,光線越強,轉動速度就越快。

Video

Arduino範例05:利用光敏電阻調整LED

這次要學習如何使用analogWrite()來取得外部類比輸入電壓, 
並且使用Serial.begin()和serial.println()直接在電腦看輸入電壓大小。

操作目的:
利用光敏電阻檢測外界光線的強弱,當外界光線不足時,要求LED燈亮起。

Video


2013年5月3日 星期五

Tear down: 凸輪推墨水

前幾天從回收筒裡撿到一個東西,覺得很特別--凸輪推墨水管
拍個照片PO上來。

先是打開外殼一看,有一個DC小馬達帶蝸輪蝸桿要轉動一個東西。
然後有一個墨水管繞裡其中再出來。

 更進一步打開之後,看得更清楚!

Ardunio範例04:使用Arduino產生PWM 驅動直流小馬達

之前有一篇"使用555產生PWM 驅動馬達"是我們用手去控制可變電阻,來調整duty time。然後這次我們想更進一步在電腦上直接控制馬達的速度,所以就結合目前正在練習的Ardunio,產生PWM的訊號,去控制馬達。也請參閱"Ardunio範例三" 裡面就是說明如何從Ardunio丟出PWM訊號的。

Video
註:為了可以更明顯地表達速度變化,我分成五段的速度,每段各停留3秒鐘。
       等上升到最高的速度之後,再降回來。

2013年5月2日 星期四

Arduino範例03:Use PWM to control LED brightness

有關於PWM的認識,請參考"直流馬達的速控 (一)"。
而在Ardunio裡,若要做類比輸出 analogWrite,板子是給500Hz的PWM脈波輸出,我們再藉由控制duty time來輸出等效的電壓。其中analogWrite ( ) 的參數範圍是0~255,255代表duty time為100%;127為50%。這次就藉由等效的電壓讓LED燈做明暗的變化。

操作目的 
利用analogWrite所輸出的PWM,來調整LED燈的亮度。

Video

Arduino範例02:使用按鈕鍵輸入訊號控制LED燈

在準備開始一系列的練習前,先說這些範例都是Adunio內建有的,並且在網路上找到得說明的(http://coopermaa2nd.blogspot.tw/2010/12/arduino-lab2-led.html)。但照抄這些練習po上來實在沒有誠意,所以我會做一些小小的改變,至少程式碼的部分,我會嘗試一些小改變。

----------------------------------------------------------------------------------------------------

在開始前先說明Ardunio程式的架構,主要分成三部分: 
1. int                     //先宣告用要用參數
2. void setup() {} //用來跑第一輪初始值的開頭
                            //兩個大括弧”{“與”}”要分隔到不同兩行
3.void loop () {}  //用來跑無限迴圈的開頭
                           //除非是”{“ 或 ”}” 做結,否則每一行結束要用”;”做結

所以我們接下來寫的程式大概就是先宣告參數,然後用void setup () {}來跑初始要求,再用void loop () {}寫進我們要的動作。

----------------------------------------------本次範例----------------------------------------------
操作目的 
使用按鍵控制LED指的開關,當我斷路的時候,LED燈反而亮起來。

Video

Tear down: 收音機內部構造

家裡面台MP3/CD收音機一附快壞掉的樣子,USB抓不到,CD後面曲目抓不到,又只能聽FM的電台而已,所索就把它拆了。反正這時代,大家也很少用收音機,拆一拆來看看裡面吧!

這台是三洋手提式MP3/CD收音機,在2006年的出廠的機器。拆開機器的內部,發現有兩個主要的板子,一個負責接收外部進來的電源+供應音源+收取 FM電台的訊號;另一個接的是CD player+USC+LCD銀幕。我把架構圖再畫成block diagram顯示如下:

我把架構圖再畫成block diagram顯示如下:紫色的pwoer進到到變壓器,轉成直流電統給「音源/電源主板」與「光碟機/USB/LCD」。藍色的輸入項目包括光碟機、USB輸入、收FM的電感,外加幾個按鈕都會各自輸入對應的主板。而綠色的板子也會輸出音源至喇叭以及LCD顯示。

2013年5月1日 星期三

直流馬達的速控 (一) : 使用555產生PWM 驅動馬達

在初步練習了晶片的應用之後,現在我們要連結這些電子電路來控制馬達了,首先第一個就是直流馬達的控制。關於直流馬達的基本原理就不在這裡贅述了,我們只在乎當我們要做速度控制時,該如何控制。

其實不只馬達的轉速,電熱器、燈的亮度等等控制都是類似的,主要有以下三種方法,其中第三種控制通電時間長短的方法,就是所謂的PWM (Pulse Width Modulation)脈衝寬度調節,該方法是最廣泛應用且效率較高的方法。接下來將以此為主題。


PWM 
我上網找到很多PWM的相關資訊,實在不太想重複整理……
直接列出來,有興趣的就可以找來看。
(1) http://www.letry.com.tw/A12.htm
     由最基本的555產生方波直接來控制馬達
(2) http://www.shs.edu.tw/works/essay/2011/03/2011033012355698.pdf
     這篇介紹了使用”比較器”來控制脈波中的duty time
(3) www.me.kuas.edu.tw/實務專題/95年PDF/95乙/黃義達%20郭士宏.pdf
     這篇更實務地說明如何先用555搭配積分器產生三角波,再用比較器控制輸出的duty time。

我自己讀完這些之後(其實不只這些,網路上有一脫拉庫資料),我把它們整理成三個層次:
1. 555 直接產生方波,加個可變電阻與二極體就可以控制PWM的duty time了。
2. 更進階地使用”比較器”來完成PWM的duty time控制。
3. 直接用電腦配合微晶片控制PWM的duty time。

這次我打算操作第一個與第三個就好了,第一個讓我們對物理現象有更直覺的反應,這也是實作的精神之一。第三個是因為現代的微控制晶片都十分方便,我們實務上會全部整合在微控制晶片中操作。 (至於第二個:用比較器…我想應該是我太simple,無法理解為什麼它要脫褲子放屁。)

3D printer 列印尺寸誤差的探討

印了這麼多東西,但我卻沒有實際量過一次誤差到底是多少。
就業界的說法,就是沒有出過FAI報告,這樣的樣品是無法過關的。
所以這次就為我的Ardunio板子做一個盒子,同時驗證尺寸誤差的量是多少。

首先依Ardunio的板子在Pro/E裡先畫一個適當大小的盒子,
然後用3D printer印出來,再用游標卡尺,量測各尺寸。





每周一印:名字牌 & The Dawn of Christianity

本週3D 印表機的工作最主要是印名牌給同事當紀念品,
當然還有一些親朋好友,這種小禮物真是好東西。

所以就可以看到下面的照片有一堆名字
放眼望去,怪怪的…好佳在不是印直的!




另外上網找了雕像的CAD檔來印一下 (from: http://www.thingiverse.com/thing:24467)
這雕像叫做:The Dawn of Christianity (基督教的黎明)

印的過程得到幾個結論:
(1) 因為有下巴的關係,需要設定有支撐材料來撐住倒空的部分。
(2) 精度依然不足,以至於臉部的表情無法呈現出來。
       (當然我尺寸很小,眼睛的大小可能不到1mm,很容易因為振動而糊掉!

目前依然還在挑戰艾菲爾鐵塔,因為ReplicatorG產生的G-code無法那麼細緻。
看來不單單只是馬達精度與機構的問題,連G-Code的生成都會影響精度的呈現。
Slic3r研究到一半還現在那沒有動……好多事想做喔!

Arduino範例01:Blinking

這篇單純只是紀念一下第一次使用Ardunio的板子寫Firmware而已。因為為了自己可以控訊號、馬達、sensor等等,所以找了這塊十分流行的微控制板子來做。

這塊板子是義大利藉的Massimo Banzi(學校的老師)和一位西班牙晶片工程師David Cuartielles一起開發出來的,並且引入David Mellis(學生)為電路板設計的編程語言。詳細的內容可以查看:https://zh.wikipedia.org/wiki/Arduino
後來聽說出國念書的學弟妹在美國的課堂上也是用Ardunio。

Anyway,我這次用的是Ardunio Mega 2560,因為剛好是我手上3D printer上用的板子,我想自己從頭學起機電整合的功課  (其實我手上還有NI 的 myDAQ,也十分好用)

3D Scanner: Splinescan Project

自從有了3D印表機,其實還想再去找3D掃描器來做。(其實想做的太多了,包括自己建立一個更大的FDM系統、桌上型CNC、雷射切割機…) 所以我先找了一個OpenSource的計畫來閱讀一下:Splinescan Project。這是一位叫Andrew Lewis的英國人在2009年開始的計畫,然後在2010年Make雜誌上出現該project的內容。但十分可惜的是Software、Firmware的內容著墨不多,以至我還是無法由文章之中確定雷射如果運作得到點座標資料,再建立CAD的。但不管,我還是先翻譯出來,再繼續找資料。
原文出處:http://blog.makezine.com/projects/make-21/3d-scanning-system/
------------------------------------------------------------------------------------
1. Overview
3D Scanner主要分成四個部分:
(1) 主架構Chassis: 這是掃瞄器主要結構,必須夠堅固才能把東西放在上面旋轉。This is the backbone of the scanner. Everything fits onto the chassis, and it needs to be rigid enough to withstand the weight of all the other components, and whatever you intend to put onto the turntable.
(2) 齒輪箱Gearbox: 使用步進馬達來轉動待測物體,透過齒輪比換成我們要的速度,不過並不會太複雜。This part takes the turning force of the stepper motor and turns it into something more suitable for our needs. It’s a simple design with only a few components.
(3) 電子零件Electronics: 我們電腦也要連結到這台機器,上需就要一些電子零件來當窗口。The brains and nerves of the scanner allow you control the turntable from your computer. The wiring is not difficult, and only limited soldering knowledge is required.
(4) 軟體Software: 文中沒有提到這一塊,但目前看來是使用SplineScan來把資料傳進來變3D檔。

555晶片應用的基本觀念

2013.Apr.20修訂:原本只有整理555的 (1)單穩態 (2) 非穩態 模式,今天再加入(3) 雙穩態模式。
============================================
之前使用步進馬達的時候,就已經用過555這塊晶片了(脈衝產生器)。雖然它很簡單,但我還是不太懂其原理與應用的方法。所以藉由自己再寫一篇文章,順道整理555的觀念。

先看晶片本身,其正極與負極個別是第8號和1號腳。(為了清楚起見,內部的一些連接暫時略去)。兩個黃色的三角形是比較器,並將比較的結果輸入中間綠色的觸發器。

輸出引腳3原本是接地,當比較器A 推開觸發器內的開關,引腳3就接正極做輸出。然後外部的C4也就接R4來的電源做充電。

當電容C4充好電之後,比較器B會因為引腳6的電壓比引腳5來得高,進而推動觸發器把開關扳回來,直到放完電。


因此在上圖"單穩態"的設計情況下,其開關步驟如下:
(1) 開始的時候,觸發器將電容C4和輸出(引腳3)接地。
(2) 當引腳2上的電壓比電源電壓的1/3還低時(就是觸發),就會使輸出(引腳3)變正,並開始允許電容器 C4通過 R4充電。
(3) 當電容器C4充電到供電電壓的2/3時,晶片使電容器放電,引腳上的輸出會再次變低。
所以每當引腳2被觸發的同時,C4開始充電,而充電的時間決定引腳3輸出的時間。
充電時間越長,脈沖寬度(時間)就越長,也就是正比於時間常數 "R4 x C4"。



====================================================
還有另一種稱之為"非穩態模式"

先將 引腳2 跳線到 引腳6,並且加入一個電阻R5。在這個情況下,用在比較器A的引腳2電壓將會由電容C4來決定。

延續單穩態的步驟3,C4放電完了之後,也就造成引腳2的電壓低過電源電壓的1/3,這時又觸發比較器A,使引腳3又開始輸出,然後電容C4又開始充電…周而復使。
這就是我們要產生的脈波了。
比較脈寬,充電時間正比於 [R4+R5] x C4
放電時間正比於 R5 x C4,做成的圖表如下:




555還可以做觸發用的 "雙穩態模式"
如下圖所示,引腳7與引腳6不要接在一起了,如此引腳6就不會有電流來充電,而比較器B也就不會去觸發內部的電路。這時555就由引腳2 & 4 來決定輸出。

1. 在引腳2上施加一個負脈衝,會使輸出腳3翻轉為正。
2. 在引腳4上施加一個負脈衝,又會使輸出腳3翻轉為負。 
3. 555定時器在這兩種狀態下都是穩定的,因此雙穩態可以做為觸發器



最後回顧一下"脈衝產生器"裡的圖。
1. 為何引腳2要接引腳6? >>成為非穩態模式,產生持續頻率。
2. 為何控制頻率的電阻要放在引腳6跟7之間? >>因為充、放電時間跟跟這個電阻有關。

TTL 與 COMS

即然開始談到7400家族,就不得不談4000系列,這兩個系列剛好是最常用的晶片。

亦或我們換個角度來看,目前我所接觸到的晶片,最主要分成兩種,TTL和CMOS。
其中TTL最初的元件型號就是7400系列。
而CMOS最初的元件型號就是4000系列 (而後因為商業考量 CMOS也有出74HCxx系列)

TTL: Transistor-Transistor Logic 晶體管邏輯電路,將微小的雙極型晶體管蝕刻在單矽晶片上。
CMOS: Complementary metal-oxide-semiconductor 互補金屬氧化物半導體,也就是場效電晶體。

在1963年,工程師利用TTL製造出第一個邏輯電路(Designed by Orville Baker),然後又很快出現COMS的技術。前面使用的4026就是較老的CMOS晶片。一般來說TTL,功率耗電較大,驅動能力強,但工作電壓要求在5V左右。但CMOS的工作電壓就寬多了,可以到達12V,不過其功耗低,速度也比較慢,重點是易受靜電損壞 (不過已經改進許多)。


可以參考電晶體的歷史: http://www.computerhistory.org/semiconductor/timeline/1963-TTL.html
74xx (TTL) 家族介紹: http://electronicsclub.info/74series.htm
4000 (CMOS) 家族介紹:  http://electronicsclub.info/cmos.htm
以上都是很不錯的網站。

Tear down: DVD player (DVD放映機)

本周要感謝女朋友無償提供一台挑片十分嚴重的DVD player來當我的Tear down的主角。
下圖就是它被拆解前最後的照片了!

首先第一步就是打開外殼,看到裡面主體的架構。
看來結構比我想像中的簡單,主要有四個模組:
電源供應、光碟機、影像處理PCBA、控制面板 


接下來先看跟機構比較沒有關係的control panel。
其中晶顯示器控制IC是使用CS1694EO,made by SEMIC
可以上網其相關的電路圖,看起來應該是蠻常用的component