Mục lục:

Máy hiện sóng theo vết kép: 11 bước (có hình ảnh)
Máy hiện sóng theo vết kép: 11 bước (có hình ảnh)

Video: Máy hiện sóng theo vết kép: 11 bước (có hình ảnh)

Video: Máy hiện sóng theo vết kép: 11 bước (có hình ảnh)
Video: Quá trình xăm mình có đáng sợ không? 2024, Tháng bảy
Anonim
Máy hiện sóng theo vết kép
Máy hiện sóng theo vết kép

Khi tôi xây dựng máy hiện sóng mini trước đây của mình, tôi muốn xem tôi có thể làm cho bộ vi điều khiển ARM nhỏ nhất của mình là STM32F030 (F030) hoạt động tốt như thế nào, và nó đã làm rất tốt.

Trong một trong những bình luận, người ta cho rằng "Viên thuốc màu xanh" với STM32F103 (F103) có thể tốt hơn, nhỏ hơn bảng phát triển với F030 và thậm chí có thể rẻ hơn. Nhưng đối với máy hiện sóng mini, tôi không sử dụng bảng phát triển mà là F030 trên bảng SMD-DIP thậm chí còn nhỏ hơn, vì vậy có Blue Pill chắc chắn sẽ không nhỏ hơn nữa và tôi nghi ngờ rằng nó cũng sẽ rẻ hơn.

Mã hiện đã có trên Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Quân nhu

Danh sách bộ phận: - hộp nhựa - bảng điều khiển (bảng nguyên mẫu hai mặt 8x12cm) - Viên thuốc màu xanh lam - màn hình TFT ST7735s - pin lithium-ion - bộ điều chỉnh độ sụt thấp HT7333 3.3V - opamp kép MCP6L92 - bảng mạch TSSOP8 đến DIP8 - tinh thể 12 MHz (không cần thiết) - bộ mã hóa quay cộng với núm (2x) - công tắc điện - thiết bị đầu cuối hình quả chuối (4x) - bảng sạc lithium-ion - một số điện trở và tụ điện - miếng đệm nylon, đai ốc và ốc vít

Công cụ:

- trạm hàn - vật hàn 0,7mm - một số dây - dao cắt bên - kính và kính lúp - máy khoan - đồng hồ vạn năng - máy hiện sóng - STLink-V2

Phần mềm:

- STM32IDE - STM32CubeMX - STLink Utility - Thư viện LowLayer - thư viện điều chỉnh cho ST7735s - Notepad ++ - Kicad

Bước 1: Chế độ xen kẽ hoặc SIm đồng thời

Chế độ xen kẽ hoặc SIm đồng thời
Chế độ xen kẽ hoặc SIm đồng thời
Chế độ xen kẽ hoặc SIm đồng thời
Chế độ xen kẽ hoặc SIm đồng thời

Viên thuốc màu xanh da trời

Nhưng ý tưởng đã có, và tôi biết rằng F103 có hai ADC! Điều gì sẽ xảy ra nếu tôi sử dụng hai ADC đó cùng nhau ở chế độ "xen kẽ", điều mà tôi đã làm trước đây với STM32F407 (F407). Tốc độ lấy mẫu sẽ tăng gấp đôi. Điều đó, kết hợp điều đó với một bộ vi điều khiển nhanh hơn và nó sẽ tạo nên sự kế thừa tuyệt vời cho máy hiện sóng mini.

Chế độ xen kẽ Điều kỳ lạ là ADC trong F103 kém tiên tiến hơn so với chế độ F030 (và F407), bạn không thể chọn độ phân giải. Quan trọng hơn là bạn cũng không thể thay đổi thời gian giữa hai ADC. Bây giờ, khi bạn sử dụng chế độ xen kẽ, bạn thường muốn lấy mẫu nhanh nhất có thể với thời gian ngắn nhất giữa các mẫu bất kỳ, nhưng với máy hiện sóng, việc thay đổi thời gian là điều cần thiết. Có lẽ nó vẫn có thể được thực hiện, tôi không phải là một nhà thiết kế máy hiện sóng chuyên nghiệp, nhưng tôi đã bỏ kế hoạch sử dụng chế độ xen kẽ.

Chế độ đồng thời

Tuy nhiên, có hai ADC cung cấp nhiều tùy chọn hơn, hai ADC cũng có thể được đặt ở chế độ "thường xuyên-đồng thời". Làm thế nào về một máy hiện sóng dấu vết kép?

