Công thức tính độ rộng đường mạch in (trace width) trên PCB

Công thức tính độ rộng đường mạch in (trace width) trên PCB dựa vào dòng điệnđộ dày lớp đồng, và mức tăng nhiệt độ cho phép (temperature rise) thường được xác định theo tiêu chuẩn IPC-2221 hoặc IPC-2152 (phiên bản mới hơn, chính xác hơn).


🔹 1. Công thức theo tiêu chuẩn IPC-2221 (truyền thống)

Đối với đường mạch ngoài (External Layer):
I=k(ΔT)0.44(A)0.725

Đối với đường mạch trong (Internal Layer):
I=k(ΔT)0.44(A)0.725

Trong đó:

  • I: dòng điện (A)
  • A: tiết diện mặt cắt ngang của đường mạch (mil²)
  • ΔT: mức tăng nhiệt độ cho phép (°C)
  • k: hằng số kinh nghiệm
    • Lớp ngoàik=0.048
    • Lớp trongk=0.024

Từ đó suy ra:

A=(Ik(ΔT)0.44)1/0.725

Sau khi tính được A, ta có thể tìm độ rộng (W) như sau:

W=AT

Với:

  • T: độ dày lớp đồng (mil)
    • 1 oz/ft² = 1.37 mil
    • 2 oz/ft² = 2.74 mil
    • 3 oz/ft² = 4.11 mil
      (1 mil = 0.0254 mm)

🔹 2. Công thức quy đổi ra mm

Vì 1 oz = khoảng 35 µm, ta có thể tính nhanh:

W(mm)=A(mil2)×0.00064516T(μm)×1000


🔹 3. Ví dụ minh họa

Yêu cầu: Dòng điện 2A, nhiệt tăng cho phép 10°C, lớp đồng 1oz (35 µm), lớp ngoài.

Áp dụng công thức IPC-2221:

A=(20.048×100.44)1/0.725=191 mil2

W=1911.37=139 mil3.53 mm

→ Độ rộng cần thiết ≈ 3.5 mm

Dưới đây là bảng tra nhanh độ rộng đường mạch (theo chuẩn IPC-2221), giúp bạn ước lượng nhanh độ rộng (mm) cần thiết cho các dòng điện khác nhau, với lớp đồng 1oz, 2oz, 3oz và mức tăng nhiệt độ cho phép 10°C (điều kiện thường dùng trong thiết kế PCB).


🔹 BẢNG TRA NHANH ĐỘ RỘNG ĐƯỜNG MẠCH (PCB TRACE WIDTH)

Dòng điện (A)1oz (35µm) – Lớp ngoài2oz (70µm) – Lớp ngoài3oz (105µm) – Lớp ngoài
0.5A0.55 mm0.28 mm0.19 mm
1A1.00 mm0.50 mm0.34 mm
2A3.50 mm1.75 mm1.20 mm
3A5.50 mm2.80 mm1.90 mm
5A9.00 mm4.50 mm3.00 mm
10A18.0 mm9.0 mm6.0 mm

⚙️ Ghi chú:

  • Lớp trong thường cần rộng hơn 1.5–2 lần so với lớp ngoài vì khả năng tản nhiệt kém hơn.
  • Bảng này áp dụng cho tăng nhiệt độ 10°C; nếu cho phép tăng nhiệt cao hơn (ví dụ 20°C), đường mạch có thể hẹp hơn khoảng 25–30%.

Dưới đây là các đường dẫn (liên kết) tham khảo đáng tin cậy về công thức tính độ rộng đường mạch PCB theo chuẩn IPC‑2221 / IPC‑2152, được dùng để dẫn chứng cho các phần mình đã giải thích phía trên:

PCB Trace Width Calculator – SUNPCB
→ Trình bày công thức tính W=A/(T×1.378) và cách quy đổi theo độ dày đồng (oz).

PCB Trace Width Calculator – PCBWay
→ Cung cấp công cụ tính tự động theo chuẩn IPC‑2221 với đầu vào dòng điện, lớp đồng và mức tăng nhiệt.

IPC 2221 Demystified: A Beginner’s Guide to PCB Design Standards – ALLPCB
→ Giải thích tiêu chuẩn IPC‑2221, công thức và biểu đồ tra nhanh dòng điện – độ rộng mạch.

PCB Trace Width Conversion Calculator – DigiKey
→ Công cụ chuẩn của DigiKey, sử dụng công thức IPC‑2221 để tính độ rộng theo dòng điện, độ dày đồng và nhiệt độ.

Trace Width Calculator – AdvancedPCB
→ Trình tính toán online theo công thức IPC‑2221, có giải thích mối liên hệ giữa dòng điện và tiết diện mạch.

Trace Width vs Current in PCB Design – Wevolver
→ Bài viết so sánh giữa tiêu chuẩn IPC‑2221 và IPC‑2152, hướng dẫn cách chọn độ rộng phù hợp.

Optimizing for PCB Trace Thickness vs Current Capacity – Cadence
→ Phân tích chi tiết ảnh hưởng giữa chiều dày đồng, độ rộng mạch và khả năng dẫn dòng.

PCB Trace Width vs Current Table – MCLPCB
→ Cung cấp bảng tra nhanh độ rộng‑dòng điện theo tiêu chuẩn ANSI/IPC‑2221.

IPC‑2221 Calculator for PCB Trace Current and Heating – Altium
→ Altium cung cấp công cụ tính giới hạn dòng – nhiệt theo chuẩn IPC‑2221.

Bài viết có sử dụng Chat-GPT để trích xuất và kiểm chứng!

Kinh nghiệm bố trí linh kiện và đi dây trong thiết kế PCB

Xin chào các bạn, cảm ơn bạn đã theo dõi bài viết này!

