2009-12-08 38 views
6

Có một mức điều khiển công cụ máy CNC sở thích phổ biến hoạt động trong Windows XP và nó có bộ hẹn giờ hoạt động ở tốc độ có thể chọn từ 25 kHz đến 100 kHz. Nó chỉ như vậy xảy ra mà tôi cũng xây dựng bộ điều khiển công cụ máy CNC nhưng tôi đã sử dụng một bộ điều khiển chuyển động DSP loạt DMC1200 loạt DSP điều khiển mà tôi kiểm soát với chương trình cấp trên của tôi. Điều này xảy ra. Có những người mua tiềm năng không thể đủ khả năng cấu hình đó nên tôi đã viết một ứng dụng khác mà tôi dự định cung cấp dưới dạng gói kiểm soát dựa trên phần mềm. Ứng dụng hoàn tất với ngoại lệ là tôi không có bộ hẹn giờ. (MS Multi-Media Timer KHÔNG đủ.)Tần số bộ đếm 100 kHz trong Windows XP

Tôi đã theo đuổi điều này trong hơn hai năm mà không có kết quả nên tôi đã quyết định yêu cầu HELP. Để tránh bất kỳ sự nhầm lẫn nào, tôi đề cập đến một bộ định thời định kỳ có khả năng hoạt động ở tần số 100 kHz và không phải là đồng hồ bấm giờ.

Tôi thực sự sẽ đánh giá cao một số giúp đỡ với điều này,

C4C

+0

Bạn có thể mô tả việc sử dụng bộ đếm thời gian không: nó có cung cấp dấu thời gian như được đọc khi một sự kiện khác xảy ra không? Là nó để kích hoạt một gián đoạn? Liệu nó cần phải được thiết lập lại như cho một cơ quan giám sát? – wallyk

+2

Vấn đề là ngắt có thể xảy ra bất cứ lúc nào và kéo dài tới vài giây trên một hệ điều hành thời gian thực. Bạn không có lịch trình đảm bảo. Vì vậy, ngay cả NẾU bạn sử dụng bộ đếm thời gian nhanh như 100 kHz, điều khiển một CNC trực tiếp từ Windows có vẻ như không thể đối với tôi. –

Trả lời

10

Không thể. Bộ hẹn giờ có sẵn nhanh nhất trên Windows là 1 ms (1 kHz). Bạn sẽ cần một hệ điều hành thời gian thực hoặc một bộ điều khiển chuyên dụng. Ngay cả trong một hệ điều hành thời gian thực, thường là khoảng 20 kHz là max của bạn.

+1

QueryPerformanceCounter có độ phân giải đáng kể tốt hơn 1ms, mặc dù nó có thể không phù hợp ở đây. –

+0

Steve, Google Mach3 CNC và tự tải xuống bản miễn phí. Cài đặt chương trình và dành khoảng hai phút với chương trình và sau đó báo cáo lại. – user227239

+1

@Robert, QueryPerformanceCounter trả về một giá trị thời gian, nhưng không phải là "định kỳ định kỳ" về bản chất mà anh ta muốn. Về cơ bản, anh ta yêu cầu một gián đoạn định kỳ ở tần số cao (như những người khác đã nói, về cơ bản không thể được thực hiện trên Windows). –

2

Windows XP không phải là hệ thống thời gian thực và tôi không nghĩ rằng có cách nào để đảm bảo bộ hẹn giờ trong phạm vi 10 micro giây. Bạn có thể nhìn xung quanh trong thư viện Microsoft.Ccr.Core, tôi nghĩ đó là thư viện gần nhất bạn sẽ nhận được.

Chỉnh sửa: Tôi tìm thấy thêm thông tin từ Microsoft. Theo bài viết How To Use QueryPerformanceCounter to Time Code tri thức cơ bản,

Function     Units      Resolution 
--------------------------------------------------------------------------- 
Now, Time, Timer   seconds     1 second 
GetTickCount    milliseconds    approx. 10 ms 
TimeGetTime    milliseconds    approx. 10 ms 
QueryPerformanceCounter QueryPerformanceFrequency same 

và đó là trong bối cảnh của một bài viết mà bắt đầu với tuyên bố:

Khi thời gian mã để xác định tắc nghẽn hiệu suất, bạn muốn sử dụng bộ hẹn giờ có độ phân giải cao nhất hệ thống phải cung cấp.

Robert Harvey đúng, QueryPerformanceFrequency nằm trong hàng chục micro giây, nhưng tôi không nghĩ có cách nào để sử dụng nó để kích hoạt chính xác sự kiện. Tôi nghĩ điều đó làm cho nó trở thành một bức tượng hoàn chỉnh cho một giải pháp phần mềm duy nhất. Bạn đã xem xét bất kỳ chip nào như Arduino có giá khá rẻ? Từ Arduino forums, có vẻ như độ chính xác 10 micro giây là có thể.

+1

QueryPerformanceCounter and QueryPerformance Tần suất có độ phân giải thời gian trong hàng chục micro giây, không phải hàng chục mili giây. –

+0

@ Robert, có cách nào để sử dụng QueryPerformanceCounter để kích hoạt điều gì đó có độ chính xác đến một phần triệu giây không? – jball

+0

Nevermind, tôi chỉ đọc câu trả lời của Jon Benedicto - có vẻ như phương pháp của anh ta bằng cách sử dụng QueryPerformanceCounter tiến gần hơn đến độ chính xác 10 micro giây hơn tôi nghĩ là có thể. – jball

2

Điều tốt nhất bạn có thể làm cho thời gian trong Windows là QueryPerformanceFrequency/QueryPerformanceCounter. Tần số thấp nhất tôi đã thấy những sản phẩm đó là 1,1 MHz, do đó sẽ cung cấp đủ tần số.

Nhưng ngay cả khi nó như các câu trả lời khác chỉ ra, nó sẽ không hoạt động. Cửa sổ không phải là hệ điều hành thời gian thực, nó không đảm bảo thời gian. Không có cách nào để đảm bảo rằng mã của bạn đang chạy mỗi 1 chúng tôi (cho 100 kHz), vì Windows sẽ chuyển sang các quy trình hoặc mã hạt nhân khác.

Bạn sẽ phải đi với một số loại giải pháp phần cứng bên ngoài để có được loại thời gian đó.

7

Bạn có thể nhận được khá gần với 100 kHz bỏ phiếu bằng cách sử dụng QueryPerformanceCounter trong một vòng lặp trên CPU hiện tại.

Ví dụ:

typedef void (*CallbackProc)(); 

void PollAtKhz(int khz, CallbackProc const &Callback) 
{ 
    int hz = khz * 1000; 
    LARGE_INTEGER li; 

    QueryPerformanceFrequency(&li); 

    if(li.QuadPart < hz) 
     return; 

    __int64 diff = li.QuadPart/hz; 
    LARGE_INTEGER NextStop; 
    LARGE_INTEGER CurStop; 

    QueryPerformanceCounter(&NextStop); 
    NextStop.QuadPart += diff; 

    while(true) 
    { 
     QueryPerformanceCounter(&CurStop); 

     if(CurStop.QuadPart >= NextStop.QuadPart) 
     { 
      Callback(); 

      QueryPerformanceCounter(&NextStop); 
      NextStop.QuadPart += diff; 
     } 
    } 
} 

Trong thử nghiệm của tôi, tôi có khoảng 92-98 tần kHz, sử dụng mã này để kiểm tra nó:

void TestCallBack() 
{ 
    static int i = 0; 
    static time_t LastTime = time(NULL) + 1; 

    ++i; 
    if(time(NULL) >= LastTime) 
    { 
     printf("%d/sec\r\n", i); 
     LastTime = time(NULL) + 1; 
     i = 0; 
    } 
} 

Rõ ràng, mã này đòi hỏi phải sử dụng CPU tối đa, vì vậy để có được những kết quả này, một máy SMP là phải. Ngoài ra, việc đẩy ưu tiên quá trình/luồng vào thời gian thực cũng giúp ích.

+0

Jon, Bạn có kiểm tra chi phí CPU cho cách tiếp cận của mình không? – user227239

+0

Chi phí CPU là/là 50% trên một máy tính lõi kép. Nói cách khác, nó sử dụng tất cả sức mạnh CPU có sẵn mà một sợi đơn có thể nhận được. –

2

Khi bạn nói giờ định kỳ, tôi giả sử bạn có nghĩa là bộ tạo xung?

Bạn đang đề xuất bộ hẹn giờ có thể tạo sự kiện cứ 10 micro giây một lần? Tôi nghi ngờ bạn nên làm điều đó.