Sau khi quyết định thử chế tạo một máy hiện sóng dấu vết kép, tôi cũng muốn có độ nhạy đầu vào thay đổi, một tùy chọn mà tôi không có trên máy hiện sóng mini. Điều đó có nghĩa là một bộ suy giảm (và bộ khuếch đại) trên các đầu vào. Và có lẽ tôi còn muốn nhiều hơn nữa? Vì vậy, tôi đã lập một danh sách nhỏ "những điều đáng mừng".

CHÚC DANH SÁCH

hai kênh

độ nhạy thay đổi trên cả hai kênh

kích hoạt trên cả hai kênh

mức kích hoạt thay đổi trên cả hai kênh

bù đắp biến đổi

năng lượng pin duy nhất

nằm gọn trong cùng một hộp với máy hiện sóng mini

Bước 2: Tạo mẫu

Tạo mẫu
Tạo mẫu
Tạo mẫu
Tạo mẫu

Như thường lệ, tôi bắt đầu dự án này trên breadboard. (Xem hình) Và trước khi hàn tất cả mọi thứ trên bảng điều khiển, tôi cố gắng tìm hiểu xem nó có phù hợp với hộp dự án đã chọn hay không và như thế nào. Nó phù hợp, nhưng chỉ vừa thôi. Một số phần được ẩn dưới màn hình, phần khác nằm dưới Blue Pill. Và một lần nữa, cũng như đối với hầu hết các dự án của tôi, đây là dự án chỉ một lần và tôi sẽ không thiết kế PCB cho nó.

Bước 3: Bộ suy giảm

Bộ suy giảm
Bộ suy giảm

Trong các máy hiện sóng thông thường, các bộ suy hao đầu vào là các mạch thay đổi độ suy giảm và khuếch đại bằng cách chuyển đổi điện trở vào và ra với các rơ le tín hiệu nhỏ. Trong khi tôi có một số rơ le đó, tôi biết chúng sẽ không chuyển đổi ở mức thấp hơn 4 Volt, điều đó có nghĩa là chúng sẽ chỉ hoạt động với pin Lithium Ion đã được nạp đầy (4,2V). Vì vậy, tôi cần một cách khác để chuyển những điện trở đó. Tất nhiên tôi có thể chỉ cần cài đặt các công tắc cơ học, nhưng điều đó chắc chắn sẽ không còn phù hợp với hộp dự án trong tâm trí, có lẽ tôi có thể thử lại một chiết áp kỹ thuật số tốt hơn (cái tôi có quá ồn).

Sau đó, tôi nghĩ đến "công tắc tương tự", với những công tắc đó tôi có thể tự làm một chiết áp kỹ thuật số. Trong bộ sưu tập các bộ phận của mình, tôi tìm thấy CD4066 với bốn công tắc tương tự. Ý tưởng là làm cho điện trở phản hồi của một opamp biến bằng cách chuyển đổi điện trở vào và ra song song với điện trở phản hồi.

Nó hoạt động rất tốt, nhưng chỉ có 4 công tắc trong 4066 và có 2 kênh, không thể tạo ra nhiều hơn ba mức độ nhạy. Tôi đã chọn 500mV, 1V và 2V cho mỗi bộ phận vì đó là những mức điện áp mà tôi sử dụng nhiều nhất. Màn hình được chia thành 6 vạch chia, tương ứng với các dải -1,5V đến + 1,5V, -3V đến + 3V và -6V đến 6V.

Với "mặt đất ảo", bạn có thể di chuyển các phạm vi này lên và xuống để có thể thực hiện ngay cả 0v đến + 12V.

Bước 4: Mặt đất ảo

Mặt đất ảo
Mặt đất ảo
Mặt đất ảo
Mặt đất ảo

Vì máy hiện sóng sử dụng một đường ray nguồn duy nhất (3.3V) nên các opamps cần một mức mặt đất ảo nếu không chúng sẽ không hoạt động. Mức nền ảo này được thực hiện với PWM trên một kênh đầu ra của TIM4, chu kỳ nhiệm vụ của nó thay đổi từ chỉ vài phần trăm đến gần một trăm phần trăm. Một bộ lọc thông thấp có điện trở 1k và tụ điện 10uF biến điện áp đó thành điện áp từ (gần như) 0V đến (gần như) 3,3V. Tần số của sóng vuông chỉ dưới 100kHz, vì vậy bộ lọc thông thấp đơn giản là đủ tốt.

Cuối cùng trong quá trình xây dựng máy hiện sóng này, tôi nhận ra rằng bạn không thể có hai hiệu số riêng biệt cho các kênh. Điều này là do thực tế là với một nguồn điện duy nhất, mức đầu vào-nối đất phải tách biệt với mức đất thực của các opamps. Vì vậy, cả hai kênh di chuyển theo cùng một cách khi bạn thay đổi cài đặt GND.

