PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 13-02-2008, 11:39 PM   #1
manhha2799
Đệ tử 5 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 121
:
Send a message via Yahoo to manhha2799
Việc dùng PWM trong pic 16f877a

Các bác cho em hỏi;
+ Mình có thể dùng chân ccp1 để tạo xung PWM cho động cơ 1 chạy, và dùng chân ccp1 này để tạo xung PWM cho động cơ 2 chạy không. Với điều kiện khi tạo động cơ 1 chạy thì động cơ 2 không chạy và ngược lại. Em tính dùng chân CCP1 tạo xung + ngắt cạnh lên H_TO_L cho động cơ 1, và tạo xung + ngắt cạnh xuống L_TO_H cho động cơ 2 được không.
Xin các bác nào có kinh nghiệm trả lời.
manhha2799 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-02-2008, 11:53 PM   #2
manhha2799
Đệ tử 5 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 121
:
Send a message via Yahoo to manhha2799
void dongco1(int8 speed1)
{
setup_ccp1(CCP_PWM_H_L); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_16, 255,1);
set_pwm1_duty (speed1); tốc độ động cơ 1
}
void dongco2(int8 speed2)
{
setup_ccp1(CCP_PWM_L_H); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_16, 255,1);
set_pwm1_duty (speed2); tốc độ động cơ 2
}
Khi dùng cho động cơ nào em gọi hàm động cơ đó. Không biết như thế này có được không?
manhha2799 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-02-2008, 12:35 AM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi manhha2799 View Post
Các bác cho em hỏi;
+ Mình có thể dùng chân ccp1 để tạo xung PWM cho động cơ 1 chạy, và dùng chân ccp1 này để tạo xung PWM cho động cơ 2 chạy không. Với điều kiện khi tạo động cơ 1 chạy thì động cơ 2 không chạy và ngược lại.
Tất nhiên là được, vì xét về bản chất, tại bất kỳ thời điểm nào, bạn cũng chỉ cần 1 tín hiệu PWM.
Trích:
Nguyên văn bởi manhha2799 View Post
Em tính dùng chân CCP1 tạo xung + ngắt cạnh lên H_TO_L cho động cơ 1, và tạo xung + ngắt cạnh xuống L_TO_H cho động cơ 2 được không.
Xin các bác nào có kinh nghiệm trả lời.
Đây là một trong những cách khả thi. Tất nhiên về phía đầu vào thì bạn phát hiện cạnh để chọn động cơ được cấp PWM, nhưng phía đầu ra của PIC bạn cũng nên dùng thêm ngõ ra để hiện thực việc lái tín hiệu PWM đến động cơ cần được truyền động.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-02-2008, 12:37 AM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi manhha2799 View Post
void dongco1(int8 speed1)
{
setup_ccp1(CCP_PWM_H_L); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_16, 255,1);
set_pwm1_duty (speed1); tốc độ động cơ 1
}
void dongco2(int8 speed2)
{
setup_ccp1(CCP_PWM_L_H); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_16, 255,1);
set_pwm1_duty (speed2); tốc độ động cơ 2
}
Khi dùng cho động cơ nào em gọi hàm động cơ đó. Không biết như thế này có được không?
Bạn xem gợi ý ở post trên của tôi. Việc CCP module tạo ngắt khi chuyển từ cao xuống thấp hay từ thấp lên cao không liên quan đến việc lái tín hiệu PWM đến động cơ ở mạch ngoài. Bạn cần hiện thực thêm logic lái tín hiệu PWM đến động cơ cần được truyền động.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-02-2008, 06:48 PM   #5
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi namqn View Post
Bạn xem gợi ý ở post trên của tôi. Việc CCP module tạo ngắt khi chuyển từ cao xuống thấp hay từ thấp lên cao không liên quan đến việc lái tín hiệu PWM đến động cơ ở mạch ngoài. Bạn cần hiện thực thêm logic lái tín hiệu PWM đến động cơ cần được truyền động.

Thân,
cho em hỏi câu này,(anh thong cảm vì em đã hỏi câu này rùi nhưng em chưa đọc câu trả lời mà cũng ko bít ở bài nào):
em có thể làm 1 chân pic bình thường thành 1 chân có điều xung có được ko ạ(đc hay ko thôi ạ?)
anh_gioi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-02-2008, 06:52 PM   #6
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
cho em hỏi câu này,(anh thong cảm vì em đã hỏi câu này rùi nhưng em chưa đọc câu trả lời mà cũng ko bít ở bài nào):
em có thể làm 1 chân pic bình thường thành 1 chân có điều xung có được ko ạ(đc hay ko thôi ạ?)
Được, tất nhiên khả năng của nó không mạnh như chân PWM của một module ngoại vi.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-02-2008, 06:55 PM   #7
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi namqn View Post
Được, tất nhiên khả năng của nó không mạnh như chân PWM của một module ngoại vi.

