網頁

2018年1月16日 星期二

Point Grey 相機之 FlyCapture 編譯 過程記錄

FlyCapture 有 32 和 64位元兩個版本
32位元安裝在 C:\Program Files (x86)\Point Grey Research\FlyCapture2
64位元安裝在 C:\Program Files\Point Grey Research\FlyCapture2

雖然安裝後有 src, 但因權限的關係,無法直接編譯
另外準備一個目錄 D:\SVN_Repository3\vc\FlyCapture
拷貝 include lib lib64 src_x64 src_x86

build src_x64/Examples_vs2013

雖然是 64位元, 不要改變 Configuration Manager 或 Property Pages 的 Platform 為 x64
雖然可以編譯成功,但是無法執行

VB.Net Examples 的 Project 會產生 Type 'FC2Version' is not defined. 之類的錯誤
開啟 Project 的 Properties 選 References, 可以看到
點選 FlyCapture2Managedd_v120, 在按 Reference Paths
加入目錄 C:\Program Files\Point Grey Research\FlyCapture2\bin64\vs2013
即可解決

CSharp Examples 的 Project 會產生如下的錯誤

開啟 Project 的 Properties 選 Build
改 Output path: bin\Debug\
為 Output path: bin\Debug
即可解決

CSharp Examples 的 Project 還會產生如下的錯誤

開啟 Project 的 Properties 選 Reference Paths 加入目錄
C:\Program Files\Point Grey Research\FlyCapture2\bin64\vs2013\
即可解決

CSharp Examples 的 MultiSyncEx_CSharp_vs2013 Project 還會產生如下的錯誤

點選 MultiSyncEx_CSharp_vs2013/References, 按右鍵選 Add References...
勾選 MultiSyncLibraryManaged_v120.dll 和 FlyCapture2Managed_v120.dll 按 OK
刪除錯誤 References FlyCapture2Managed 和 MultiSyncLibraryManaged
即可解決

C Examples 和 C++ Examples 內的 Project 需要各別 Build
唯一會有錯誤的是 FlyCapture2GUI
修改 FlyCap2CameraControl_ILBridge.h 和 FlyCap2CameraSelection_ILBridge.h
#elif (_MSC_VER == 1800)
#using <..\\..\\bin\\vs2013\\FlyCap2CameraControld_v120.dll>
#using <..\\..\\bin\\vs2013\\FlyCapture2Managedd_v120.dll>
#elif (_MSC_VER == 1700)
#elif (_MSC_VER == 1800)
//#using <..\\..\\bin\\vs2013\\FlyCap2CameraControld_v120.dll>
//#using <..\\..\\bin\\vs2013\\FlyCapture2Managedd_v120.dll>
#using <..\\FlyCap2CameraControl\\bin\\Debug\\FlyCap2CameraControld_v120.dll>
#using <..\\FlyCap2CameraControl\\bin\\Debug\\FlyCapture2Managedd_v120.dll>
#elif (_MSC_VER == 1700)
即可解決

點選 C++ Examples/FlyCap2, 按右鍵選 Set as Startup Project, 嘗試執行, 若產生下列錯誤
是因為 FlyCap2 會用到 FlyCapture2GUI 產生的 FlyCapture2GUId_v120.dll
而 FlyCapture2GUId_v120.dll 會用到 FlyCap2CameraControl 產生的
FlyCap2CameraControld_v120.dll 和 FlyCapture2Managedd_v120.dll
若是刪除 FlyCapture2GUId_v120.dll, 及會使用
C:\Program Files\Point Grey Research\FlyCapture2\bin64\vs2013 目錄下可以執行的程式庫
即可執行,至於什麼原因,就不知道了


2018年1月4日 星期四

使用 MOSFET 產生 PWM 電源

MCU 產生 25kHz PWM
因為 MCU 使用 3.3V, 一些 N通道MOSFET Vgs 甚至要 4V(IRFZ44N)
故用 2N7000(N通道) 推動 IRF5305(P通道)
示波器使用顏色
2N7000 Vg 為黃色
2N7000 Vd 為藍色
IRF5305 Vg 為紫色
IRF5305 Vd(out)為綠色

 一開始的設計R1=10K,並沒有使用R2電阻和223電容,Vd = Vg
