Cách đo tần số cao và chu kỳ nhiệm vụ, đồng thời, sử dụng vi điều khiển.: 4 bước
Cách đo tần số cao và chu kỳ nhiệm vụ, đồng thời, sử dụng vi điều khiển.: 4 bước

Video: Cách đo tần số cao và chu kỳ nhiệm vụ, đồng thời, sử dụng vi điều khiển.: 4 bước

Video: Cách đo tần số cao và chu kỳ nhiệm vụ, đồng thời, sử dụng vi điều khiển.: 4 bước
Video: Vi xử lý và vi điều khiển - Bài 3 | Khoa Nguyễn 2025, Tháng Giêng
Anonim
Cách Đo Tần số Cao và Chu kỳ Nhiệm vụ, Đồng thời, Sử dụng Bộ Vi điều khiển
Cách Đo Tần số Cao và Chu kỳ Nhiệm vụ, Đồng thời, Sử dụng Bộ Vi điều khiển
Cách Đo Tần số Cao và Chu kỳ Nhiệm vụ, Đồng thời, Sử dụng Bộ Vi điều khiển
Cách Đo Tần số Cao và Chu kỳ Nhiệm vụ, Đồng thời, Sử dụng Bộ Vi điều khiển
Cách Đo Tần số Cao và Chu kỳ Nhiệm vụ, Đồng thời, Sử dụng Bộ Vi điều khiển
Cách Đo Tần số Cao và Chu kỳ Nhiệm vụ, Đồng thời, Sử dụng Bộ Vi điều khiển

Tôi biết bạn nghĩ gì: "Hả? Có rất nhiều Tài liệu hướng dẫn về cách sử dụng vi điều khiển để đo tần số tín hiệu. Ngáp." Nhưng chờ đã, có một điểm mới trong phương pháp này: tôi mô tả một phương pháp đo tần số cao hơn nhiều so với mức mà một bộ vi điều khiển (MCU) có thể chịu được và chu kỳ nhiệm vụ của tín hiệu - tất cả cùng một lúc!

Dải tần của thiết bị trải dài từ ~ 43 Hz đến ~ 450 kHz, trong khi chu kỳ nhiệm vụ dao động từ 1% đến 99%.

Hãy để tôi giải thích phần "có thể chịu được": MCU đo chu kỳ của tín hiệu sóng vuông, T, bằng cách theo dõi thời gian giữa hai sự kiện chuyển tiếp tiếp theo. Ví dụ, điện áp thấp đến cao nhảy trên một trong các chân I / O của nó. Nó thực hiện điều đó bằng cách đếm số xung của đồng hồ bên trong của chính nó. Nói một cách nôm na, giới hạn trên cho các tần số đo được phải tuân theo định lý lấy mẫu Nyqvist-Shannon; tức là, nó sẽ gần bằng một nửa tần số xung nhịp MCU. Trong thực tế, giới hạn này thấp hơn nhiều, vì MCU phải thực thi mã để xử lý ngắt, lưu biến, thực hiện các phép toán số học, hiển thị kết quả, v.v. Trong các thử nghiệm của tôi với MCU 48 MHz, số chu kỳ đồng hồ tối thiểu giữa các chuyển đổi có thể đo lường là khoảng 106. Do đó, giới hạn trên của dải tần có thể đo được trong trường hợp này sẽ là 48, 000/212/2 = 226,4 kHz.

Trong khi MCU đo chu kỳ của tín hiệu, nó cũng có thể xác định độ rộng xung của nó, P: thời gian điện áp tín hiệu duy trì ở mức cao. Nói cách khác, thời gian giữa quá trình chuyển đổi từ thấp đến cao và từ cao xuống thấp. Chu kỳ nhiệm vụ của tín hiệu sau đó được xác định theo tỷ lệ phần trăm sau:

Nhiệm vụ = 100% * P / T

Cũng giống như trong trường hợp tần số, có một giới hạn thực tế về độ rộng xung. Sử dụng ví dụ trên, 106 chu kỳ đồng hồ sẽ giới hạn độ rộng xung không dưới 2,21 micro giây. Hoặc, không ít hơn 50% ở 226,4 kHz.

Một trong những cách để tăng giới hạn tần số trên của tín hiệu sóng vuông là ứng dụng bộ chia kỹ thuật số sử dụng flip-flops. Chia tần số đầu vào cho n sẽ mở rộng phạm vi trên có thể đo được n lần. Đây là một tin tuyệt vời, bộ chia kỹ thuật số có một lỗ hổng cơ bản: tín hiệu bị chia làm mất thông tin về độ rộng xung (và chu kỳ nhiệm vụ)! Do cách thức hoạt động của các bộ chia, sản lượng của chúng luôn có chu kỳ làm việc 50%. Bummer…

Tuy nhiên, trong các trang tiếp theo, tôi sẽ chỉ ra cách phân chia tần số bằng kỹ thuật số và bảo toàn độ rộng xung ban đầu cho phép tôi đo tín hiệu vượt quá giới hạn áp đặt bằng cách đếm trực tiếp.

Bước 1: Bộ phận tần số kỹ thuật số

Bộ phận tần số kỹ thuật số
Bộ phận tần số kỹ thuật số
Bộ phận tần số kỹ thuật số
Bộ phận tần số kỹ thuật số
Bộ phận tần số kỹ thuật số
Bộ phận tần số kỹ thuật số

Bộ chia tần số kỹ thuật số truyền thống sử dụng flip-flops; hướng dẫn này giải thích một cách độc đáo các nguyên tắc cách tạo các dải phân cách bằng cách sử dụng dép xỏ ngón JK tiêu chuẩn. Điều này giải quyết vấn đề tần số đầu vào quá cao đối với MCU, nhưng có một nhược điểm lớn: tín hiệu bị chia có 50% chu kỳ nhiệm vụ bất kể nhiệm vụ của tín hiệu đầu vào! Để biết lý do tại sao lại như vậy, hãy nhìn vào hai số liệu đầu tiên. Tín hiệu ban đầu với chu kỳ T và độ rộng xung P được đưa vào chân đồng hồ của một flip-flop JK trong khi các chân J và K của nó luôn được giữ ở mức cao (hình đầu tiên). Logic 3.3V được giả định trong suốt. Giả sử rằng cú lật mặt được kích hoạt bởi cạnh dương (tức là tăng) của đồng hồ. Trong các điều kiện này, các thay đổi trạng thái của chân đầu ra ("lật" và "tắt" riêng lẻ) xảy ra mỗi khi chân đồng hồ đi từ mức thấp đến mức cao. Sự chuyển đổi từ cao xuống thấp của đồng hồ (tức là cạnh âm) hoàn toàn bị bỏ qua. Xem hình thứ hai. Chân đầu ra, Q, phát ra tín hiệu có chu kỳ dài gấp đôi chu kỳ ban đầu, tức là tần số của nó giảm đi một nửa. Độ rộng xung của đầu ra luôn bằng T. Do đó, độ rộng xung ban đầu, P, bị mất.

Thêm một flip-flop JK khác trong một cấu hình được hiển thị trong hình thứ ba sẽ chia tần số ban đầu cho 4. Thêm nhiều flip-flop khác theo cùng một cách tuần tự sẽ chia tần số cho các lũy thừa tiếp theo là 2: 8, 16, 32, v.v.

Vấn đề: làm thế nào để phân chia tần số của một sóng vuông mà vẫn bảo toàn độ rộng xung của nó?

Ý tưởng là thêm đúng một cạnh âm được kích hoạt JK flip-flop vào hỗn hợp. Hãy gọi nó là "Neg FF"; xem hình thứ tư. Ở đây, "đúng" có nghĩa là các chân J và K của flip-flop mới tương ứng được gắn với các chân đầu ra Q và Qbar của bộ chia x 4 ("Pos FF") được minh họa trong hình trước. (Ở đây, "bar" là thanh ngang trên biểu tượng Q biểu thị sự phủ định logic.) Để xem điều này đạt được gì, hãy xem bảng chức năng của "Neg FF" trong hình thứ năm: Các chân đầu ra của Neg, Q và Qbar, phản ánh trạng thái của các chân đầu vào của nó, J và K, tương ứng. Có nghĩa là chúng phản ánh trạng thái của Pos 'Q và Qbar. Tuy nhiên, hành động lật ngược của người da đen phải đợi cạnh âm của tín hiệu ban đầu, tín hiệu này đến tại thời điểm P sau cạnh dương. Aha!

Các dạng sóng kết quả được minh họa trong hình thứ sáu. "Pos Q" xuất tín hiệu ở tần số 1/4, "Pos Qbar" là nó nghịch đảo, "Neg Q" theo sau "Pos Q" được dịch chuyển theo độ rộng xung P và "Neg Qbar" là nghịch đảo của nó. Bạn có thể xác minh rằng AND logic của "Pos Qbar" và "Neg Q" tạo ra một chuỗi xung được đặc trưng bởi độ rộng xung gốc P và 1/4 tần số. Chơi lô tô!

Lúc đầu, tôi sử dụng chính xác tín hiệu đầu ra này để cấp MCU. Tuy nhiên, nó hóa ra có vấn đề đối với độ rộng xung rất ngắn vì giới hạn 106 chu kỳ của MCU được đề cập trong Phần giới thiệu. Tôi đã giải quyết vấn đề nhỏ này bằng cách chọn một đầu ra khác: "Pos Qbar" VÀ "Neg Qbar" để thay thế. Một cái nhìn vào các dạng sóng sẽ thuyết phục bạn rằng độ rộng xung của dạng sóng cụ thể này, P ', thay đổi giữa T và 2T thay vì phạm vi (0, T) cho P. Có thể dễ dàng khôi phục P từ P' bằng cách:

P = 2T - P '

Bước 2: Phần cứng được đề xuất

Phần cứng được đề xuất
Phần cứng được đề xuất
Phần cứng được đề xuất
Phần cứng được đề xuất
Phần cứng được đề xuất
Phần cứng được đề xuất

Tôi thực sự thích một người mới tương đối với những người có sở thích điện tử: Atmel SAM D21 MCU dựa trên bộ xử lý ARM Cortex M0 + 32-bit hoạt động ở tốc độ xung nhịp 48 MHz, cao hơn nhiều so với Atmels cũ hơn. Đối với dự án này tôi đã mua:

  • Bảng mạch MCU của ItsyBitsy M0 Express từ Adafruit
  • Tôi tình cờ có một pin LiPo có thể sạc lại từ Adafruit
  • Màn hình OLED đơn sắc 128x32 SPI (bạn đoán nó: Adafruit)
  • Kép flip-flop JK kích hoạt cạnh tích cực SN74HC109 từ Texas Instruments
  • Kép lật JK kích hoạt cạnh âm kép SN74HC112 từ Texas Instruments
  • Bộ tứ AND cổng CD74AC08E từ Texas Instruments
  • Cổng bốn hoặc cổng CD74AC32E từ Texas Instruments

Bước 3: Mạch

Mạch
Mạch
Mạch
Mạch

Hình đầu tiên cho thấy một sơ đồ đơn giản của đồng hồ tần số / công suất. Logic 3.3 V CMOS được giả định xuyên suốt. Do đó, biên độ của sóng vuông đầu vào phải nằm trong khoảng V tương ứngIH mức (tức là, 2 V) và 3,3 V. Nếu không, bạn cần phải tăng hoặc giảm tỷ lệ cho phù hợp. Trong hầu hết các trường hợp, một bộ chia điện áp đơn giản là đủ. Nếu bạn muốn thiết kế phiên bản đồng hồ của mình ở một mức logic khác, thì bạn phải sử dụng bộ điều khiển vi mô (MCU) khác, pin và màn hình hoạt động ở mức mong muốn. Các cổng logic và flip-flops được sử dụng trong dự án này hoạt động với các mức logic ở bất kỳ đâu trong khoảng từ 2 V đến 6 V và sẽ ổn trong hầu hết các trường hợp.

Như được minh họa, ItsyBitsy MCU sử dụng chân 9-13 để giao tiếp với màn hình thông qua giao thức SPI phần mềm. Chân 3V cung cấp điện cho toàn bộ mạch. Chân đầu vào kỹ thuật số 3 nhận tín hiệu đã phân tích, trong khi chân 2 và 4 điều khiển nguồn tín hiệu: tín hiệu trực tiếp đến qua cổng AND3 (tần số đầu vào thấp) hoặc tín hiệu chia cho 4 qua cổng AND4 (tần số đầu vào cao) như được mô tả trong Bước 2 Mã, được thảo luận trong bước tiếp theo, tự động phát hiện dải tần số đến và chuyển đổi nguồn tín hiệu một cách thích hợp.

Sơ đồ không cho thấy độ phức tạp thực sự của các kết nối chip kỹ thuật số. Hình ảnh thứ hai cho thấy dự án sẽ trông như thế nào trên breadboard. Tín hiệu đầu vào đi qua một dây màu đỏ đến chân 2CLK của flip-flop cạnh dương kép. THẬN TRỌNG: Thông thường, tất cả các chân J và K của flip-flop này phải được giữ cao, nhưng SN74HC109 đặc biệt có chân Kbar - chân K ngược - thay vào đó. Do đó, chốt này phải được nối đất! Flip-flop cạnh âm đầu tiên trong SN74HC112 có chân 1K và 1J được kết nối với các chân 1Q và 1Qbar của SN74HC109. Flip-flop thứ hai trong SN74HC112 không được sử dụng và các chân đầu vào của nó (2K, 2J, 2CLRbar) được nối đất. Tất cả các chân phụ khác Thanh PREbar (đặt trước) và CLRbar (rõ ràng) trong tất cả các flip-flop phải được kết nối với mức cao logic. Đồng hồ không sử dụng và chân đầu ra không được kết nối. Tương tự, các chân đầu vào không sử dụng trong tất cả các cổng được nối đất, trong khi các chân đầu ra không sử dụng không được kết nối. Như tôi đã thảo luận trong cuốn "Sát thủ vô hình của chiếc chuông điện thoại" có thể giảng dạy, việc nối đất các chân đầu vào không sử dụng của chip logic giúp loại bỏ các dao động ngẫu nhiên và tiết kiệm pin.

Bước 4: Mã và đo tần số thấp

Đương nhiên, tất cả các hành động xảy ra trong mã được liên kết bên dưới. Khi đầu vào đến trên chân 3 chuyển từ kỹ thuật số thấp lên cao, MCU bắt đầu đếm các xung của xung nhịp 48 MHz bên trong của nó. Nó ghi lại thời điểm chuyển đổi từ cao xuống thấp và tiếp tục đếm cho đến khi chuyển từ thấp sang cao tiếp theo, khi nó khởi động lại toàn bộ quá trình một lần nữa. Số đếm đầu tiên đại diện cho độ rộng xung, trong khi toàn bộ số đếm đại diện cho chu kỳ của tín hiệu. Và đó là toàn bộ bí mật.

CPU ghi nhận các chuyển đổi này thông qua các ngắt phần cứng. SAMD21 có một số đồng hồ; mã của tôi sử dụng TC3 một. Ban đầu, tôi đã bắt đầu bằng cách đọc bảng dữ liệu của M0 vì rất nhiều nỗ lực trong việc mã hóa trình xử lý ngắt, nhưng ngay sau đó tôi đã phát hiện ra một đoạn mã liên quan rất nhiều trong các bài đăng trên Diễn đàn Arduino của những người dùng electro_95, MartinL và Rucus có đóng góp là thừa nhận hợp lệ. Tôi đã kết hợp và sửa đổi mã kết hợp của chúng thành của tôi; tiết kiệm cho tôi rất nhiều thời gian!

Như tôi đã đề cập trước đây, độ phân giải tín hiệu bị giới hạn bởi ~ 106 chu kỳ CPU để thực thi mã giữa các ngắt. Phân chia kỹ thuật số với bảo toàn độ rộng xung chăm sóc các tần số cao. Mặt khác, tần số thấp đặt ra một thách thức khác: vì bộ đếm đồng hồ TC3 dài 16 bit, nó bị tràn sau khi vượt qua giới hạn số đếm 65, 536. Người ta có thể xử lý tình huống này bằng cách thêm một ngắt tràn, nhưng đã chọn một giải pháp khác: TC3 có thể sử dụng xung nhịp CPU được định tỷ lệ trước (tức là phân chia theo phần mềm) thay vì 48 MHz của phần cứng. Do đó, nếu chu kỳ của tín hiệu đạt đến giới hạn tràn, mã có thể hướng dẫn TC3 sử dụng số đếm 24 MHz cho khoảng thời gian tiếp theo và, thì đấy, bộ đếm giảm xuống dưới 32, 768 số đếm. Đối với các tần số thậm chí thấp hơn, TC3 có thể được hướng dẫn đếm các xung 12 MHz, v.v. Bộ đếm trước thích hợp được xác định tự động dựa trên tần số của tín hiệu, với độ trễ, để giữ bộ đếm TC3 trong giới hạn tràn. Kết quả là, dải tần cuối thấp hơn của thiết bị là khoảng 43 Hz.

Bạn có thể chia sẻ mã và sử dụng nó trong dự án của mình, nhưng vui lòng đề cập đến nguồn của nó khi xuất bản kết quả.

Liên kết với mã.