2008年12月30日 星期二
機械手臂修改篇(1) -- 夾具修正前篇
在夾具的部分比較脆弱
很容易折損
所以利用紙模的概念做了一下修正
第一張提供的是CorelDRAW的圖面
是手掌部分的樣子
由原來的一個SERVO變成兩個
並將標準型的SERVO改成是9G的小SERVO
加工好的樣子大概是這樣
再看看其它角度
加工時有缺角的部分
可以用白膠填補
等白膠乾了以後
再上點色就看不出來了~~~
經過這樣的修正
機構就不容易折損了
其它的關節暫時延用原來的機構
只有SERVO的傳動桿需要重製
等修改好再放上來給大家參考
如此一來
加上原來的四軸
一共就是六軸的機械手臂了!!
2008年12月27日 星期六
機械手臂材料篇(2) -- 光碟機構
機械手臂材料篇(1) -- 紙模機構
有很多的感想跟心得
最近好不容易備妥第二隻手臂的需求
要開始動工了
不過這一次花費的時間會比之前久
因為機構的部分打算用紙來做
這是基座軸動力所使用的SERVO
這是手臂關節與夾具所使用的SERVO
選用的紙有兩種
第一種是西卡紙
用來印製加工圖面與當成機構表面的材料
第二種是厚紙板
厚度約1.7mm
約西卡紙的15~20倍厚
看一下這張圖
體會一下兩種材料的差異吧!!
上面的材料就是厚紙板
粗糙但容易填入並吸收白膠
西卡紙細緻而且光滑
當機構表面可以減少機構接合面的磨擦力
增加機構的壽命~~~
再提供一張基座的機構圖面給大家想像一下!!
圖是用CorelDRAW畫的
一來我對這套軟體比較熟
二來電腦剛好沒裝CAD軟體
不然其實應該是用CAD來畫會比較好
未來建3D圖會比較好建
現在立體圖的部分都是手工草繪
只畫出平面圖供製作機構用
************************************************************************************************************
2009/1/7 補充說明
使用的西卡紙是200P 8K
http://goods.ruten.com.tw/item/show?21207226758462
2008年12月23日 星期二
兩足機器人製作超入門的簡介
這個網址算是這本書的官方網站
是作者淺草的網站
裡面有詳細的簡介和周邊產品
有興趣的朋友可以去參考看看
把目錄稍微翻譯一下
提供給大家過過癮
0. 序章
0-1 前言
0-2 機器人製作的概念
0-3 零件清單 (BOM List)
1. 電路板的製作
1-1 電源板的製作 (電力系統的規劃)
1-2 主控板的製作 (MCU Board)
2. MCU的程式編寫
2-1 MCU的動作原理
2-2 點亮LED燈 (大家概念都一樣, 一定要會點LED燈)
2-3 定時亮滅LED燈, Pulse的產生
2-4 用MCU控制SERVO運作
3. 機構的製作
3-1 材料與工具
3-2 用鋁板來製作機構
4. 試著讓機器人動起來
4-1 組裝的確認
4-2 軸與扭距
4-3 四軸的兩足步行機器人
5. 機器人的追加功能
5-1 觸摸感測器 (IO狀態的判定)
5-2 距離感測器 (AD功能的練習)
5-3 音頻輸出 (用串列通訊與其它設備連線)
5-4 無線控制
6. 開始打造屬於自己的機器人
6-1 自學的心理準備
6-2 自學的參考書籍
附錄
A. 鋁板加工圖面
B. ATmega32的特殊暫存器一覽表, ASCII表, 進位轉換表
C. 電阻值與電容量的表示法
D. MCU
E. 本書機器人的應用實例 (ROBO-ONE參賽機種)
F. 焊接
G. 連接線的製作
H. 英文專有名詞的翻譯
I. 三角函數表
2008年12月20日 星期六
新書到 -- 兩足機器人
終於等到書了
放個封面給大家瞧瞧
接下來就要試作看看囉!!
補上兩本書的網址給大家參考(2008/12/22 更新)
ROBO-ONEのための二足歩行ロボット製作ガイド
二足歩行ロボット製作超入門 バッテリーからRCサーボまで
********************************************************************************
今天其實在忙的是房間佈置
只完成了一半
下了班就一直在收拾還沒收拾乾淨的房間
還要每一塊壁磚地磚通通擦乾淨
收拾好之後像這樣
接著就開始拼地墊
總共四種顏色
用最沒創意的方式拼起來
因為還有其它的東西要擺
時間又很趕(答應老婆這星期要完成)
擺好後大概像這樣
然後稍微休息一下....
再繼續鋪上這塊大墊子!!
然後用抹布把大墊子徹底擦乾淨
(小朋友很可能因為好奇而直接在墊子上舔來舔去?!)
還沒全部完成
剩下牆壁的墊子還沒搞定
門還要加個門欄
明天中午前看看能不能全部完成!!
再來就可以玩機器人了!!
^+++++^
(2008/12/21 更新)
今天是冬至
也是小犬滿八個月
送個遊戲房給他當禮物
老婆看了很滿意唷~~~
門有加上門欄了
就算不關門還是可以避免他爬出來摔下樓梯
看一下側邊的牆
通通都有貼上墊子唷!!
大大的海報牆
可以讓他早一點識字
********************************************************************************
(2008/12/23 更新)
為什麼要把上面星號這一段內容po出來呢?
其實我還想表達另一個層面的概念
好像沒有人發現
只好自己再補充上來......
單就一個房間約4~5坪的空間布置
花費也不過7000大洋上下
跟一隻isobot 的費用相當
而一隻KONDO KHR的費用
可以讓我布置這樣的房間三間 !!
但如果請人來布置
費用大概要四五萬起跳
現在的行情可能會差一點
但兩三萬也跑不掉......
所以說
技術這玩意是很值錢的
不管是 "時間成本" 或是 "實體開發成本"
如果我們總是期待別人把東西做出來
那麼就沒有立場去批評人家的東西很貴
因為別人做得出來
而自己做不出來......
台灣的惡性競爭
就是只看材料成本
不看技術成本
所以把玩技術的人搞得四不像
一大堆人過勞死
身為技術人
千萬不要賤賣技術
寧可分享技術做公益
也不要賤賣技術破壞市場
這一代的台灣已經嘗到惡果
希望下一代不要繼續惡性循環
讓願意DIY的人享有DIY的成就
這樣就會有更多的人願意DIY
進而藏富於民
讓各產業可以做出更好更具國際競爭性的產品
同時也讓不願意DIY的人懂得技術的價值可貴
而不會漫天殺價
現下的環境
就是太容易取得高科技產品
才讓人覺得高科技很廉價
(謎之音: 所以高科技人才=廉價勞工) ~~><~~
2008年12月16日 星期二
MCU -- ATmega64的怪問題
話說最近在用AVR開發系統
遇到了一些很不可思議的問題
到目前還是無解的狀態
提供給大家參考看看~~~
1. Reset 的不穩定
ATmega64大概是我目前用到過reset最不正常的MCU
或許是因為內部架構太複雜的關係
也或許是我還沒把硬體與軟體完全搞懂的關係
總覺得好像哪裡怪怪的
從一開始用M64
就發現它在reset時有時候會成功
有時又reset不起來!!
由reset信號去觀察
發現reset信號很穩定
因為有用reset IC的緣故
所以0電位有確實拉到0
石英晶體也有起振
但系統就是沒有reset起來
用mkII去reset也OK
獨獨Power_ON reset就是很不順
不曉得是哪裡出了問題??!!
(赫然發現, Arduino所有版本都有用reset key, 難不成是因為這個問題??)
2. EEPROM 之"隨它高興"存取
這是最詭異的問題
抓了整整一天還沒抓到問題
WinAVR有內建eeprom的函式
一個是eeprom_read_word();
另一個是eeprom_write_word();
使用write再用Studio把資料read回來
OK~~~
確定資料都有順利填入
可是一用了read功能
災難就來了
read 0~7的值OK (該Byte的儲存值是0x00~0x07)
read 8~F的值系統就當掉!!! (該Byte的儲存值是0x08~0x0F)
而且不管換到哪一個位址都一樣
這是相當詭異的!!
而且匪夷所思!!!
連老闆也愛莫能助
只說可能是編譯器版本的問題
用免費的開發工具就是有這樣的缺點
Orz........
ps.
剛剛找到一個解決方案
還沒試過
明天來試一下看看
http://lysoft.g4soft.net/article.asp?id=46
ps2.
上面的方案確定可行
不過建議在函式的最後要加上sei();
因為系統所有的中斷資源都被關掉了
如果不恢復
很多動作都會不正常唷~~~
比較快的解決方法是
直接呼叫原來eeprom.h的內建函式
只是呼叫前加上cli();
呼叫後加上sei();
這樣就不會出問題了~~~
(2008/12/17 更新)
2008年12月11日 星期四
充電一下 -- 紙橋載重
做完一隻機器手臂之後
就一直在思考這個問題
前陣子UUCWW大大在機器人論壇上貼了一個32in1的紙模製作
我就開始很認真在思考用西卡紙來完成機構的可能性
而思考的方向
是學生時代所接觸過的紙橋載重
什麼是紙橋載重?
顧名思義就是用紙做成橋
然後去承載一定的重量
它是一個結構製作的比賽
比的是載重與紙橋重的比例
比例越大就得勝
印象中
有人以4000多克的紙橋
成功載重近一百公斤的重物
比例高達20多倍
紙橋的技巧
在於黏合的均勻度
及紙張上應力分佈的強化
這兩天工作較忙
所以沒太多時間找資料
未來實作的時候再跟大家分享一些細節
有興趣瞭解紙橋的人
可以用"紙橋載重"的關鍵字上網查看看唷~~~
應該會有一些收穫的!!
ps.
剛剛發現一篇報導
現在的記錄是1673倍
以159G承載266KG
http://news.epochtimes.com/b5/8/6/17/n2157274.htm
http://blog.youthwant.com.tw/ywcampus/newscenter/1369/
2008年12月9日 星期二
充電一下 -- MODBUS 通訊技巧
至於接收的部分
我想跳過編碼的介紹
直接介紹通訊間的一些問題
編碼的部分
上一篇文章中所提供的PDF文件
有很完整的描述
只是內容是英文的
如果有人看了不太能理解的
再告訴我一聲吧~~~
我們都曉得
根據MODBUS所制定的格式來看
裝置端(slave)在接收指令的負擔是很輕的
以RTU模式來看
只要8Bytes就完成一組指令了
ASCII的話也只要17Bytes就搞定 (1+8x2)
但是回應的時候
RTU長一點就可能要30~40個Bytes
(假設一次要拿16組資料, 每組都2 Bytes)
同樣的ASCII就要近80Bytes 的資料在傳~~~
對於暫存區空間較少的MCU來說
這是一個夢魘!!!
因為通訊時別台裝置的回應碼
不單單只是回應給主控端
還同時會傳給其它的裝置端
如果串列中斷裡沒有規劃好因應的對策
災難很快就會發生
要不是系統的堆疊會爆掉
就是串列資料不小心改掉堆疊的內容
讓程式進入亂七八糟的鬼上身狀態
規劃的方向有幾個重點
提一下概念給大家思考看看
1. Timeout 機制 (逾時中止)
Timeout是MODBUS通訊中一定會用到的第一個概念
特別是在RTU傳送模式下
因為通訊碼裡面並沒有結束碼的設計
所以只能透過"經過多久時間沒有在送資料"來判斷它已經結束了
這個等待時間一般來說是5~10 個Bytes的時間間隔
拿9600bps的鮑率來看
1個Byte約需1mS
那麼適當的Timout時間就是5mS~10mS
為什麼要這樣設定?
因為資料在傳送的過程
主控端有可能受到其它多工運作的影響
導致指令並不是連續送出來的
把Timeout設得太低
有可能當指令傳到一半時
裝置就開始分析指令了
這樣一來
指令分析一定會錯誤
裝置也就不會正確動作及回應了!!
2. 循環指標歸零時機
一般在設計通訊碼的暫存空間
會使用循環旗標
意思就是讓暫存器透過串列中斷一直存放資料
不要去管內容是什麼
每存一個Byte指標就+1
當發生Timeout
或是旗標已經加到陣列的邊界
才把旗標歸零
分析指令時
如果是第一種歸零時機
通常是正確的通訊碼
第二種則是部分資料被覆蓋的不完整碼
透過歸零時機的判斷
可以拿到正確的通訊資料
3. 善用ASCII的啟始碼與結束碼
在ASCII的模式下
:是啟始碼
CRLF是結束碼
只要遇到啟始碼
就自動擺到暫存空間的最前面
遇到結束碼就立刻分析資料
這樣就能保證資料一定是從頭開始而且是完整的
以上
就是MODBUS的必勝秘訣
如果能依照這樣的原則來寫程式
一定可以避開很多莫須有的怪問題
不過
很多實際的應用還是會有出乎意料的狀況
此時就要善用示波器來觀察通訊的波形是否正確了~~~
2008年12月8日 星期一
充電一下 -- MODBUS 通訊格式
剛剛完成機械手臂的基本雛形
要銜接下一個進度的空檔
來談談通訊中最常被使用的格式 -- MODBUS
MODBUS是一種通訊碼的標準
有別於硬體的RS232, RS485, USB...等規範
它純粹是定義軟體的碼
如果你告訴別人MODBUS就是9600,n,8,1
那觀念上就差了十萬八千里囉!!
到底什麼是MODBUS??
簡單說
就是兩台機器彼此用來溝通的語言
標準格式如下
1. 站號 -- 2. 指令 -- 3. 資料位址 -- 4. 資料長度 -- 5. 檢查碼
底下分別說明各個部分
1. 站號 (0~255)
其實就是我們常說的ID(身份證號碼)
用來表示您所正在溝通的對象硬體
因為絕大多數的通訊
都是並接很多台設備同時進行連線的
如果不能明確告知要跟哪一台溝通
很可能機器跟機器之間會溝通不良而罷工或暴動
2. 指令
這就是您對硬體所要求執行的動作
常見的指令如下
0x01 : Read digital (ON/OFF) parameter (讀取一個數位參數)
0x03 : Read analog parameter (讀取一組類比參數)
0x05 : Write digital parameter (寫入一個數位參數)
0x06 : Write analog parameter(寫入一組類比參數)
標示藍色的指令(digital)
就是一次只能存取一個 bit 的資料
標示紅色的指令(analog)
就是一次能存取一組 16 bits 的資料
3. 資料位址
固定格式為2 Bytes
如果是數位的位址
代表的意思就是第幾個bit的位置
假設我寫位址是0000
那麼就代表第一個bit
位址是0013
就代表第20個bit (0x0013=19)
同樣的
類比所代表的位址
就是代表第幾組資料的位址(一組是16bits)
4. 資料長度 (或寫入資料)
當指令為讀取時
這兩個Bytes的功能就是告訴對方我要讀取幾個Bytes
當指令為寫入時
就是把前一組位址寫入現在這裡所填的資料
5. 檢查碼
MODBUS的檢查碼分兩種
第一種是給ASCII(文字形)通訊用的
叫做LRC
它簡單來說就是checksum的功能
把前面所有的通訊碼的值累加起來
再用0去減掉這個總合
得到一個8 bits的運算值之後
再把這個值拆成兩個 ASCII文字
最後補上結束碼(CRLF)
第二種是給RTU(二進位形)通訊用的
叫做CRC16(簡稱CRC)
它比較複雜
是透過一連串的互斥運算所得到的值
不過現下絕大多數的CRC
是用查表比對出來的
在這種檢查碼的格式下
有一個很重要的參數
我把它稱做"啟始種子"
一般來說
這個種子應該是0xffff開始的
也就是互斥運算的一開始
必須是0xffff
然而隨著通訊碼的諜對諜
這個種子可能會變成是0x0000或是0x8000
小弟在實際的應用場合
就看到這兩個異類種子出現過
然而這是否算是違反MODBUS格式呢?
那就見人見智囉!!
在什麼地方看得到MODBUS呢?
大多數的PLC通訊
應該是用MODBUS平台來架構的
某一些大型的加工機台
或是機械手臂
也會用MODBUS來進行通訊
大致來說
MODBUS就像機器界的中英文一樣
是最多人使用的語言
所以想要玩通訊的人
要稍微熟悉一下這個格式唷~~~
以上是一點小分享
詳細的資料可以參考一下這篇文章
http://www.eecs.umich.edu/~modbus/documents/PI_MBUS_300.pdf
2008年12月6日 星期六
MCU -- AVR DATABOOK 1997
放一些相片給大家瞧瞧
這是書本的正面
簡潔有力
反正就是讓大家知道是AVR就好了
Atmel的招牌
標明了1997年出的
都過了十幾年了!!!
翻開書的最前面
一樣是廠牌宣告
索引的地方
標示了四顆早期在推的MCU型號
最棒的部分
就是把整個指令集都寫在書裡了!!
另外還有開發工具的介紹
這就是開發工具的樣子
跟現在小小一台的mkII比起來
真的是壯觀多了!!!
公司裡的第一顆AVR
就是書中所提到的第一個型號AT90S1200
跟AT89C2051一樣
是20pins的DIP包裝
連腳位都幾乎是pin to pin!!
功能也很相近
所以當我剛要學MCU時
我也在猶豫要先投靠哪一邊
後來會投靠51
最重要的因素就是參考資源豐富
不過AVR也一直放在心上
畢竟在硬體架構上
就像前一篇文章提到的
AVR真的比8051好很多
其次就是燒錄工具
在我要切入MCU的當時
已經有比較便宜的燒錄器可以用了
只是沒有USB界面的燒錄器而已
一般都還是LPT埠的燒錄器
而碰巧公司又正開發推出了USB燒錄器(for 8051)
就在我剛進公司的時候
所以順理成章就從8051開始學起~~~
Edison大大問過我很多次
為啥我們對AT89C2051這麼情有獨鍾?
對我來說
它是我的第一個MCU
這樣的說法
或許可以透露出個中的端倪
您對AVR很有興趣嗎?
千萬不要只是有興趣唷~~~
現下很多高精度的儀器
其內部所使用的MCU正是AVR
快點找個有興趣的型號上手吧!!
個人挺推薦Arduino的(雖然還沒入手....^+++++^)
可以試試看唷!!!
2008年12月5日 星期五
MCU -- AVR ATmega64
這次來談談我最近在忙的板子吧!!
ayu大大問我說
我是不是打算用AVR做機器人呀?!
或許會吧!
不過這一片的功能並不是機器人用途的唷~~
是公司裡目前要完成系統的一小部分
名稱是八通道溫度量測器
板子偏右側所卯上的最多腳位的IC
就是ATmega64的MCU
腳位數量剛好就是64隻~~~
由於目前還在測試階段中
所以先賣個關子
但大概可以提一下的是
上面有一個20bits的AD
量電壓目前可以準確到的100uV
換算成溫度
如果選用的感測電阻夠準
溫度是可以準確到0.1C以內的
未來上市還請大家多多捧場~~
這個就是傳說中的mkII
早期想學就是沒有這玩意
所以一直都只是看看
現在有工具了
總算可以好好玩一下~~~
話說AVR已經在MCU的世界中行之有年了!!
很多對51失望的人
轉用的MCU中以AVR最為普遍
因為不論在硬體空間
或是IO與中斷的規劃
都超越51太多太多了!!!
可惜的是
在台灣一直沒有正式支援
賣MCU的經銷商很多
卻沒有專屬的FAE或是原廠的工程師在推
會使用AVR的人
多半是已經有MCU底子之後
再自己摸索跳過去的!!!
而AVR之所以會在台灣流行
原因跟Linux一樣
因為它的程式編輯工具光是free的就超好用
(AVR studio + WINAVR)
只要有C概念的人就可以輕鬆上手
如果能熟悉組語
看到精簡的程式碼與強大的硬體支援
沒有不心動的啦!!!
而且連USB的韌體程式
都有高手free丟在網路上供人下載
不需要特地選用搭配USB功能的MCU
只要程式碼一掛就能擁有USB
這就是AVR最讓人驚豔的地方~~~
底下是參考連結
http://www.obdev.at/products/avrusb/index.html
價格上
AVR也是很有競爭性的
只是定位上比較模糊
因為效能上跟DSP還有一段差距
可是拿來當MCU又覺得有點大材小用
或許是我所應用的場合沒有很迫切需要AVR的地方吧
真正用過之後
就是讚不絕口
好用!!!
不過AVR還是有些缺點的
因為系統比51複雜得多
很多設定對剛要使用的人來說
是一個不小的門檻
光是程式編輯界面
就一大堆設定搞不清楚
更別提AVR的硬體設定
整個就是亂成一團
好在有一套軟體叫ICCV7
它可以快速幫你產生硬體設定檔
只要開啟Application Builder(暫時翻譯做硬體設定精靈)
然後從晶振一路勾選到Timer, Uart
再按OK
所有的暫存器你通通不用去查datasheet
它就全部幫你設定好產生對應的程式碼
當然
如果你要讓設定變得有彈性
還是得自己K一下datasheet比較好
但對一個剛要上手的使用者來說
這樣的功能就太好用啦~~~
若您用過其它的MCU
改用AVR只需不到三天的時間
就可以開始開發您的產品了!!!
(我大概花了一天半....)
當然您還是要有一些程式範例可以參考
瞎子摸象一定是會浪費不少時間的!!!
2008年12月3日 星期三
機械手臂控制篇(10) -- 操作界面篇
完成了!!
VB6的界面
原始程式下載
操作的方法很簡單
就是用[+]跟[-]調整SERVO的位置
用test motion看一下是不是自己要的
再按一下save motion
這樣就可以了
要執行的話
按一下run motion XXX to XXX
就可以執行已經儲存好的設定
最後如果要更新動作
就按一下clear all motions
再重新儲存motion
這樣就大功告成了
目前每一個動作的時間間隔是0.25秒
要增加停頓的時間
就把該動作連續存幾次就可以了
照慣例要來個影片
請笑納
ps1.
不要太期待會有很穩定的動作
因為SERVO本身光是送固定寬度的PWM就已經抖個不停
更別提要連續改變SERVO的角度
應該是慘不忍睹的
參考一下就好了~~~~
ps2.
程式其實有預留一些函數沒有呼叫
包含將動作存到檔案
漸進式傳送角度的功能
這些都還沒掛上
所以看動作的時候會比較粗糙
晃動也比較利害
2008年12月1日 星期一
機械手臂控制篇(9) -- 控制板組裝篇
先把手臂的控制板先組裝起來吧!!
記得一開始所提到的洞洞板嗎?
長得跟MCU板一樣大小的那一片?
由於板子的空間真的很小
所以我就放棄原來要加74HC14的作法
改用一般最常做的方式
(其實是因為我的MCU程式已經寫成正邏輯驅動的關係 )
看一下焊好的樣子吧~~~
這一張是正面的樣子
開關的部分我用指撥開關
由於有兩個馬達要同訊號
所以有兩個接頭是共用一個指撥開關的
而指撥開關所管制的就是每一組SERVO的電源
(目前有四組)
因為電流不算小
本來想用鍍銀線
後來全部都用AWG24的線來上!!
焊得挺累的~~
接下來把MCU板焊到洞洞板上
就像圖中所看到的一樣
這可是特別設計過的唷~~~
看看背面的焊線吧!!!
信號線(橙)稍微用小一點
是AWG26的線
連接好的總圖就是這樣囉!!!
在焊接的過程想到一個問題
為啥SERVO的電源大多都設計在中間腳與一側腳
卻不是將電源放在兩側
而信號跑中間??
焊接跟PCB LAYOUT時
你就知道為啥了!!!
最後來看張大合照
萬事皆備
只欠東風
界面程式加油
就要到結尾囉!!!
ps1.
提醒一下
焊接類似這樣的小東西
特別是線一堆的板子
每焊好一條就要用電表量一下
是否點到點有導通
不然等全部焊完才發現最裡面的線沒焊好.....
那就暈暈暈暈暈.........
倒倒倒倒倒.........
Orz...........
ps2.
通電後
MG995的手臂一直在搖
它對信號的截取一直很不穩定
所以在寫界面程式的時候
記得千萬別一次動太多個SERVO
也絕對不要一次跳太多解析度
因為光是要維持動作
它的電流就已經在0.03~0.125A在跳動
扣掉MCU不到0.01A的電流
再次讓人感受到MG995被罵的劣根性
一分錢一分貨
千萬不要貪便宜唷~~~