加上R2(10K)電阻,因為分壓,使得 IRF5305 Vg 在工作範圍內擺動
加上223電容,加快輸出電壓上升
最後改R1=1K, R2=1K
即可加快輸出電壓的下降
缺最後一張圖


用單節18650產生3.0V

18650 電壓範圍 3.6-4.2V
要產生3.3V, 只有找到 TPS63020, TPS63060, TPS63070

LM1117 要求 Vin - Vout = 1.2V
3.6V - 1.2V = 2.4V

使用 TL431
注意在 750 Ohm, 上有一個較高的電壓(12V)
這裡可不能接 18650
Vout = 2.5 * (1 + 4.7 / 22) = 3.0V
PN2222 的 Vb為 3.0V + 0.7V = 3.7V
Ib = (12 - 3.7) / 750 = 11mA (在TL431 的 Ika 1~100mA 範圍內)
PN2222 的最小 β 為 35
Iout(max) = 11 * 35 = 387mA



2017年12月18日 星期一

使用 Arduino Pro Micro 當成 Arduino ISP 燒錄程式到 Atmega328P-PU 之二

請參考 上一篇 和 From Arduino to a Microcontroller on a Breadboard

雖然他只有提供 breadboard-1-6-x.zip,並沒有 1.8.5 的版本,是可以用的
秘訣是 Arduino IDE 不要使用安裝檔,使用 Windows zip file for non admin install
解開後取出 boards.txt 的內容加入 arduino-1.8.5 的 boards.txt
之前使用安裝檔,一直失敗

C:\Arduino\arduino-1.8.5-windows\arduino-1.8.5\hardware\arduino\avr\boards.txt
##############################################################
atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)

atmega328bb.upload.protocol=arduino
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05

atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F

atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

##############################################################

參考 上一篇 ProMicro 到 Atmega328P 接線
先燒錄 Bootloader
Tools/Board:ATmega328 on a breadboard (8 MHz internal clock)
Tools/Port 選正確
Tools/Programmer/Arduino as ISP(Pro Micro)
Tools/Burn Bootloader

Bootloader 燒錄完成後,即可透過 RS-232 燒錄程式
USB轉RS-232(如 FT232RL)
FTDI  ->  Atmega328P
GND  ->  GND
CTS  ->  GND
VCC  ->  VCC
TXO  ->  2(RXD)
RXI  ->  3(TXD)
DTL  -> 1(RESET)

DTL 接 RESET 請參考 Arduino Pro Mini 電路
中間串接 0.1uF, Atmega328P 端的 Reset 要 Pull Up 10K

Tools/Board:ATmega328 on a breadboard (8 MHz internal clock)
Tools/Port 選RS-232 的 Port
Sketch/Upload (不要 Using Programmer)


2017年12月12日 星期二

使用 Arduino Pro Micro 當成 Arduino ISP 燒錄程式到 Atmega328P-PU

Arduino 1.8.5

File/Preferences/Additional Boards Manager URLs
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json
Tools/Board/Boards Manager
安裝 SparkFun AVR Boards

修改 File/Examples/11.ArduinoISP/ArduinoISP
重新定義下列程式碼
#define RESET     10 // Use pin 10 to reset the target rather than SS
#define LED_HB    9
#define LED_ERR   8
#define LED_PMODE 7
#define PIN_SCK   15
#define PIN_MOSI  16
#define PIN_MISO  14
Tools/Board/SparkFun Pro Micro
Tools/Processor/Atmega32U4(5V,16MHz)
Tools/Port/(選正確 Com)
Sketch/Upload

主要接線
ProMicro  ->  Atmega328P-PU
VCC  ->  7(VCC)
GND  ->  8(GND)
VCC  ->  20(AVCC)
15(SCK)  ->  19(SCK)
14(MISO)  ->  18(MISO)
16(MOSI)  ->  17(MOSI)
10  ->  1(RESET)
File/Preferences/Additional Boards Manager URLs
https://github.com/Optiboot/optiboot/releases/download/v6.2/package_optiboot_optiboot-additional_index.json
Tools/Board/Boards Manager
安裝 Optiboot 6.2
若找不到, 並且有錯誤訊息
Error downloading https://github.com/Optiboot/optiboot/releases/download/v6.2/package_optiboot_optiboot-additional_index.json
下載並置於
C:\Arduino\arduino-1.8.5-windows\arduino-1.8.5\hardware/package_optiboot_optiboot-additional_index.json
更改 File/Preferences/Additional Boards Manager URLs 為
file://C:\Arduino\arduino-1.8.5-windows\arduino-1.8.5\hardware/package_optiboot_optiboot-additional_index.json

修改 C:\Arduino\arduino-1.8.5-windows\arduino-1.8.5\hardware\arduino\avr\programmers.txt
增加
arduinopromicro.name=Arduino as ISP(Pro Micro)
arduinopromicro.communication=serial
arduinopromicro.protocol=arduino
arduinopromicro.speed=19200
arduinopromicro.program.protocol=stk500v1
arduinopromicro.program.speed=19200
arduinopromicro.program.tool=avrdude
arduinopromicro.program.extra_params=-P{serial.port} -b{program.speed}

Tools/Programmer/Arduino as ISP(Pro Micro)
Tools/Processor/Atmega328p
Tools/Board/Optiboot on 28-pin cpus
Tools/CPU Speed/8MHz (int) (不使用外部震盪晶體)
Tools/Burn Bootloader (好像可以不用,但是時脈會錯誤)
燒錄程式需使用 Sketch/Upload Using Programmer, 不能使用 Upload

2017年11月24日 星期五

如何控制 DC-DC 輸出電壓

以下文章參考 Output voltage control of DC/DC converters

Vref 固定,且沒有電流
期望輸出電壓範圍 Vo1 ~ Vo2 (Vo1 < Vo2)
期望控制電壓範圍 Vc2 ~ Vc1(Vc1 < Vc2)
即是 Vc1 輸出 Vo1,Vc2 輸出 Vo2
以中間的節點來說 Ir1 + Ir2 + Ir3 = 0
Vref/R3 + (Vo1 - Vref)/R1 + (Vc1 - Vref)/R2 = 0
Vref/R3 + (Vo2 - Vref)/R1 + (Vc2 - Vref)/R2 = 0
因為 R3 固定,所以可以由聯立方程式解出 R1, R2

在上述範例中使用 LM2596(降壓),我使用 TL431(升壓)
須注意上方的電阻值,至少要能提供 TL431 1mA,才能正常工作

原先是想用 LM317-ADJ(降壓)
Vout = 1.25(1 + R2/R1)
請注意此時的 Vref = Vout - Vadj = 1.25
Vref/R1 + [Vc1 - (Vo1 - Vref)]/R2 + (Vo1 - Vref)/R3 = 0
Vref/R1 + [Vc2 - (Vo2 - Vref)]/R2 + (Vo2 - Vref)/R3 = 0
以上沒有試過,請小心

沒猜錯 XL6003(升壓) 也可以

2017年9月15日 星期五

Arduino pro mini

1. 製造 Arduino 燒錄器
接腳 FT232RL -> Arduino Pro Mini
DTR->DTR
RX->TXO
TX->RXI
VCC->VCC
CTX->GND
GND->GNC

選擇要當燒錄器的 Boards(Arduino Pro or Pro Mini) 和 Port
File/Examples/11.ArduinoISP/ArduinoISP
Sketch/Upload

2. 燒錄 bootloader
接腳 Arduino Pro Mini(Arduino 燒錄器)->Arduino Pro Mini
VCC->VCC
GND->GND
10->RST
11(MOSI)->11(MOSI)
12(MISO)->12(MISO)
13(SCK)->13(SCK)

File/Examples/01.Basics/Blank
選擇目標 Boards(Arduino Pro or Pro Mini)
Tools/Programmer/Arduino as ISP
Tools/Brun Bootloader
Sketch/Upload Using Programmer