Thân,
như vậy ko biết giải thuật của nó có khó khăn không ạ.chẳng là em chỉ có con 16F877A mà cần 3 chân điều xung nên mới cần như vậy.
nếu anh có doạn mã code cho em thì hay quá.
thank anh nhìu
anh_gioi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-02-2008, 07:12 PM   #8
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
như vậy ko biết giải thuật của nó có khó khăn không ạ.chẳng là em chỉ có con 16F877A mà cần 3 chân điều xung nên mới cần như vậy.
nếu anh có doạn mã code cho em thì hay quá.
thank anh nhìu
Giải thuật thì đơn giản chứ không phức tạp lắm, tuy nhiên, bạn nên nêu vấn đề cụ thể của bạn một cách chi tiết hơn. Trong một số trường hợp nhất định thì bạn không cần tạo thêm chân điều chế độ rộng xung. Điều quan trọng là tại một thời điểm bất kỳ thì bạn cần có bao nhiêu tín hiệu PWM khác nhau, thông tin này cần được xác định theo mạch công suất của bạ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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-02-2008, 10:50 PM   #9
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Em có ý kiến thế này.em dùng con 16F877A để điều khiển 3 động cơ cùng 1 lúc bằng cách dùng 2 chân pwm của PIC :
em hỏi la có thể dùng 1 chân pwm để điều khiển 1 lúc 2 động cơ được ko?khi điều khiển 1 động cơ riêng lẻ thì qua 1 con (như dạng phân kênh) đc ko ạ?
anh_gioi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2008, 01:47 AM   #10
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
Em có ý kiến thế này.em dùng con 16F877A để điều khiển 3 động cơ cùng 1 lúc bằng cách dùng 2 chân pwm của PIC :
em hỏi la có thể dùng 1 chân pwm để điều khiển 1 lúc 2 động cơ được ko?khi điều khiển 1 động cơ riêng lẻ thì qua 1 con (như dạng phân kênh) đc ko ạ?
Bạn có thể dùng cùng 1 tín hiệu PWM để điều khiển n động cơ khác nhau, với điều kiện là chúng sử dụng cùng độ rộng và tần số xung nếu chạy đồng thời. Nếu trong một khoảng thời gian bất kỳ nào chỉ có 1 trong số n động cơ đó cần được truyền động thì không có điều kiện ràng buộc gì cả.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2008, 02:52 AM   #11
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
cach dieu xung

Trích:
#include "C:\Documents and Settings\anh gioi\Desktop\dieu xung\dieu xung02.h"
#use fast_io(b)
#byte portb = 0x06
void ccp1(){
int8 a;
setup_timer_2(T2_DIV_BY_1,255,1);
SETUP_CCP1(CCP_PWM);

while(true){
for(a=1;a<1024;a++){
set_pwm1_duty(a);
delay_ms(2);
}
delay_ms(20);
for(a=1023;a>1;a--){
set_pwm1_duty(a);
delay_ms(2);
}}}

void ccp2(void){
int b;

setup_timer_2(T2_DIV_BY_1,255,1);
SETUP_CCP2(CCP_PWM);

while(true){
for(b=1;b<1024;b++){
set_pwm1_duty(b);
delay_ms(2);
}
delay_ms(20);
for(b=1023;b>1;b--){
set_pwm1_duty(b);
delay_ms(2);
}}}
void main(){

void ccp1(void);
void ccp2(void);
set_tris_b(0xff);
while(true){
if(input(pin_b0)==0)
ccp1();
else
ccp2();
}


}
code này có chỗ nào sai vậy anh? em ko cho hiển thi ccp2 được???
anh_gioi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2008, 05:38 AM   #12
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trong phần code trên, trong các hàm ccp1() và ccp2() bạn dùng vòng lặp while(true) { ... }, điều này là không nên, vì khi bạn gọi một trong những hàm đó thì chương trình sẽ không thể trở về chương trình gọi (là main() trong trường hợp của bạn). while(1) { ... } hay while(true) { ... } chỉ nên được dùng trong main().

Ngoài ra, bạn xem lại trong ccp2(), bạn setup CCP2 xong lại thay đổi duty cycle của pwm1.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2008, 10:34 AM   #13
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
ko dùng while() trong hàm ccp-->vâng.
anh có thể nói rõ hơn cái sai về hàm ccp2() của em được ko ạ? và em có thể dùng pwm2 được ko?(xloi anh vì em đợc datasheet nhưng chưa hỉu)
anh_gioi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-02-2008, 12:34 AM   #14
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Smile

Trích:
Nguyên văn bởi anh_gioi View Post
ko dùng while() trong hàm ccp-->vâng.
anh có thể nói rõ hơn cái sai về hàm ccp2() của em được ko ạ? và em có thể dùng pwm2 được ko?(xloi anh vì em đợc datasheet nhưng chưa hỉu)
cai ham ccp2() của bạn sai ở chỗ bạn set nhầm duty của kênh ccp1 đó. đáng lẽ phải là " set_pwm2_duty(b);" chỉ vậy thôi.
__________________
_________________________________________________
Le Trung Duc
Industry Research & Application Center
NTT Institute of Hi_technolog
ltduc@ntt.edu.vn
leduc_cktd@yahoo.com.vn
http://www.nttc.edu.vn
CNC DIY : http://quangcaosanpham.com/shop/driverservo
0909300332
LeDuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-02-2008, 01:04 AM   #15
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Trích:
Nguyên văn bởi namqn View Post
Tất nhiên là được, vì xét về bản chất, tại bất kỳ thời điểm nào, bạn cũng chỉ cần 1 tín hiệu PWM.

Đây là một trong những cách khả thi. Tất nhiên về phía đầu vào thì bạn phát hiện cạnh để chọn động cơ được cấp PWM, nhưng phía đầu ra của PIC bạn cũng nên dùng thêm ngõ ra để hiện thực việc lái tín hiệu PWM đến động cơ cần được truyền động.

Thân,
Nguyên văn bởi manhha2799
Các bác cho em hỏi;
+ Mình có thể dùng chân ccp1 để tạo xung PWM cho động cơ 1 chạy, và dùng chân ccp1 này để tạo xung PWM cho động cơ 2 chạy không. Với điều kiện khi tạo động cơ 1 chạy thì động cơ 2 không chạy và ngược lại.

Tất nhiên là được, vì xét về bản chất, tại bất kỳ thời điểm nào, bạn cũng chỉ cần 1 tín hiệu PWM.

Trích:
Nguyên văn bởi manhha2799
Em tính dùng chân CCP1 tạo xung + ngắt cạnh lên H_TO_L cho động cơ 1, và tạo xung + ngắt cạnh xuống L_TO_H cho động cơ 2 được không.
Xin các bác nào có kinh nghiệm trả lời.

Đây là một trong những cách khả thi. Tất nhiên về phía đầu vào thì bạn phát hiện cạnh để chọn động cơ được cấp PWM, nhưng phía đầu ra của PIC bạn cũng nên dùng thêm ngõ ra để hiện thực việc lái tín hiệu PWM đến động cơ cần được truyền động.

Thân,
Cho em hỏi cái này hơi chuối một chút , em ko hiểu "cách dùng chân CCP1 tạo xung + ngắt cạnh lên H_TO_L cho động cơ" là sao cả?.
Vậy ngắt này được tạo ra do đâu ? Có phài là ngắt của khối CCP kô ? nếu vậy thì chân ccp1 phải nhận được tín hiệu ngắt , sau khi có ngắt xảy ra nó sẽ tạo ra tín hiệu pwm phải ko ?
Nếu đúng như vậy thì khi có xung ngắt vào chân ccp , thì con lái (driver) mạch điều khiển động cơ cũng nhận được tín hiệu đó , như thế sẽ có ảnh hưởng đến việc điều khiển hả anh ?
#define CCP_PWM_H_H 0x0c
#define CCP_PWM_H_L 0x0d
#define CCP_PWM_L_H 0x0e
#define CCP_PWM_L_L 0x0f
trong ccs nó co chỉ như vậy nhưng em kô hiểu , rất mong các anh chỉ giúp ..
Thanks for all !!
__________________
_________________________________________________
Le Trung Duc
Industry Research & Application Center
NTT Institute of Hi_technolog
ltduc@ntt.edu.vn
leduc_cktd@yahoo.com.vn
http://www.nttc.edu.vn
CNC DIY : http://quangcaosanpham.com/shop/driverservo
0909300332
LeDuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:20 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam