|
Tài trợ cho PIC Vietnam |
|
Ðiều Chỉnh | Xếp Bài |
27-03-2011, 12:45 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Sep 2010
Bài gửi: 6
: |
Trao đổi lập trình đồ án điều khiển động cơ DC dùng pic16f877a giải thuật PID số
Các bạn cho mình hỏi mình định dùng timer 0 ở chế độ counter để đếm xung encoder đưa về, timer 1 để tạo khoảng thời gian 10ms là tính tốc độ một lần như thế này có được không.Sau khi tính tốc độ mình muốn truyền lên máy tính nhưng chưa biết làm như thế nào và hiển thị tốc độ tức thời lên LCD khi có yêu cầu từ nút nhấn.Các bạn xem giúp mình tính toán có đúng không với.Mình mới lập trình được cho 2 cái timer thôi.Biến so_xung_encoder là mình đưa vào do chưa mua động cơ không biết encoder đếm được bao nhiêu xung trên một vòng
Code:
#include "def_877a.h" #use delay(clock=20000000) int16 count,so_vong_phut,int_count1; int8 So_xung_Encoder #define INTS_PER_SECOND1 2 #int_rtcc // Ngat Timer 0 void Timer0_isr() // Dem so xung tu encoder { count++; } #INT_TIMER1 // Chuong trinh ngat Timer 1 void Timer1_isr() { // Ham duoc goi khi Timer1 tran (65536->60536) // 2 lan tran moi tinh toc do mot lan // thoi gian tran la 4*(prescaler=1)*(65536-60536)*(count=2)/4/10^6=10ms if(--int_count1==0) { int_count1 = INTS_PER_SECOND1; so_vong_phut= (count*255 + get_timer0())/Soxung_Encoder*60/(10*10^-3); count = 0; set_timer0(0); } } void init() { int_count1 = INTS_PER_SECOND1; setup_timer_0 (RTCC_DIV_256|RTCC_EXT_H_TO_L); // Timer0 is Counter co thoi gian tran la 255*256/20/10^6=13.1ms>10ms set_timer0(0);// timer 1 dem tu 0 set_timer1(60536);// Timer 1 dem tu 60536 setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); // Timer1 is Timer enable_interrupts(INT_RTCC); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); count = 0; } thay đổi nội dung bởi: nothing101, 29-03-2011 lúc 01:08 AM. |
29-03-2011, 01:26 PM | #2 |
Nhập môn đệ tử
Tham gia ngày: Sep 2010
Bài gửi: 6
: |
Bạn nào biết giúp đỡ mình với......
|
31-03-2011, 10:23 PM | #3 |
Đệ tử 2 túi
|
mình cung lam đề tài này nhưng
timer0 => định thời để lấy xung encoder (8bit=255 ) timer1 => đếm xung encoder (16 bit = 65535 dếm cho sướng) timer2 thi cho pwm rui than. |
|
|