Khớp nối AC Sound Card để đọc dữ liệu số


7

Tuyên bố miễn trừ trách nhiệm: Tôi mới tham gia EE. Tất cả mọi thứ tôi đã học được cho đến nay tôi đã tự dạy mình từ việc đọc trực tuyến và đăng các câu hỏi như thế này trong khi thực hiện dự án này. Tôi xin lỗi nếu tôi làm một công việc kém để giải thích vấn đề của tôi vì tôi có thể thiếu kiến ​​thức kỹ thuật để làm điều đó đúng.

Tôi đang cố đọc hai đồng hồ đo lưu lượng qua cổng mic của điện thoại / máy tính bảng. Các chân xung của đồng hồ đo lưu lượng chuyển đổi giữa + 0V và + 5V khi các chân của chúng xoay.

Tôi đang sử dụng sơ đồ sau đây để trộn các tín hiệu từ hai đồng hồ đo lưu lượng và gửi chúng qua cổng mic:

sơ đồ

Tôi trộn hai chân xung với nhau bằng R-2R. Điều này cho phép tôi theo dõi sự thay đổi điện áp và biết một trong hai đồng hồ đo lưu lượng thay đổi trạng thái dựa trên cường độ thay đổi điện áp. Ví dụ, nếu tôi thấy điện áp thay đổi 2,5V, tôi biết rằng đồng hồ đo lưu lượng 1 đã bật. Nếu tôi thấy điện áp thay đổi -1,25V, tôi biết rằng lưu lượng kế 2 đã tắt. Sau đó tôi sử dụng một bộ chia điện áp để giảm điện áp trong phạm vi điện áp của card âm thanh.

Card âm thanh được ghép nối AC và chuyển đổi các thay đổi điện áp thành thay đổi biên độ với công thức tương tự amplitude change = (voltage change)/(voltage range). Khớp nối AC cũng từ từ kéo biên độ xuống 0. Vì vậy, nếu card âm thanh PC của tôi có dải điện áp là 2V và đồng hồ đo lưu lượng gây ra thay đổi điện áp -1,5V, tôi đọc qua cổng mic thay đổi biên độ -1.5V/2V = -0.75. Thuật toán của tôi thấy sự thay đổi biên độ này và, dựa trên một số ngưỡng, xác định xem nó có phải do lưu lượng kế 1 hoặc 2. Điều này có thể được nhìn thấy trong các ảnh chụp màn hình chương trình Java này đang chạy trên PC của tôi không:

Tín hiệu thô được đọc từ cổng mic PC: (nguồn: awesomebox.net )Tín hiệu đo lưu lượng PC

Chương trình nêu bật các thay đổi trạng thái lưu lượng kế được phát hiện: PC phát hiện lưu lượng thay đổi tín hiệu trạng thái

Như bạn có thể thấy, chương trình đang xác định thành công các thay đổi trạng thái của lưu lượng kế; thay đổi biên độ nhỏ hơn được gây ra bởi lưu lượng kế 1 và thay đổi biên độ lớn hơn được gây ra bởi lưu lượng kế 2.


Các vấn đề bắt đầu khi gửi tín hiệu tương tự đến máy tính bảng Android Galaxy Note 8 của tôi. Đây là tín hiệu trông như thế nào khi đọc qua cổng mic của máy tính bảng: (nguồn: awesomebox.net )tín hiệu đo lưu lượng máy tính bảng

Lưu ý rằng tất cả các thay đổi biên độ nhìn thấy ở trên là do cùng một thay đổi điện áp (tất cả các thay đổi trạng thái là từ cùng một lưu lượng kế). Thay đổi điện áp đơn hoặc không thường xuyên xuất hiện khi thay đổi biên độ rất nhỏ trong khi thay đổi điện áp được nhóm chặt chẽ (có cùng độ lớn) xuất hiện khi thay đổi biên độ lớn hơn và gần hơn với những gì tôi mong đợi. Có vẻ như sự thay đổi điện áp càng gần với sự thay đổi điện áp khác, sự thay đổi biên độ mà nó tạo ra càng lớn.

Đây là những gì tôi đọc được từ cổng mic của PC và những gì tôi mong đợi. Lưu ý rằng tất cả các thay đổi biên độ đều có cùng độ lớn: Máy đo lưu lượng tín hiệu dự kiến
(nguồn: awesomebox.net )

Hy vọng: Thay đổi điện áp 1,5V hoặc -1,5V sẽ luôn gây ra thay đổi biên độ 0,75 hoặc -0,75.
Thực tế: Thay đổi điện áp đơn 1,5V hoặc -1,5V gây ra thay đổi biên độ 0,1 hoặc -0,1. Một loạt 10 thay đổi điện áp 1,5V và -1,5V trong sự tách biệt ngắn gây ra sự thay đổi biên độ 0,75 và -0,75.

Sự không nhất quán này làm cho thuật toán của tôi không thể xác định được sự thay đổi biên độ dòng chảy nào gây ra. Tại sao những thay đổi điện áp đơn này gây ra thay đổi biên độ nhỏ như vậy? Có cách nào để làm cho sự thay đổi biên độ luôn phù hợp với sự thay đổi điện áp không?

Ngoài ra, thay vì tín hiệu giảm dần về 0 như tôi mong đợi từ khớp nối AC (và được thấy trong tín hiệu đọc qua cổng âm thanh của PC), nó dường như giảm về 0 ngay lập tức và dao động vài lần trước khi cuối cùng quay trở lại 0. Dao động làm tăng thêm nhiễu cho tín hiệu và gây khó khăn cho việc xác định xem sự thay đổi biên độ có phải do thay đổi điện áp hay chỉ đơn giản là một dao động từ lắng xuống 0. Có cách nào để loại bỏ các dao động này không?


Xin lỗi vì cuốn tiểu thuyết ngắn và cảm ơn vì lời khuyên nào,
- Mike


1
Có vẻ như đầu vào mic được lọc. Có lẽ sẽ tốt hơn nếu sử dụng cổng đầu vào thay vì micrô.
Al Kepp

1
Đây là một câu hỏi thú vị và được viết rất tốt. Cảm ơn bạn đã gửi nó!
Adam Haun

Vì tò mò, điều gì xảy ra nếu cả hai đồng hồ đo lưu lượng thay đổi cùng một lúc (hoặc rất gần). Bạn có tìm kiếm điều này? Không liên quan đến câu hỏi tôi biết, nhưng đó là một bài đọc thú vị và khiến tôi băn khoăn.
Tom Carpenter

Hãy nhớ rằng các micrô đó có một số bộ lọc để cải thiện chất lượng giọng nói và khử tiếng ồn. Một số thậm chí có thể có 2-3 micrô khác nhau được đặt trong thiết bị. Một điều bạn có thể làm là cố gắng mua một soundcard USB và kết nối nó với điện thoại di động. Sau đó, nếu soundcard cho phép, bạn có thể sử dụng cổng mic / line-in để gửi tín hiệu.
Ismael Miguel

Câu trả lời:


5

Cách dễ nhất để vượt qua khớp nối AC là chuyển đổi tín hiệu DC của bạn thành AC. Có vẻ hợp lý, phải không?

Một phương pháp đơn giản chỉ đơn giản là cắt tín hiệu đầu vào của bạn ở một số tần số danh nghĩa. Ở đâu đó giữa 500 Hz đến 1 KHz có vẻ hợp lý.

Những gì bạn cuộn lên là tín hiệu AC (sóng vuông) với bất kỳ biên độ tín hiệu DC ban đầu của bạn.

Có một số cách đơn giản để làm điều này.

1) Phương pháp đơn giản nhất là sử dụng bộ định thời CMOS 555 như TLC555. Tôi không ở máy tính của tôi ngay bây giờ nhưng tôi sẽ nhập sơ đồ khi tôi về nhà. Nhưng một mô tả bằng lời sau:

Kết nối chân 2 & 6 với nhau và với tụ điện thời gian của bạn. Điện trở thời gian kết nối giữa các chân 2/6 và chân 3. Chân 4 & 8 đi đến nguồn điện của bạn (5-15 Vdc). Chân 1 đi xuống đất.

Kết nối tín hiệu DC đầu vào của bạn thông qua điện trở 4,7k đến chân 555 7. Chân này cũng cung cấp đầu vào tương tự trên máy tính của bạn.

Chọn mạng RC thời gian cho tần số mong muốn của bạn.

Làm xong. . .

Có các phương pháp chopper khác nhưng phương pháp này thực sự đơn giản và không tốn kém.

[Biên tập]

Khi đọc lại câu hỏi ban đầu và các bình luận và câu trả lời tiếp theo - tôi sẽ thay đổi câu trả lời của mình một chút.

Vì bạn đang gửi các xung (không phải mức DC) có biên độ khác nhau cho điện thoại thông minh / PC, tôi sẽ đề nghị bạn muốn coi tín hiệu cắt là sóng mang. Do đó, bạn sẽ đặt tần suất cắt nhỏ khá cao - trên 10 KHz nhưng dưới 20 KHz. Tôi không biết các bộ lọc khử răng cưa sắc nét như thế nào trong các đầu vào tương tự máy tính / điện thoại thông minh hiện đại nhưng tôi nghĩ rằng bạn muốn làm rõ chúng. Có lẽ bạn có thể có tần số cắt lên tới 16 hoặc 18 KHz - Tôi thực sự không biết.

