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 20-02-2008, 10:50 PM   #1
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   #2
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   #3
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   #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
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
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à 08:50 PM.


Đượ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