Đây là chia sẽ của cá nhân mình dựa trên kiến thức và kinh nghiệm có được trong gần 20 năm thiết kế PCB tính từ thời sinh viên năm 2 (2007), thời kỹ sư thiết kế PCB trong công ty Nhật (từ 2011), thời làm tại phòng Lab Hàn Quốc (từ 2024). Mỗi người có thể có một phương pháp khác nhau, vậy nên hãy lựa chọn phương pháp nào mà bạn thấy phù hợp nhất với bạn nhé! Và chia sẽ của mình nêu lên là một trong những phương pháp mà bạn có thể tham khảo.

Giai đoạn 1: Tìm hiểu trước khi thiết kế PCB

  • Yêu cầu đầu tiên là bạn cần phải hiểu rõ về mạch nguyên lý, những yêu cầu đặc biệt trên bo mạch mà bạn sắp layout!
  • Yêu cầu thứ hai là bạn phải hiểu rõ bản chất, cấu tạo và đặc tính của các thành phần có trên bo mạch PCB.

Giai đoạn 2: Bố trí linh kiện trên bo

Trước khi bố trí linh kiện cần xem xét đến các khía cạnh sau (ví dụ cho bài mạch nhấp nháy hình trái tim):

  • Về tính năng: Bạn đã bố trí được LED hình trái tim theo thứ tự nhấp nháy hay chưa, đã đáp ứng được yêu cầu về tính năng của mạch là nhấp nháy LED hình trái tim?
  • Về tính kỹ thuật: Bạn bố trí linh kiện trên bao nhiêu lớp? Các đường mạch dự kiến to như thế nào để trừa không gian sau này sẽ đi dây. Các linh kiện trong các khối mạch bạn đã bố trí khá hợp lý so với sơ đồ nguyên lý hay chưa? Đã có sự phân chia cách ly theo các khối mạch phù hợp chưa?
  • Về tính người dùng: Bạn đã có làm chỉ thị chú thích vị trí nguồn cấp vào chưa? Chỉ thị này bàn có làm bằng hoặc to hơn những chữ khác để nhấn mạnh với người dùng biết ngay là chỗ này là nguồn cấp vào và thứ tự 5V -0V là như vậy hay chưa? Thao tác điều chỉnh biến trở (điều chỉnh chế độ nháy LED) có thuận tiện hay không, vị trí cắm dây nguồn vào có bất tiện không? Nếu bo mạch có làm nối tắc đi dây ngoài thì vị trí các nối tắt dễ thực hiện không? Và cuối cùng bo mạch nên thiết kế bo tròn đều các góc tránh sát thương người dùng.
  • Về tính thẫm mỹ: Bo mạch bố trí linh kiện có chỉnh chu đẹp mắt, dễ nhìn không?

Khi thao tác trên một phần mềm bất kỳ:

  • Nên chỉ bật một số lớp đơn giản và cần thiết trong quá trình bố trí linh kiện, ví dụ như hình chiếu bằng và tắt lớp overlay/silkscreen để nhìn được tốt hơn.
  • Nên tạm tắt các dây nối để đỡ rối, có thể thi thoảng bật lên lại để kiểm tra chiều hướng xoắn dây, có thể bật tính năng màu sắc theo NET để dễ phân biệt.
  • Bố trí thô (làm nhanh) theo từng khối mạch, theo từng vị trí chức năng của linh kiện, và theo yêu cầu bố trí cho trước nếu có.
  • Bố trí tinh (làm tỉ mĩ) lại các linh kiện trong từng khối.

Giai đoạn 3: Đi dây

  • Bước 1: Phải suy nghĩ trước khi vẽ bất kỳ một đường dây nào đó, cụ thể đây là đường gì (tín hiệu hay công suất, single hay differential pair …), có đặc tính gì (bình thường hay analog, highspeed hay anten …), có mối quan hệ như thế nào giữa hai linh kiện nối với nó (dài hay ngắn, theo cụm từng bó hay đơn lẻ từng sợi, thông thoáng hay cấn nhiều linh kiện, cấn nhiều vùng đặc biệt).
  • Bước 2: Căn cứ vào cấu trúc bo mạch đang thiết lập (bo mạch bao nhiêu lớp, các lớp đi dây nằm ở những vị trí nào trong cấu trúc ấy). Đi dây giữa các lớp nên phân theo từng phương (xu hướng ngang hoặc dọc, chứ không phải là ngang hay dọc thẳng tuyệt đối như cây thước, hoặc cũng không phải là tiện đâu đi náy, phải có quy hoạch trước) và cũng không phải là nhất nhất toàn bộ layer đều theo xu hướng đó, cái này đã có ví dụ minh hoạ trong slide bài học.
  • Bước 3: Căn cứ vào thứ tự ưu tiên khi vẽ (đây là kinh nghiệm riêng của mình, các bạn có thể tham khảo hoặc không nhé). Đó là: dây nhạy cảm (anten, analog, highspeed, differential pair) -> đi dây nguồn (vì dây to mà đi sau cùng thì không còn chỗ mà đi được) -> các dây ngắn (vì cho dù đi trước hay đi sau cũng chỉ một cách đi bởi vì nó quá ngắn) -> các dây theo cụm (bó dây) -> các dây đơn lẻ -> tinh chỉnh lại các dây nếu bị vướng.