Sau đó, chỉ cần thực hiện một sơ đồ phát hiện đường bao trong phần mềm để khôi phục biên độ tín hiệu DC ban đầu.

Đây là sơ đồ mà tôi đã hứa trước đó. Lưu ý rằng điều này hoạt động tốt với bộ định thời CMOS 555 - không phải là một trong những bộ phận lưỡng cực ban đầu. TLC555 là bộ đếm thời gian tiêu chuẩn 555 của tôi.

Chân 7 hoạt động để cắt tín hiệu đầu vào vì đây là đầu ra cống mở. Chúng tôi lấy phản hồi thời gian của chúng tôi từ chân đầu ra (Chân 3) - điều này hoạt động tốt vì Chân 3 là đầu ra CMOS đối xứng với mức Vout-HI tương đương với mức Vdd và Vout-LO bằng với Vss.

Cả hai tính năng này đều không thể sử dụng nếu sử dụng một lưỡng cực gốc 555.

sơ đồ

mô phỏng mạch này - Sơ đồ được tạo bằng CircuitLab


Câu trả lời hay - nhưng một mô tả ngắn gọn về cách giải điều chế sẽ có giá trị.
Nick Johnson

Theo như tôi có thể nói, OP không tìm kiếm điều đó. Anh ấy / anh ấy chỉ tìm kiếm biên độ.
Dwayne Reid

Hở? Bằng cách giải điều chế, tôi có nghĩa là khôi phục dữ liệu gốc từ tín hiệu điều chế.
Nick Johnson

Cám ơn vì cái này. Tôi thực sự bắt đầu đi xuống tuyến đường này trước đó và từ bỏ nó bởi vì tôi không thể hiểu nó. Tôi sẽ thử lại lần nữa và rất may tôi đã có một vài bộ định thời 555 nằm xung quanh. Thật không may, tôi vẫn không làm theo hầu hết những gì bạn nói. Bạn có thể giải thích thêm hoặc chỉ cho tôi về một tài nguyên bao gồm lý thuyết "băm nhỏ" không? Những điều cơ bản tôi muốn biết là: Làm thế nào để điện áp thay đổi ảnh hưởng đến tần số của tín hiệu? Nó là một tần số hoặc xung không đổi? "Sóng mang" là gì ("coi tín hiệu băm là sóng mang") là gì?
Mike

Việc cắt chỉ đơn giản là thay đổi tín hiệu DC của bạn thành tín hiệu AC có cùng biên độ. Bạn nói rằng bạn đang kết hợp hai cảm biến với mạng R-2R. Điều này cung cấp cho bạn 4 cấp điện áp riêng biệt. Quá trình cắt chỉ đơn giản là chuyển đổi các mức tín hiệu đó thành AC ở bất kỳ tần số sóng mang nào bạn chọn.
Dwayne Reid

0

Câu trả lời nhanh là không. Bạn đang thấy hai hiệu ứng khác nhau.

Đầu vào mic của Android thực sự được ghép nối AC, nhưng tần số cắt cao hơn nhiều so với tần số cảm biến của bạn. Vì bạn không cung cấp bất kỳ thông tin nào về các cơ sở thời gian cho các dấu vết khác nhau, nên không thể cung cấp cho bạn các số cứng về mức độ đáp ứng tần số của đầu vào Android là như thế nào.

PC cũng có mức cắt tần số thấp quá cao, nhưng nó gần với dữ liệu cảm biến của bạn hơn một chút so với Android. Ngoài ra, nó có trở kháng đầu vào khoảng 1 kilohm, đang tải mạng điện trở của bạn và gây ra biên độ thấp.

Không có cách thực tế nào để khắc phục ảnh hưởng của khớp nối AC (lưu ý rằng tôi đã nói thực tế - bạn có thể xây dựng bộ lọc định kiến ​​nhưng tôi không nghĩ rằng bạn muốn đến đó.) Trở kháng đầu vào PC có thể được bù bằng cách xây dựng bộ khuếch đại đệm với một amp op.


0

Một câu hỏi xuất sắc, trong bài thuyết trình & nội dung. Và phân tích của bạn về cách có được những gì bạn muốn từ một kênh đầu vào (đơn) là đáng ngưỡng mộ.

