Mô hình hoàn chỉnh

Một phần của tài liệu đồ án tốt nghiệp thiết kế mô hình xe chạy tự động (Trang 77)

CHƯƠNG IV: THIẾT KẾ ĐIỆN TỬ 1. Thiết kế phần cứng

1.1. Mạch giao tiếp với máy tính

Sử dụng FT232 RL giao tiếp chuyển đổi USB to USART

Hình 3.1: Mạch giao tiếp FT232RL

Cài đặt driver cho cổng COM

Cắm mạch chuyển đổi vào cổng USB máy tinh sau đó kích chuột phải

Computer chọn manage, xuất hiện bảng sau và tiếp tục chọn Device Manager. Tiếp tục

chọn xuất hiện bảng: Unknown device Properties.

Chọn Update Driver

Hình 3.3: Bảng chọn update driver

Chọn sẽ thấy bảng:

Hình 3.4: Bảng chọn thư mục có chứa file update

Tiếp đến chọn tìm kiếm thư mục chứa driver và nhấn Next.

Ta thiết lập cổng COM nào thì khi cài đặt phần mềm lập trình thì phải thiết lập tín hiệu của phần mềm truyền qua cổng COM đó.

1.2.Mạch điều khiển

Thiết kế mạch điều khiển bằng orcad

1.2.1. Mạch nguyên lý

Hình 3.5: Mạch nguyên lý vi điều khiển.

Mạch sử dụng nguồn 12v, qua mạch nguồn cho ra nguồn 5 vôn ổn định nuôi vi điều khiển.

Vi điều khiển sử dụng thạch anh ngoài 8MH

- Sơ lược LM7805:

Hình 3.6: LM7805. Đầu vào từ 7v đến 18v LM7805 sẽ cho đầu ra là 5 vôn

1.2.2. Mạch in của vi điều khiển

Hình 3.7: Mạch in vi điều khiển

1.3.Mạch công suất 1.3.1. Mạch nguyên lý 1.3.1. Mạch nguyên lý

- Sử dụng Fet để điều xung PWM.

Sơ lược về Fet:

Hình 3.9: Mô tả hoạt động của Fet Loại N:

Mosfet có điện trở giữa cực G với cực S và giữa cực G với cực D là vô cùng lớn , còn điện trở giữa cực D và cực S phụ thuộc vào điện áp chênh lệch giữa cực G và cực S (UGS) .

Khi điện áp UGS = 0 thì điện trở RDS rất lớn, khi điện áp UGS > 0 => do hiệu ứng từ trường làm cho điện trở RDS giảm, điện áp UGS càng lớn thì điện trở RDS càng nhỏ. Mosfet mở cho dòng đi qua.

- Sử dụng opto để cách ly giữa vi điều khiển và mạch công suất. (adsbygoogle = window.adsbygoogle || []).push({});

Hình 3.10: Hoạt động của opto

Với chân 1 là nhận tín hiệu vào, chân 2 và 3 nối mass (0 vôn), chân 4 nối với mức áp cao.

Khi có tín hiệu truyền tới chân số 1, (như trên hình 3.9), thì giữa chân 4 và 3 thông mạch, cho dòng đi qua.

- Sử dụng relay 6 chân, dùng đảo chiều động cơ

Hình 3.11: Hoạt động relay

Như trên (hình 3.10) chân 4 và 6 sẽ được cấp nguồn, chân 5 và 3 nối mass (0 vôn). Động cơ được nối vào chân 2 và 7. Tiếp điểm như trên hình thì dòng sẽ đi từ chân 6,7 qua động cơ tới chân 2,3 xuống mass, động cơ quay. Và khi cuộn dây được kích thì dòng sẽ đi ngược lại, như thế động cơ đ ảo chiều.

1.3.2. Mạch in công suất

1.4.Sơ lược về servo bẻ lái

Hình 3.13: hoạt động của servo