Nếu bạn muốn biết mình hàn IC có nhiều chân nhỏ như QFP, TSSOP, SOIC như thế nào:

  • Bước 1: Chuẩn bị sẵn dụng cụ cần thiết như linh kiện, thiếc hàn, mỏ hàn loại đầu dẹp và loại đầu tròn nhỏ, mỡ hàn, quạt hút khói hàn, bùi nhùi đồng, nhíp, kính lúp, đồng hồ đo thông mạch v.v..
  • Bước 2: Bôi một lớp mỏng mỡ hàn vừa phải lên vùng đặt linh kiện, sau đó đặt linh kiện lên khớp với vị trí của nó trên PCB (chú ý chân số 1).
  • Bước 3: Cố định IC khỏi bị xê dịch sau khi đã căn chỉnh đặt đúng vị trí trên PCB, bằng cách dùng mỏ hàn đầu nhỏ cùng với thiếc, hàn một chân bất kỳ (có thể chạm 2,3 chân kề nó và chúng ta sẽ làm sạch ở bước 5).
  • Bước 4: Tiếp tục dùng mỏ hàn đầu nhỏ đã được “ăn” thiếc trước (chêm trước một đoạn thiếc vào đầu mỏ hàn), rê vào tất cả các chân IC (cho phép dính thiếc hàn ở giữa các chân kề nhau, và chúng ta sẽ làm sạch ở bước 5), nếu hết lượng thiếc trên mỏ hàn thì tiếp tục chêm thêm thiếc để hàn hết các chân còn lại của IC.
  • Bước 5: Đây là bước quan trọng nhất đó là làm sạch thiếc dính giữa kẻ hở của hai chân kề nhau. Nhờ vào mỏ hàn đầu dẹp cùng với mỡ hàn được bôi bổ sung (sao cho ngập hết các chân IC) bạn có thể tháo bớt thiếc hàn dư trên chân IC. Cụ thể, bạn dùng mỏ hàn đầu dẹp vuốt nhẹ từ mép trên của chân (đoạn dính với thân IC) dọc theo chân và xuống dưới mép dưới của chân (đoạn dính với PCB) theo từng cụm (khoảng 4-5 chân), thiếc hàn dư sẽ tự động bám vào đầu mỏ hàn, và bạn chỉ cần làm sạch đầu mỏ hàn bằng bùi nhùi đồng trước khi làm tiếp các cụm chân IC tiếp theo. Mỗi lần vuốt cần phải làm sạch mỏ hàn ngay, và ở mỗi cụm có thể làm 1-3 lần cho đến khi bạn nhìn vào kính lúp thấy đã sạch thiếc dư.
  • Bước 6: Bước cuối cùng, bạn dùng xăng thơm hoặc chất làm sạch chuyên dụng tương tự, làm sạch mỡ và muội đen vùng mới hàn. Sau đó, hoặc là bạn có thể dùng đồng hồ vạn năng ở chức năng đo thông mạch để kiểm tra thông mạch giữa hai chân kề nhau (chú ý kiểm tra mạch nguyên lý vì có thể hai chân kề nhau có nối với nhau). Hoặc nếu có điều kiện bạn cũng có thể soi dưới kính hiển vi để quan sát giữa các chân.

Bài biết này sẽ tiếp tục cập nhật thêm dựa trên các ý kiến phản hồi mong được chia sẽ thêm về một vấn đề cụ thể nào đó mà các bạn đề xuất, mình sẽ bổ sung tiếp ở đây, cảm ơn các bạn đã quan tâm và theo dõi đọc nhé! Chúc các bạn thành công!

Những điều thú vị về “Differential Pair”

☘️ 1. Bạn có biết rằng kỹ thuật dây đi theo cặp với tín hiệu vi sai của chúng thường được dùng rất nhiều trong truyền nhận tín hiệu. Nguyên nhân là do vì chúng đi sát với nhau nên sẽ cùng chịu cùng nhiễu như nhau trên đường truyền, và khi lấy vi sai do cùng một mức nhiễu nên chúng sẽ bị trừ đi chỉ còn tín hiệu.

☘️ 2. Trong thực tế các bạn có thể bắt gặp dạng kỹ thuật này dưới dạng cáp xoắn đôi (như sợi cáp ethernet) hoặc trên PCB thì thấy các đường mạch được layout đi song song với nhau theo một khoảng cách cố định.

☘️ 3. Bạn có thể tìm thấy các tín hiệu vi sai này ở các cổng USB (tại chân D+ và D-), ở các cổng HDMI hoặc Ethernet (tại các chân như D0+/D0-, D1+/D1-) v.v.. Và bạn sẽ bất ngờ với điều này, đó là tại các mạch tạo CLOCK và mạch ADC vẫn sử dụng kỹ thuật này để loại bỏ bớt nhiễu đó nhé!

☘️ 4. Và đây là tài liệu của Altium hướng dẫn về kỹ thuật này, nhớ chọn phiên bản Altium mà bạn đang dùng nhé!

https://www.altium.com/documentation/altium-designer/interactively-routing-differential-pairs-pcb

Tổng hợp các công cụ tính toán và mô phỏng lĩnh vực thiết kế PCB có RF (linh kiện thụ động, công cụ RF, PCB Impedance Calulator)

Bài viết này giới thiệu đến các bạn tổng hợp một số công cụ tính toán và mô phỏng trong lĩnh vực thiết kế PCB có RF thể như sau:

  1. Linh kiện thụ động (tính toán các thông số của R, L)
  2. Công cụ RF (Impedance Matching Calculators)
  3. Tính toán trở kháng trên PCB
  4. Một số dự án mạch
  5. Các công cụ liên quan đến các phép toán
  6. Tính toán độ rộng đường dây

Resistor Calculators

4-Band Colour Code – eeweb.com/tools/4-band-resistor-calculator

5-Band Colour Code – eeweb.com/tools/5-band-resistor-calculator

6-Band Colour Code – eeweb.com/tools/6-band-resistor-calculator

Standard Resistor Values – eeweb.com/tools/resistor-tables

Coil and Wire Calculators

Standard Inductor Values – http://www.eeweb.com/tools/inductor-tables

Magnetic Field Calculator – http://www.eeweb.com/tools/magnetic-field-calculator

Wire Self Inductance – http://www.eeweb.com/tools/wire-self-inductance-calculator

Parallel Wires – http://www.eeweb.com/tools/parallel-wire-inductance

Coax Cables – http://www.eeweb.com/tools/coax-inductance

Wire over Plane – http://www.eeweb.com/tools/wire-over-plane-inductance

Loop Inductance – http://www.eeweb.com/tools/loop-inductance