Bạn có thể thử lập trình đầu ra âm thanh của PC và giao diện cho công cụ. Bạn sẽ phải tắt tiếng/định cấu hình âm thanh máy tính trong khi công cụ của bạn đang hoạt động để ngăn tần số có thể giả mạo luồng xung.

Bạn đã xem xét trình tạo xung USB chưa? Hoặc giá rẻ "USB sound card" dành riêng cho hoạt động này?

+2

Thẻ âm thanh sẽ chỉ giúp bạn tin cậy tới 20kHz, và bạn sẽ nhận được sóng sin chứ không phải hình vuông, ở tần số đó (vì không có khả năng đầu ra hài hòa cao hơn). –

+0

Kính gửi ông Mortensen, cảm ơn đã chỉnh sửa chương trình của tôi thành chương trình. Tôi nhận ra rằng nhiều người khác đã viết chính tả theo cách của Anh đã không chống lại chính tả của Mỹ nhưng tôi đã không vì tôi dường như không thể nhớ đúng chính tả của Mỹ một cách nhất quán. Vì vậy, tôi cầu xin sự tha thứ của bạn, bạn không nên chỉnh sửa phong cách chính tả của Anh cho chương trình. –

9

Bộ tính giờ này cần làm gì? Nếu nó chỉ cần đầu ra một làn sóng vuông giữa 25 kHz lên đến 100 kHz, thì bạn sẽ cần thêm phần cứng, nhưng không phải phần cứng đắt tiền quá mức. Ví dụ: xem số DT-340 này từ Dịch dữ liệu. Nó có thể đi nhanh hơn bạn cần, và tôi tin rằng nó thậm chí có thể làm gián đoạn. Hoặc điều này PCI 8255/8254 48 I/O.

Nếu bạn có thể đủ khả năng 500 USD trong ngân sách của mình, sẽ có nhiều tùy chọn phần cứng. Chip hẹn giờ lập trình thực tế phải rẻ hơn nhiều, vì vậy nếu bạn sẵn sàng cuộn mạch của riêng mình và giao tiếp với máy tính, bạn có thể làm tốt hơn rất nhiều so với USD 500.

Tôi đã từng xây dựng một mạch xung quanh chip Bộ đếm thời gian lập trình 8253 của Intel, được sử dụng bên trong máy tính IBM ban đầu để phát ra tiếng bíp từ loa bên trong. Nó được nối với một tinh thể 1,193182 MHz và có bộ chia 16 bit. Con chip này đã tồn tại trong nhiều thập kỷ. Nếu bạn cần tốt hơn, tôi chắc chắn đã có những cải tiến kể từ đó.

Khi tôi nói rằng chip 8253 (hoặc 8254) bên trong PC được sử dụng để điều khiển loa bên trong, tôi không hoàn thành. Có rất nhiều thông tin về số Intel 8253 trong Wikipedia. Ở đó nó giải thích rằng đầu ra 0 được sử dụng để tạo ra xung nhịp, đầu ra 1 được sử dụng cho thời gian làm mới DRAM và đầu ra 2 được sử dụng để điều khiển loa bên trong. Đầu tiên hai đầu ra đồng hồ tạo ra ngắt, đó là những gì bạn muốn, nhưng các mô tả ở trên những gì các đầu ra này hiện nay phải cho bạn một số tạm dừng để phản ánh rằng thay đổi hành vi của chúng có thể khiến Windows XP nhận thấy.Đầu ra thứ ba cho loa, chủ yếu là vô hại để gây rối xung quanh, nhưng bạn sẽ cần phải tìm ra một số cách để chuyển hướng tín hiệu đó đến thứ gì đó tạo ra và ngắt, nếu đó là những gì bạn cần.

lẽ Mach 3 đang sử dụng High Performance Event Timer (HPET), mà theo here là một phần của chipset Intel gần đây. Bộ đếm thời gian 0 và 1 được sử dụng cho mô phỏng 8254.

"The ICH HPET Timer 2 ngắt chưa chuyển đến bất kỳ một trong những IRQ sau: 11, 20, 21, 22, và 23, qua thanh ghi TIM2_CONF (Lưu ý:. đăng ký này là được gọi là TIM3_CONF trong Intel® ICH5.) "

+0

meomaxy, Đó là mong muốn của tôi để loại bỏ chi phí phần cứng. Tôi có thể mua hai bo mạch PCI 8255 kép với giá khoảng 100USD và tôi có thể phải làm điều đó, nhưng tôi sẽ xả hết số lượng này trước khi làm như vậy. – user227239