Để điều khiển servo ta cấp cho dây điều khiển một tín hiệu PWM có chu kỳ khoảng 20ms, duty cycle của PWM sẽ quyết định góc xoay c ủa servo. Với độ rộng xung là 1ms, servo xoay về vị trí 0 độ, khi độ rộng =2ms, góc xoay sẽ là 180 độ, từ đó ta có thể tính được duty cycle cần thiết khi muốn servo xoay đến 1 vị trí bất kỳ giữa 0 độ và 180 độ.

Ở trong đề tài để điều khiển được bẻ lái thì ta qui ước xe đi thẳng ứng với góc servo là 90 độ. Như vậy tương tự góc lái khi rẽ trái thì servo là (0,90), góc lái khi rẽ phải thì servo là (0, 180) độ.

2. Thiết kế phần mềm

2.1. Giới thiệu Atmega 16 và các tính năng sử dụng cho đề tài Sơ lược về Atmega16 Sơ lược về Atmega16

Atmega16

Tính năng:

- Bộ nhớ16K(flash) . 512 byte (EEPROM). 1 K (SRAM). - 40 chân , trong đó có 32 chân vào ra dữ liệu chia làm 4 - PORT A,B,C,D. Các chân này đều có trở kéo lên. - Giao tiếp SPI. - Giao diện I2C. Có 8 kênh ADC 10 bit. - 1 bộ so sánh analog.

- 2 bô timer/counter 8 bit, 1 bộ timer/counter1 16 bit. - 1 bộ định thời Watchdog.

- 1 bộ truyền nhận USART

Các tính năng sử dụng cho đề tài:

2.1.1. Truyền nhận USART (Universal Synchronous & Asynchronous serial Reveiver and Transmitter) (bộ truyền nhận nối tiếp đồng bộ và không đồng bộ)

Khái niệm “đồng bộ” để chỉ sự “báo trước” trong quá trình truyền.

Khác với cách truyền đồng bộ, truyền thông “không đồng bộ” chỉ cần một đường truyền cho một quá trình. “Khung dữ liệu” đã được chuẩn hóa bởi các thiết bị nên không cần đường xung nhịp báo trước dữ liệu đến.

USART hay UART cần phải kết hợp với một thiết bị chuyển đổi mức điện áp để tạo ra một chuẩn giao tiếp nào đó. Ví dụ, chuẩn RS232 (hay COM) trên các máy tính cá nhân là sự kết hợp của chip UART và chip chuyển đổi mức điện áp. Tín hiệu từ chip UART thường theo mức TTL: mức logic high là 5, mức low là 0V. Trong khi đó, tín hiệu theo chuẩn RS232 hay USB trên máy tính cá nhân thư ờng là -12V cho mức logic high và +12 cho mức low

Sử dụng truyền thông nối tiếp không đồng bộ với AVR (UART).

Vi điều khiển Atmega32 có 1 module truyền thông nối tiếp USART. Có 3 chân chính liên quan đến module này đó là chân xung nhịp - XCK (chân số 1), chân truyền dữ liệu – TxD (Transmitted Data) và chân nhận dữ liệu – RxD (Reveived Data). Trong đó chân XCK chỉ được sử dụng như là chân phát hoặc nhận xung giữ nhịp trong chế độ truyền động bộ. Tuy nhiên chúng ta không khảo sát chế độ truyền thông đồng bộ, vì thế chỉ cần quan tâm đến 2 chân TxD và RxD. Vì các chân truyền/nhận dữ liệu chỉ đảm nhiệm 1 chức năng độc lập (hoặc là truyền, hoặc là nhận), để kết nối các chip AVR với nhau (hoặc kết nối AVR với thiết bị hỗ trợ UART khác) phải đấu “chéo” 2 chân này. TxD của thiết bị thứ nhất kết nối với RxD c ủa thiết bị 2 và ngược lại. Module USART trên chip Atmega16 ho ạt động “song công” (Full Duplex Operation), nghĩa là quá trình truyền và nhận dữ liệu có thể xảy ra đồng thời.

