CHƯƠNG TRINH NGHIÊN CỨU ROBOCON Giới thiệu: Trong năm gần phong trào robocon môn điện tử ngày phát triển tài liệu cơng nghệ khan nhóm robocon CĐT-K9 xây dựng chương trình nghiên cứu với mục tiêu : +) Hỗ chợ cho sinh viên nghiên cứu chế tạo robot thực đồ án môn học điện tử +) Xây dựng lực lượng chế tạo robot cho năm 2010 năm +) Trao đổi thông tin tạo nên diễn đàn mở thiết bị điện tử đồ án điện tử Các vấn đề thắc mắc góp ý liên hệ : Phạm Văn Lượng Lớp: Cao Đẳng Cơ Điện Tử - Khóa Số điện toại: 0975662019 Mục lục : Chương I_ Mạch điện tử Mạch nguồn Cảm biến quang Mạch so sánh Mạch vi điều khiển Mạch động lực Chương II_ Sử dụng cơng cụ lập trình CodeVisionAVR & MPLap mạch nap CodevisonAVR Giới thiệu CodevisonAVR Tạo project Lập trình I/O Lập trình timer Lập trình ngắt ngồi INT Lập trình PWM MPlLap Chương III_Lập trình ROBOT Chương trình chạy đoạn đường dựa vào encoder Chương trình đường Thuật tốn dị đường Dị đường bắt ngã tư Dò đường đoạn đường dựa vào encoder Chương I_ Mạch điện tử Mạch nguồn - Nguồn dùng bình DC nên tương đối ổn đinh chún ta nghiên cứu mạch nguồn đấp ứng đủ cường điện áp chuẩn cho vi điều khiển hoạt đông - Mạch nguyên lý LM7805 B688 PNP1 47 C2 2200uF/16V IN GND D2 2 HD13 L1 IC4 R12 C4 104 OUT VCC Cuon cam C3 2200uF/16V C5 104 R13 270 LD1 GND - Nguyên lý hoạt động • HD13 để cấp nguồn 12V cho mạch • D2 chống cấp ngược nguồn • Các tụ C2,C3,C4,C5 có nhiệm vụ chống nhiễu cho nguồn • Cuộn dây L1 có nhiệm vụ chống nhiễu • R12 trở gánh • LD1 led báo có nguồn có trở bảo vệ R13 • IC LM7805 IC ổn định đầu vào 12V đầu 5V • PNP1 B688 tranzito mắc theo kiểu B chung kéo cường cho toàn mạch Chú ý: mạch bắt buộc kèm với mạch vi điêu khiển nên nghiên cứu công dụng “dù hiểu hay không hiểu phải vẽ vào mạch” Cảm biến quang - Đây mạch điện để nhận biết mầu sắc ánh sang đơn giản Mạch thường đùng để làm sensor( mắt nhìn) cơng nghệ dị đường cho robot Đưới mạch điện nghuyên lý VCC VCC LDR1 R9 1K LDED0 R1 10K LD1 GND - GND H.1 Nguyên lý hoạt động • Cảm biến quang dùng mạch quang trở Quang trở loại điện trở mà nội trở chúng thay đổi theo ánh sáng • Dựa vào đặc điểm quang trở thiết kế hình vẽ H.1 với : LDR1 quang trở R1 trở bảo vệ • Ánh sánh tác động vào quang trở LDR1 khác điện VLDED0 khác Khi ánh sáng tác dụng vào LDR1 mạnh VLDED0 tăng ngược lại ánh sáng tác dụng vào LDR1 yếu( tối ) VLDED0 giảm Đây đại lượng để ta nhận biết khác biệt màu đơn giản mặt sân với vạch trắng , màu xanh với màu đỏ… ( giới thiệu phần 3) • Ngồi cịn có mạch hỗ chợ ánh sáng gồm LD1(siêu sáng) , R9 nhằm giảm tác động anh sáng bên ngồi tăng độ xác cho sensor Mạch so sánh - Khi có giá trị điện áp biến đổi theo ánh sang( màu sắc) muốn phân biệt đâu mầu sắc cần dùng thi ta cần phải có mạch so sánh giá trị điên áp - Mạch so sánh nghiên cứu mạch dùng IC thuật toán thiết kế để so sánh gia trị điện áp - Mạch nguyên lý VR2 GND 100K VCC LDED1 A1 IC1A - H.2 Nguyên lý hoạt động • Giới thiệu qua mạch o VR2: biến trở ( vi chỉnh) thay đổi giá trị o Khối thuật toán IC1A : nằm IC LM354,LM324… • Mạch thuật tốn thiết kế nhằm mục đính so sánh hoạt động sau Nếu điện áp V(-) > V(+) đâu A1=0( mức thấp) ngược lại V(-) động khơng quay o Chú ý không cháy nhà: rơle sử dụng loại chân loại chân khác nha Các khối mạch mạch động lực dùng rơle IRF Mạch IRF o Mạch thiết kế để khoách đại cho IRF chạy theo tín hiệu điều khiển vi điều khiên đưa sang Đừng dại mắc trực tiếp IRF cường độ dịng điện vi điều khiển yếu không mỏ cho IRF o Mạch nguyên lý 12VDL Q1 C828 R29 UPWM1 22 / 1W C1 Q5 A564 DZ1 15V Q3 IRF840 CAP NP H5.2 o Nguyên lý hoạt động o Như giới thiệu mạch khuếch mở cho IRF chạy theo tín hiệu PWM vi điều khiên cấp sang nên xét trường hợp PWM o Trường hợp PWM có tín hiệu Tín hiệu tức 0V Q1 khơng thơng Q2 thơng làm cho IRF đóng (chân số IRF khơng thơng với chân số IRF) o Trường hợp PWM có tín hiệu Lúc Q1 thơng Q2 không thông làm cho IRF thông ( chân c3 IRF thông) o Con trở R29 C1 sơ đồ ghép tầng nối mảng khoách đại IRF o DZ1 diôtzener nhiệm vụ luốt xung ( không hiểu nhà đọc lại chức sách điện tử cịn cố tình khơng hiểu khơng thiết kế mạch đừng có vất được) o PWM có ý nghĩa cự kỳ quan trọng o Dưới nghiên cứu cách điều khiển động o Dưới dây giản đồ xung a PWM 50/50 b PWM 25/75 c PWM 75/25 H5.2.1 o Trước hết nhắc tới xung PWM biết loại xung phải thay đổi tần số ( IC 555 kỹ thuật số học) dùng tần số để điều khiển động DC làm cho động hoạt động khơng mong muốn Vì muốn tăng giảm tốc độ phải thay đổi tần số mà tần số thấp ( chu kỳ T cao) gây tượng giật cục kiểu bật tắt nguồn quạt liên tục vậy động lực làm nóng động Đối với loại động DC hoạt động tốt dải tần mà nhà sản xuất quy định Thường loại động mà tơi thường dùng tơi để tần số vào khoảng 2kHz ổn Vậy để động hoạt động tần số mà điều chỉnh tốc độ động hình điều chỉnh độ rộng xung chu kỳ thay chỉnh tần sơ o Vậy PWM loại xung mà ta vừa điều chỉnh tần số phù hợp với động chỉnh độ rộng xung để điều khiển tốc độ o Trong mạch thường để xung mưc cho mạch chay mưc ngừng hoạt động Vật để động quay nhanh ta cho đọ rộng xung mức tăng hình H5.2.1 c nhanh 100% độ rộng xung mưc , ngược lại muốn chạy chậm cho độ rộng múc giảm hinh H5.2.1b muốn không cho động chạy ta điều chỉnh cho 0% độ rộng xung mức o Chu ý: mạch thiết kế để nhận xung mức có mạch nhận xung mưc Đối với mức bạn tự nghiên cứu o Nói chung ta dùng xung PWM để điều khiển động kiểu bật tắt quạt cach liên tục thay điều chỉnh tần số để thay đổi tốc độ thay đổi độ rộng xung động tác tương tự để thời gian bật điện cho quạt nâu thời gian tắt đi( ngược lại tăt nâu bât) cộng thời gian lại bẳng thời gian tắt bật quạt theo kiểu 50/50 theo kiêu tăng giảm tần số động không giật cục không lực lại cịn mát rượi • Mạch đảo chiều quay quản lý tốc độ dùng PWM DK 12VDL 12V LS3 RELAY Q1 R29 C828 UPWM1 22 / 1W C1 Q5 A564 DC3_DC3 DZ1 15V 24V Q3 IRF840 104 D28 D29 C10 CAP NP H5.3 o Mạch dùng mạch IRF mạch dảo chiều dùng rơle chân khác với mạch dùng rơle chân o Đối với mạch khiển đảo chiều dùng rơle nguyên lý hoạt động sau: o Là rơle có chân trơng có chân điều khiển cuộn hút 1-8 khóa 5-6-7 khóa 2-3-4 o Nếu khơng có điện cấp cho cng hút chân thường đóng 2-3 6-7 cấp điện cho động theo mạch tiếp điểm 6-7 cấp nguồn cho động +24V tiếp điểm 2-3 cấp xung PWM cho động o Ví dụ ta chưa sét tới chân PWM từ chân số IRF đưa sang ta coi chân chân cấp điện âm 0V mạch cấp điện cho động quay CON2 thuận, ý chân rơle chân số có điện +24V cịn chân số 0V o Bây cấp điện cho cuộng hút rơle hoạt động tiếp điểm (7-6),(2-3) mở (5-6),(3-4) đóng điện cấp vào động đảo chiều chân số 0V chân số +24V Vì bị đảo chiều dịng điện nên đơng quay ngược lại so với trường hợp bên o Chú ý: sét mạch điện sử dụng rơle chân hư điều khiển có thê điều khiển cho động quay ngược xuôi mà dừng động mạch H5.1 Nhưng cịn có mạch IRF kèm mạch lại có ưu điêm hẳn so với mạch H5.1 khơng dừng động mà cịn điều khiên tốc độ động Vì vi điều khiển khóa IRF khơng cho chân (2-3của) thơng nữa( hoạt động mạch IRF trình bày trên) Chương II_ Sử dụng cơng cụ lập trình CodeVisionAVR & MPLap mạch nap CodevisonAVR 1.1Giới thiệu CodevisonAVR - Đây phần mềm lập trình cho họ vi điều khiển Atmega hay cịn gọi AVR sử dụng ngơn ngữ C - CodevisonAVR mạnh chúng hỗ chợ đến tận người học đầy đủ tinh dễ sử dụng - Trong chương trình nghiên cứu đến phần để lập trình robot cịn phần khác bạn tự nghiên cứu - Dễ sử dụng đơn giản hiệu người bắt đầu bắt nhâp môn vào ROBOCON 1.2 Tạo project - Sau khởi động chư trinh CodevisonAVR ta vào Tools -> CodeWinzadAVR hoạc thẳng vào biểu tượn bánh công cụ theo hướng mũi tên - Sẽ có sổ sau hiên • • • Trước hết phải chọn tên chip ô Chip vào ô tam giác chọn chip cần dung Clock: ô để chọn tần số cho thạch anh ( tần số thạch anh phải chọn theo mạch vẽ) Các Tap lại chức khác mà chương trinh hỗ chợ chip khác hỗ chợ khác Tùy thuộc vào tính chọn chức tùy ý • • Nếu chọn song chức cần dùng tạo project sau chọn File -> Generate, Save and Exit sổ thông báo giúp chung ta chọn địa đặt chương trinh Chọn địa cất file ô save in , đáng tên file vào File name cuối chọn nút Save , cửa số sau Ta chọn đáng tên ấn nút Save lại tiếp tục có sổ mơi Chọn ấn save sổ sau ( ý địa đặt File tron lần hỏi máy phải đặt thư mục) 1.3Lập trình I/O ( input ,out) - I/O lập trình Pin vi điều khiển nhận xuất tín hiệu Chúng ta sử dụng vi điều khiển atmega218 loại có tới PORT (ABCDEF) có 8PIN (8 chân) PORT có 5PIN (5chân) Tất Pin chân I/O nhiệm vụ I/O Pin cịn có chức khác tùy thuộc vào cách khai báo phần cứng vi điều khiên I/O kiến thức mà vi điều khiển có Nếu muốn chân nhận tín hiêu xuất tín hiệu trước hết phải khai báo phần cứng vi điều khiển để định nghĩa cho chân Thanh ghi định nghĩa nhiệm vụ xuất nhận DDRx ( x là: A,B,C,D,E,F) Tóm tắt : Lập trình điều khiển led bật tắt ,sử dụng cách định nghĩa PIN PORT ,cách dùng thư viện delay.h codevision Giới thiệu: Cấu trúc chân AVR phân biệt rõ chức (vào ra) trạng thái (0 1) từ ta có kiểu vào cho chân avr.Khác với 89 có trạng thái (0 1) Đặc biệt nguồn từ chân AVR đủ khoẻ để điều khiển Led trực tiếp (mA) 89 vài uA Để điều khiển chân có ghi ->PORTx :giá trị chân (0 – 1) truy cập tới bit PORTx.n ->DDRx : ghi trạng thái chân , vào Giá trị vào Ví dụ : Nhấp nháy đèn xanh đèn đỏ , ấn nút bấm có đèn đỏ sáng Phần cứng : đèn xanh PORTB.4 , đèn đỏ PORTB.5 , nút bấm PINB.7 Chú ý : định nghĩa chân chân vào PIN x.x #define nut_bam PINB.7 định nghĩa chân chân vào PORT x.x #define den_do PORTB.5 Trong PORT B có biến đầu PB5 PB6 DDRB=0b00110000 =0x30 Khởi tạo chân PB7 cần treo lên 5V , ấn nút bấm thông GND(0V) nên ta có PORTB=0b10000000=0x80; Sau định nghĩa , bạn den_do=1; đèn led đỏ tắt den_do=0; đèn sáng ( cách thiết kế mạch đầu dương led nối 5V cịn đầu âm nối vào VĐK) delay.h có cách gọi trễ theo ms us delay_ms(time); delay_us(time); c code /***************************************************** This program was produced by the CodeWizardAVR V1.24.8d Professional Automatic Program Generator © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l http://www.hpinfotech.com Project : 10 Version : 11 Date : 12/27/2007 12 Author : Pham van Luong 13 Company : CDT-K9 14 Comments: 15 16 17 Chip type : ATmega16 18 Program type : Application 19 Clock frequency : 8.000000 MHz 20 Memory model : Small 21 External SRAM size : 22 Data Stack size : 256 23 *****************************************************/ 24 25 #include 26 #include 27 28 // Declare your global variables here 29 30 #define den_xanh PORTB.5 31 32 33 34 35 36 37 38 #define den_do #define nut_bam PORTB.6 PINB.7 void main(void) { // Port B initialization // Func7=In Func6=Out Func5=Out Func4=In Func3=In Func1=In Func0=In 39 // State7=T State6=0 State5=0 State4=T State3=T State1=T State0=T 40 PORTB=0x80; 41 DDRB=0x30; 42 43 44 45 while (1) 46 { 47 // Place your code here 48 //khi nut bam chua duoc bam logic nut_bam=1 49 if(nut_bam) 50 { 51 den_xanh=1;den_do=0; 52 delay_ms(500); 53 den_xanh=0;den_do=1; 54 delay_ms(500); 55 } 56 //khi nut bam duoc an nut_bam=0 chi den sang 57 else 58 {den_xanh=1;den_do=0;} 59 }; 60 } 61 62 63 1.4Lập trình timer Đặc tính: - Bao gồm timer 8bit 16 bit, thường có từ – Timer - Có kênh PWM (từ đến kênh tuỳ loại ) - Bao gồm nhiều chế độ ngắt PWM … - Có thể kênh đếm riêng biệt - Tự động xoá Timer chế độ so sánh(tự động nạp lại) - Có chế độ PWM - Tạo tần số - Đếm dự kiện ngắt - Tạo ngắt tràn ngắt so sánh Func2=In State2=T Introduction Các chế độ hoạt động timer: Chế Độ Thông Thường: Đây chế độ hoạt động đơn giản Timer Bộ đếm liên tục đếm tăng lên vượt giá trị lớn TOP sau khởi động lại giá trị Bottom.Trong hoạt động thơng thường cờ tràn thiết lập giá trị Timer đạt giá trị khơng khơng bị xố đi.Tuy nhiên mà ngắt tràn chấp nhận cờ ngắt tự động bị xoá ngắt thực hiện.Giá trị Timer viết vào lúc Chế Độ So Sánh (CTC): Đấy chế độ mà giá trị Timer so sánh với giá trị ghi ORC Khi giá trị Timer giá trị ghi ORC giá trị Timer bị xoá đi.Giá trị ORC đóng vai trị giá trị TOP cho đếm.Chế độ cho phép tạo tần số so sánh đầu ra.Tuy nhiên chế độ giá trị ghi vào ghi ORC mà nhỏ giá trị tức thời đếm thì so sánh bị lỡ, đếm đếm đến giá trị lớn sau rơi xuống giá trị trước so sánh xuất Sơ đồ thời gian chế độ CTC Chế Độ Fast PWM: Cho phép tạo sóng với tần số cao.Sự khác biệt Fast PWM với loại PWM khác sử dụng sườn dốc.Bộ đếm đếm từ Bottom đến Max sau khởi động lại từ bottom Trong chế độ không đảo đầu chân so sánh OCx bi xố có phép tốn so sánh TCNTx ghi ORC Và sét lên giá trị đạt Bottom Trong chế độ đảo ,đầu đảo set lên so sánh ghi ORC giá trị Timer bị xoá giá trị đạt Bottom.Trong hai trường hơp tần số chế đô Fast PWM gấp đôi so với chế độ phase correct PWM sử dụng hai sườn dốc Với tần số cao chế độ độ Fast PWM tốt cho ứng dụng ADC hay chỉnh lưu.Ngoài với tần số cao giúp làm giảm kích thước thiết bị ngồi cuộn dây tụ từ giúp làm giảm tồn chi phí cho hệ thống Sơ đồ mô tả chu kỳ thời gian chế độ: Biều đồ thời gian chế độ Fast PWM Chế độ Phase correct PWM: Chế độ hoạt động dựa hai sườn lên xuống.Bộ đếm đếm liên tục từ giá trị BOTTOM đến giá trị MAX sau từ giá trị MAX đến giá trị BOTTOM.Trong chế độ so sánh không đảo chân so sánh (OCx) bị xóa giá trị TCNTx giá trị OCRx trình đếm lên set giá trị so sánh xuất trình đếm xuống.Chế độ so sánh đảo giá trị ngược lại.Với hoạt động hai sườn xung chế độ khơng tạo tần số nhỏ chế độ sườn xung Nhưng tính cân đối hai sườn xung tốt cho điều khiển động Chế độ phase correct PWM hoạt động cố định bít.Trong chế độ đếm tăng đạt giá trị MAX ,khi đổi chiều đếm.Biểu đồ thời gian mô tả hoạt động tồn q trình: Từ biểu đồ thời gian ta nhận thấy việc thay đổi tần số hoạt động phase correct PWM thay hai giá trị MAX BOTTOM Nó linh hoạt so với chế độ Fast PWM Tần số tính theo cơng thức sau: f=fc/N*510 Trong N tạo chia có giá trị là:1,8,64,256 1024 Các ghi Timer/ Counter: Thanh ghi điều khiển - TCCRx: Bít 3,6 –WG00-WG01: Đây bít chọn chế độ Timer.Các giá trị mô tả bảng sau Bảng chọn chế độ Timer: Bít 5-4 : COM00-COM01: Quy định giá trị đầu phép so sánh Bít 2: – CS2:0 :Đây bít quy định xung cấp cho hoạt động Timer.Bảng mô tả toàn giá trị Chọn chế độ cho xung Clock Thanh ghi cờ ngắt-TIFR: Bít 1-OCFx : Khi hai giá trị bít set lên Bít 1-TVOx : Khi đếm vượt giá trị Top bít set Thanh ghi mặt nạ ngắt-TIMSK: Bít – OCIEx: bít set lên cho phép ngắt so sánh Bít –TOIEX : Khi bít set lên cho phép ngắt tràn đoạn chương trình dùng timer1 Timer đếm 16bit nên giá trị đếm tối đa FFFF Trong phần khởi tạo Timer ta khởi tạo xung clock cho đếm 125Khz = 125000 có nghĩa đếm đếm 125000 giá trị giây Ta làm phép tính sau: 125000 số giây ? số - 0,02 giây (20ms) ta tính 20ms timer đếm là: 125000x0.02= 2500 số Ta cần cho timer1 đếm 2500 số tràn có nghĩa cần phải nạp vơ giá trị xác định trước (mặc định đếm từ 0000>FFFF bị tràn) giá trị nhỏ 65535(FFFF) 2500 (9C4 Hexa) ta tính giá trị cần nạp lại sau lần tràn FFFF- 9C4 = F63B c code #include unsigned char count=0; interrupt [TIM1_OVF] void timer1_ovf_isr(void) //ngat xay sau 20ms { TCNT1H=0xF6; //giá trị nạp lại TCNT1L=0x3B; // goi ham can xu li sau 20mscount++; if (count>10) 10 { 11 count=0; 12 //goi ham can xu li sau 2s } 13 } 14 15 void main(void) 16 { 17 // Timer/Counter initialization 18 // Clock source: System Clock 19 // Clock value: 125.000 kHz 20 // Mode: Normal top=FFFFh 21 // OC1A output: Discon 22 // OC1B output: Discon 23 // Noise Canceler: Off 24 // Input Capture on Falling Edge 25 // Timer Overflow Interrupt: On 26 // Input Capture Interrupt: Off 27 // Compare A Match Interrupt: Off 28 // Compare B Match Interrupt: OffTCCR1A=0x00; 29 TCCR1A=0x03; 30 TCCR1B=0x03; 31 TCNT1H=0xF6; 32 TCNT1L=0x3B; 33 ICR1H=0x00; 34 ICR1L=0x00; 35 OCR1AH=0x00; 36 OCR1AL=0x00; 37 OCR1BH=0x00; 38 OCR1BL=0x00; 39 #asm("sei") //bat co cho phep ngat toan cuc neu khong thi khong co ngat xay 40 while (1) 41 { 42 43 }; 44 } 1.5 Lập trình ngắt ngồi INT 1.6 Lập trình PWM MPlLap ... CodevisonAVR Tạo project Lập trình I/O Lập trình timer Lập trình ngắt ngồi INT Lập trình PWM MPlLap Chương III_Lập trình ROBOT Chương trình chạy đoạn đường dựa vào encoder Chương trình đường Thuật tốn... tinh dễ sử dụng - Trong chương trình nghiên cứu đến phần để lập trình robot cịn phần khác bạn tự nghiên cứu - Dễ sử dụng đơn giản hiệu người bắt đầu bắt nhâp môn vào ROBOCON 1.2 Tạo project -... nữa( hoạt động mạch IRF trình bày trên) Chương II_ Sử dụng cơng cụ lập trình CodeVisionAVR & MPLap mạch nap CodevisonAVR 1.1Giới thiệu CodevisonAVR - Đây phần mềm lập trình cho họ vi điều khiển