+2

Điều gì thực sự chiếm đoạt đầu ra loa trong của PC và tạo ra tín hiệu bạn cần bằng cách "bíp" chúng ra? – user189169

+0

meomaxy, Thsi là loại phản hồi mà tôi đã hy vọng có được. Cảm ơn bạn! Nhiệm vụ này có thể được thực hiện vì nó hiện đang được thực hiện. Cái gì đó sẽ rất có lợi cho nhiều người lập trình. Loa hệ thống được điều khiển bằng IC8255. Đó là một trong những phương pháp nghi ngờ mà Mach 3 đang sử dụng. Tôi đã viết một trình điều khiển cho 8255 nhưng tôi đã không tìm ra cách thay đổi Beep thành một sự kiện có thể được nêu ra trong chương trình của tôi. – user227239

1

Trong khi tôi nghi ngờ giải pháp meomaxy là tốt nhất ...

Nếu bạn cần thời gian khác biệt độ phân giải cao, intel có một số mã here rằng tuyên bố chính xác xuống nano giây. (Ngoài ra còn có một cuộc thảo luận tốt về khả năng thời gian vi phân chung).

0

Một vấn đề cơ bản khi sử dụng PC để điều khiển chuyển động, không có phần cứng chuyên dụng, là tốc độ dữ liệu của các đầu ra khác nhau được tích hợp trong hầu hết các PC. Nếu khách hàng của bạn không có ngân sách cho bộ điều khiển chuyển động cao cấp mà bạn đề cập, thì họ sẽ không có quyền truy cập vào tín hiệu 100 kHz.

Bộ điều khiển I/O cho mỗi cổng cung cấp một số loại đệm để bạn có được kết quả mượt mà. Điều này phần lớn phục vụ mục đích giảm bớt phần mềm từ sự cần thiết phải 'bit-bang' những tín hiệu đó, và cũng làm cho tần số I/O ổn định hơn nhiều.

Nhược điểm là bộ đệm có thể sẽ giới thiệu độ trễ trong hệ thống, điều này có thể ảnh hưởng đến mạch điều khiển vòng kín hiệu suất với điều khiển trong phần mềm. Một nhược điểm khác là giới hạn tùy chọn tần số của bạn. Một trong những tùy chọn I/O nhanh nhất trên PC không cung cấp điều khiển lưu lượng cao như USB hoặc SATA thực sự là cổng âm thanh, nhưng giới hạn ở 64 kHz hoặc 44 kHz trên hầu hết các hệ thống.

Nếu cổng âm thanh là tùy chọn cho bạn, thì bạn không cần phải lo lắng về thời gian, Chỉ cần đảm bảo bạn đặt tần số đúng cách và tạo tín hiệu như bạn muốn.

Nếu bạn cần sử dụng tín hiệu số, cổng song song và nối tiếp hoạt động theo cách tương tự , nhưng ở tốc độ tối đa thấp hơn.

EDIT Hmm ... Có vẻ như các cổng parallel nhanh hơn một chút so với trước đây. Một máy tính có khả năng nâng cao cổng song song (EPP) có thể cung cấp cho bạn tối đa 2mbits băng thông nhị phân, điều này cũng nên nằm trong tầm với của mục tiêu của bạn. Tuy nhiên, do cách giao diện song song hoạt động, tốc độ dữ liệu phụ thuộc vào thiết bị ngoại vi, thay vì tốc độ bộ đệm được xác định trước. Về cơ bản, thiết bị ngoại vi thừa nhận rằng nó đã nhận được dữ liệu, hoặc nó đã sẵn sàng để gửi dữ liệu, cho mỗi byte được chuyển.

Đây không phải là quá xấu, mặc dù, bởi vì một đơn giản, đồng hồ hướng ngoại vi là dễ dàng để thiết lập.

Ngoài ra, dữ liệu không thể truyền theo cả hai hướng cùng một lúc, dữ liệu đến từ thiết bị ngoại vi sẽ khiến luồng dữ liệu từ máy chủ lưu trữ bị chặn.Một cách có thể để phá vỡ đó là chỉ cần sắp xếp để có hai cổng song song có sẵn, hoặc sắp xếp cho các thiết bị ngoại vi để hạn chế truyền dữ liệu riêng của mình cho mỗi chu kỳ khác.

I/O trên một cổng như vậy thường bị gián đoạn điều khiển. Bên cạnh một vài trạng thái lỗi, các ngắt hữu ích nhất được tạo ra khi đầu vào hoặc đầu ra của FIFO đạt đến một mức nhất định. Bạn có thể sử dụng ngắt này để ghi (hoặc đọc) dữ liệu mới vào cổng. Ngưỡng này có thể được đặt ở bất kỳ đâu từ 1 đến 16 byte. Bạn nên kiểm tra cẩn thận (với một máy phân tích logic/dao động) rằng dữ liệu thực sự đang chảy với tốc độ mong đợi, với tốc độ mong đợi. Bạn có thể làm điều này gần như tốt trong phần mềm sử dụng QueryPerformanceCounter.

+0

TMG, Bạn chỉ đơn giản là VIẾT! Google Mach 3 CNC và tải xuống bản sao chương trình miễn phí. Nó có thể hoạt động ở 100kHz và nó có khả năng định vị vòng kín. Tôi cần phải nói những người nói này để hiểu rằng đó không phải là một câu hỏi về việc liệu nó có thể xảy ra hay không, đó là câu hỏi về cách Mach 3 hoàn thành nhiệm vụ. – user227239

+0

TMG, Tôi đã dowmload một ứng dụng từ diễn đàn CodeProject và nó Hooks kernelthereby tiết lộ các ngắt cho mỗi dịch vụ đang chạy và số lần ngắt mỗi giây. Các ngắt cho Mach3.sys là chính xác giống như tần số được hiển thị trong chương trình Mach 3. Về lưu lượng song công trên cổng song song. Mach 3 yêu cầu tối thiểu hai cổng song song nhưng nó hỗ trợ tối đa ba cổng song song. C4C – user227239

+0

TMG, tôi thất bại khi đề cập rằng Mach 3 đang sử dụng IRQ 0 – user227239

0

Tôi sẽ nói rằng điều này là không thể nếu không viết trình điều khiển của riêng bạn. Tuy nhiên, nếu bạn đã viết trình điều khiển riêng của mình, bạn có thể lấy một bộ đếm thời gian HPET (không có sẵn trên tất cả các máy, nhưng đi kèm với hầu hết các máy mới hơn) và có thể là bộ hẹn giờ APIC (không chắc chắn liệu điều này có thể cung cấp cho bạn 100 kHz hay không?).) và nhận được 100 kHz từ đó .. Điều này khá phức tạp mặc dù vậy bạn sẽ phải làm nhiều nghiên cứu hơn.

Ngoài ra, việc đặt ứng dụng của bạn thành thời gian thực sẽ giúp mặc dù nó sẽ tiêu hao lượng sử dụng CPU của bạn.

0

Đối với tất cả Repondents,

tôi đã cố gắng để làm cho nó rõ ràng rằng tôi không quan tâm đến việc đo lường một thời gian trôi qua nhưng hầu hết các câu trả lời gắn liền với chính xác điều đó.

Dường như tôi không truyền đạt đủ điểm của mình nên tôi sẽ thử lại. Tôi muốn tạo một sự kiện xảy ra 100.000 lần trong một khoảng thời gian 1 giây với chi phí CPU xấp xỉ 12%.

Chương trình mà tôi tham chiếu, Mach 3, tạo ra tần suất 108.000 khi người dùng đã chọn 100.000, nhưng tần suất rất ổn định. Tôi đề cập rằng để minh họa rằng độ chính xác của khoảng thời gian thực sự không quan trọng chỉ miễn là lỗi trong khoảng thời gian là nhất quán.

Tôi sẽ nhắc lại rằng Mach 3 hoạt động với chi phí CPU khoảng 12%. Tần số 108.000 được phát ra trên một chân cổng song song, nơi nó có thể được xác nhận với một phạm vi, mà tôi đã làm.

Những người trả lời khác hiểu được những gì tôi muốn thực hiện nhưng ví dụ của họ là đo số vòng lặp có thể xảy ra trong khoảng thời gian 1 giây trong khi thừa nhận rằng chi phí CPU sẽ không thể chấp nhận được.

Sự đồng thuận chung là những gì tôi muốn làm là không thể. Đối với những người phù hợp với ý kiến ​​đó, tôi sẽ khuyến khích bạn sử dụng Google Mach 3 CNC, tải xuống bản sao chương trình miễn phí và sau đó cài đặt nó. Chạy chương trình, sử dụng các tab để điều hướng đến trang chẩn đoán, bạn sẽ có thể tự mình thấy rằng thực tế là có thể. Chương trình ban đầu sẽ mở hoạt động ở tần số mặc định là 25kHz. Có thể thay đổi tần số bằng cách mở menu 'Config'/'Ports and Pins'/theo sau bằng cách chọn tần số mới và mở lại chương trình.

Diễn đàn như thế này có một số lượng lớn bài đăng liên quan đến chủ đề này và câu trả lời là, cho phần tốt hơn, giống như những gì tôi nhận được. Tôi đã cung cấp một ví dụ cho thấy rõ ràng rằng nó là CÓ THỂ, vì vậy chúng ta hãy tìm hiểu cách Mach 3 hoàn thành nhiệm vụ này.

C4C

+3

Nếu đây là một số câu hỏi lý thuyết bạn có thể có nhiều cảm tình hơn, nhưng nhìn thấy bạn muốn ngăn xếp ngăn xếp để làm việc miễn phí cho bạn để giúp bạn đánh bại đối thủ cạnh tranh của bạn, và bạn đang làm cho nó nhiều công việc hơn nó cần phải được ở đó (thay vì làm nó đúng với phần cứng phía ngoài), tôi tìm thấy khẳng định của bạn rằng tất cả mọi người là _wrong_ khá gây phiền nhiễu. Tại sao bạn không thuê một người biết làm thế nào để làm công cụ này thay vì cố gắng để có được những người khác để làm việc cho bạn miễn phí? Nếu không, nếu sự đồng thuận là đây không phải là một điều lành mạnh để làm trên một máy tính, có lẽ bạn nên lắng nghe lời khuyên. – Steve

+0

** Steve **, tôi rất muốn có thể thể hiện điều gì đó trong khoảng thời gian mà tôi đã dành cho vấn đề nhưng tiếc là tôi không có gì để thể hiện. Tôi hy vọng rằng hai năm tới sẽ hiệu quả hơn so với hai năm trước. Như bạn có thể thấy bằng các câu trả lời, đây không phải là một dự án phổ biến hoặc đơn giản. – user227239

0

Tôi đã làm việc với một router CNC bản thân mình thời gian gần đây sử dụng một hạt nhân Linux thời gian thực, các vấn đề mà bạn đang nhìn thấy là thiếu thời gian thực đòn phủ đầu trong các cửa sổ xp. Tôi không thể xem các công cụ Mach3 từ đây, nhưng cách duy nhất nó sẽ có thể làm việc là bằng cách sử dụng một trình điều khiển "mức hạt nhân" trong cửa sổ. (xin lỗi, tôi không thực sự là một người cửa sổ, vì vậy tôi không thực sự biết chi tiết cụ thể). Viết một số loại trình điều khiển để bỏ qua cửa sổ mặc định mô hình preemption là câu trả lời của bạn mặc dù, tôi sẽ bắt đầu bằng cách học một chút về trình điều khiển cửa sổ và có thể nhìn vào các bản vá lỗi thời gian thực cho hạt nhân Linux để tham khảo.

http://www.kernel.org/pub/linux/kernel/projects/rt/

+0

Raptor85, Có bạn đúng khi bạn nói rằng nó sẽ yêu cầu trình điều khiển nhân. Tôi có kinh nghiệm hạn chế với việc viết trình điều khiển hạt nhân, nhưng tôi sẽ có nhiều kinh nghiệm hơn khi công việc này đã được hoàn thành. C4C – user227239

1

Alright, sau khi đọc các tài liệu Mach 3 (được viết tốt, nhiều thông tin, và thậm chí buồn cười), tôi nghĩ rằng tôi nhìn thấy những gì đang xảy ra. Đầu tiên, nhận ra rằng có sự khác biệt giữa việc kích hoạt sự kiện không gian người dùng ở tần số cao và có một thường trình ngắt hạt nhân. Thói quen ngắt hạt nhân phải là nhanh và do đó không chứa nhiều logic, vì vậy thông thường chúng tôi nói rằng không thể có cuộc gọi lại tổng quát trong chương trình của bạn có thể phản hồi sự kiện ở tần số> 1 kHz. Hơn nữa, các hệ điều hành sử dụng bộ đếm giờ địa phương cho lịch biểu, quyết định khi nào các chương trình người dùng có thể chạy, và thường tốc độ lên lịch không lớn hơn 1 kHz, do đó không thể viết chương trình không gian người dùng đáp ứng nhanh hơn điều này.

Tuy nhiên, trong trường hợp này, bạn không cần phải phức tạp luận sử dụng không gian đáp ứng ở tốc độ đó, vì mục tiêu duy nhất là để điều chỉnh một đầu ra pin ở một tần số cao để tạo ra một Tín hiệu PWM. Nó có thể khả thi để tạo trình xử lý ngắt hạt nhân cho số APIC có mức ưu tiên cao và được kích hoạt ở tần số cao, nếu chỉ chỉ thực hiện những việc rất đơn giản như chuyển mã pin đầu ra trên cổng song song.

Vì vậy, nếu bạn muốn làm điều này, tôi khuyên bạn nên đọc về lập trình hạt nhân và sử dụng APIC, và bạn có thể đạt được điều gì đó hữu ích cho bạn. Tuy nhiên, một số lời khuyên:

  • Việc phân phối trình điều khiển bằng phần mềm của bạn là nỗi đau cho cả bạn và người dùng phải cài đặt trình điều khiển có thể hoạt động. (Phần cứng rất khó và nếu giải pháp của bạn phụ thuộc vào cấu hình máy tính rất cụ thể, số dặm của bạn có thể thay đổi.)
  • Việc chạy ngắt tần số cao sẽ làm hỏng máy tính và làm cho mọi thứ trở nên rất nóng. Bạn có thể nhận được quầy hàng hoặc màn hình màu xanh. Hãy chuẩn bị để đối phó với loại phiền toái này.
  • Nếu bạn thành công trong việc bật chốt LPT để đáp ứng với bộ hẹn giờ APIC, tôi khuyên bạn nên lấy thẻ mua hoặc dao động kỹ thuật số để đo không chỉ tần số, mà còn là số jitter. Bất kỳ tín hiệu phần mềm nào có xu hướng có nhiều jitter hơn, vì vậy hãy chú ý đến điều này. Jitter có hiệu quả làm tăng tiếng ồn trong tín hiệu của bạn. Ngoài ra, jitter có xu hướng không đổi, vì vậy ở tần số thấp, nó có thể không phải là vấn đề nhưng ở tần số cao, jitter có thể trở thành một tỷ lệ phần trăm lớn trong tổng thời gian của bạn, làm giảm đáng kể tỷ lệ tín hiệu trên nhiễu.
  • Nếu mục tiêu của bạn thực sự là chỉ tạo ra tín hiệu PWM hoặc xung để điều khiển động cơ bước, có một chút phần cứng ngoài thực sự là cách tốt nhất.Tôi sẽ trả lại một vài điểm phụ:
    • Trước tiên, nếu bạn đọc tài liệu Mach 3, chúng chứa phần về cách cách ly cổng song song của máy tính trong trường hợp có sự cố về điện. Nói cách khác, ngay cả khi bạn sử dụng cổng LPT tích hợp, một số phần cứng bên ngoài được khuyên dùng anyways chỉ để đảm bảo an toàn. Nếu bạn định làm điều này, bạn cũng có thể bao gồm một chip hẹn giờ 2 đô la.
    • Vì bạn đang tạo tín hiệu tần số cao nhưng chỉ điều khiển tín hiệu này ở tốc độ thấp hơn, không cần phải bẻ cong máy tính với nhiệm vụ thực sự tạo tín hiệu --- đây là chip hẹn giờ là cho.
    • Bộ vi điều khiển AVR có trọng lượng thấp $ 5 có thể nói chuyện với máy tính qua cổng USB và tạo tín hiệu PWM. Đây là một giải pháp rẻ hơn rất nhiều so với việc mua một bảng 100 đô la, nhưng nó phụ thuộc vào nhu cầu của bạn. (Ví dụ: mua bao nhiêu tín hiệu, v.v.) Ví dụ, mua Teensy và chỉ cắm nó vào cổng USB của máy tính và viết chương trình 5 dòng để điều khiển 7 đầu ra PWM được cung cấp. Ngay và luôn!
    • Nếu bạn tìm kiếm trực tuyến "PWM song song", bạn sẽ tìm thấy nhiều hướng dẫn về cách tạo tín hiệu PWM bằng cổng song song, nhưng chú ý rằng 99% trong số đó thực sự là hướng dẫn về cách điều khiển chip hẹn giờ bên ngoài đến cổng song song, không phải cách tạo tín hiệu PWM thực tế trực tiếp.

Cuối cùng, sau đây là một số tài liệu bạn có thể thấy hữu ích:

+0

Một vài điểm khác: * Người dùng của bạn sẽ ghét bạn vì đã khiến họ sử dụng cổng song song. Nó chỉ nhận được khó khăn hơn để tìm máy tính có một. * Trình điều khiển phân phối cho Windows Vista và 7 yêu cầu bạn phải mua chứng chỉ ký kết có thể gia hạn hàng năm. – Steve

+0

Steve, Thông tin tuyệt vời! Tôi đã thực hiện một chút tiến bộ trong dự án này. 1: Bằng cách sử dụng một chương trình được gọi là ** RW-Everyting ** Tôi có thể thấy rằng Mach 3 chắc chắn sẽ đặt lại ** Hẹn giờ hệ thống **. 2: Tôi đã tải về một chương trình fron diễn đàn CodeProject và nó cho thấy tất cả các ngắt và tần suất mà chúng xảy ra. ** Hẹn giờ hệ thống ** sử dụng IRQ 0 đang hoạt động ở cùng tần số mà Mach 3 đang hiển thị, nhưng nó không ổn định. – user227239

+0

Steve, tôi sẽ cố gắng giải thích sự khác biệt. Tôi biết rằng Mach 3 đang sử dụng hai bộ đếm thời gian ** Watchdog ** và tôi nghi ngờ rằng nếu ** Interrupt ** không xảy ra đúng lúc thì watchdog định thời gian làm thế nào để bù lại ngắt. (?) 3: Trong ** Bộ phát triển trình điều khiển Windows ** có một cuộc gọi trình điều khiển ví dụ ** event.c **. Như tên ngụ ý nó là một trình điều khiển gọi lại tăng một sự kiện trong một ứng dụng. Sau khi chỉnh thời gian lái xe tôi có nó chạy ở tần số gần như 100 kHz nhưng nó thiếu sự ổn định giống như ** Hẹn giờ hệ thống **. – user227239

0

thể bạn hãy thử sử dụng một cái gì đó giống như RTX IntervalZero của. Nó không phải là miễn phí, nó là một sản phẩm thương mại. Nó được viết để giới thiệu thời gian thực vào Windows (XP vv) Nó có một số giờ rất nhanh. theo số paper RTX này có bộ hẹn giờ có giá trị là 1 micro giây (trong khi Windows là 1000 micro giây)

Không chắc chắn giá \ giấy phép là như thế nào. Tôi đã dabbled với phiên bản eval.

0

Có vẻ như bạn cần một bộ đếm thời gian 555 (hoặc một tinh thể), một cổng AND và một cổng song song (hoặc thiết bị USB I/O kỹ thuật số). Bạn có thể giả mạo một DSP soundcard để làm một cái gì đó như thế này, nhưng tôi sẽ không đặt cược vào nó.

Bất kỳ bộ hẹn giờ nào bạn có thể tạo trên các cửa sổ sẽ chạy ở tốc độ yêu cầu sẽ bị ràng buộc CPU. Nó không phải là CPU tính toán không thể xử lý nó, nhưng bạn phải suy nghĩ về phần còn lại của các bộ phận chuyển động trên máy tính của bạn. Để có được tín hiệu 100 kHz đáng tin cậy từ mô phỏng phần mềm đến tín hiệu I/O phần cứng trên phần cứng tiêu chuẩn là một nhiệm vụ khá. Bạn sẽ I/O ràng buộc một lõi chỉ để có được mẫu tín hiệu phù hợp.

Một vài tùy chọn có thể là tạo một phích cắm vòng lặp cho cổng nối tiếp và sau đó phát với các mẫu bit và kiểu báo hiệu để nhận tín hiệu khá ổn định. Nhưng bạn sẽ được phục vụ tốt hơn để xây dựng hoặc mua một bảng điều khiển kỹ thuật số được thực hiện để kiểm soát một nhà máy CNC. Nếu bạn nhìn, hầu hết các thiết bị liên quan đến Mach 3 CNC đó là đề cập đến bảng điều khiển có cổng USB, RS-232 hoặc LPT.

(Ồ, và nói với mọi người rằng họ sai lầm thay vì có nhận xét mang tính xây dựng ...cũng không giúp bạn giành được bất kỳ người hâm mộ nào)

Các vấn đề liên quan