Để sử dụng module USART trên AVR phải thực hiện 3 việc quan trọng, đó là: cài đặt tốc độ baud (thanh ghi UBRR), định dạng khung truyền (UCSRB, UCSRC) và cuối cùng kích hoạt bộ truyền, bộ nhận, ngắt. (adsbygoogle = window.adsbygoogle || []).push({});

2.1.2. Timer/Counter

Sử dụng Timer/Counter1 để tạo xung P WM điều khiển tốc độ động cơ: Timer/Counter1 là bộ T/C 16 bits, đa chức năng. Đây là bộ T/C rất lý tưởng cho lập trình đo lường và điều khiển vì có độ phân giải cao (16 bits) và có khả năng tạo xung điều rộng PWM. Có 2 kênh tạo xung PWM là OC1A và OC1B

Ta sử dụng chế độ Fast PWM với giá trị TOP được gán trong thanh ghi ICR1, từ đó tùy ý gán giá trị vào thanh ghi OCR1A để điều khiển độ rộng của xung, làm thay đổi tốc độ động cơ.

Hình 3.16: Tạo xung PWM

Trong timer1 có thanh ghi chứa giá trị hoạt động của nó là TCNT1. Thanh ghi này bắt đầu đếm từ 0 cho đến giá trị của OCR1A thì tín hiệu sẽ thay đổi trạng thái từ mức cao thành mức thấp, cho đến giá trị của thanh ghi OCR1 thì TCNT1 sẽ reset trở về 0 (hết 1 chu kỳ). Cứ như vậy, đó chính là quá trình t ạo xung PWM.

2.2.Nguyên lý điều khiển

Hình 3.17: Nguyên lý điều khiển.

Mạch chuyển đổi tín hiệu sẽ nhận tín hiệu từ máy tính với một khung truyền được chuẩn hóa, dữ liệu truyền là 8 bit (hình 3.13) chuyển thành chuẩn USART truyền tới bộ USART của vi điều khiển.

Cảm biến (Camera).

Máy tính xử lý (Labview).

Vi điều khiển.

Mạch công suất. Servo.

Động cơ. Hệ thống lái. Vi sai. Bánh xe. Mạch chuyển đổi tín hiệu.

Vi điều khiển dựa vào tín hiệu nhận được và phát tín hiệu điều khiển tốc độ động cơ và góc bẻ lái của servor.

Tín hiệu truyền từ máy tính và tín hiệu điều khiển được thống nhất với nhau, được qui định trước với một tín hiệu truyền tới thì ứng với một tín hiệu điều khiển. Cũng có nghĩa rằng ứng với một chế độ mà cảm biến (camera) nhận được thì tốc độ của xe và góc bẻ lái tương ứng.

Ví dụ:

Ta dùng OC1A để điều khiển động cơ, OC1B để điều khiển servo (chân 18, 19 của vi điều khiển)

Khi tín hiệu mà vi điều khiển nhận được là 00011000 (mã nhị phân 8 bit), với tín hiệu này thì yêu cầu xe phải chạy thẳng (servo ở 90 độ) (phần servo hình 3.12), tốc độ đạt 50%. Như thế vi điều khiển sẽ tạo ra xung PWM có độ rộng xung bằng một nữa chu kỳ của nó, tương ứng thì gán giá trị OCR1A=1/2 ICR1 để điều khiển động cơ (phần timer1 hình 3.14).

Để điều khiển được góc quay của servo thì ta cần phải chú ý đến xung nhịp hoạt động của timer1. Giả sử tần số của chip là 8Mh, ta cài đặt xung nhịp của timer1 là chia 8, ứng với 1Mh, có ngĩa cứ 1 us thì thanh ghi TCNT1 tăng 1 đơn vị. Vậy để được 1 chu kỳ là 20ms thì phải gán giá trị ICR1=20000. Như thế để điều khiển servo ở 90 độ thì gán OCR1B=1500 (1,5 ms) (phần servor hình 3.12)

