Bài tập: chọn camera, ống kính, đèn cho trạm kiểm tra thép dập
Bài tập tổng hợp: tính FOV, độ phân giải, tiêu cự, phơi sáng, DOF, chọn telecentric và chiếu sáng theo lỗi, lập BOM có lý do bằng số.
Học xong bài này, bạn sẽ
- Tính toán đầy đủ cấu hình quang học
- Chọn chiếu sáng theo vật liệu và lỗi
- Trình bày lựa chọn có lý do
Nên học trước: Kiểm soát ánh sáng môi trường
Nội dung bài viết
Chặng 6 đã cho bạn từng mảnh riêng lẻ: chọn màn trập, tính độ phân giải và tiêu cự, độ sâu trường ảnh, ống kính telecentric, 7 kiểu chiếu sáng, màu đèn và kính lọc, kiểm soát ánh sáng môi trường. Ngoài nhà máy, không ai đưa bạn từng mảnh: khách hàng đưa một chi tiết, một băng tải, một tờ bản vẽ có dung sai và một câu hỏi "lắp camera gì?". Bài tập này mô phỏng đúng tình huống đó. Bạn sẽ đi từ yêu cầu tới một bảng vật tư (BOM) có lý do bằng số cho từng dòng, đủ để trình bày với trưởng nhóm hoặc gửi nhà cung cấp báo giá. Làm xong bài này, bạn sẵn sàng cho chặng 7 Measurement / Matching / OCR, nơi ảnh chụp từ cấu hình đúng được đem đi đo.
1. Đề bài: trạm kiểm tra giá đỡ thép dập
Một nhà máy linh kiện ô tô dập giá đỡ (bracket) từ thép cán nguội. Sau máy dập, chi tiết chạy trên băng tải tới khu đóng thùng. Khách hàng yêu cầu kiểm tra 100% hai việc: đo hai lỗ và phát hiện lỗi bề mặt trên mặt trên.
| Hạng mục | Thông số |
|---|---|
| Chi tiết | Tấm thép 50 × 30 mm, dày 1,5 mm, bề mặt hơi bóng, còn lớp dầu dập mỏng không đều |
| Đặc trưng đo | Hai lỗ xuyên Ø6,00 ± 0,10 mm nằm trên đường tâm dọc, khoảng cách tâm 36,00 ± 0,10 mm |
| Lỗi bề mặt | Vết xước rộng từ 0,12 mm, dài từ 2 mm; vết móp (lõm) đường kính từ 0,5 mm |
| Băng tải | Băng tải dây đôi: hai dây đỡ hai mép dài của chi tiết, khe hở giữa rộng 18 mm. Tốc độ 200 mm/s, không dừng |
| Nhịp | Chi tiết cách nhau 100 mm, tức 2 chi tiết/giây (120 chi tiết/phút) |
| Vị trí khi chụp | Dọc băng tải ±5 mm (trượt trên dây, sai lệch trigger); ngang ±2 mm (có thanh dẫn hướng). Góc xoay nhỏ, bỏ qua |
| Chiều cao | Dao động ±0,3 mm (cong vênh sau dập + rung băng tải) |
| Không gian | Phía trên: camera đặt trong khoảng 150–500 mm so với mặt băng tải. Phía dưới khe: 250 mm trống để đặt đèn |
| Môi trường | Xưởng mái tôn có cửa sổ (nắng chiếu theo giờ), đèn huỳnh quang trần, rung từ máy dập |
| Kết quả | OK/NG gửi PLC để cổng gạt cách trạm 600 mm loại chi tiết NG |
2. Yêu cầu
| # | Yêu cầu | Tiêu chí đạt |
|---|---|---|
| 1 | Tính FOV cho từng nhiệm vụ | Có tính sai lệch vị trí và biên an toàn; giải thích FOV phủ cái gì |
| 2 | Tính kích thước pixel trên vật từ dung sai và từ lỗi nhỏ nhất | Nêu rõ quy tắc kinh nghiệm đang dùng |
| 3 | Chọn cảm biến (số pixel, kích thước pixel, mono/màu, màn trập) | Có kiểm tra cả hai chiều ngang/dọc |
| 4 | Chọn ống kính: tiêu cự hoặc độ phóng đại, khoảng làm việc; quyết định có cần telecentric không | Có con số sai số phối cảnh so với dải dung sai |
| 5 | Tính thời gian phơi sáng tối đa theo nhòe chuyển động | Nêu ngưỡng nhòe cho đo lường và cho phát hiện lỗi |
| 6 | Kiểm tra độ sâu trường ảnh | DOF ≥ dao động chiều cao cần nét |
| 7 | Chọn chiếu sáng theo vật liệu và từng loại lỗi | Kiểu đèn, màu, kính lọc, có phương án dự phòng |
| 8 | BOM và trang "quyết định và lý do" | Mỗi dòng có lý do bằng số hoặc nguyên lý; có rủi ro và cách kiểm chứng |
3. Kiến thức sử dụng
- Global/rolling shutter, area/line scan: vật chạy liên tục → global shutter.
- Chọn camera và ống kính: m = cảm biến / FOV; f ≈ Z · m / (1 + m) (thấu kính mỏng); nhòe = tốc độ × thời gian phơi sáng / pixel trên vật.
- Độ sâu trường ảnh, khẩu độ, lấy nét: DOF tăng khi đóng khẩu và khi giảm độ phóng đại; nhiễu xạ giới hạn việc đóng khẩu.
- Ống kính telecentric: khi nào cần?: sai số đổi tỉ lệ L·ΔZ/Z và sai số thấy thành bên x·t/Z; ngưỡng 10% dải dung sai.
- 7 kiểu chiếu sáng và Màu đèn, kính lọc và phân cực: backlight cho biên dạng/lỗ, góc thấp cho xước, kính lọc bandpass chặn ánh sáng lạ.
- Kiểm soát ánh sáng môi trường: che chắn, đèn chớp cường độ cao, giám sát độ sáng.
4. Gợi ý thiết kế
Làm theo thứ tự dưới đây. Mỗi bước có một quy tắc kinh nghiệm; đó là điểm xuất phát hợp lý, không phải định luật. Kết quả cuối cùng luôn phải được xác nhận bằng chụp thử mẫu thật và thử độ lặp lại.
| Bước | Công thức / quy tắc kinh nghiệm | Câu hỏi tự đặt |
|---|---|---|
| FOV | FOV = vùng đặc trưng + 2 × sai lệch vị trí + 2 × biên an toàn | Camera đo có cần nhìn cả chi tiết không, hay chỉ vùng hai lỗ? |
| Pixel cho đo lường | Thận trọng: dải dung sai phủ ≥ khoảng 10 pixel → pixel ≤ (2 × dung sai) / 10 | Nếu dựa vào đo cạnh subpixel để nới quy tắc, lấy gì chứng minh? |
| Pixel cho phát hiện lỗi | Lỗi nhỏ nhất phủ ≥ 3–5 pixel (bài này lấy 4) → pixel ≤ lỗi nhỏ nhất / 4 | Lỗi nhỏ nhất theo chiều nào (bề rộng vết xước, không phải chiều dài)? |
| Cảm biến | Số pixel ≥ FOV / pixel cho cả hai chiều; mono, global shutter | Tỉ lệ khung cảm biến có khớp với tỉ lệ FOV không? |
| Ống kính thường | m = min(rộng cảm biến / FOV ngang, cao cảm biến / FOV dọc); f ≈ Z · m / (1 + m); lấy tiêu cự chuẩn gần nhất rồi tính lại Z = f · (1 + 1/m) | Z mới có nằm trong khoảng 150–500 mm không? Có chỗ cho đèn không? |
| Telecentric | Sai số phối cảnh (2·L·ΔZ/Z + x·t/Z) so với dải dung sai; nếu > 10%, xử lý | Chi tiết có lỗ xuyên, nằm lệch tâm ảnh không? |
| Phơi sáng | t ≤ nhòe cho phép × pixel trên vật / tốc độ. Đo lường: nhòe ≤ 0,5 px; phát hiện lỗi: ≤ 1 px | Đèn có đủ sáng cho vài chục µs không? Cần strobe? |
| DOF | Ống kính thường: DOF ≈ 2·N·c·(1 + m)/m²; telecentric: DOF ≈ 2·Nw·c/m² (c: vòng mờ cho phép trên cảm biến, ví dụ 2 pixel; Nw: khẩu độ làm việc). Công thức gần đúng, ưu tiên số liệu của hãng | Dao động chiều cao cần nét là bao nhiêu? Đóng khẩu thêm có làm nhiễu xạ quá lớn không (đĩa Airy ≈ 2,44·λ·Nw)? |
| Chiếu sáng | Mỗi loại lỗi một câu hỏi: lỗi làm ánh sáng đổi hướng, đổi cường độ hay chặn ánh sáng? | Hai kiểu đèn có xung đột nhau không (ánh sáng của trạm này lọt sang trạm kia)? |
5. Lời giải mẫu
Hãy tự làm trước khi mở. Lời giải dưới đây là một cấu hình hợp lý; cấu hình khác vẫn được chấp nhận nếu bạn chứng minh được bằng số.
Xem lời giải mẫu: máy tính quang học và cấu hình đề xuất
5.1. Quyết định kiến trúc: hai trạm
Một camera chụp hai lần với hai đèn chớp sẽ tiết kiệm một camera, nhưng giữa hai khung hình chi tiết vẫn chạy. Một camera khoảng 9 MP qua GigE (khoảng 100 MB/s) chỉ chụp được cỡ 10–13 khung hình/giây với ảnh 8 bit, tức 75–100 ms giữa hai khung. Ở 200 mm/s, chi tiết đi được 15–20 mm. Trong khi đó, FOV để thấy cả chi tiết (khoảng 64 mm) chỉ dư 14 mm so với chi tiết 50 mm, và phần dư đó đã dành cho sai lệch vị trí ±5 mm. Không đủ chỗ cho khung hình thứ hai. Vì vậy chọn hai trạm cách nhau khoảng 150 mm: trạm 1 đo lỗ bằng đèn nền, trạm 2 kiểm tra bề mặt bằng đèn chiếu mặt trên. Mỗi trạm tối ưu riêng, chỉnh riêng, lỗi một trạm không kéo theo trạm kia.
Điểm quan trọng thứ hai: camera đo không cần nhìn cả chi tiết, chỉ cần vùng hai lỗ (42 × 6 mm) cộng sai lệch vị trí. FOV nhỏ hơn thì pixel nhỏ hơn với cùng cảm biến.
5.2. Máy tính quang học
Script dưới đây gom toàn bộ công thức của chặng 6. Danh mục cảm biến, tiêu cự và độ phóng đại là các cỡ phổ biến, số liệu làm tròn để minh họa; khi làm thật, thay bằng danh mục của nhà cung cấp bạn chọn.
import math
from dataclasses import dataclass
@dataclass
class CamBien:
ten: str
w: int # số pixel ngang
h: int # số pixel dọc
p: float # kích thước pixel (µm)
@property
def kich_thuoc(self): # (rộng, cao) cảm biến, mm
return self.w * self.p / 1000, self.h * self.p / 1000
# Danh mục tham khảo: các cỡ cảm biến global shutter phổ biến (số liệu làm tròn)
DANH_MUC = [
CamBien("2,3 MP (1920×1200, 5,86 µm)", 1920, 1200, 5.86),
CamBien("5 MP (2448×2048, 3,45 µm)", 2448, 2048, 3.45),
CamBien("9 MP (4096×2160, 3,45 µm)", 4096, 2160, 3.45),
CamBien("12 MP (4096×3000, 3,45 µm)", 4096, 3000, 3.45),
]
TIEU_CU_CHUAN = [8, 12, 16, 25, 35, 50, 75, 100] # mm
DO_PHONG_DAI_TELE = [0.1, 0.13, 0.16, 0.2, 0.25, 0.3, 0.5] # ví dụ danh mục ống kính telecentric
def chon_cam_bien(fov_x, fov_y, pixel_max):
"""Cảm biến ít pixel nhất mà vẫn cho kích thước pixel trên vật ≤ pixel_max (mm)."""
for cb in sorted(DANH_MUC, key=lambda c: c.w * c.h):
if fov_x / cb.w <= pixel_max and fov_y / cb.h <= pixel_max:
return cb
raise ValueError("Không cảm biến nào đủ: chia nhỏ FOV hoặc dùng nhiều camera")
def ong_kinh_thuong(cb, fov_x, fov_y, Z_muc_tieu):
"""Ống kính thường, xấp xỉ thấu kính mỏng: m = cảm biến/FOV, f = Z·m/(1+m)."""
sw, sh = cb.kich_thuoc
m = min(sw / fov_x, sh / fov_y) # để FOV phủ đủ cả hai chiều
f_ly_thuyet = Z_muc_tieu * m / (1 + m)
f = min(TIEU_CU_CHUAN, key=lambda t: abs(t - f_ly_thuyet))
Z = f * (1 + 1 / m) # khoảng cách vật mới để giữ m
return m, f_ly_thuyet, f, Z
def phoi_sang_max_us(pixel_mm, toc_do, nhoe_px):
return nhoe_px * pixel_mm / toc_do * 1e6
def dof_mm(N_w, c_mm, m, tele=False):
"""DOF gần đúng: telecentric 2·Nw·c/m²; ống kính thường 2·N·c·(1+m)/m² (N là số f ghi trên vòng)."""
return 2 * N_w * c_mm / m ** 2 if tele else 2 * N_w * c_mm * (1 + m) / m ** 2
def airy_um(N_w, lam_nm):
return 2.44 * lam_nm / 1000 * N_w
# ===================== Dữ liệu đề bài =====================
toc_do = 200.0 # mm/s
lech_x, lech_y = 5.0, 2.0 # dao động vị trí ± khi chụp (mm)
dZ = 0.3 # dao động chiều cao ± (mm)
day = 1.5 # độ dày tấm (mm)
bien = 2.0 # biên an toàn mỗi phía (mm)
# ----- Trạm 1: đo hai lỗ (Ø6 ±0,1; khoảng cách tâm 36 ±0,1)
dai_dung_sai = 0.2
fx1 = 36 + 6 + 2 * lech_x + 2 * bien
fy1 = 6 + 2 * lech_y + 2 * bien
px_max1 = dai_dung_sai / 10 # quy tắc ≥ 10 px trên dải dung sai
cb1 = chon_cam_bien(fx1, fy1, px_max1)
sw1, sh1 = cb1.kich_thuoc
can_dof = 2 * dZ + day # thận trọng: dao động Z + độ dày tấm
Nw1 = 8 # khẩu độ làm việc giả định, lấy theo datasheet
print("=== TRẠM 1: ĐO LỖ (telecentric + đèn nền chiếu song song)")
print(f"FOV cần {fx1:.0f} × {fy1:.0f} mm, pixel ≤ {px_max1:.3f} mm → cần ≥ {fx1 / px_max1:.0f} × {fy1 / px_max1:.0f} px")
print(f"Cảm biến: {cb1.ten}, {sw1:.2f} × {sh1:.2f} mm")
print(f" m | FOV (mm) | pixel (µm) | dải DS (px) | DOF Nw={Nw1} (mm) | đạt?")
chon = None
for m in sorted((m for m in DO_PHONG_DAI_TELE if m <= min(sw1 / fx1, sh1 / fy1)), reverse=True):
px = cb1.p / 1000 / m
dof = dof_mm(Nw1, 2 * cb1.p / 1000, m, tele=True)
dat = dai_dung_sai / px >= 10 and dof >= can_dof
print(f" {m:.2f} | {sw1 / m:5.1f} × {sh1 / m:4.1f} | {px * 1000:10.2f} | {dai_dung_sai / px:11.1f} |"
f" {dof:16.2f} | {'có' if dat else 'không'}")
if dat and chon is None:
chon = m
px1 = cb1.p / 1000 / chon
print(f"→ Chọn m = {chon}×, đường chéo FOV {math.hypot(sw1 / chon, sh1 / chon):.1f} mm (DOF cần ≥ {can_dof:.1f} mm)")
print(f" Đĩa Airy (520 nm, Nw={Nw1}) {airy_um(Nw1, 520):.1f} µm = {airy_um(Nw1, 520) / cb1.p:.1f} px")
print(f" Phơi sáng ≤ {phoi_sang_max_us(px1, toc_do, 0.5):.0f} µs (nhòe ≤ 0,5 px)")
x_xa = 36 / 2 + 6 / 2 + lech_x # mép lỗ xa trục nhất
e = 2 * 36 * dZ / (300 - dZ) + x_xa * day / (300 - day)
print(f" Nếu dùng ống kính thường ở Z = 300 mm: sai số phối cảnh {e:.3f} mm = {100 * e / dai_dung_sai:.0f}% dải dung sai")
# ----- Trạm 2: bề mặt (xước rộng ≥ 0,12 mm; móp Ø ≥ 0,5 mm)
fx2 = 50 + 2 * lech_x + 2 * bien
fy2 = 30 + 2 * lech_y + 2 * bien
px_max2 = 0.12 / 4 # lỗi nhỏ nhất phủ ≥ 4 px
cb2 = chon_cam_bien(fx2, fy2, px_max2)
m2, f_lt, f2, Z2 = ong_kinh_thuong(cb2, fx2, fy2, Z_muc_tieu=300)
px2 = cb2.p / 1000 / m2
sw2, sh2 = cb2.kich_thuoc
print("\n=== TRẠM 2: BỀ MẶT (ống kính thường + đèn vòng góc thấp)")
print(f"FOV cần {fx2:.0f} × {fy2:.0f} mm, pixel ≤ {px_max2:.3f} mm → cần ≥ {fx2 / px_max2:.0f} × {fy2 / px_max2:.0f} px")
print(f"Cảm biến: {cb2.ten}, {sw2:.2f} × {sh2:.2f} mm")
print(f"m = {m2:.4f}, f lý thuyết {f_lt:.1f} mm → chọn {f2} mm, khoảng cách vật ≈ {Z2:.0f} mm")
print(f"FOV thực {sw2 / m2:.1f} × {sh2 / m2:.1f} mm, pixel {px2 * 1000:.1f} µm: xước 0,12 mm = {0.12 / px2:.1f} px, móp 0,5 mm = {0.5 / px2:.1f} px")
print(f"Phơi sáng ≤ {phoi_sang_max_us(px2, toc_do, 1.0):.0f} µs (nhòe ≤ 1 px)")
for N in (4, 5.6, 8):
Nw = N * (1 + m2)
print(f" f/{N}: DOF ≈ {dof_mm(N, 2 * cb2.p / 1000, m2):.2f} mm (cần ≥ {2 * dZ:.1f}),"
f" đĩa Airy (625 nm) {airy_um(Nw, 625):.1f} µm = {airy_um(Nw, 625) / cb2.p:.1f} px")
# ----- Băng thông và nhịp
sp_moi_giay = toc_do / 100.0 # chi tiết cách nhau 100 mm
mb = sp_moi_giay * (cb1.w * cb1.h + cb2.w * cb2.h) / 1e6 # ảnh 8 bit
print(f"\nNhịp: {sp_moi_giay:.0f} sp/s ({1000 / sp_moi_giay:.0f} ms/sp), dữ liệu ảnh {mb:.1f} MB/s (GigE ~ 100 MB/s)")
=== TRẠM 1: ĐO LỖ (telecentric + đèn nền chiếu song song)
FOV cần 56 × 14 mm, pixel ≤ 0.020 mm → cần ≥ 2800 × 700 px
Cảm biến: 9 MP (4096×2160, 3,45 µm), 14.13 × 7.45 mm
m | FOV (mm) | pixel (µm) | dải DS (px) | DOF Nw=8 (mm) | đạt?
0.25 | 56.5 × 29.8 | 13.80 | 14.5 | 1.77 | không
0.20 | 70.7 × 37.3 | 17.25 | 11.6 | 2.76 | có
0.16 | 88.3 × 46.6 | 21.56 | 9.3 | 4.31 | không
0.13 | 108.7 × 57.3 | 26.54 | 7.5 | 6.53 | không
0.10 | 141.3 × 74.5 | 34.50 | 5.8 | 11.04 | không
→ Chọn m = 0.2×, đường chéo FOV 79.9 mm (DOF cần ≥ 2.1 mm)
Đĩa Airy (520 nm, Nw=8) 10.2 µm = 2.9 px
Phơi sáng ≤ 43 µs (nhòe ≤ 0,5 px)
Nếu dùng ống kính thường ở Z = 300 mm: sai số phối cảnh 0.203 mm = 101% dải dung sai
=== TRẠM 2: BỀ MẶT (ống kính thường + đèn vòng góc thấp)
FOV cần 64 × 38 mm, pixel ≤ 0.030 mm → cần ≥ 2133 × 1267 px
Cảm biến: 5 MP (2448×2048, 3,45 µm), 8.45 × 7.07 mm
m = 0.1320, f lý thuyết 35.0 mm → chọn 35 mm, khoảng cách vật ≈ 300 mm
FOV thực 64.0 × 53.5 mm, pixel 26.1 µm: xước 0,12 mm = 4.6 px, móp 0,5 mm = 19.1 px
Phơi sáng ≤ 131 µs (nhòe ≤ 1 px)
f/4: DOF ≈ 3.59 mm (cần ≥ 0.6), đĩa Airy (625 nm) 6.9 µm = 2.0 px
f/5.6: DOF ≈ 5.02 mm (cần ≥ 0.6), đĩa Airy (625 nm) 9.7 µm = 2.8 px
f/8: DOF ≈ 7.18 mm (cần ≥ 0.6), đĩa Airy (625 nm) 13.8 µm = 4.0 px
Nhịp: 2 sp/s (500 ms/sp), dữ liệu ảnh 27.7 MB/s (GigE ~ 100 MB/s)
5.3. Đọc kết quả trạm 1 (đo lỗ)
- Cảm biến 9 MP (khoảng 4096 × 2160, 3,45 µm, cỡ 1"): quy tắc 10 pixel trên dải dung sai đòi pixel ≤ 0,02 mm, tức ≥ 2800 pixel theo chiều dài vùng lỗ. Cảm biến 5 MP chỉ có 2448 pixel ngang, không đủ. Cảm biến khổ rộng 9 MP khớp với vùng đo dài và hẹp hơn cảm biến 12 MP khung 4:3.
- Telecentric là bắt buộc: với ống kính thường ở Z = 300 mm, sai số phối cảnh khoảng 0,20 mm, bằng 101% dải dung sai; phần lớn đến từ việc camera nhìn thấy thành lỗ khi lỗ nằm lệch tâm ảnh (tấm dày 1,5 mm). Đồ gá tốt hơn không xử lý được thành phần này.
- Chọn 0,2× thay vì 0,25×: 0,25× cho pixel nhỏ hơn nhưng DOF chỉ khoảng 1,8 mm, không phủ được 2,1 mm (dao động ±0,3 mm cộng độ dày tấm 1,5 mm, lấy thận trọng). 0,2× vẫn giữ 11,6 pixel trên dải dung sai và DOF khoảng 2,8 mm. Không đóng khẩu thêm để tăng DOF vì đĩa Airy ở Nw = 8 đã khoảng 3 pixel.
- Trường nhìn của ống kính phải phủ đường chéo khoảng 80 mm: đây là cỡ ống kính telecentric lớn, nặng, cần giá đỡ ôm thân ống kính.
- Phơi sáng ≤ 43 µs: chỉ khả thi với đèn chớp cường độ cao. Đèn nền chiếu song song có hiệu suất cao (gần như toàn bộ ánh sáng vào ống kính) nên phù hợp. Khoảng làm việc của trạm 1 do ống kính telecentric quyết định, lấy theo datasheet.
5.4. Đọc kết quả trạm 2 (bề mặt)
- Cảm biến 5 MP (2448 × 2048, 3,45 µm, 2/3"): pixel trên vật 26,1 µm, vết xước 0,12 mm phủ 4,6 pixel, vết móp 0,5 mm phủ 19 pixel.
- Ống kính 35 mm, khoảng cách vật khoảng 300 mm theo xấp xỉ thấu kính mỏng (khoảng làm việc thật tính từ mặt trước ống kính sẽ khác vài chục mm; kiểm tra bằng công cụ của hãng). Ống kính phải phủ cảm biến 2/3" và có độ phân giải tương xứng pixel 3,45 µm.
- Khẩu độ f/4 đến f/5.6: DOF 3,6–5 mm, dư nhiều so với 0,6 mm cần; đóng tới f/8 thì đĩa Airy lên 4 pixel, làm mờ chính vết xước mảnh cần tìm.
- Phơi sáng ≤ 131 µs (nhòe ≤ 1 pixel cho bài toán phát hiện lỗi).
- Không cần telecentric: phát hiện lỗi không nhạy với thay đổi tỉ lệ 0,1%.
5.5. Chọn chiếu sáng theo vật liệu và lỗi
| Đặc trưng / lỗi | Tương tác với ánh sáng | Lựa chọn | Lý do | Dự phòng |
|---|---|---|---|---|
| Hai lỗ (đo) | Tấm thép chặn sáng, lỗ cho sáng đi qua | Đèn nền chiếu song song dưới khe băng tải, xanh lá khoảng 520 nm, kính lọc bandpass xanh lá | Bóng đen/lỗ sáng không phụ thuộc dầu và độ bóng mặt trên; tia song song khớp ống kính telecentric, không phản xạ trên thành lỗ | Đèn nền khuếch tán (rẻ hơn) nếu thử nghiệm cho thấy sai số thành lỗ chấp nhận được |
| Vết xước | Rãnh mảnh làm ánh sáng tán xạ đổi hướng | Đèn vòng góc thấp (dark-field), đỏ khoảng 625 nm, kính lọc bandpass đỏ | Mặt phẳng phản xạ ánh sáng ra ngoài nên tối; xước tán xạ về camera nên sáng: tương phản cao, không phụ thuộc màu thép | Đèn đồng trục (xước tối trên nền sáng) nếu chi tiết luôn phẳng; thử đèn xanh dương 470 nm nếu xước rất mảnh |
| Vết móp | Bề mặt nghiêng cục bộ, đổi hướng phản xạ | Cùng đèn góc thấp: mép vết móp hiện sáng/tối rõ | Một đèn phục vụ hai loại lỗi, một lần chụp | Đèn vòng góc thấp chia 4 phần chiếu lần lượt nếu móp nông theo một hướng |
| Dầu dập (nhiễu) | Màng dầu tạo vệt phản xạ không đều | Dark-field thường ít nhạy với màng dầu phẳng hơn chiếu sáng trường sáng; lọc theo hình dạng (vết dầu loang, xước dài mảnh) | Giảm overkill do dầu | Đề nghị khách hàng thổi khí hoặc lau trước trạm nếu tỉ lệ báo nhầm cao |
| Vì sao không dùng dome | Đèn vòm (dome) xóa chói rất tốt nhưng cũng xóa luôn các chi tiết nổi/lõm nhẹ, tức là xóa chính vết xước và vết móp cần tìm. Đây là lựa chọn sai cho bài này. | |||
Chống nhiễu chéo và ánh sáng xưởng: trạm 1 dùng xanh lá, trạm 2 dùng đỏ, mỗi camera có kính lọc bandpass đúng màu đèn của mình, nên đèn trạm này gần như không ảnh hưởng ảnh trạm kia. Cả hai trạm nằm trong hộp che tối (chặn nắng theo giờ), đèn chớp cường độ cao, phơi sáng vài chục đến hơn trăm µs nên ánh sáng huỳnh quang gần như không đóng góp gì.
5.6. Bảng vật tư (BOM)
| # | Hạng mục | Trạm 1: đo lỗ | Trạm 2: bề mặt | Lý do chính |
|---|---|---|---|---|
| 1 | Camera | Mono, global shutter, khoảng 9 MP (4096 × 2160, 3,45 µm, 1"), GigE Vision, có ngõ vào trigger và ngõ ra strobe | Mono, global shutter, 5 MP (2448 × 2048, 3,45 µm, 2/3"), GigE Vision | Vật chạy liên tục; đủ pixel theo quy tắc 10 px/dải dung sai và 4 px/lỗi nhỏ nhất |
| 2 | Ống kính | Bi-telecentric 0,2×, cho cảm biến 1", trường nhìn phủ đường chéo ≥ 80 mm, độ telecentric nhỏ (cỡ 0,1° hoặc tốt hơn) | Tiêu cự 35 mm, ngàm C, cho cảm biến ≥ 2/3", đặt f/4–5.6, có vít khóa vòng nét và khẩu | Sai số phối cảnh của ống kính thường bằng 101% dải dung sai; trạm 2 không cần telecentric |
| 3 | Đèn | Đèn nền chiếu song song khớp ống kính, xanh lá | Đèn vòng góc thấp, đỏ, đường kính trong đủ bao FOV (khoảng 100 mm), đặt cách mặt chi tiết 10–20 mm | Mục 5.5 |
| 4 | Kính lọc | Bandpass xanh lá | Bandpass đỏ | Chặn ánh sáng xưởng và nhiễu chéo giữa hai trạm |
| 5 | Bộ điều khiển đèn | Bộ strobe có chế độ overdrive, xung ≤ 40 µs (trạm 1) và ≤ 130 µs (trạm 2), kích bởi ngõ ra strobe của camera | Phơi sáng rất ngắn cần cường độ cao | |
| 6 | Trigger | Cảm biến quang phát hiện chi tiết cho mỗi trạm (hoặc encoder băng tải + một cảm biến), nối vào ngõ vào trigger camera | Sai lệch trigger đã tính trong ±5 mm | |
| 7 | Cơ khí | Giá đỡ cứng, chống rung (cách ly với máy dập); giá ôm thân ống kính telecentric; đèn nền gá đồng trục với ống kính dưới khe 18 mm; hộp che tối | Rung làm lệch nét, lệch hiệu chuẩn | |
| 8 | Máy tính & giao tiếp | PC công nghiệp hai cổng GigE riêng cho hai camera; I/O hoặc giao tiếp mạng với PLC | Dữ liệu khoảng 28 MB/s, xa giới hạn của GigE; kết quả phải tới PLC trước khi chi tiết tới cổng gạt (600 mm / 200 mm/s = 3 s) | |
5.7. Trang "quyết định và lý do"
| Quyết định | Lý do bằng số | Rủi ro | Cách kiểm chứng |
|---|---|---|---|
| Hai trạm thay vì một camera hai đèn | Giữa hai khung hình chi tiết đi 15–20 mm, FOV không còn chỗ | Chi phí thêm một camera | Hỏi tốc độ khung hình thật của camera dự kiến, tính lại |
| Telecentric 0,2× cho trạm 1 | Ống kính thường: sai số phối cảnh 101% dải dung sai; 0,2× cho 11,6 px/dải dung sai, DOF 2,8 mm | Đắt, nặng, WD cố định | Mượn ống kính demo, đo 1 chi tiết ở 5 vị trí trong ảnh và 3 độ cao |
| Phơi sáng ≤ 43 µs với strobe | Nhòe ≤ 0,5 pixel ở 200 mm/s | Ảnh tối, nhiễu | Chụp thử ở tốc độ thật, đo độ sáng nền và độ dốc biên |
| Dark-field đỏ cho trạm 2 | Xước 0,12 mm phủ 4,6 pixel | Dầu dập gây báo nhầm; xước quá mảnh không đủ tương phản | Bộ mẫu: 30 OK, 30 NG có xước/móp nhỏ nhất, so tương phản đèn đỏ và xanh dương |
| Quy tắc 10 px/dải dung sai | Thận trọng, chưa tính subpixel | Thực tế có thể còn dư hoặc thiếu | Thử độ lặp lại: đo một chi tiết 30 lần, so 6σ với dải dung sai (bài Quy đổi pixel sang mm và đánh giá sai số) |
6. Tự đánh giá
| Tiêu chí | Chưa đạt | Đạt | Tốt |
|---|---|---|---|
| FOV | Lấy đúng kích thước chi tiết | Có sai lệch vị trí và biên an toàn | Nhận ra camera đo chỉ cần vùng hai lỗ, giải thích lợi ích |
| Độ phân giải | Không nêu quy tắc | Hai quy tắc riêng cho đo lường và phát hiện lỗi | Kiểm tra cả hai chiều cảm biến, nêu cách kiểm chứng bằng thử độ lặp lại |
| Ống kính | Chọn tiêu cự theo cảm tính | Tính f từ m và Z, tính lại Z với tiêu cự chuẩn | Quyết định telecentric bằng con số sai số phối cảnh; cân đối độ phóng đại với DOF |
| Chuyển động | Bỏ qua nhòe | Tính phơi sáng tối đa | Liên hệ với cường độ đèn, strobe, ngưỡng nhòe khác nhau cho đo và phát hiện |
| DOF và nhiễu xạ | Không kiểm tra | Tính DOF so với dao động chiều cao | Biết giới hạn đóng khẩu do nhiễu xạ, chọn khẩu độ có lý do |
| Chiếu sáng | Một đèn "cho tất cả" | Mỗi loại lỗi một kiểu đèn có lý do | Xử lý xung đột hai trạm bằng màu đèn và kính lọc; có phương án dự phòng; nhận ra dome là sai |
| Trình bày | Chỉ có danh sách thiết bị | BOM có lý do | Có rủi ro và kế hoạch kiểm chứng cụ thể trước khi đặt hàng |
7. Mở rộng
- Tăng tốc băng tải lên 400 mm/s: chạy lại máy tính quang học. Phơi sáng còn bao nhiêu µs? Nhịp 4 chi tiết/giây có làm thay đổi băng thông đáng kể không?
- Phương án một camera: nếu chi tiết được dừng 200 ms tại trạm (băng tải bước), một camera 12 MP với hai đèn chớp lần lượt có khả thi không? Tính lại FOV, pixel trên dải dung sai và sai số phối cảnh khi phải dùng chung ống kính.
- Dung sai siết lại ±0,05 mm: cấu hình hiện tại còn đạt quy tắc 10 pixel không? Nếu không, bạn đề xuất gì (hai camera, mỗi camera một lỗ, rồi đo khoảng cách bằng hiệu chuẩn chung)?
- Kiểm tra cả mặt dưới: thêm trạm nào, đặt ở đâu khi mặt dưới đang tựa trên dây băng tải?
- Viết đặc tả nghiệm thu: dùng mẫu ở bài Đặc tả kỹ thuật và nghiệm thu FAT/SAT (chặng 5), viết tiêu chí FAT cho hai trạm dựa trên chính các con số ở trên.
Tóm tắt
- Đi theo thứ tự: FOV → pixel (đo: ≥ ~10 px/dải dung sai; phát hiện: lỗi ≥ 3–5 px) → cảm biến → ống kính → phơi sáng → DOF → chiếu sáng → BOM.
- FOV chỉ cần phủ vùng đặc trưng cộng sai lệch vị trí; camera đo không bắt buộc nhìn cả chi tiết.
- Hai nhiệm vụ cần hai kiểu đèn xung đột nhau → tách trạm, hoặc chụp lần lượt nếu thời gian và FOV cho phép (tính bằng số).
- Telecentric được chọn vì sai số phối cảnh vượt dải dung sai, không phải vì "đo thì phải telecentric"; độ phóng đại được cân đối với DOF.
- Mỗi dòng BOM có lý do bằng số, rủi ro và cách kiểm chứng; mọi quy tắc kinh nghiệm phải được xác nhận bằng chụp thử và thử độ lặp lại.
Chặng tiếp theo bắt đầu với bài Đo cạnh subpixel, fitting đường thẳng và đường tròn: đem ảnh từ cấu hình vừa chọn đi đo với độ chính xác dưới một pixel.