Bước 5: Mã hóa quay vòng và gỡ lỗi

Bộ mã hóa quay và gỡ lỗi
Bộ mã hóa quay và gỡ lỗi
Bộ mã hóa quay và gỡ lỗi
Bộ mã hóa quay và gỡ lỗi

Trên máy hiện sóng mini, tôi chỉ sử dụng một bộ mã hóa quay cho tất cả các chức năng. Điều đó sẽ làm cho một máy hiện sóng kép rất khó sử dụng, vì vậy ở đây tôi cần hai chiếc. Một bộ mã hóa cho bộ suy hao và mức mặt đất ảo và bộ mã hóa khác cho cơ sở thời gian và kích hoạt. Đáng buồn thay, cũng giống như trong dự án khác của tôi, những bộ mã hóa quay này rất "ồn ào". Chúng tệ đến mức đơn giản là chúng sẽ không hoạt động với bộ đếm thời gian ở "chế độ bộ mã hóa", cách đọc chuẩn. Tôi phải tạo cơ chế gỡ lỗi với bộ đếm thời gian TIM2, kiểm tra bộ mã hóa cứ sau 100us. Bộ đếm thời gian này đến lượt nó được bắt đầu (chỉ) khi có một số hoạt động trên bộ mã hóa, điều này được kiểm tra bằng chức năng EXTI trên các cổng đầu vào. Bây giờ các bộ mã hóa hoạt động tốt.

Và như bạn có thể thấy, có một màn hình cũng có thể rất tiện dụng để hiển thị thông tin gỡ lỗi.

Bước 6: Hiển thị và Cơ sở thời gian

Hiển thị và Cơ sở thời gian
Hiển thị và Cơ sở thời gian

Màn hình có độ phân giải 160 x 128 pixel, do đó, cần có 160 mẫu cho một màn hình đầy đủ, tôi đã quản lý để tăng tốc các ADC để thực hiện 1,6 triệu mẫu mỗi giây và điều đó, với bộ vi điều khiển được ép xung nhiều (nhiều hơn về sau), mang lại cơ sở thời gian tối thiểu là 20us cho mỗi bộ phận (100us cho mỗi màn hình). Do đó, một dạng sóng 10kHz sẽ lấp đầy toàn bộ màn hình.

Tốc độ đó chỉ nhanh gấp đôi so với chiếc máy hiện sóng mini mà tôi đã làm trước đây. Ồ, bây giờ là với hai kênh:-).

Như đã nói, màn hình rộng 160 pixel nên chỉ cần 160 giá trị trên mỗi màn hình. Nhưng tất cả các bộ đệm thực sự chứa 320 mẫu. Vì vậy, DMA lưu trữ 320 giá trị trước khi nó kích hoạt ngắt truyền hoàn toàn (TC). Điều này là do việc kích hoạt được thực hiện trong phần mềm. Việc lấy mẫu bắt đầu tại một thời điểm ngẫu nhiên, vì vậy rất ít có khả năng giá trị đầu tiên trong bộ đệm là nơi đặt điểm kích hoạt.

Do đó, điểm kích hoạt được tìm thấy bằng cách đọc qua trace_x_buffer, nếu giá trị ở giá trị kích hoạt mong muốn và nếu giá trị trước đó nằm ngay dưới nó, thì trigger_point được tìm thấy. Điều này hoạt động khá tốt, nhưng bạn cần một bộ đệm lớn hơn kích thước hiển thị thực tế.

Đây cũng là lý do khiến tốc độ làm mới trên cài đặt cơ sở thời gian thấp hơn chậm hơn bạn có thể mong đợi. Khi bạn sử dụng cài đặt 200ms / div, một màn hình đầy dữ liệu là 1 giây, nhưng vì số lượng chuyển đổi tăng gấp đôi nên điều đó mất 2 giây. Trên cài đặt cơ sở thời gian nhanh hơn, bạn sẽ không nhận thấy điều đó nhiều.

TIM3 được sử dụng để tạo cơ sở thời gian. Nó kích hoạt ADC với tốc độ theo yêu cầu của cài đặt cơ sở thời gian đã chọn. Xung nhịp TIM3 của nó là 120MHz (xem QUÁ KHÓA), số tối đa mà nó đếm được (ARR) xác định cách nó bị tràn hoặc bằng ngôn ngữ ST mà nó cập nhật. Thông qua TRGO, các xung cập nhật này sẽ kích hoạt các ADC. Tần số thấp nhất mà nó tạo ra là 160 Hz, cao nhất là 1,6MHz.