PHẦN KẾT LUẬN

Trong quá trình nghiên cứu đề tài, tuy lượng thời gian không nhiều nhưng chúng em đã cố gắng hết khả năng để đạt được mục đích đề ra. Cùng sự nổ lực bản thân, chúng em nhận được sự hướng dẫn nhiệt tình c ủa thầy Lê Thanh Phúc và các anh đi trước đã nhiệt tình góp ý. Đồ án đi sâu phần mềm nghiên cứu vẽ cơ khí, ứng dụng phần mềm kỹ thuật Catia thiết kế hệ thống xe tự động thực tế. Ngoài ra còn ứng dụng các phần mềm thiết kế mạch điện để hoàn thiện mô hình.

Qua thiết kế, tính toán theo lý thuyết chúng em đã đưa ra mô hình thực tế nằm trong giới hạn cho phép, độ tin c ậy cao. Tuy nhiên đồ án còn nhiều thiếu sót và chưa có điều kiện đi sâu hơn. Nhưng cũng một phần nào góp phần cho sự nghiên cứu và hướng phát triển mô hình xe tự động trong tương lai.

TÀI LIỆU THAM KHẢO

[1] http://hocavr.com

[2] Giáo trình ô tô 2 trường đại học Sư Phạm Kỹ Thuật thành phố Hồ Chí Minh. [3] http://www.meslab.org/mes/archive/index.php/f-194.html

[4] http://vntech.vn/threads/mf-bai-tap-thuc-hanh-catia.5608/

[5] http://www.otofun.net/threads/97-thua%CC%A3t-ngu%CC%83-oto

[6] http://www.download.com.vn/docs/tu-hoc-microsoft-excel-ebook/download [7 ] http://dientuvietnam.net (adsbygoogle = window.adsbygoogle || []).push({});

PHỤ LỤC

Code điều khiển: viết bằng avr studio. //Phần khai báo: #ifndef NHAN_H_ #define NHAN_H_ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define pwm1 OCR1A #define pwm2 OCR1B

volatile unsigned int dem; volatile unsigned char ngat; volatile unsigned char u_Data;

void uart_init(void);

void uart_char_tx(unsigned char chr); void init (void);

void goc(int d); #endif /* NHAN_H_ */ //Các chương trình con: #include "nhan.h" #include <avr/interrupt.h> void uart_init(void) {

//set baud, 57.6k ung voi f=8Mhz UBRRH=0;

UBRRL=8;

UCSRA=0x00;

UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);

UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//cho phep ca 2 qua trinh nhan va//truyen, va cho phep ngat sau khi nhan xong

sei(); //cho phep ngat toan cuc }

void init (void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x01; PORTC=0x00; DDRC=0x01; DDRD=0xff; PORTD=0x00;

TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); // chon dang xung, mode 14 TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); // 64 ICR1=255; TCCR0=(1<<CS01); TCNT0=0x00; OCR0=0x00; TIMSK=0x41; ACSR=0x80; SFIOR=0x00; sei();

} void goc(int d) { ngat= ((d-5)*5/9)+150; } // Chương trình chính: #define F_CPU 8000000UL #include <avr/io.h> #include "nhan.h" #include <avr/interrupt.h> #include <util/delay.h> int main(void) { uart_init(); init(); void goc(); while(1) { switch (u_Data) { case 200: pwm1= 100; goc(40); case 100: pwm1= 200; goc(0); case 0: pwm1= 100; goc(-40); case 50: pwm1= 100; goc(0); } } } ISR(SIG_UART_RECV)

{ //trinh phuc vu ngat USART hoan tat nhan u_Data=UDR; } ISR(TIMER0_OVF_vect) { TCNT0=248; dem++; if(dem>=2000) { PORTB=0x01; dem=0; } if(dem>=ngat) PORTB=0x00; }

Một phần của tài liệu đồ án tốt nghiệp thiết kế mô hình xe chạy tự động (Trang 77)