![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 | |
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Vấn đề PWM của PIC 18F4331
Quả thật em đã đọc rất nhiều những bào hướng dẫn của các bác về PWM nhưng một điều rút ra là: không biết thế nào cả!
Em không biết vì sao: Một người mới tiếp xúc như em chưa nắm được những thứ mà các bác thảo luận. Giống như kiểu đàn gảy tai trâu ấy. EM có cảm tưởng các bác nói cho những người đã biết. nói qua nói lại cho vui còn những người mới vào ngồi ngó lơ như vịt nghe sấm chả hiểu đang nói cái gì. Lục datasheet ra căng mắt mà đọc thấy toàn những thanh ghi và cấu trúc. cũng có vẻ hơi hiêu hiểu. lôi mấy bài các bác viết ra lại mù tịt. hic hic. Có bác nào rộng lượng làm ơn viết cụ thể một chút đc không? Cụ thể như vầy nè: - Thanh ghi nào trong PIC đảm nhận việc điều khiển chế độ PWM - Phải thiết lập giá trị cho chúng như thế nào để có các chế độ PWM tương ứng và mỗi chế độ như vậy có công dụng gì. - Cuối cùng là viết chương trình như thế nào. Em dùng CSS, nó có một lô thư viện. tìm nát nước cũng không thấy mấy cái định nghĩa của mấy bác. kiểu như Trích:
Có ai có thể chỉ em bắt đầu như thế nào không vậy. |
|
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
Bạn hãy đọc datasheet, quên các hàm thư viện của CCS C đi, tự đặt giá trị cho các thanh ghi của module PCPWM của PIC để tạo tín hiệu PWM, và tìm hiểu kết quả bằng mô phỏng, thực nghiệm. Khi bạn đã nắm được cách dùng module rồi thì mới nên dùng các hàm thư viện. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 thay đổi nội dung bởi: namqn, 18-07-2008 lúc 11:39 PM. |
|
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Em cũng đã đọc rất nhiều bài viết của bác. Nhưng quả thật em gặp khó khăn trong 2 việc.
Thứ nhất là tiếng anh. Việc dịch datasheet gặp nhiều trắc trở. Có khi còn hiểu nhầm nghĩa. Thứ 2 là cấu trúc lệnh ASM cho pic quá rắc rối và em không có tài liệu hướng dẫn. Em đến với PIC nhờ một thằng bạn nó làm rồi nó chỉ lại. Nhưng giờ nó về quê mất rồi nên chẳng biết hỏi ai. mà nó toàn chỉ bằng C. Chính bant thân nó cũng chỉ biết ứng dụng thư viện chứ giải thích nguyên lý thì nó cũng ậm àh ậm ờ. Vậy giờ anh làm ơn chỉ lại cho em đc không. Viết một chương trình băm xung đơn giản nhưng đầy đủ cho em tham khảo đc không? về các thanh ghi em có thể tự tìm hiểu nhưng về cấu trúc lệnh em chịu anh có chỉ hãy viết thật cụ thể. chỉ cần vài bài cụ thể thì em có thể nắm đc phần nào rồi.
__________________
My home --> http://spktclup.com |
![]() |
![]() |
![]() |
#4 |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
to anh Nam,
em nghĩ thế mạnh của một trình dịch thể hiện ở chỗ nó có hỗ trợ cho người dùng nhiều hay không.CCS hỗ trợ rất nhiều,em không phủ nhận là phải hiểu gốc gác vấn đề,datasheet tất nhiên phải đọc.Nhưng em thiết nghĩ ,cái gì đã hỗ trợ sao lại không dùng,thời gian để nghiên cứu thứ khác . chẳng hạn,trong thiết lập PWM,nếu phải set các bit trong các thanh ghi Config PWM,eo ui,sẽ thật khó hiểu,cho bản thân,và cả cho người khác khi đọc chương trình,trong khi trong Help của CCS có hẳn các Built in Funtion, các lệnh C thật dễ hiểu để thiết lập,dễ chỉnh sửa chương trình sau này. |
![]() |
![]() |
![]() |
#5 | |
Trưởng lão PIC bang
|
Trích:
Quan niệm của tôi về thế mạnh của trình biên dịch lại khác: khả năng biên dịch hiệu quả, và khả năng khai thác tài nguyên giới hạn của chip. Bạn không thích thiết lập các thanh ghi cho module PCPWM thì cứ dùng các hàm thư viện đã có sẵn, còn tôi thích làm việc đó, và không loại trừ khả năng có một số bạn khác cũng thích. Nói như bạn thì có lẽ bạn gong05sk nên đọc lại tài liệu hướng dẫn của CCS C, vì có vẻ như bạn ấy chưa hiểu được những hàm thư viện dễ hiểu đó. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#6 |
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Vâng, cảm ơn 2 bác. Em đã trình bày rõ quan điểm cuả mình rồi mà. em muốn học một cách căn bản cơ. ASM tuy khó và rắc rối nhưng chắc rồi sẽ quen. giống cái thời tập tành 8051 thôi. Về thanh ghi cũng có nắm bắt đôi chút nhưng gần 18 trang nói về PWM trong sách lại toàn tiếng anh. không có đoạn demo nào để có thể nắm bắt đc.
EM chỉ hi vọng các bác có thể hướng dẫn em một chút. EM thiết nghĩ việc viết lại một chút kiến thức cơ bản đâu có gì là khó lắm đối với các bác. chỉ tốn chút thời gian thôi mà. Một chương trình viết sẵn thì em nghĩ các bác có cả đống sao không copy lấy một cái đơn giản rồi đưa lên làm ví dụ. để em dựa vàp đó mà chỗ nào không hiểu thì hỏi tiếp. Như thế vừa nhanh gọn vừa đỡ mắc công hỏi đi hỏi lại rồi chẳng đc gì cả. Thôi thế này nhé. EM ví dụ cái mạch sau đây: - Tần số thạch anh sử dụng là 4MHz. - Tạm thời không quan tâm tới dòng áp hay các thông số khác. chỉ để tâm tới nguyên lý mà thôi. ânh viết hộ em một chương trình băm xung mẫu để em học tập đc chứ? ![]()
__________________
My home --> http://spktclup.com thay đổi nội dung bởi: gong05sk, 19-07-2008 lúc 12:38 AM. |
![]() |
![]() |
![]() |
#7 | |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
Trích:
Tui cũng "bầm dập" với con 4331 rùi nên tui cũng hiểu cái khó của bác bây giờ! xin trình bày với các bác qui trình làm việc với PWM 18f4331/4431 hồi trước của tui : - PWM là gì,cái này bác biết rùi nhẩy? - Giở datasheet 4331 ra,thấy có 8pin power PWM,mừng hớn hở,à phen này là điều được 8 DC motor rùi đây!!!??? - lại còn 2 khối CCP(CAPTURE/COMPARE/PWM) nữa,lại 2 kênh điều xung khác,chẳng lẽ điều được 10 motor???? - Đọc kỹ datasheet lại,tại sao lại là power PWM và PWM trong CCP, có khác biệt gì không? Thực ra Power PWM chính là điểm khác biệt giữa dòng 18FXX31 so với các Pic 18 khác.Nó là thứ mà những ai cần 1 công cụ mạnh trong điều khiển động cơ DC. quay lại với vấn đề về 8 pin PWM (PWM0-PWM 7).Đúng là mừng hụt thật, đó là 8 chân output PWM của 4 module PWM .nghĩa là sao,nghĩa là các bác chỉ có thể điều khiên PWM 4 DC motor với 4 module này.thế tại sao lại là 8 chân PWM,đó là nó có thể thiết lập để điều khiển cầu H.Tớ thì lại không dùng cầu H,không lẽ lại bỏ phí 1 chân còn lại của 1 module à? còn cái CCP PWM,đúng là có thể dùng để đk thêm 2 dc nữa,tổng cộng là có thể đk 6 dc trên PIC 4331. - Giở CCS,mở help ra,vào built in funtions: CAPTURE/COMPARE/PWM có ngay SET_POWER_PWM_OVERRIDE( ) SETUP_CCP2( ) SET_POWER_PWMX_DUTY( ) SETUP_CCP3( ) SET_PWM1_DUTY( ) SETUP_CCP4( ) SET_PWM2_DUTY( ) SETUP_CCP5( ) SET_PWM3_DUTY( ) SETUP_CCP6( ) SET_PWM4_DUTY( ) SETUP_POWER_PWM( ) SET_PWM5_DUTY( ) SETUP_POWER_PWM_PINS( ) SETUP_CCP1( ) - cái cần wan tâm chính là SETUP_POWER_PWM_PINS( ) ;SETUP_POWER_PWM( );SET_POWER_PWMX_DUTY( ) để làm việc với Power PWM. Có vẻ gần được rùi đấy,mày mò xí nữa!!! bác phải làm rùi tớ mới hd tiếp được! |
|
![]() |
![]() |
![]() |
#8 |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
gong05sk.
Proteus không thích hợp để mô phỏng đk động cơ,bắt tay vào làm phần cứng đi.Driver fet nối với 1 trog các chân pwm 1,3,5,7 hoặc 2 khối ccp1,ccp2. đòi hỏi một chương trình điều xung tự viết thì đâu cần dùng tới 4331 làm gì,chẳng qua là gọi một chức năng đã tích hợp sẵn trong chip ra mà dùng thui. |
![]() |
![]() |
![]() |
#9 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#10 | |
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Chài ai. đã bảo là bỏ qua mấy thông số đi mà. Thoáng một chút đi. do vẽ vội quá nên nó mới nhầm tai hại thế. Thông cảm tý đi. Em đã sửa cái hình lại cho đúng rồi đó.
Giờ quay lại vấn đề chính. Cám ơn bác Macintosh đã chỉ. em thấy mấy cái hàm mà bác nói. nhưng chẳng biết để làm gì cả. Nhưng em nghĩ thế này bác xem có đúng không? ![]() Nhưng vấn đề của em ở đây là quá gà để viết đc cái chương trình con đó. Bác có thể viết hộ không chỉ một ví dụ nhỏ thôi. đơn giản nhất có thể thôi. ^^! please. --- Ngồi đọc một hồi cũng ngộ ra đc chút chút về cái Setup_ccp. Phát biểu lên mấy anh xem sai chỗ nào chỉnh hộ với nhé. setup_ccp1 (mode) -- đặt chế độ time cho module 0 mà cụ thể là chân RB0 và RB1 setup_ccp2 (mode) -- đặt chế độ time cho module 1 mà cụ thể là chân RB2 và RB3 setup_ccp3 (mode) -- đặt chế độ time cho module 2 mà cụ thể là chân RB4 và RB5 setup_ccp4 (mode) -- đặt chế độ time cho module 3 mà cụ thể là chân RB6 va RB7 setup_ccp5 (mode) -- đặt chế độ time cho module 4 mà cụ thể là chân LFTA (RC1) setup_ccp6 (mode) -- đặt chế độ time cho module 5 mà cụ thể là chân LFTB (RC2) Các chế độ mode có thể là: CCP_OFF -- tắt chế độ ccp CCP_CAPTURE_FE -- cái này không biết CCP_CAPTURE_RE -- cái này cũng không nốt CCP_CAPTURE_DIV_4 -- chế độ time = xung clock/4 việc này tương ứng với việc set 2 bit DTPS1 và DTPS0 mức 01 có phải không ạ. CCP_CAPTURE_DIV_16 -- chế độ time = xung clock/16 việc này tương ứng với việc set 2 bit DTPS1 và DTPS0 mức 11. CCP_COMPARE_SET_ON_MATCH -- cái này thiết lập mức tích cực ngõ ra là mức 1 CCP_COMPARE_CLR_ON_MATCH -- món này thiết lập mức tích cực ngõ ra là mức 0 CCP_COMPARE_INT --> hẻm biết là giống gì. CCP_COMPARE_RESET_TIMER --> reset time làm gì cũng không biết nốt. CCP_PWM -- cho phép chế độ PWM. ------ Như vậy sau khi tìm hiểu, với sơ đồ mạch như em vẽ thì rõ ràng muốn đưa tín hiệu băm xung ra chân RB0 thì phải cho phép PWM tại CCP1. Nhưng vấn đề nảy sinh là cái chế độ time = clock/4 cũng khai báo trong đó. vậy chẳng nhẽ viết 2 câu lệnh như nhau mà giá trị mode khác nhau àh? Trích:
__________________
My home --> http://spktclup.com thay đổi nội dung bởi: gong05sk, 19-07-2008 lúc 02:52 AM. |
|
![]() |
![]() |
![]() |
#11 |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
có vẻ bác đang định dùng PWM của CCP module,thế thì để tui nói về cái này trước:
một đoạn code do tui set nhe: void pwm_ccp() { setup_ccp1(CCP_PWM); // xuất PWM ra chân RC2 setup_ccp2(CCP_PWM); // xuất PWM ra chân RC1 setup_timer_2(T2_DIV_BY_1, 115, 1); // cal đi,trong datasheet phần CCP có cong thức //đó :115 là giá trị nạp vào timer2---> quyết //định tần số PWM } có một điều,xung xuất ra tích cực mức 1,nghĩa là mức duty max sẽ cho ra mức high luôn. => set_pwm2_duty(duty2); // xuất PWM, duty là biến set_pwm1_duty(duty1); chú ý,duty có giới hạn,đến khi duty max thì dù có tăng nữa thì chân output cũng luôn ở mức cao! |
![]() |
![]() |
![]() |
#12 |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
setup_ccp1 (mode) -- đặt chế độ time cho module 0 mà cụ thể là chân RB0 và RB1
setup_ccp2 (mode) -- đặt chế độ time cho module 1 mà cụ thể là chân RB2 và RB3 setup_ccp3 (mode) -- đặt chế độ time cho module 2 mà cụ thể là chân RB4 và RB5 setup_ccp4 (mode) -- đặt chế độ time cho module 3 mà cụ thể là chân RB6 va RB7 setup_ccp5 (mode) -- đặt chế độ time cho module 4 mà cụ thể là chân LFTA (RC1) setup_ccp6 (mode) -- đặt chế độ time cho module 5 mà cụ thể là chân LFTB (RC2) // sai ,pic 18fxx31 chỉ có 2 module CCP1,CCP2 .tui đã set bên trên rùi. |
![]() |
![]() |
![]() |
#13 |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
còn về chức năng Power PWM,tui đã config rùi,xem tại đây:
http://picvietnam.com/forum/showthre...ghlight=config |
![]() |
![]() |
![]() |
#14 | |
Trưởng lão PIC bang
|
Trích:
http://www.picvietnam.com/forum/showthread.php?t=2623 Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#15 |
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Hic mấy bác nghĩ rằng em đang ở mức nào mà không thèm chỉ vầy trời. Hướng dẫn cho người chưa biết gì khác với nói chuyện với người đã biết chứ. làm ơn viết dùm em một bài tập nhỏ như em đã ví dụ bên trên để em hình dung ra quá trình xử lý công việc cần làm là như thế nào. mấy bác gợi ý, mấy bác hướng dẫn em có thể nắm đc. nhưng cái quan trọng nhất là viết như thế nào thì em lại không biết. vậy nên mới tha thiết yêu cầu các bác viết ví dụ cụ thể từ A->Z hộ với. nếu là ASM thì làm ơn viết hết nguyên một chương trình. Quả thật là cấu trúc bộ nhớ pic em cũng còn chưa nắm đc. Nếu viết bằng C thì bác sử dụng thư viện nào, viết thêm hàm nào thì làm ơn viết hết ra dùm cái. Thiết nghĩ với một Ví dụ đơn giản như trên thì chương trình có là bao đâu sao các bác cứ khó dễ mãi thế.
__________________
My home --> http://spktclup.com |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|