Bước 7: ADC và DMA

ADC và DMA
ADC và DMA

Hai bộ ADC chuyển đổi điện áp trên đầu vào của chúng cùng một lúc, chúng lưu trữ hai giá trị 12 bit đó trong một biến 32 bit duy nhất. Vì vậy, DMA chỉ có một biến cho mỗi chuyển đổi (kép) để chuyển.

Do đó, để sử dụng những giá trị này, cần phải chia chúng thành hai giá trị để chúng có thể được sử dụng để hiển thị hai dấu vết. Như đã nói, ADC trong F103 không thể được đặt ở độ phân giải khác hơn 12 bit. Chúng luôn ở chế độ 12 bit và do đó các chuyển đổi luôn có cùng số xung đồng hồ. Tuy nhiên, với việc ép xung ADC, có thể thực hiện 1,6 MSamples mỗi giây (xem Thêm: Ép xung).

Tham chiếu của ADC là Vdd, đường sắt 3.3V. Để chuyển đổi giá trị đó thành các giá trị thuận tiện hơn (mỗi lần chia), tôi đã tính toán các giá trị của bộ suy giảm, vì tôi không có giá trị điện trở chính xác từ các phép tính đó, một số hiệu chỉnh được thực hiện trong phần mềm.

Trong dự án này, tôi sử dụng DMA ở "chế độ thông thường". Trong chế độ này, DMA ngừng truyền dữ liệu (từ các ADC sang bộ nhớ) khi tất cả số lượng từ (hoặc nửa từ hoặc byte) được chuyển hết. Trong chế độ khả thi khác, "chế độ vòng tròn" DMA tự đặt lại và tiếp tục truyền dữ liệu mà không bị gián đoạn. Điều đó không hoạt động với F103, nó nhanh đến mức ghi đè dữ liệu trong adc_buffer trước khi phần còn lại của chương trình có thể đọc được. Vì vậy, bây giờ quá trình như sau:

- thiết lập DMA cho số lượng dữ liệu được truyền và kích hoạt DMA

- bắt đầu kích hoạt ADC, những ADC này sẽ yêu cầu chuyển DMA sau mỗi lần chuyển đổi (kép)

- sau khi chuyển số lượng chuyển đổi đã đặt, DMA dừng

- cũng ngay lập tức ngừng kích hoạt các ADC

- thực hiện tất cả các thao tác cần thiết trên dữ liệu trong bộ nhớ

- hiển thị dấu vết trên màn hình

- bắt đầu lại quá trình

Bước 8: Giao diện người dùng

Giao diện người dùng
Giao diện người dùng

Màn hình 160 x 128 pixel không lớn lắm và tôi muốn sử dụng càng nhiều càng tốt. Vì vậy, không có phần nào của nó được dành riêng cho cài đặt dòng điện. Trong vài hàng cuối cùng, độ nhạy dọc, cơ sở thời gian, mức kích hoạt và kênh kích hoạt được hiển thị, nhưng khi tín hiệu đủ lớn, chúng sẽ xuất hiện trong cùng một khu vực. Tùy chọn đang hoạt động được hiển thị bằng màu vàng, phần còn lại hiển thị bằng màu trắng.

Bước 9: Xây dựng và các cải tiến có thể có

Xây dựng và Cải tiến có thể
Xây dựng và Cải tiến có thể
Xây dựng và Cải tiến có thể
Xây dựng và Cải tiến có thể
Xây dựng và Cải tiến có thể
Xây dựng và Cải tiến có thể
Xây dựng và Cải tiến có thể
Xây dựng và Cải tiến có thể

Tôi khá hài lòng về dự án này. Nó hoạt động tốt và thực hiện công việc, nhưng nó có thể tốt hơn.

Hộp dự án quá nhỏ để chứa mọi thứ một cách thoải mái, điều này dẫn đến việc phải đặt các thành phần bên dưới Blue Pill. Để làm được điều đó, không thể hàn Blue Pill trực tiếp vào "bo mạch chính". Và bởi vì điều này làm cho tất cả quá cao, tôi đã phải loại bỏ nhiều bộ phận khỏi Blue Pill, chẳng hạn như jumper để chọn BOOT0 và BOOT1 (những thứ tôi không bao giờ sử dụng) và tôi thậm chí phải di chuyển viên pha lê từ trên xuống dưới của pcb.

Tôi đã làm cho cuộc sống trở nên khó khăn hơn bằng cách sử dụng đầu nối chuối thay vì đầu nối BNC hoặc SMA, điều đó có nghĩa là một phần lớn của bảng điều khiển là "khu vực cấm", để làm rõ điều đó cho bản thân, tôi đã dán băng keo kapton lên đó để phòng tránh từ việc đặt các bộ phận trên đó.

Một vấn đề khác khi đặt tất cả vào một hộp dự án nhỏ như vậy là các mạch tương tự và kỹ thuật số rất gần nhau. Bạn có thể thấy rằng có khá nhiều tiếng ồn có thể nhìn thấy trên cả hai dấu vết. Điều này tôi thậm chí không có trên breadboard! Bằng cách di chuyển các đường dây điện cho mạch tương tự và kỹ thuật số càng xa càng tốt, một cải tiến nhỏ đã được thực hiện, nhưng không đủ theo ý thích của tôi. Giảm tất cả các giá trị điện trở trong các mạch tương tự hơn nữa so với tôi đã làm (điện trở đầu vào là 100kOhm thay vì 1MOhm) đã không giúp được gì. Tôi nghi ngờ rằng việc kích hoạt trên cài đặt cơ sở thời gian nhanh nhất (20us / div), điều này không tuyệt vời, cũng sẽ cải thiện với ít nhiễu hơn trên tín hiệu.

Nếu bạn thực hiện thiết kế này trên một pcb "thực", với tất cả các bộ phận smd và các lớp riêng biệt cho analog, kỹ thuật số và nguồn (đó là 4 lớp!) Nó có thể sẽ hoạt động rất tốt. Nó sẽ nhỏ hơn nhiều, nó sẽ không sử dụng Blue Pill hoàn chỉnh mà chỉ sử dụng F103 và điều đó sẽ giúp nó có thể cung cấp cho nó một Vdda tương tự (sạch) riêng biệt cho ADC.

Cuối cùng, tôi quyết định phun hộp màu đen, nó tạo ra một sự thay đổi so với tất cả các hộp màu be mà nó có.

Bước 10: Mã và một đoạn video ngắn

Bước 11: EXTRA: Ép xung

EXTRA: Ép xung
EXTRA: Ép xung

Cũng giống như tôi đã làm với F03, tôi muốn xem F103 có thể được ép xung tốt như thế nào. Các thông số kỹ thuật cho bộ vi điều khiển này tuyên bố rằng tốc độ xung nhịp tối đa không được vượt quá 72MHz (tất nhiên là đã nhanh hơn F030) nhưng tôi đã đọc trên một số blog rằng việc ép xung nó rất dễ dàng, vậy tại sao lại không?

Blue Pill được cung cấp tinh thể 8MHz, PLL nhân lên với hệ số từ 9 đến 72MHz. PLL có thể được tăng lên đến 16 với xung nhịp 128MHz. Điều đó không có vấn đề gì đối với Blue Pill của tôi, trên thực tế, tất cả Blue Pills của tôi đều hoạt động mà không gặp bất kỳ sự cố nào trên 128MHz.

Nhưng bây giờ tôi muốn tìm ra giới hạn thực sự là gì. Vì vậy, tôi đã loại bỏ tinh thể 8MHz và thay thế nó bằng một trong 12MHz. Một lần nữa tôi lại tăng hệ số nhân PLL cho đến khi bộ vi điều khiển cuối cùng bỏ cuộc. Đó là ở tần số 168MHz! Trên 156MHz nó vẫn hoạt động tốt. Tôi để nó chạy với tốc độ đó trong nhiều giờ và không bao giờ thấy nó bị rơi. Trong máy hiện sóng này, tôi chọn 120MHz, tốc độ có thể được chọn với tinh thể 12MHz và PLL trên 10, cũng như với tinh thể 8 MHz và PLL trên 15. (xem SystemClock_Config trong main.c)

Các ADC bây giờ cũng hoạt động nhanh hơn, tôi cho chúng chạy ở 30MHz (thay vì 14), chúng vẫn hoạt động tốt trên 60MHz, STMicroelectronics tạo ra một số phần cứng tốt!

STMicroelectronics đưa các giới hạn này vào biểu dữ liệu vì lý do chính đáng, chúng đảm bảo rằng vi điều khiển hoạt động ở 72MHz được chỉ định trong mọi điều kiện.

Nhưng vì tôi không sử dụng bộ vi điều khiển ở nhiệt độ -40 độ C, + 85 độ C, chỉ trên 2.0 Volt hoặc 3.6 Volt, tôi nghĩ rằng việc ép xung nó là an toàn. KHÔNG làm điều này khi bạn có ý định bán một thiết bị có bộ vi điều khiển của họ, bạn sẽ không bao giờ biết chúng sẽ được sử dụng ở đâu.

Đề xuất: