Chào các đại ca. Em là dân mới tập toẹ bước vào nghiên cứu AVR,có bài toán này muốn hỏi mọi người: Em có điện áp Analog biến đổi tuyến tính đưa vào chân ADC0, động bước được điều khiển bằng cồng PORTD, bây giơ em muốn khi điện áp analog tăng thì vận tốc của Động cơ bước tăng. Các bác có thể nói qua về thuật toán cho em. Xin cảm ơn.
Thông báo
Collapse
No announcement yet.
ADC + Động cơ bước
Collapse
X
-
Tui chưa làm, nhưng gợi ý bác làm thế này.
- cho ADC chạy ở chế độ free running.
- dùng mảng lưu các mẫu trạng thái bit điều khiển động cơ bước (4 mẫu -> 1 bước, 8 mẫu -> 1/2 bước)
- dùng ngắt timer để chuyển trạng thái bit.
- trong trình phục vụ ngắt, update giá trị TCNTn bằng giá trị ADC đọc được.
pseudo-code như sau:
array[]={0x01;0x02;0x04;0x08}
timer interrupt isr
{
update TCNTn=ADCW;
if(++i>4) i=0;
PORTD = array[i];
}
main
{
initialize ADC, Timer, PortD, các biến ...;
sei;
while(1);
}
Bác làm thử xem.Phen này ông quyết buôn băng dính,
Vừa bán vừa hm... hm... cũng đắt hàng.
-
Đó là một cách giải hay, đơn giản và hiệu quả. Xin phép miêu tả rõ hơn thuật toán để bạn đọc dễ hiểu:
- ADC chạy free running tức là chạy ở chế độ chuyển đổi liên tục, kênh đầu vào liên tục được lấy mẫu và chuyển đổi sang số, thanh ghi kết quả chuyển đổi cũng được liên tục cập nhật giá trị mới. Tất nhiên tất cả các bước trong quá trình chuyển đổi đều hoàn toàn tự động kể từ khi cho phép chạy.
- mảng chứa các mẫu bit đưa ra điều khiển đóng cắt lần lượt các cuộn dây (4 mẫu bit tương ứng với chế độ full-step, 8 mẫu bit tương ứng với chế độ hafl-step). Trong ví dụ của tác giả là chế độ full-step.
- sử dụng một timer, cho chạy liên tục và cho phép ngắt tràn. Mỗi khi tràn timer vì vậy sẽ gây ra ngắt, trong chương trình phục vụ ngắt (chương trình xử lý ngắt) tác giả sẽ đưa mẫu bit điều khiển tiếp theo ra để điều khiển động cơ quay bước (nửa bước) tiếp theo. Đồng thời trong chương trình phục vụ ngắt tác giả cũng cập nhật thanh ghi đếm của timer bằng với giá trị kết quả chuyển đổi ADC. Như vậy giá trị chuyển đổi ADC càng lớn thì giá trị được nạp lại của thanh ghi đếm cũng càng lớn, lần ngắt tràn tiếp theo sẽ đến càng nhanh hơn, dẫn đến thời gian cập nhật các mẫu bit ngắn hơn ---> các cuộn dây được chuyển trạng thái nhanh hơn ---> tốc độ nhanh hơn. Ngược lại với trường hợp giá trị chuyển đổi nhận được thấp.
Trong ví dụ của tác giả có vài điểm cần để ý nếu muốn giải quyết triệt để hơn:
- cần chọn timer có độ phân giải phù hợp (8 bit hay 16 bit), từ đó có giải pháp hợp lý cho việc cập nhật thanh ghi đếm từ kết quả chuyển đổi 10 bit.
- cần có thao tác chặn trên đối với trường hợp timer8 bit
- với timer 16 bit cần có hệ số cập nhật K x kết quả chuyển đổi 10 bit để đạt được tốc độ nhanh hơn
- ...
Cũng có thể dùng timer cho chạy tràn với chu kỳ cố định = n micro giây. Mỗi lần tràn sẽ kiểm soát một số đếm i xem đã đủ m lần tràn chưa, nếu đủ rồi thì mới đưa mẫu bit điều khiển tiếp theo ra. Giá trị ngưỡng m đó cũng sẽ được cập nhật là một hàm của giá trị chuyển đổi ADC. Do đó mà có thể tạo sự thay đổi ở tốc độ theo giá trị điện áp đưa vào chuyển đổi.
Thân mến,
blackmoon.
Comment
-
Để tăng tốc độ step motor, bác tăng tốc độ xung kích. Nhưng tăng tốc độ xung kích tới 1 lúc nào đó thì momen giảm. Nguyên nhân là lúc đó dòng chưa kịp tăng (theo hàm mũ) đến giá trị danh định thì xung kích đã chuyển qua kích cuộn dây khác rồi. Thời gian để dòng tăng đến giá trị danh định phụ thuộc vào 3 yếu tố: điện cảm cuộn dây, điện trở cuộn dây, và điện áp kích. Trong 3 cái đó, rõ ràng là bác chỉ có thể thay đổi điện áp kích được thôi.
Theo đó, một cách để tăng tốc độ step motor là kích theo kiểu "high voltage chopper". Theo cách này, điện áp kich sẽ lớn hơn điện áp danh định của motor (có thể từ 5 đến 10 lần), mỗi xung kích là 1 chùm xung. Dòng cuộn dây sẽ tăng nhanh (đến giá trị danh định), cho phép bác tăng tốc độ xung kích
Cách khác là kich xung có 2 mức: 1 mức lớn hơn điện áp danh định (nhưng hẹp) để dòng cuộn dây tăng nhanh (đến giá trị danh định), tạo momen lớn cho motor nhảy bước; mức thứ 2 thấp hơn để duy trì momen tĩnh. Dĩ nhiên lúc này mạch driver sẽ phức tạp hơn.
Hai cách trên bác nhớ là hiểu rõ mới làm nhé. nếu không thì sẽ có khói bốc lên cao từ mạch/motor của bác đấy.
Cách khác đơn giản hơn là bác kích 2 cuộn 1 lúc, mẫu bit lúc này là {0x03, 0x06, 0xC0, 0x09}. Kích như vậy momen sẽ tăng, do đó bác có thể tăng tốc độ xung kích lên, nhưng sẽ không tăng được nhiều.
Bác download file này xem thêm:
http://rapidshare.de/files/29356966/step.zip.html (1.25MB)Last edited by taolao; 14-08-2006, 20:24.Phen này ông quyết buôn băng dính,
Vừa bán vừa hm... hm... cũng đắt hàng.
Comment
-
Xin hỏi bác Taolao, em thử dùng phương pháp "high voltage chopper" như bác nói rồi nhưng không được bác ạ, Điện áp em đưa vào là 12V, mức danh định của Động cơ khoảng 3V. Nó vẫn quay bình thường, chỉ thấy động cơ nóng kinh khủng thôi. Bác có thể nói rõ hơn ở chỗ thay một xung bằng một chùm xung được không? Ví dụ: thời gian trễ giữa các xung trong một chùm...
Cảm ơn bác!Nỏ biết chữ mần răng ký được??!! Thôi nhé.
Comment
-
Ấy ấy, không biết bác làm thế nào mà để nó "nóng kinh khủng" thế. Tôi chưa làm cái này, nên chỉ nói cách làm thôi, không có sơ đồ cụ thể. Bác nào có cao kiến xin chỉ thêm.
- làm 1 mạch tạo xung vuông có thể chỉnh tần số được từ vài KHz đến vài chục KHz (đơn giản là dùng 4093, C103, VR50K).
- dùng cổng AND 2-input để điều chế xung kích (1 đầu vào lấy xung kích từ VĐK bác đã làm, 1 đầu vào lấy xung từ mạch dao động). Ngõ ra cổng AND kích các transistor công suất.
- gắn thêm điện trở 0.5ohm/5W nối tiếp với cuộn dây để xem dòng trên osciloscope (I=U/0.5), rồi từ đó mà chỉnh tần số ở mạch dao động. Lúc này bác chẳng cần quan tâm đến áp trung bình trên cuộn dây mà chỉ quan tâm đến dòng qua nó.
- Tăng dần tần số xung kích (ở VĐK), đồng thời chỉnh tần số mạch dao động sao cho dòng ko vượt quá giá trị danh định.
Đơn giản hơn bác có thể dùng L297. Xem http://www.kevinro.com/chpdrv.pdfPhen này ông quyết buôn băng dính,
Vừa bán vừa hm... hm... cũng đắt hàng.
Comment
-
Nóng là cái chắc. Động cơ 3V mà bác chạy ở 12 V vượt quá mức danh định nhiều đấy. Gắn thêm cho nó con trở công suất để điện áp rơi lên cuộn dây là 3V. Nếu ko thích gắn trở thì phải thiết kế mạch phản hồi dòng. Đến khi nào dòng tăng đến mức danh định thì băm cái xung điện áp trong khoảng 3 V (Mặc dù nguồn vẫn cấp 12V).The road ahead
Comment
-
Vấn đề ở đây sẽ nằm ở cái mạch công suất, bác chạy bình thường thì ko sao, dưng mà nếu định chopper thì phải đảm bảo cái mạch công suất chịu được tần số đóng cắt cỡ vài chục kHz.PNLab
Mạch nạp/debug ULink2, Jlink ARM USB
Mạch nạp AVR, PIC, 8051, MSP430 USB
Mạch phát triển STM32, ARM9, ARM11
more...www.pnlabvn.com
Comment
-
Nếu theo như bác Tinhthanthep thì tôi nghĩ là chẳng có tác dụng đâu ạ, bởi vì cấp áp bao nhiêu thì cuối cùng trên động cơ áp vẫn bằng 3V => Cấp luôn 3V trực tiếp vào động cơ cho đỡ tốn tiền trở công suất, bác nghĩ thế nào? Tôi chỉ chưa hiểu ở chỗ Chopper thôiNỏ biết chữ mần răng ký được??!! Thôi nhé.
Comment
-
Sao lại không tác dụng? Tôi nói phóng đại thế này cho dễ hiểu nhé. Nếu bác cấp 3 v cho động cơ thì phải mất 10 giây (nói phóng đại) thì dòng điện mới tăng được từ 0 A lên đến I A (dòng danh định). Nhưng nếu bác đặt 12V vào rồi mắc thêm con trở công suất để điện áp rơi trên cuộn dây vẫn là 3 V thì chỉ mất 1 s là dòng điện tăng từ 0A lên tới IA rồi. Như thế tốc độ động cơ của bác vọt lên đáng kể. Thời gian tăng của dòng điện từ 0A lên đến I A tính bằng công thức: t=5*L/R. Trong đó L là điện cảm của cuộn dây. R điện trở trong của cuộn dây. Vậy để giảm t thì phải tăng R. Tăng R bằng cách lắp thêm điện trở vào. Và để vẫn đảm bảo điện áp đặt lên cuộn dây là 3 V thì lại phải tăng điện áp nguồn lên 12V.The road ahead
Comment
-
Cảm ơn bác, hôm trước em có đọc một tài liệu nào đó nói về cái này, nhưng mà không hiểu lắm, bây giờ bác nói em mới rõ. Thế bác có biết tăng áp theo kiểu này thì nó quan hệ với tốc độ như thế nào không ạ? Ví dụ như tăng VCC 5 lần thì tốc độ tăng 10 lần.... chẳng hạn?Nỏ biết chữ mần răng ký được??!! Thôi nhé.
Comment
-
Phải biết phân biệt Momen và tốc độ, thời gian chuyển xung giữa các cuộn dây sẽ quyết định tốc độ, gián tiếp quyết định momen, chứ ko có quan hệ ngược lại
À, nói thêm, cái mạch của cậu ý mà, chạy được ở vài trăm Hz mà may rồi, muốn biết tại sao thì đọc sách nhé, cái này nói quá nhiều rồi!PNLab
Mạch nạp/debug ULink2, Jlink ARM USB
Mạch nạp AVR, PIC, 8051, MSP430 USB
Mạch phát triển STM32, ARM9, ARM11
more...www.pnlabvn.com
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Mua anten ở đâu?bởi tmcodonAnten bạn thu nguồn sóng nào vậy? Nếu xem truyền hình thì giờ k làm đc anten nữa rồi
-
Channel: Ăng ten và truyền sóng
Hôm qua, 15:34 -
-
Trả lời cho Mạch nguồn đôi dùng 7812 và 7912bởi tmcodonThank bác nhá. Tìm mãi mới thấy. Giờ vọc đã xem sao...
-
Channel: Hỗ trợ học tập
Hôm qua, 10:39 -
-
bởi tungdqEm cần tìm sơ đồ mạch một số Main máy tính đời cao như Asrock B560M-HDV, các cao nhân chỉ giúp với. Thank!
-
Channel: Các mạch điện ứng dụng
15-11-2024, 08:27 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment