2018年10月7日 星期日

system workbench for STM32 一款基於eclipse的stm32整合開發環境,以及STM32CubeMX一款STM32系列程式碼產生器

STM32 CubeMX

System Workbench for STM32(SW4STM32)

下載與安裝都很無腦,到官網下載後就可以安裝。

CubeMX以點選功能的方式快速佈置微控器的功能
要記得要去設定Debug功能,否則到了SW4STM32要跑線上除錯的時候會找不到硬體
CubeMX產生程式碼之後會問是否要打開IDE,
在Win32平台,選擇確定會順利打開SW4STM32
在MacOS平台,無法找到,必須單獨打開SW4STM32然後把專案資料import進來

先按錘子編譯專案
再按瓢蟲進入除錯模式

第一次執行瓢蟲要做以下修改,硬體除錯模式才會正常運作
點選 Debug As -> 1 AC6 STM32 C/C++ Application

然後再點選 Debug Configurations...

到 Debugger 中 Configuration Script 區塊 將 generator options展開
將Reset Mode改為 Software system reset
這樣除錯功能才能正常

2018年9月25日 星期二

ghdl,一款開源的vhdl模擬器以及gtkwave,一款開源的波形觀察器,一個二位元全加法器的實作

參考來源:https://ghdl.readthedocs.io/en/latest/using/QuickStartGuide.html

先說載點:
ghdl:
https://ghdl.readthedocs.io/en/latest/getting/Releases.html
gtkwave:
https://sourceforge.net/projects/gtkwave/files/

然後根據ghdl的說明檔,先來實作一份加法器
ghdl quick start guide:
https://github.com/ghdl/ghdl/blob/master/doc/using/QuickStartGuide.rst#a-full-adder

步驟:
用文字編輯器撰寫vhdl
存檔並且副檔名為.vhd或是.vhdl
vhdl內的entity名稱不一定要與檔名一樣
先用ghdl -a [vhdl檔]
再用ghdl -e [entity名稱] ,elaborate這個entity但我不知道什麼是elaborate
最後ghdl -r [entity名稱],跑這個vhdl,但是如果直接跑會沒有結果產生
因此需要製作testbench,testbench也是一段vhdl程式,他與一班vhdl差別在沒有port,是用來產生輸入信號以及檢查輸出是否為預期

重點:
vhdl檔案必須依照階層關係依序編譯,否則會造成頂端vhdl無法正確解譯

先用文字編輯器把下列程式存檔,檔名為「adder.vhdl」

entity adder is
  -- `i0`, `i1`, and the carry-in `ci` are inputs of the adder.
  -- `s` is the sum output, `co` is the carry-out.
  port (i0, i1 : in bit; ci : in bit; s : out bit; co : out bit);
end adder;

architecture rtl of adder is
begin
  --  This full-adder architecture contains two concurrent assignments.
  --  Compute the sum.
  s <= i0 xor i1 xor ci;
  --  Compute the carry.
  co <= (i0 and i1) or (i0 and ci) or (i1 and ci);
end rtl;

接著把下列測試檔存檔,檔名為「adder_tb.vhdl」

--  A testbench has no ports.
entity adder_tb is
end adder_tb;

architecture behav of adder_tb is
  --  Declaration of the component that will be instantiated.
  component adder
    port (i0, i1 : in bit; ci : in bit; s : out bit; co : out bit);
  end component;

  --  Specifies which entity is bound with the component.
  for adder_0: adder use entity work.adder;
  signal i0, i1, ci, s, co : bit;
begin
  --  Component instantiation.
  adder_0: adder port map (i0 => i0, i1 => i1, ci => ci,
                           s => s, co => co);

  --  This process does the real job.
  process
    type pattern_type is record
      --  The inputs of the adder.
      i0, i1, ci : bit;
      --  The expected outputs of the adder.
      s, co : bit;
    end record;
    --  The patterns to apply.
    type pattern_array is array (natural range <>) of pattern_type;
    constant patterns : pattern_array :=
      (('0', '0', '0', '0', '0'),
       ('0', '0', '1', '1', '0'),
       ('0', '1', '0', '1', '0'),
       ('0', '1', '1', '0', '1'),
       ('1', '0', '0', '1', '0'),
       ('1', '0', '1', '0', '1'),
       ('1', '1', '0', '0', '1'),
       ('1', '1', '1', '1', '1'));
  begin
    --  Check each pattern.
    for i in patterns'range loop
      --  Set the inputs.
      i0 <= patterns(i).i0;
      i1 <= patterns(i).i1;
      ci <= patterns(i).ci;
      --  Wait for the results.
      wait for 1 ns;
      --  Check the outputs.
      assert s = patterns(i).s
        report "bad sum value" severity error;
      assert co = patterns(i).co
        report "bad carry out value" severity error;
    end loop;
    assert false report "end of test" severity note;
    --  Wait forever; this will finish the simulation.
    wait;
  end process;
end behav;

先用
ghdl -a adder.vhdl

再用
ghdl -a adder_tb.vhdl
ghdl -e adder_tb

最後
ghdl -r adder_tb --vcd=adder.vcd

結果會在檔案所在資料夾中看到一個名為adder.vcd的檔案,點開來會自動啟動gtkwave
看到以下畫面:




先在左上的adder_0點一下,接著到左下幾個reg ...都點兩下,結果會在右側波形視窗出現綠線



接著用放大鏡-,一直按一直按,隨著時間刻度慢慢放大,大概到ns間距時,波形開始出現





2018年8月22日 星期三

LED蠟燭實驗

網路這幾天流傳一則影片,有人用Arudino連接一顆0402的SMD LED,然後對著點亮的LED吹氣,最後竟然可以吹熄,過一會又亮起來,如此反覆操作著。
這個作者也在instructables.com上面發表做法,甚至在Arduino官網上也有上頭條,這麼有趣的專題,我也來跟風做做看。

矽二極體每升高一度C,則障壁電壓會下降2.5mV

這是電子學課本一開始就會教的知識,如今可以用在這個小專題上,這個專題利用微小封裝的LED,使得該LED內的二極體接面能夠快速感受到溫度的變化,利用點亮LED時產生的溫度升高與吹氣時帶走溫度這兩者之間的溫差,預計可以獲得一個明顯的障蔽電壓電壓變化,然後搭配Arduino內的ADC將二極體的障壁電壓讀取出來,接著用軟體模擬蠟燭點亮與吹熄的效果。

首先接一個簡單可以點亮發光二極體的電路,一個有限流電阻的發光二極體迴路,發光二極體在迴路中的低側,如此就可以從發光二極體的陽極拉出導線量測電壓。電壓變化如此的小,除了在硬體電路上加以改進外,是否還有其他解法能得知這個微弱變化呢?

為了解決在電壓量測的軟體技巧上使用了累加法,將微小的電壓變化放大出來。當直接讀取單次的ADC數值時,只有看到個位數在跳動,但完全無法得知目前微弱電壓的數值,但是這個跳動的個位數本身就隱含著微弱電壓的訊息,於是我們只要每次讀取固定數量且大量的數據累加起來,就可以將這個隱含的訊息予以放大。這個過程有點像是累進誤差這個概念的反義應用,本來累進誤差是我們不要的,但是如果逆向思考則成為有效的工具。另外,這裡也有另一層意義需要思考,就是單筆ADC數值上的個位數跳動與累加之後產生了明顯的差別,非常貼切地驗證了「見樹不見林」這句話。在解決問題之前我們通常要先觀察問題,而觀察問題的時候則是是需要不斷改變高度甚至是維度,這時候就要依賴數學課教我們的那一堆數學工具來觀察了。

2018年8月21日 星期二

木製CNC之Z軸強化測試紀錄

這一次把Z軸重做
為了增加因安裝主軸馬達的負重
首先將X軸滑軌調整位置,把X軸兩個滑軌靠近,並且調整皮帶在X軸也靠近
將CNC主軸馬達用一塊木板做轉接,轉接到原本的Z軸之上
其中Z軸重做兩次
第一次的改裝Z軸,穩定性欠佳,會晃動
今天(8/21)把Z軸採用新式固定方法,也同時符合組裝順序,由底部到上部一層一層組裝,方便事後維修
穩定性增加,Z軸結構不再有形變問題

在45度來回畫線的測試上
依然發生在45度線有重疊問題
原本判斷是Z軸結構形變導致X軸來回有齒隙
但現在Z軸穩定增加,但線條重疊問題依舊
不得不懷疑是步進馬達本身解析度不足

有一個現象很可疑 右側的步進馬達(短線側)的無通電抓止力明顯低於左側馬達
是否為右側馬達磁力不足?

在Y軸並無齒隙問題,只有X軸有齒隙問題,而且高達1mm

2018年8月10日 星期五

新增KiCAD PCB 零件之步驟

1. 指件庫,指定要新增的零件歸屬在哪一個零件庫,並且從視窗標題確認成功載入


2.新增件

新增零件,並同時命名

3.畫邊框

邊框使用Silk層,以零件的上投影作為範圍,根據零件資料手冊繪製

4.定腳位

根據資料手冊擺放,設定零件腳編號、內徑、外徑等參數

5.寫名字
游標移至零件範圍內,按下按鍵E可進入零件參數編輯,例如名稱與3D模型指定等,

6.存檔

2018年8月9日 星期四

kicad的零件3D模型怎麼畫

步驟:
1.在kicad新增PCB零件
2.到freecad,先從Workbensches下拉選單中點選Part Design
















3.以新增草圖方式(Create a New Sketch)描繪,須先規劃以哪一個平面為主,例如XZ XY平面等等

4.以Pad a Selected Sketch方式「長肉」

5.在Combo View先點選要改變參數的草圖,接著在Property-Value視窗中調整參數

6.最後,在File->Export...輸出3D檔案,副檔名是wrl,然後放在KiCAD的3D資料夾中就可以了。注意3D資料夾中不同零件都有用資料夾包起來,要放對地方。

7.嗚哇啦


嘔~對了,模型讀進去KiCAD之後要縮小2.54倍,也就是在KiCAD元件的3D屬性Scale中要填入0.39

2018年8月6日 星期一

從kicad到CNC

以下是MAC版的做法
從KiCAD到CNC的G-code有幾個步驟
1.layout完成後使用列印功能,點選需要的圖層

2.點選列印後再點選預覽PDF,此時系統會使用內建預覽程式打開這個PDF

3.在MAC的預覽程式中輸出成圖檔,選擇PNG,解析度300 dpi

4.在inkscape中匯入圖檔,匯進來就是1:1的尺寸不用調整

5.打開Trace bitmap功能先到其中的Options分頁將Smooth corners調降成零

6.回到Trace bitmap的Mode分頁使用edge detection功能將點陣圖轉成向量外框線
2018/8/211補充:「邊緣檢測」會把圖案轉出兩層外框,使用「色彩量化」選項並且挑選第一層結果則只會有一層外框。


7.使用Gcodetools,先用orientation points定義(100,0)的位置

8.接著用path to gcode就可以輸出副檔名為ngc的gcode檔案

9.使用UniversalGcodeSender這隻程式可以觀看ngc檔案的內容