Tôi nghi ngờ vấn đề là hằng số thời gian lọc của điện thoại ngắn hơn so với PC (nghĩa là mức cắt điện thoại thấp của điện thoại cao hơn PC) và đó có thể là do nắp khớp nối AC cho phổ đầy đủ Âm thanh 20-20kHz có xu hướng tương đối lớn, lớn hơn có thể thoải mái vừa vặn trong điện thoại. Tôi sẽ đặt cược tiền điện thoại sẽ có độ nhạy thấp hơn với tần số thấp (một thông số mà bạn có thể sẽ không bao giờ thấy được công bố cho điện thoại), và họ có thể đang thực hiện một số tăng cấp thấp để cố gắng bù đắp cho thực tế này.

Tôi nghĩ rằng bạn sẽ quay lại để xử lý dữ liệu cảm biến của mình thành sơ đồ điều chế tương thích với AC, như Dwayne đề xuất.


0

Nếu tất cả những gì được thực hiện cho tín hiệu là bộ lọc chặn DC (tức là bộ lọc thông cao) về nguyên tắc, bạn có thể khôi phục tín hiệu gốc bằng cách tích hợp. Phương pháp này dễ bị khuếch đại nhiễu và có thể phân kỳ dễ dàng nếu các hằng số của bạn không được chọn cẩn thận, nhưng về mặt lý thuyết là có thể.

Tin tốt là bạn không phải xây dựng lại tín hiệu ban đầu. Mặc dù các xung có thể xảy ra rất ít khi, về nguyên tắc, bạn chỉ quan tâm đến cạnh tăng hoặc giảm, bản thân nó là một thành phần tần số cao và được ghi lại tốt, ngay cả khi điện áp giảm về 0.

Tin xấu là dường như các hiệu ứng khác ngoài bộ lọc chặn DC đơn giản đang hoạt động ở đây. Có thể có AGC (điều khiển khuếch đại tự động) hoặc cố gắng loại bỏ nhiễu, đặc biệt là trong tín hiệu Android, điều này có thể giải thích sự tăng tốc chậm của biên độ. Một câu trả lời StackOverflow cho thấy rằng những điều này không thể bị tắt, trong khi một nhận xét cho câu trả lời đó cho thấy rằngVOICE_RECOGNITION hằng số được cho là cung cấp cho bạn luồng âm thanh thô, nhưng nó có thể không phải lúc nào cũng làm điều đó. Có lẽ có mạch tương tự trong máy tính bảng mà đơn giản là không thể tắt được.

Bạn có thể muốn suy nghĩ lại về sơ đồ điều chế hoàn toàn. Tương tự như câu trả lời của Dwayne, bạn có thể xem xét việc thiết lập một mạch điện tử 555 hoặc mạch khác để tạo ra tiếng kêu ngắn, hoặc mạch xung, ở mỗi xung, ở các tần số khác nhau cho hai cảm biến. Các xung sau đó có thể được phát hiện bằng cách phân tích tín hiệu trong phần mềm bằng các bộ lọc thông dải ở hai tần số đã chọn. Sau đó, máy dò tìm kiếm một xung ở tần số xác định dài hơn một ngưỡng nhất định và tính đó là một xung từ cảm biến tương ứng. Đây phải là một sơ đồ rất mạnh mẽ, không phụ thuộc vào biên độ tuyệt đối của tín hiệu.

Các tần số nên được chọn một cách lý tưởng sao cho tần số cao hơn không phải là âm bội của âm thấp hơn để có thể tạo ra số đọc sai. Theo mặc định, bộ định thời 555 sẽ tạo ra các đầu ra xung, nhưng các đầu ra có thể được truyền ở mức thấp để loại bỏ một số âm bội của chúng nếu cần. DTMFVí dụ, sử dụng tần số cách nhau theo hệ số 1.1.

Ngoài ra, tần số và thời lượng phải được chọn có lẽ là một thứ tự cường độ cao hơn và ngắn hơn, tương ứng, so với đầu ra nhanh nhất từ ​​cảm biến, để tránh việc một chuỗi xung mới bắt đầu trước hoặc quá gần khi kết thúc trước đó .

Ngoài ra, bạn có thể sử dụng sơ đồ điều chế tần số, một lần nữa tương tự như DTMF, trong đó trạng thái cảm biến điều chỉnh tần số của bộ tạo dao động, có thể được phát hiện bằng bộ lọc thông dải như đề xuất ở trên. Điều này có thêm lợi ích là cung cấp sóng mang luôn luôn bật, cho phép bạn phát hiện xem có cảm biến nào được kết nối hay không.

Nếu bạn đang sử dụng sơ đồ kích hoạt cạnh, bạn có thể thoát khỏi việc chỉ kích hoạt một tiếng kêu trên các xung dương, điều này sẽ giúp bạn có cả mạch kích hoạt đơn giản hơn một chút và sự khoan dung hơn trong lựa chọn tần số, vì các xung giờ đã xa hơn riêng biệt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.