Rectangular Loop – https://www.eeweb.com/tools/rectangle-loop-inductance

Coil Inductance – http://www.eeweb.com/tools/coil-inductance

Broadside-Coupled Traces – http://www.eeweb.com/tools/broadside-trace-inductance

Edge-Coupled Traces – http://www.eeweb.com/tools/edge-coupled-trace-inductance

Twisted Pair – eeweb.com/tools/twisted-pair

Impedance Matching Calculators

L-Match Attenuator – eeweb.com/tools/l-match

Pi-Match Attenuator – eeweb.com/tools/pi-match

T-Match Attenuator – eeweb.com/tools/t-match

Coax Impedance – eeweb.com/tools/coax

Microstrip Crosstalk – https:/eeweb.com/tools/microstrip

Stripline Crosstalk – eeweb.com/tools/stripline

RF Unit Converter – eeweb.com/tools/rf-unit-converter

Schematic Capture & Layout

PCBweb CAD Design – pcbweb.com

Internal Trace Width – eeweb.com/tools/internal-trace-width-calculator-pcb

External Trace Width – eeweb.com/tools/external-pcb-trace-width

Trace Resistance – eeweb.com/tools/trace-resistance

Internal Trace Current – eeweb.com/tools/internal-pcb-trace-max-current

External Trace Current – eeweb.com/tools/external-pcb-trace-max-current

PCB Impedance Calulators

Microstrip – eeweb.com/tools/microstrip

Embedded Microstrip – eeweb.com/tools/embedded-microstrip-impedance

Symmetric Stripline – eeweb.com/tools/symmetric-stripline-impedance

Asymmetric Stripline – eeweb.com/tools/asymmetric-stripline-impedance

Wire Microstrip – eeweb.com/tools/wire-microstrip-impedance

Wire Stripline – eeweb.com/tools/wire-stripline-impedance

Edge-Coupled Microstrip – eeweb.com/tools/edge-coupled-microstrip-impedance

Edge-Coupled Stripline – eeweb.com/tools/edge-coupled-stripline-impedance

Broadside Coupled Stripline – eeweb.com/tools/broadside-coupled-stripline-impedance

Schematic Editors

CircuitLab – circuitlab.com

DoCircuits – docircuits.com

SchemeIt – digikey.com/schemeit

SPICE Schematics – ischematics.com

Schematic Capture Tool – schematics.com

Schematics Converter – schematics.io

Schematic Circuits – next.gr

Datasheets – datasheets.com

Math Calculators

Basic Calculator – eeweb.com/tools/basic-calculator

Scientific Calculator – eeweb.com/tools/online-scientific-calculator

Alegbra Reference Sheet – eeweb.com/tools/algebra-reference-sheet

Geometry Reference Sheet – eeweb.com/tools/geometry-reference-sheet

Trigonometry Definitions – eeweb.com/tools/trigonometry-definition-reference-sheet

Trigonometry Laws – eeweb.com/tools/trigonometry-laws-and-identities-sheet

Calculus – eeweb.com/tools/calculus-derivatives-and-limits-reference-sheet

Calculus Integrals – eeweb.com/tools/calculus-integrals-sheet

Các bạn nhập vào dòng điện, độ dầy của mặt đồng, độ dài và đối chiếu với các kết quả tính được theo trường hợp mà bạn đang sử dụng nhé (lớp ngoài hay lớp trong). Link hoặc của Digikey tại đây

Tham khảo thêm về tính cặp dây differntial:

http://www.skottanselektronik.com/impcalc_en.html

Hướng dẫn lập trình STM32 dùng STM32 CubeMX kết hợp với Visual Studio Code, GNU Make A-Z từ Configuration – Code generator, Editor, Complier, Build đến Debug qua dự án mẫu

Mục lục:

  1. Giới thiệu
  2. STM32 CubeMX
  3. Cài đặt GNU Make
  4. Lập trình HAL trên Visual Studio Code
  5. Debug sử dụng Extentions
  6. Debug sử dụng pyOCD

1- Giới thiệu

Dạo qua một vòng trên các website mình thấy có khá nhiều bài viết hướng dẫn lập trình STM32 dùng CubeMX để cấu hình chip STM32 và sinh code, sau đó dùng các IDE như là KeilC để soạn thảo và biên dịch, rất kỹ càng và chi tiết. Tuy nhiên nếu như bạn nào đang quen dùng hệ sinh thái của Visual Studio Code – VSC (đã dùng cái này lập trình cho C/C++, 8051, PIC, ESP8266, ESP32 v.v..) thông qua các Extension như là PlatformIO IDE, Espressif IDF, Code Runner, C/C++ v.v.. Hay là quá thích với các tính năng của VSC như là tính giao diện người dùng cao, tích hợp nhiều nền tảng lập trình All-in-One, lập trình cho nhiều dòng chip khác nhau mà không cần cài nhiều phần mềm v.v.. Ví dụ riêng với dòng STM32 các bạn có thể dùng VSC để lập trình trên các platform như là Arduino, Mbed và ngay cả là HAL. Với Mbed thì mình đã có loạt bài viết hướng dẫn ở đây. Còn trong bài viết này mình sẽ hướng dẫn các bạn dùng CubeMX để cấu hình và sinh code, sau đó soạn thảo chương trình trong Visual Studio Code rồi biên dịch bằng GNU Make và debug với Extentions tích hợp hoặc với pyOCD. Soạn thảo HAL code trên VSC cũng giống như trên KeilC (cái này đã có rất nhiều trên web) do vậy bài viết này chỉ hướng tới cách dùng CubeMX kết hợp với VSC để biên dịch và debug thôi các bạn nhé! Bài toán lập trình mẫu là chúng ta sẽ dùng ngắt TIMER2 để nhấp nháy LED sau mỗi 500ms, sử dụng bộ dao động nội. Vì bài viết khá là dài nên mình sẽ bỏ qua các định nghĩa và các lời giải thích chi tiết, chỉ tập trung đến các bước. Đây được coi như là một cuốn sổ tay lưu lại các bước phù hợp cho những ai xem lại sau một khoản thời gian không dùng tới.

