PDA

View Full Version : Pwm


tranvu_hop
24-01-2007, 10:04 AM
Em có 2 cách viết như thế này để điều khiển công suất động cơ mức 50 %

C1:
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_16, 249, 1);
set_pwm1_duty(500L);

C2:
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_16, 249, 1);
set_pwm1_duty(125);

cách nào đúng??

namqn
24-01-2007, 06:32 PM
Em có 2 cách viết như thế này để điều khiển công suất động cơ mức 50 %

C1:
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_16, 249, 1);
set_pwm1_duty(500L);

C2:
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_16, 249, 1);
set_pwm1_duty(125);

cách nào đúng??
Cách 1 đúng. Sao không chạy thử chương trình trên chip thật?

Thân,

tranvu_hop
25-01-2007, 08:51 AM
Em muốn hỏi là tại sao fải để là
set_pwm1_duty(500L)
500L, nếu bỏ L đi thì sao, em chưa hiểu chỗ này. Mong các anh chỉ đáp

nhh
25-01-2007, 10:51 AM
Em muốn hỏi là tại sao fải để là
set_pwm1_duty(500L)
500L, nếu bỏ L đi thì sao, em chưa hiểu chỗ này. Mong các anh chỉ đáp

Lệnh set_pwm1_duty(value); dùng xác định duty cho xung PWM trên chân CCP1.

Tùy theo kiểu của value mà cách tính khác nhau.

- Nếu value là giá trị kiểu int 8bit thì CCS C sẽ dịch trái 2 bit để đủ 10bit

Công thức tính: %duty = value/(PR2 +1)*100%

- Nếu value là giá trị long int 16bit thì CCS C sẽ bỏ đi 4 bit cao

Công thức tính: %duty = (value & 1023)/(4*(PR2 +1))*100%

Chú ý rằng nếu bác set giá trị duty vượt quá 100%, thì ôi thôi chân điều chế xung nó không bị xóa về mức thấp nữa.

Hai đoạn code sau đều cho giá trị duty 50% trên chân CCP1:

int value = 128;
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);
set_pwm1_duty(value);


int16 value = 512;
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);
set_pwm1_duty(value);


Hôm sau sẽ gởi cho mấy bác chương trình tính toán pwm trực quan, đơn giản nhưng hiệu quả.

tranvu_hop
25-01-2007, 06:10 PM
Cảm ơn bạn đã trả lời, câu trả lời của bạn dễ hiểu quá !

namqn
25-01-2007, 06:19 PM
Cám ơn bạn nhh!

Tôi không dùng CCS C nên không trả lời tốt như những bạn đã dùng CCS C nhiều. Mong các bạn hỗ trợ cho các thành viên trên diễn đàn hơn nữa, vì riêng một ai đó đều không thể hỗ trợ mọi thứ thật tốt được.

Thân,

nhh
27-01-2007, 09:46 AM
http://i82.photobucket.com/albums/j257/nhhao/CCS_C_PWM.gif

tranvu_hop
27-01-2007, 08:39 PM
http://i82.photobucket.com/albums/j257/nhhao/CCS_C_PWM.gif

Đang ký cái file *.ocx như thế nào ấy nhỉ ?
Nếu ko máy ko nhân ?
Nó báo thiếu file Comctl32.ocx

nhh
28-01-2007, 06:36 PM
Chương trình viết bằng VB, bạn cài VB thì OK, nếu ko xem thiếu các file cần thiết nào thì tìm đặt vào cùng thư mục đó.

che
22-06-2007, 11:20 PM
em mới gia nhập gia đình Pic,em thấy các bài viết của bác nhh rất hay,dễ hiểu ,em mới mua được con 18F4431 để điều khiển 2 động cơ một chiều từ máy tính,nếu bác đã làm con này rồi thì xin bác cho em một số lưu ý về nó nhé để em làm nhanh hơn ,khỏi mò mẫm lâu lắm bác ạ. thanks bác !

hvktdk9
12-07-2007, 05:12 PM
Trong chương trình bạn đã khai báo cấu hình cho Pic là cho phép sử dụng chế độ PWM chưa. Cái này rất quan trọng trong việc sử dụng PWM.

tmtm
08-10-2007, 04:36 PM
Các anh chỉ giúp em các thông số trong dòng lệnh:
setup_timer_2(T2_DIV_BY_16, 255, 1);
có nghĩa gì? E chưa hiểu? và nếu lập trình để điều chỉnh tốc độ động cơ DC thay đổi trơn từ một giá trị này tới một giá trị khác thì phải viết thế nào? và thay đổi tốc đọ nhảy cấp thì làm thế nào?

Nguoidumuc204
10-10-2007, 11:44 AM
Các bác cho em hỏi là tại sao chương trình em viết thế này mà không chạy,
Em mới ra nhập làng PIC nên chưa hiểu rõ lắm.

#include <16F877.h>
#use delay(clock = 4000000)
#include <lcd.c>
#FUSES NOWDT , HS , NOPROTECT

unsigned char i=0 ;
int16 a ,b;

#int_TIMER0
void TIMER10_isr(void)
{
i++;
if (i>=255) i=0;
}

void main()
{
lcd_init();
delay_us(10);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
while(1)
{
TIMER1_isr();
lcd_gotoxy(1,1);
printf(lcd_putc," timer is : %u",i);
}
}

Kết quả là màn hình LCD trắng rã ,chẳng nhìn thấy gì thay đổi cả.

tmtm
17-10-2007, 06:10 PM
Câu hỏi của em thiếu 'Iốt' quá hay sao mà chẳng thấy ai thèm bắt nhời cả vậy. Anh nào giúp em đi, được ý nào, em cảm ơn ý đó!

Mr.Bi
18-10-2007, 12:33 AM
thạch anh 4M thì khai báo là XT chứ ko phải là HS bạn ơi !