![]() |
|
Tài trợ cho PIC Vietnam |
Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#31 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 44
: |
SRF05 + PIC16F877A do khoảng cách
em đang dùng SRF05 + PIC16F877A do khoảng cách nhưng công lực còn yếu quá mong các bác có công lực thâm hậu chỉ em với .
về phần cứng cụ thể như sau : con srf05 có hai chế độ hoạt động đó là : -MOde1 : kết nối 2 chân trigger và echo vào 2 chân i/o của VDK -Mode2 : sử dụng chân của VDK để gửi tín hiệu trigger và nhận tín hiệu echo từ con srf05 em sư dụng chế độ Mode 2.kết nối chân RB0 với chân trigger/echo của con srf05. trên con srf05 chân mode nối với GND (0v). em dùng timer 1 để đếm độ rộng xung echo do con srf05 gởi phản hồi. sau đó lấy độ rộng xung/ 72 để đổi khoang cách tính toán ra đơn vị cm. đây là code của em , các bác xem qua chỉ em giúp em chỗ nào ko ổn. Code:
#include "D:\PIC PROGRAM\16F877A\SRF05\main.h" #include <LCD.C> #define TrgEch RB0 #define TrgDir TRISB0 unsigned int value=0; int get_srf05(void); void outlcd(unsigned int kcach); void setup(void); /* #int_EXT void EXT_isr(void) { } */ void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); lcd_init(); setup(); // enable_interrupts(INT_EXT); // enable_interrupts(GLOBAL); while (1) { value=get_srf05(); // printf("\n\rvalue= %u",value); outlcd(value); TMR1H = 0; // 52mS delay - this is so that the srf05 ranging is not too rapid TMR1L = 0; // and the previous pulse has faded away before we start the next one T1CON = 0x21; // 1:4 prescale and running TMR1IF = 0; while(!TMR1IF); // wait for delay time TMR1ON = 0; // stop timer } } unsigned int get_srf05(void) { TMR1H = 0xff; // prepare timer for 10uS pulse TMR1L = -14; T1CON = 0x21; // 1:4 prescale and running TMR1IF = 0; TrgDir = 0; //TRISB=0 // make trigger/echo pin an output TrgEch = 1; //RB0=1 // start trigger pulse while(!TMR1IF); // wait 10uS TrgEch = 0; //RB0=0; // end trigger pulse TMR1ON = 0; // stop timer TrgDir = 1; //TRISB=0; // make trigger/echo pin an input TMR1H = 0; // prepare timer to measure echo pulse TMR1L = 0; T1CON = 0x20; // 1:4 prescale but not running yet TMR1IF = 0; while(!TrgEch && !TMR1IF); // wait for echo pulse to start (go high) TMR1ON = 1; // start timer to measure pulse while(TrgEch && !TMR1IF); //Wait RB0=0 // wait for echo pulse to stop (go low) TMR1ON = 0; // stop timer TrgDir = 0; //TRISB=0 // make trigger/echo pin an output again return (TMR1H<<8)+TMR1L; // TMR1H:TMR1L contains flight time of the pulse in 0.8uS units } void outlcd(unsigned int kcach) { unsigned char tram=0,chuc=0,donvi=0; unsigned int ra=0; ra=kcach/72; lcd_gotoxy(1,1); tram=ra/100+48;lcd_putc(tram); chuc=(ra%100/10)+48;lcd_putc(chuc); donvi=(ra%100%10)+48;lcd_putc(donvi); } void setup(void) { unsigned long x; PORTB = 0xfe; // RB0 (trig) is output TRISB = 0xfe; // and starts low TRISC = 0xff; PORTC = 0xff; SSPSTAT = 0x80; SSPCON = 0x38; SSPCON2 = 0x00; SSPADD = 50; // SCL = 91khz with 20Mhz Osc /// for(x=0; x<300000L; x++); // wait for LCD03 to initialise } đây là file main.h Code:
#include <16F877A.h> #device adc=8 #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) // register definitions #define W 0 #define F 1 // register files #byte INDF =0x00 #byte TMR0 =0x01 #byte PCL =0x02 #byte STATUS =0x03 #byte FSR =0x04 #byte PORTA =0x05 #byte PORTB =0x06 #byte PORTC =0x07 #byte PORTD =0x08 #byte PORTE =0x09 #byte EEDATA =0x10C #byte EEADR =0x10D #byte EEDATH =0x10E #byte EEADRH =0x10F #byte ADCON0 =0x1F #byte ADCON1 =0x9F #byte ADRESH =0x9F #byte ADSESL =0x9F #byte PCLATH =0x0a #byte INTCON =0x0b #byte PIR1 =0x0c #byte PIR2 =0x0d #byte PIE1 =0x8c #byte PIE2 =0x8d #byte OPTION_REG =0x81 #byte TRISA =0x85 #byte TRISB =0x86 #byte TRISC =0x87 #byte TRISD =0x88 #byte TRISE =0x89 #byte EECON1 =0x18C #byte EECON2 =0x18D //dinh nghia timer #byte TMR1H =0x0F #byte TMR1L =0x0E #byte T1CON =0x10 #byte SSPSTAT =0x94 #byte SSPCON =0x14 #byte SSPCON2 =0x91 #byte SSPADD =0x93 //dinh nghia bit #bit TMR1IF = 0x0c.0 #bit TRISB0 = 0x86.0 #bit RB0 = 0x06.0 #bit TMR1ON = 0x10.0 lcd của em em chỉ hiện giá trị 000-003, và nó dao động liên tục trong khoảng này. em cũng chưa thật hiểu cách làm việc của cảm biến siêu âm lắm,mong các bác tư vấn thêm. bác nào giúp em với .........
__________________
VÔ DANH !!! thay đổi nội dung bởi: picthanh, 31-03-2008 lúc 09:07 PM. |
![]() |
![]() |
![]() |
#32 |
Đệ tử 1 túi
Tham gia ngày: Jan 2007
Bài gửi: 21
: |
hiện tượng crosstalk
Trong giải thuật hạn chế nhiễu do hiện tượng đọc chéo của Borenstein, khi sai lệch giữa hai giá trị đọc liện tiếp trên cảm biến y (cảm biến thu tín hiệu echo do một cảm biến khác phát ra) lớn hơn T_delta thì chắc chắn đã xảy ra hiện tượng crosstalk. Tuy nhiên có một vấn đề mong các bạn trao đổi để làm sáng tỏ.
Khi sai lệch giữa hai giá trị đọc liên tiếp lớn hơn T_delta thì có crosstalk, vậy thì ta loại giá trị nào? giá trị trước hay sau? Nếu như loại giá trị sau, thì chuyện gì sẽ xảy ra khi ngay từ lần đọc đầu tiên cảm biến y đã thu được tín hiệu echo sai (do crosstalk), trong quá trình thí nghệm, vị trí các cảm biến không đổi (tức là đường đọc chéo không thay đổi). Do đó, cảm biến y sẽ liên tục nhận được tìn hiệu echo sai.(Các bạn xem hình đính kèm) Theo giải thuật này thì các giá trị đọc sau sẽ bị loại. Cảm biến y sẽ không nhận được tín hiệu echo do chính y phát ra. |
![]() |
![]() |
![]() |
#33 | |
PIC Bang chủ
|
Trích:
Như vậy rõ ràng, không nhận kết quả nào cả. Chỉ khi nào kết quả n và n+1 khẳng định là đúng thì lúc đó ta mới khẳng định rằng n là đúng, rồi lại lấy n+1 tính tiếp cho n+2... Cái này hiểu nó rất là vui đấy. Nếu các bạn làm xong kết quả thực nghiệm, các bạn có thể cung cấp lên cho mọi người cùng xem. Cần phải có nhiều kết quả tham khảo hơn, chứ mấy năm nay rồi F nghe nói các đồng chí làm lại vẫn chưa làm thành công. Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
|
![]() |
![]() |
![]() |
#34 |
Đệ tử 6 túi
Tham gia ngày: Oct 2006
Bài gửi: 147
: |
mọi người ơi.
cho tớ hỏi cái mạch cảm biến này với??? cho tớ hỏi mạch này nguyên lý hoạt động của nó ? to thay 2 con tran trên bằng A1015 và C1815 thì thấy 2 con tran này nóng lắm. thứ hai là: khi lắp xong ,tín hiệu đầu ra luôn ở mức cao(7v) mặc dù tớ đã cách li phần thu và phát và tinh chỉnh triết áp.???? thanks very much !!! |
![]() |
![]() |
![]() |
#35 |
Đệ tử 6 túi
Tham gia ngày: May 2007
Bài gửi: 127
: |
2 con tran T1 & T2 mắc theo kiểu đẩy kéo dùng nguồn ko đối xứng . Sơ đồ trên dùng loa thanh áp nên ko cần tụ xuất loa, nếu dùng loa điện động thì khi mắc vơi loa thì phải có thêm tụ ngăn dòng 1 chiều qua loa
thay đổi nội dung bởi: lion, 26-09-2008 lúc 11:42 AM. |
![]() |
![]() |
![]() |
#36 |
Đệ tử 6 túi
Tham gia ngày: May 2007
Bài gửi: 127
: |
do tần số siêu âm cao nên dùng tụ 103 PF
|
![]() |
![]() |
![]() |
#37 |
Đệ tử 6 túi
Tham gia ngày: Oct 2006
Bài gửi: 147
: |
cám ơn cậu.
nhưng đấy là phần bên phát, nhưng khi chưa có phần phát thì phần thu ở đầu ra luôn luôn có 1 điện áp cố định?? ko hiểu tại sao??? bạn làm về siêu âm bạn có thể cho tơ ít tài liệu được ko? to đang làm cái này.... thanks!! |
![]() |
![]() |
![]() |
#38 |
Đệ tử 6 túi
Tham gia ngày: May 2007
Bài gửi: 127
: |
Tầng cuối cùng of mạch thu siêu âm (N3) là mạch so sánh đảo pha .ở chế độ tĩnh (chưa có tín hiệu siêu âm ) thì đầu vào âm được nối Dương nguồn qua trở R11 (4.7M) . vì vậy đầu ra có điện áp Dương , muốn triệt điện áp này bạn chi cần hạ con trở R12 (390K) xuống còn 39K , hoặc nhỏ hơn , điều chỉnh thêm cả chiết áp VR2 nữa
chúc thành công. thay đổi nội dung bởi: lion, 02-09-2008 lúc 12:44 AM. |
![]() |
![]() |
![]() |
#39 |
Đệ tử 6 túi
Tham gia ngày: Oct 2006
Bài gửi: 147
: |
tớ hỏi câu hơi gà chút(nhưng không hỏi thì chẳng biết khi nào hiểu được)..
1.mọi người có thể chỉ bảo tớ giải thuật cách xử lý sóng siêu âm với phần điều khiển được không??? khi có sóng siêu âm vào chân điều khiển thì phần điều khiển nó sẽ xử lý thế nào để nhận biết được khoảng cách? 2. tín hiệu ra của bộ siêu âm chỉ có 2 mức 0 và 1 à? |
![]() |
![]() |
![]() |
#40 |
Đệ tử 6 túi
Tham gia ngày: May 2007
Bài gửi: 127
: |
tài liệu siêu âm :
|
![]() |
![]() |
![]() |
#41 | |
Đệ tử 6 túi
Tham gia ngày: Oct 2006
Bài gửi: 147
: |
Các bác cho em hỏi :
Trích:
thứ 2 em hỏi LCD03 là LCD1602 à? hay nó là loại nào??? |
|
![]() |
![]() |
![]() |
#42 | |
Đệ tử 6 túi
Tham gia ngày: Oct 2006
Bài gửi: 147
: |
Trích:
thay đổi nội dung bởi: anh_gioi, 26-09-2008 lúc 05:11 PM. |
|
![]() |
![]() |
![]() |
#43 |
Nhập môn đệ tử
Tham gia ngày: Nov 2008
Bài gửi: 1
: |
e cần một số tài liệu về các loại cảm biến nhưng e kiếm ko được! mong mọi người cho e link dowload.e cảm ơn!
|
![]() |
![]() |
![]() |
#44 |
Đệ tử 5 túi
|
![]() Đây là code cảm biến siêu âm, lâu quá mình ko nhớ tải ở đâu bạn xem thử nhé, được thì bấm phát cảm ơn nhé
__________________
Bảng ledsigns chất lượng cao... http://www.ledviet.info - manhha2700@yahoo.com Đt:0949299699 |
![]() |
![]() |
![]() |
#45 |
Nhập môn đệ tử
Tham gia ngày: Nov 2008
Bài gửi: 1
: |
các bạn có thể giúp mình cái này được ko?"mạch cảm biến vị trí sử dụng sóng siêu âm". Thầy cho cái đề mà mình chưa biết làm thế nào? Có bạn nào biết chỉ giáo giùm nha. Thanks nhiều!
|
![]() |
![]() |