2- STM32 CubeMX

Các bạn tải và CubeMX tại đây (nhớ là đăng ký tài khoản và link tải sẽ gửi về qua E-mail):

https://www.st.com/en/development-tools/stm32cubemx.html

Sau khi tải xong các bạn mở lên và tạo Prj với lựa chọn theo tên chip hoặc theo tên bo KIT, ở đây chúng ta lựa chọn tên chip (của mình đang dùng STM32F104RCT6) do vậy mình sẽ chọn như sau nha:

Khởi tạo xong, các bạn vào như hình để lựa chọn cấu hình nạp và debug, ở đây mình dùng Serial Wire với mạch nạp ST-Link:

Tiếp theo mình chọn chân kết nối với đèn LED là PD2, kích chuột trái tại chân PD2 chọn là GPIO_Output và đặt tên gợi nhớ là LED1_PD2 tại mục Configuration.

Tiếp theo là cấu hình bộ Timer2 với nguồn Clock nội 8MHz chia tới APB1 là 8MHz (APB1 phục vụ Timer2), ở đây mình mong muốn sau mỗi 500ms (0-499) sẽ ngắt 1 lần, và lặp lại như vậy. Tại ngắt Timer mình sẽ để lệnh đảo trạng thái LED.

Tiếp theo mình bật ngắt toàn cục cho Timer2:

Cấu hình cho Clock không có gì cần chỉnh:

Cuối cùng trong giai đoạn này là đặt tên dự án và quan trọng nhất đó là chọn Toolchain/IDE là Makefile để có thể biên dịch và Debug từ Visual Studio Code đã cài cùng với GNU Make và pyOCD. Sau đó bấm Generate Code. Thư mục chứa code được tạo ra sau này sẽ được mở lên với VSC. Nếu như chưa thấy Makefile thì có thể bạn cần cài GNU Make trước.

3- Cài đặt GNU Make

Trước tiên bạn cần cài GCC-arm-none-eabi theo đường dẫn bên dưới:

Download https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-win32.exec

Hoặc tại:

https://mynewt.apache.org/latest/get_started/native_install/cross_tools.html

Tải về, giải nén và thả vào ổ đĩa C: các bạn nhé! Đường dẫn này sau này chúng ta sẽ thả vào file Makefile trong thư mục Proj của dự án đã tạo ở trên bởi CubeMX.

Bay giờ chúng ta sẽ cài GNU-Make tại đường dẫn:

Download Make: http://gnuwin32.sourceforge.net/packages/make

Tải về và cài xong, copy đường dẫn để thiết lập biến môi trường (Enviroment Variable) như sau:

Để kiểm tra cài thành công chưa, chúng ta mở CMD và bấm lệnh make -v

4- Lập trình HAL trên Visual Studio Code

Mở VSC lên và trỏ vào thư mục của dự án, mở Makefile lên và tạo thêm dòng lệnh này (đây là khai báo đường dẫn đã cài GCC-arm-none-eabi ở trên.

Sau đó thử biên dịch bằng cách mở Terminal (Terminal->New Terminal) gõ lệnh make

Chú ý là trước khi bấm lệnh make mà thấy có báo lỗi ở main.c thì cứ kệ nó nhé, cứ biên dịch xem thử, làm xong lệnh make sẽ tự biến mất. Nếu mà có báo lỗi là thiếu file stddef.h thì thêm đường dẫn này (chú ý đổi lại dấu thư mục \ thành /) vào file c-pp_properties.json. Để mở file json này các bạn có thể bấm ctr+shift+p (thẻ show and run commands).

Và thêm ở vị trí này như hình:

Hoặc khi bấm make mà thấy báo là Nothing to be done for ‘all’ nghĩa là không có thay đổi nào cần để build lại –> không cần gõ make để build lại đâu.

Các bạn tìm đến file stm32f1xx_it.c có hàm thực thi ngắt Timer2, đó là hàm TIM2_IRQHandler.

Ctr và kích chuột trái tại dòng HAL_TIM_IRQHandler(&htim2); sẽ nhảy đến file chứa hàm này:

Các bạn tìm đến dòng HAL_TIM_PeriodElapsedCallback(htim);

Ctrl + chuột trái để đi đến nội dung cần copy:

Sau đó dán vào khu vực tiền xử lý trên hàm main() trong main.c và có thêm đoạn chương trình để đảo trạng thái LED khi có sự kiến ngắt timer2.

Và cuối cùng là các bạn tiến hành build lại chương trình với lệnh make như mô tả ở đoạn trên.

File *.bin sẽ có tại thư mục như sau, và đây là file mà các bạn có thể lấy để nạp vào chip với mạch nạp ST-Link:

5- Debug sử dụng Extension

Ưu điểm của Debug sử dụng Extension là nhanh chóng, dễ dàng.

Bạn có thể sử dụng Extension sau:

Bạn cần chỉnh lại một chút trong file launch.json:

Thẻ debug sẽ xuất hiện như thế này sau khi đã chỉnh lại cấu hình:

Hoặc bạn cũng có thể sử dụng Extension sau:

Sau khi cài xong sẽ xuất hiện biểu tượng của nó ở thẻ bên trái của VSC như hình:

Các bạn kích vào và sẽ thấy ban đầu khi chưa có cài đặt gì thì sẽ xuất hiện mặc định như sau, bạn cần cài đặt tại thẻ “Install Build tools”.

Cài xong sẽ xuất hiện các tools như là Build, Flash, Debug:

Bạn có thể debug bằng cách bấm vào thẻ Debug STM32 ở trên, và sau đó tiến hành các thao tác debug như bình thường.

6- Debug sử dụng pyOCD

Tương tự như debug bằng Extension, chúng ta cũng có thể dùng một cách debug khác các với pyOCD, với cách này các bạn cần cài python, với win10 thì có thể cài trực tiếp trong app cũng được nhé các bạn.

Tiếp đến các bạn cần tải file sau và lưu dưới định dạng *.py tại Desktop. Đường dẫn để tải về là https://bootstrap.pypa.io/pip/2.7/get-pip.py

Sau đó các bạn mở CMD lên, di chuyển thư mục hiện hành về Desktop và chạy lệnh như bên dưới:

Các lệnh đó là: python get-pip.py và python -m pip install -U pip

Có thể kiểm tra version sau khi cài xong bằng lệnh: pip –version

Tiếp theo, bạn cần cài Git để có thể tải và cài pyOCD. Cài Git các bạn cần tải về máy bản cài theo đường dẫn: https://git-scm.com/download/win

Để kiểm tra phiên bản Git các bạn có thể dùng lệnh git –version

Bây giờ chúng ta có thể cài đặt pyOCD bằng lệnh sau:

python -mpip install –pre -U git+https://github.com/pyocd/pyOCD.git@develop

Sau đó di chuyển thư mục hiện hành về pyOCD bằng lệnh: cd pyOCD

Tiến hành cài đặt biến môi trường bằng lệnh python -m venv venv

Chúng ta có thể kiểm tra pyOCD bằng lệnh pyOCD như hình:

Thiết lập biến môi trường theo đường dẫn sau: C:\Users\ACER\pyOCD\venv\Scripts (tên máy của mình là ACER). Sau đó các bạn có thể kiểm tra pyocd ngay trong VSC với lệnh như sau:

Vậy là bây giờ chúng ta có thể debug được proj tương tự như với Extention.

Chúc các bạn thành công và trải nghiệm thích thú lập trình HAL cho STM32 trên Visual Studio Code với CubeMX, GNU Make, pyOCD nhé! Dự án mẫu được sử dụng các bạn có thể tải về ở đây.

Hướng dẫn lập trình C trên Visual Studio Code

Bài viết này hướng dẫn các bước cài đặt và sử dụng Visual Studio Code cho các bạn đang muốn thực hành lập trình C. Mình khuyến khích các bạn lựa chọn Visual Studio Code để lập trình C vì công cụ này hoàn toàn miễn phí, giao diện xuất sắc và tích hợp hầu hết các trình biên dịch cho bạn mà không cần phải cài nhiều phần mềm. Học C trên Visual Studio Code, các bạn có thể tiếp tục với C++, lập trình cho vi điều khiển 8051/PIC/AVR/STM32/ESP32 v.v.. ngay trong công cụ này. Quá tiện lợi phải không nào, việc của các bạn chỉ cần chọn các Extensions (bộ công cụ mở rộng đi kèm) của phần mềm phù hợp cho nhu cầu lập trình của bạn. Sau đây là các bước để có thể lập trình C trên Visual Studio Code nhé! Bạn nào quan tâm đến lập trình STM32 trên phần mềm này thì tham khảo tại đây nhé!

Bước 1: Cài đặt VSC tại: https://code.visualstudio.com/

Bước 2: Cài 02 Extension sau để lập trình C/C++ trong VSC là C/C++ và Code Runner

Nếu mà các bạn chưa biết cài Extension như thế nào thì các bạn có thể tìm đến biểu tượng của nó rồi theo từ khóa để chọn và cài đặt như hình bên dưới nha:

Bước 3: Cài trình biên dịch MinGW

Tải về theo link trên và cài đến đoạn này thì các bạn làm theo hình nhé!

Đầu tiên là lựa chọn các trình biên dịch, nên chọn hết cho nhu cầu sau này lập trình C++ nữa các bạn nha.

Tiếp theo là cài đặt như hình:

Đợi cho nó cài xong thì các bạn sang bước 4 nhé.

Bước 4: Nếu như trước đây có Turbo C một phiên bản nổi tiếng của Borland C chạy tốt trên môi trường DOS. Việc thiết lập môi trường để trình biên dịch có thể chạy tốt trong Windows là điều cần thiết. Các bạn có thể làm như sau nhé:

Các bạn lưu ý là đường dẫn C:\MinGW\bin là nơi chưa công cụ biên dịch của chúng ta là gcc.exe, và chỉ có sau khi cài MinGW.

Bước 5: Tạo mới một thư mục của project, các bạn có thể tạo sẵn và trỏ tới

Bước 6: Cấu hình “C/C++ extension”. Bước này lựa chọn trình biên dịch C cho Visual Studio Code.

Để cấu hình cho “C/C++ extension” các bạn vào View chọn Command Palette (hoặc bấm tổ hợp phím Ctrl+Shift+P và gõ từ khóa C/C++.

Sau đó chọn 02 thông số chính như hình bên dưới cho lập trình C (với C++ thì sẽ khác nha các bạn). Lưu ý là các bạn cũng có thể chọn cho C++ ngay từ đầu để có thể lập trình cho C cũng được, tuy nhiên để các bạn đi lên từ căn bản nên mình chỉ chọn trình biên dịch cho C như bên dưới:

Bước 7: Để có thể nhập dữ liệu với câu lệnh scanf (trong C) hay cin<< (trong C++ cho sau này) các bạn bật Terminal lên như các hình bên dưới. Đầu tiên là vào cài đặt (bấm Ctrl +), sau đó là gõ từ khóa terminal và tìm đến hộp thoại Code-runner: Run In Terminal và tích vào.

Bước 8: Tạo mới một chương trình C với phần mở rộng là *.c (tương tự cho sau này với C++ là *.cpp)

Bước 9: Biên dịch xem có lỗi không, bấm Ctr Shift B và chọn như hình:

Nếu không có lỗi thì sẽ có thông báo “Build finished successfully.”

Bước cuối: Chạy thử chương trình đầu tiên, bấm Ctrl Alt N (run code). Chương trình hiển thị ra hai chuỗi và sau đó hiển thị ra số vừa được nhập từ bạn phím (ở đây mình nhập số 12).

Hoan hô! Vậy là các bạn đã biết cách cài đặt và lập trình C trên Visual Studio Code rồi phải không nào! Chúc các bạn học tốt nhé! Nếu bạn cần đến các tài liệu liên quan đến lập trình C/C++, giải thuật thì có thể tải miễn phí tại đây nhé! (các bạn vào mục số 3 nhé!)

Tổng hợp các mạch điện lý thú

Danh mục các mạch điện lý thú được chia sẽ (cập nhật ngày 05/04/2023, sẽ còn tiếp tục)

  • 1. Mạch LED Matrix Full color P5 64×32 RGB với ESP8266 (kèm mạch và code)
  • 2. Mạch đo trọng lượng bằng Load Cell với HX711 và Arduino (kèm mạch và code)

1. Mạch LED Matrix Full color P5 64×32 RGB với ESP8266 (kèm mạch và code)

Cho bạn nào muốn làm bảng quảng cáo hay đơn giản chỉ làm cho vui trang trí trên bàn nhé! Có hướng dẫn lắp ráp, đấu mạch, và code.

https://arduino-projects-free.blogspot.com/2019/04/64×32-rgb-led-matrix-clock-with-esp8266.html

2. Mạch đo trọng lượng bằng Load Cell với HX711 và Arduino (kèm mạch và code)

Cảm biến Load Cell thường hay có trong các cân điện tử (biến đổi ngoại lực thành tín hiệu điện) đang được ứng dụng rộng rãi dựa trên đo trọng lực như cân điện tử, bình GAS thông minh gửi SMS khi sắp hết, cảm biến mức nhiên liệu v.v.. Vì tín hiệu điện lấy ra từ Load Cell cực bé (cỡ micro volts) nên một IC khuếch đại điện áp và chuyển thành tín hiệu số gửi đến vi điều khiển được sử dụng đến. Đó là IC HX711 với 24 bit chuyển đổi tín hiệu tương tự (điện áp) sang tín hiệu số. Đường link bên dưới hướng dẫn cho các bạn cách sử dụng Load Cell và HX711 với Arduino.

Hai điểm khác nhau cơ bản trong ngắt của vi điều khiển PIC và 8051

Hai điểm khác nhau cơ bản trong ngắt của PIC và 8051

1. PIC chỉ có một mức ngắt, trong khi 8051 có hai mức ngắt (ngắt trong ngắt). Nghĩa là trong vi điều khiển PIC16F887, khi một ngắt được phục vụ, bit GIE tự động xóa do vậy sẽ không có cơ hội cho ngắt khác xảy ra trong lúc đang thực thi chương trình của ngắt hiện tại (khác với họ 8051 thì có ngắt xảy ra trong ngắt nếu ngắt mới có mức ưu tiên cao hơn, nếu hai ngắt cùng xảy ra đồng thời thì chuỗi vòng cố định sẽ xác định ngắt nào được phục vụ trước theo thứ tự: ngắt ngoài 0, timer 0, ngắt ngoài 1, timer 1, uart, timer 2).



2. PIC chỉ có một vector ngắt, trong khi 8051 có 7 vector ngắt. Điều này có nghĩa là, trong PIC có nhiều nguồn ngắt nhưng chỉ có mỗi 1 vector ngắt tại địa chỉ 0004H, tức là cho dù ngắt nào xảy ra đi nữa, PC cũng chỉ sẽ nhảy đến địa chỉ 0004H để thực hiện câu lệnh tiếp theo. Do vậy để thực hiện đúng chương trình phục vụ ngắt của ngắt đang gọi thì cần phải có vòng quét (polling) kiểm tra các cờ trạng thái ngắt (interrupt flag), cờ nào đang bằng 1 thì nghĩa là ngắt đó đang xảy ra, và nhớ là cờ này phải xóa bằng phần mềm trước khi một yêu cầu ngắt tiếp theo được gọi.

Mẹo quản lý thư mục tài liệu và video trong các khóa học tại Elec2PCB.com

  1. Bạn có thể vào thư mục Shared with me theo đường link này trong tài khoản Gmail mà bạn đã đăng ký học nhé! Nếu máy tính đang dùng nhiều tài khoản Gmail thì phải xác định xem có đúng tài khoản đang dùng là tài khoản đăng ký không nha!

Ví dụ như hình là các thư mục được chia sẽ của khoá học Full PCB Design bản PCB4.

Hướng dẫn học: Bạn học phần cơ bản trước sau đó mới lên phần nâng cao và chống nhiễu. Khi xem bài học qua video bạn cũng có thể kết hợp xem cùng với slide bài học (mình đã chuyển thành pdf, bạn chỉ cần bấm F11 là ra dạng slide đó nhé). Các slide này được phân theo từng tuần học và nằm ở trong thư mục tài liệu đọc, các bạn tải về và giải nén ra nhé! Nếu có tài liệu nào đó bạn không mở hoặc xem được có thể là do đường dẫn thư mục dài quá, bạn copy ra ngoài desktop để xem nha!

  1. Bạn có thể gắn sao “Starred” và thêm màu để phân loại từng khóa học (nếu bạn mua nhiều khóa học), và khi đó thay vì vào mục Shared with me, bạn vào mục Starred nha!
  1. Gần như 95% số video và 100% tài liệu các bạn có thể tải về được, tuy nhiên khi bạn tải về máy tính cả thư mục trên Drive để học thì 5% video còn lại sẽ không tải được và hệ thống cũng không báo cho bạn biết là còn video chưa tải về. Do đó bạn hãy kiểm soát số video tải về và so sánh với số video có ghi ở trong mỗi thư mục nhé! Ví dụ thư mục ghi có 20 video mà bạn tải về có 18 thì có nghĩa là 2 video còn lại bạn cần xem online trên web nha!
  1. Bạn có thể xem thêm bài viết “Hướng dẫn truy cập và sử dụng” ở đây nhé!
  1. Trong quá trình học nếu bạn cảm thấy vướng mắc ở chỗ nào bạn có hỏi mình nha!

6. Tham gia và trao đổi các vấn đề cụ thể của bài học qua nền tảng Google Classroom (link Google Classroom chỉ gửi qua email các bạn học online với lớp qua Meet đã đăng ký)

Một lần nữa xin cảm ơn các bạn đã tin tưởng và theo học các khóa học tại Elec2PCB.com nhé!

Lập trình IoT cho ESP32 sử dụng ESP-IDF, Node-RED, MQTT đi từ cơ bản nhất

Đăng ký học hoặc mua video tại đây: https://elec2pcb.com/dang-ky/

Chuẩn bị trước khi tham gia học

1.ESP-IDF Windows Installer (tải tại đây)

2.Soạn thảo code: Phần mềm Visual Studio Code (tải tại đây)

3.Soạn thảo code: Sublime Text (tải tại đây)

4.Driver cho KIT chứa chip CP2102 (tải tại đây)

5.Driver cho KIT chứa chip CH340 (tải tại đây)

6. Kênh video cập nhật bài học (tải tại đây)

7. Slide bài học phần 1 (tải tại đây)

8. Tra cứu thư viện (tải tại đây)

9. Technical Reference Manual (tải tại đây)

Nội dung bài học số 1 này đã được ghi lại thành video các bạn có thể xem ở đây nhé!

Trích dẫn một số nội dung bài học (Sẽ còn tiếp tục cập nhật thêm)

PHẦN 1 – Lập trình IoT cơ bản với ESP32 dùng ESP-IDF, Node-RED, MQTT

Bài học số 1 – ESP-IDF: Hướng dẫn cài ESP-IDF và chạy dự án đầu tiên bài Blink LED (Trích dẫn https://youtu.be/BCVQtz5f8eE)

Có thể trích xuất nội dung bài học này gồm 4 phần như sau:

1.Giới thiệu ESP32 DEVKIT V1 – DOIT

2.Hướng dẫn cài đặt ESP-IDF

3.Tạo một dự án đầu tiên với ESP-IDF

4.Một số lệnh thường dùng: Menuconfig, Build, Flash, fullclean

Bài học số 2 – ESP-IDF: Tìm hiểu về Timer Group trên ESP32 và hướng dẫn GIT trong Visual Studio Code (Trích dẫn https://youtu.be/3PTQybZcY4k)

Bài học số 3 – ESP-IDF: Sử dụng Free RTOS nhấp nháy LED và một số ví dụ Multi-Task (Trích dẫn https://youtu.be/nO6XoJ6N_uo)

Bài học số 4 – ESP-IDF: Kết nối WiFi – WiFi Station + Lấy thông tin thời tiết từ Internet (Trích dẫn https://youtu.be/dga3AKIVgRo)

Bài học số 5 – ESP-IDF: HTTP GET – ESP32 gửi data đọc được từ cảm biến lên ThingSpeak để vẽ biểu đồ theo thời gian thực (Trích dẫn https://youtu.be/7VE_8f10AjE)

Bài học số 6 – ESP-IDF: CLOUD MQTT – MQTT Broker

Bài học số 7 – ESP-IDF: Interrupt + Button + ADC (analog Sensor) + MQTT

Bài học số 8 – ESP-IDF: PWM + Touch Pin + WiFi AP Mode + Webserver

Bài học số 9 – ESP-IDF:  Internal Temperature Sensor (ESP32S2/ESP32C2) + Uart Events

Bài học số 10 – ESP-IDF: BLE + Lưu trữ vào Flash

Bài học số 11 – ESP-IDF: OTA Remote Firmware Update

Bài học số 12 – ESP-IDF: ESP32 gửi và đọc dữ liệu với Firebase Cloud (Trích dẫn https://youtu.be/7OK1JC4JPCI)

Bài học số 13 – Node-RED: ESP32 điều khiển và giám sát thiết bị dùng Node-RED trên PC Server qua MQTT (Trích dẫn https://youtu.be/uSzGRbUNvAw)

Bài học số 14 – Node-RED: Node-RED trên Raspberry Server, ESP32 điều khiển và giám sát thiết bị qua MQTT

Bài học số 15 – Node-RED: Kết nối Node-RED với Google Firebase, tạo trang Login và đưa locallhost ra internet

PHẦN 2 – Lập trình IoT nâng cao với MySQL Database – PHP

Bài học số 01 – MySQL-PHP: Hướng dẫn cài đặt và tạo Database với phpMyAdmin, cài đặt localhost với XAMPP

Bài học số 02 – MySQL-PHP: Cơ bản về lập trình PHP và SQL Query

Bài học số 03 – MySQL-PHP: Nhập dữ liệu vào MySQL và truy xuất từ ESP32

Bài học số 04 – MySQL-PHP: Nhập dữ liệu vào MySQL và truy xuất từ trang web PHP

1. Giới thiệu ESP32 DEVKIT V1 – DOIT

Bên trong KIT ESP32 DEV KIT V1 – DOIT là một module ESP32 WROOM (Chứa ESP32, Flash, Anten, và linh kiện phụ trợ)

ESP32 I/O Pad Power Sources (QFN 6*6, Top View)

Sơ đồ chân ra của ESP32 DEVKIT V1 – DOIT như sau:

2. Hướng dẫn cài đặt ESP-IDF

3. Tạo một dự án mẫu đầu tiên với ESP-IDF

Các bạn xem video hướng dẫn ở đây nhé!

4. Một số lệnh thường dùng

Một số bài học tiếp theo mà các bạn có thể quan tâm:





Đừng quên theo dõi kênh video để có bài học mới các bạn nha!

https://www.youtube.com/channel/UC7b10JGIt5MlQKRLBMHR3eA/playlists