1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Mạch đo tốc độ động cơ và giá cước taxi

92 339 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 92
Dung lượng 3,1 MB

Nội dung

Việc đưa những bộ xửlý bằng điện tử vào ứng dụng trong các xe hơi đời mớiđã góp phần thúc đẩy nền công nghiệp ô tô pháttriển mạnh theo hướng tiện nghi và dễ sử dụng đồngthời đảm bảo an t

Trang 1

Chương 1:Giới Thiệu Về Taxi

1.1/Một số hình ảnh về đồng hồ taxi:

Trang 2

1.2 – Giới thiệu sơ lược về taxi

Cùng với sự phát triển của xã hội, nhu cầu vậtchất và tinh thần của con người ngày càng tăng Nắmbắt được điều trên, trong vài năm gần đây để thỏamãn nhu cầu đi lại ngày càng cao để giải quyết mộtsố vấn đề xã hội như giảm bớt lượng xe hai bánh trênđường phố, tăng vẻ mỹ quan cho đô thị Nhà nước đãđưa vào hoạt động loại hình Taxi Đây là loại hình đưa đónkhách tương đối mới mẽ đối với nước ta nhưng lạikhông xa lạ gì đối với các nước Nó tỏ ra tiện dụng choviệc đi lại và phần nào giảm bớt được ô nhiễm môitrường, an toàn cho hành khách Muốn như vậy, xe Taxilưu hành phải trang bị những thiết bị an toàn cho hànhkhách lẫn người điều khiễn phương tiện Ngoài nhữngthiết bị như dây an toàn, thiết bị giảm xóc và chống vađập… thì việc trang bị những thiết bị cảnh báo nhằmcung cấp thông tin về tình trạng hoạt động của xe chongười điều khiển là điều cần thiết

Bên cạnh vấn đề quan trọng là bảo đảm an toàntrong quá trình di chuyển thì việc tính cước trên xe Taxiphải đảm bảo tính chính xác và hợp lý nhằm tạo tâmthoải mái và dễ chịu cho hành khách.Xuất phát từ nhucầu thực tế khách quan đó, cùng những kiến thức đãđược trang bị trong trường, người thực hiện đã mạnh dạn

thực hiện đề tài “THIẾT KẾ VÀ THI CÔNG MẠCH

ĐỒNG HỒ ĐO TỐC ĐỘ VÀ TÍNH CƯỚC XE TAXI”

1.3- GIỚI HẠN ĐỀ TÀI:

Với đề tài mang tính thực tiễn là “THIẾT KẾ VÀ

THI CÔNG MẠCH ĐỒNG HỒ ĐO TỐC ĐỘ VÀ TÍNH CƯỚC XE TAXI” thì vấn đề thực hiện thiết kế và thi

công một mạch hoàn chỉnh thật sự có thể ứng dụngrộng rãi là một điều mà người thực hiện mong muốnđạt được

Tuy nhiên do thời gian và kiến thức có hạn cùngnhững hạn chế khách quan khác ngoài ý muốn màtrong phạm vi đồ án nhóm chúng em không thể đềcập, đi sâu khảo sát bộ tính cước xe Taxi đang được sửdụng rộng rãi trên các xe Taxi ở nước ta Dù vậy nhómchúng em cũng đã cố gắng tìm hiểu các nguyên lý

Trang 3

tính cước cũng như tốc độ xe ôtô để đề ra hướng giảiquyết Theo đó nội dung nghiên cứu chỉ tiến hành thựchiện các vấn đề sau:

• Giới thiệu nguyên lý đo tốc độ, nguyên lý tínhcước xe Taxi., quãng đường xe taxi

_Về thi công, với yêu cầu của đề tài đặt ra làthiết kế và thi công một mạch điện gần sát với thựctế để phục vụ cho việc học tập và nghiên cứu Trên cơsở dựa trên khả năng kiến thức đã thu thập ở nhàtrường, nhóm chúng em đã cố gắng tiến hành thi côngmột số mạch cơ bản đủ để mô phỏng đo tốc độ vàtính cước xe Taxi

1.4-MỤC ĐÍCH NGHIÊN CỨU

Đề tài được thực hiện trong phạm vi hẹp chưa thểứng dụng được trong thực tiễn nhưng điều mà nhómchúng em thực hiện muốn hướng đến là thông quaviệc thực hiện đồ án tốt nghiệp có điều kiện vậndụng lý thuyết đã học để giải quyết một vấn đề mangtính thực tiễn

1.5/-THỂ THỨC NGHIÊN CỨU:

1- Thời gian nghiên cứu:

Quá trình nghiên cứu một đề tài được xem là một quytrình công nghệ hẳn hoi vì nó đòi hỏi phải tiến hànhtheo các khâu kế tiếp nhau bao gồm việc chọn đề tài,biên soạn đề cương, thu thập dữ kiện, xử lý dữ kiện,viết công trình nghiên cứu

Đồ án tốt nghiệp được tiến hành thực hiện trongkhoảng thời gian là 6 tuần:

Tuần 1 : Chọn đề tài, chính xác hóa đề tài, soạnđề cương

Tuần 2 : Thu thập dữ kiện và tài liệu liên hệ.Tuần 3 – 5 : Viết lý thuyết và thi công

• Tuần 6 : Hoàn tất và nộp đồ án

Đây là giai đoạn quan trọng, sử dụng các phươngpháp và phương tiện nghiên cứu để thu thập các dữkiện về đề tài đã được xác định Dữ kiện thu thậpđược sẽ là chất liệu để hình thành công trình nghiêncứu khoa học Vấn đề là làm sao thu thập được dữ kiện

Trang 4

đầy đủ, chính xác, và phù hợp với nội dung nghiêncứu.

Trong phạm vi tập đồ án này nhóm chúng em sửdụng các phương pháp tham khảo tài liệu và thựcnghiệm để thu thập dữ kiện giải quyết đề tài Việctham khảo tài liệu giúp cho nhóm chúng em bổ sungthêm kiến thức, lý luận cũng như phương pháp mànhững công trình nghiên cứu trước đó đã xây dựng.Nhờ đó nhóm chúng em tập trung năng lực vào việcgiải quyết các vấn đề còn tồn tại Tuy nhiên việcnghiên cứu tham khảo tài liệu luôn bảo đảm tính kếthừa và phát triển có chọn lọc

Các dữ kiện sau khi được thu thập chưa thể sử dụngđược ngay mà phải qua quá trình sàng lọc, sửa chữa,phân tích khái quát hóa thành lý luận Tài liệu đượcnhóm thực hiện sử dụng là những tài liệu có chấtlượng cao chủ yếu là tài liệu gốc nên bảo đảm chínhxác về nội dung đề cập

Chương II/Dẫn Nhập Đề Tài

2.1 ĐẶT VẤN ĐỀ:

Hiện nay đất nước chúng ta đang trong tiến trình cơng nghiệp hiện đại hĩa đất nước Trong sản xuất cơng nghiệp tự động hĩađĩng một vai trị khơng nhỏ trong sản xuất Việc sử dụng vi điềukhiển để điều khiển cĩ rất nhiều ưu điểm như tiềt kiệm giá thành, dễlập trình…

hĩa-Đồ án tốt nghiệp này đề cập đến vấn đề đo tốc độ động cơ vàtính giá cước xe taxi

2.2 NỘI DUNG ĐỀ TÀI:

Với khoảng thời gian thực hiện đề tài 6 tuần, nhĩm đã thảo luận vàchọn nội dung của đề tài như sau:

- Nghiên cứu và tìm phương án điều khiển và xử lý dữ liệu cho mạch đotốc độ động cơ và tính cước taxi

- Thi cơng mạch

- Viết chương trình, nap, chạy thử, điều chỉnh mạch

2.3 MỤC ĐÍCH ĐỀ TÀI:

Trang 5

Trong quá trình nghiên cứu và thực hiện đề tài này nhằm giúp người học:

- Tăng khả năng tự nghiên cứu cũng như tự học

- Bước đầu tiếp xúc với thực tế

- Vận dụng những kiến thức đã cĩ đồng thời tìm tịi những kiến thứcmới để hiểu sâu sắc hơn trong lĩnh vực này Để thiết kế được mộtmạch điều khiển như đã nêu ở trên thì người nghiên cứu phải nắmvững kiến thức chuyên ngành điện tử, tìm hiểu, nghiên cứu quasách vở, tài liệu nước ngồi và dạng mạch thực tế để thi cơng phầncứng

2.4 ĐỐI TƯỢNG NGHIÊN CỨU:

- Các phương án điều khiển và xử lý dữ liệu cho bảng led 7 đoạn

- Tìm hiểu vi điều khiển PIC 16F877A

- Tìm hiểu phương pháp lập trình C

2.5 LẬP KẾ HOẠCH NGHIÊN CỨU:

-Để thực hiện đề tài này nhĩm sinh viên đã kết hợp sử dụng nhiềuphương pháp và phương tiện hỗ trợ gồm cĩ:

- Tham khảo tài liệu: kỹ thuật xung số, điện tử căn bản, vi điềukhiển…

- Quan sát

- Thực nghiệm

- Tổng kết kinh nghiệm

- Phương tiện: máy vi tính, Internet, thư viện…

2.6I-NGUYÊN LÝ ĐO TỐC ĐỘ XE ÔTÔ

1- Mở đầu:

Trong vài năm gần đây, các thiết bị đo bằng cơ khívà đèn báo chỉ có ý nghĩa mang đến những thông tincần thiết hổ trợ cho người lái xe Việc đưa những bộ xửlý bằng điện tử vào ứng dụng trong các xe hơi đời mớiđã góp phần thúc đẩy nền công nghiệp ô tô pháttriển mạnh theo hướng tiện nghi và dễ sử dụng đồngthời đảm bảo an toàn nhất cho người lái xe về tìnhtrạng hoạt động của xe với các yếu tố ngoại cảnh.Nhưng dù là thiết bị chỉ báo bằng cơ hay bằng điện thìnhững thiết bị này vẫn được xây dựng nên bởi ba yếutố chính là: đầu vào, bộ xử lý và đầu ra Chẳng hạnnhư khi kiểm soát hoạt động của xe thì một bộ phận vi

Trang 6

xử lý của máy Engine ECU (Electronic Control Unit) sẽ xửlý những tín hiệu nhận từ những bộ cảm biến (sensors)rồi đưa đến bộ phận chỉ báo.

Nguyên lý đo tốc độ xe ôtô:

Ở xe ôtô đời cũ, tốc độ xe ôtô được xác địnhbằng bộ cơ khí: dùng một bánh vít trục vít gắn tại hộpsố và thông qua dây công-tơ-mét dẫn động kim đồnghồ đo tốc độ quay Đây là phương pháp cổ điển, đơngiản, hiệu quả về kỹ thuật tuy nhiên hạn chế bởi độbền cơ và chưa đạt độ chính xác cao

Hiện nay, các xe ôtô đời mới không dùng kiểu đotốc độ bằng cơ khí nữa mà dúng hệ thống xử lý tínhiệu điện lấy từ cảm biến tốc độ (Speed sensor) đặt ởtrục thứ cấp của hộp số đưa về xử lý rồi đưa đếnđồng hồ chỉ báo tốc độ Sở dĩ xu hướng chuyển sangphương pháp mới này là do yêu cầu khách quan ề điệntử hóa các bộ phận điều khiển thiết bị hổ trợ trên

xe Phương pháp này tỏ ra chính xác và gọn nhẹ đồngthời thể hiện khả năng mềm dẻo linh hoạt trong xử lývà hỗ trợ tích cực cho các thiết bị liên quan

* Có hai bộ đo tốc độ thường dùng:

a- Bộ cảm biến này bao gồm: IC lai HIC (Hybrid

Integrated Circuit) được lắp trên MRE và một xuyến từ(Magnetic Ring) Toàn bộ cảm biến được lắp đặt ởhộp số và được dẫn động bởi bánh răng của trụcthứ cấp

- Hoạt động:

Khi trục số quay truyền động cho trục gắn xuyến từquay theo tạo ra một từ thông biến thiên liên tục Kếtquả là tạo nên một tín hiệu xoay chiều liên tục khi rakhỏi MRE Tín hiệu xoay chiều này qua bộ so sánh(Comparator) trong bộ cảm biến tốc độ sẽ chuyển đổidạng sóng xoay chiều ra tín hiệu số Tín hiệu này sau đóđược chuyển đổi bởi một transistor trớc khi gởi đến bộliên kết đo (Combination meter)

Trang 7

Tần số của sóng sin được cho tùy theo số cực của nam châm gắn trên xuyến từ Có hai loại xuyến từ (phụ thuộc vào đời của xe ôtô):

- Loại có 20 cực tư øsẽ cho ra 20 chu kỳ sóng sin (ứngvới mỗi vòng quay của xuyến từ) Trong trường hợpnày tần số của tín hiệu được chuyển đổi từ 20 xungcho mỗi vòng quay của xuyến từ thành 4 xung sau khiqua bộ liên kết đo (Combination Meter) Sau đó tín hiệusẽ được gởi đến bộ xử lý của máy Engine ECU đểxử lý sau cùng đưa đến đồng hồ chỉ thị

2.7

Trên thực tế bộ tính cước xe Taxi đang lưu hành hiện naylà được nhập ngoại hoàn toàn và nhìn chung nó đápứng được các yêu cầu về kinh tế – kỹ thuật, đảm bảotính chính xác quãng đường và số tiền hành khách trảcho đoạn đường di chuyển

* Việc tính cước được thực hiện như sau:

- Tín hiệu phục vụ cho việc tính cước là tín hiệu tốc độlấy từ đồng hồ công-tơ-mét của xe

- Một bộ xử lý tín hiệu sẽ đếm số xung qui đổi ra tạibánh xe để tính ra quãng đường

Số xung tại bánh xe = k (số xung tại hộp số)

- Từ quãng đường đã có thực hiện phép nhân với sốtiền qui định cho 1 km đầu và các km tiếp theo sẽ cho

ta tổng số tiền/cuộc chạy

Trang 8

- Khảo sát mô hình bộ tính cước thực tế được trang bịcho 1 loại xe Taxi đang lưu hành.

_Báo số km chạy không có khách

1km tiếp theo : 5000ĐVN

2.8 Cảnh báo tốc độ xe ôtô:

Vấn đề an toàn giao thông, bảo đảm tính mạng chongười và xe là vấn đề cần được chú trọng và đặt lênhàng đầu Thiết bị cảnh báo tốc độ đã được cáchãng ôtô lắp đặt và lưu hành rộng rãi ở các nướcnhưng ở nước ta lại ít được quan tâm sử dụng mặc dùnó góp phần quan trọng trong việc cảnh báo cho ngườiđiều khiển phương tiện biết đang di chuyển ở tốc độ caomà có hướng kiểm soát lại tốc độ nhằm đảm bảo antoàn giao thông

* Việc cảnh báo được thực hiện như sau:

- Tín hiệu tốc độ được đưa về bộ so sánh so sánhvới tốc độ cài đặt

- Khi đến tốc độ cài đặt thì tín hiệu được đưa đếnmở tín hiệu dao động ở tần số quy định rồi xuất

ra bộ khuếch đại tín hiệu và loa cảnh báo

Theo đó, giả sử ta qui định cài đặt các cấp cảnh báonhư sau:

*V ≥ 100km/h 2KHz(tần số cảnh báo)

Trang 9

Chương 3:Giới thiệu về PIC 16f877a

Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnhgồm 35 lệnh có độ dài 14 bit Mỗi lệnh đều được thựcthi trong một chu kì xung clock Tốc độ hoạt động tối đacho phép là 20 MHz với một chu kì lệnh là 200ns Bộnhớ chương trình 8Kx14 bit, bộ nhớ dữ liệu 368x8

byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng256x8 byte Số PORT I/O là 5 với 33 pin I/O

3.1Các đặc tính ngoại vi bao gồm các khối chức năng sau:

 Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit

 Timer1: bộ đếm 16 bit với bộ chia tần số, cóthể thực hiện chức năng đếm dựa vào xung clockngoại vi ngay khi vi điều khiển hoạt động ở chếđộ sleep

 Timer2: bộ đếm 8 bit với bộ chia tần số, bộpostcaler

Hai bộ Capture/so sánh/điều chế độ rông xung

Trang 10

3.2 Sơ đồ chân vi điều khiển PIC

Trang 15

3.3 TỔ CHỨC BỘ NHỚ

Cấu trúc bộ nhớ của vi điều khiển PIC16F877Abao gồm bộ nhớ chương trình (Program memory) và bộnhớ dữ liệu (Data Memory)

3.3.1.BỘ NHỚ CHƯƠNG TRÌNH

Bộ nhớ chương trình của vi

điều khiển

PIC16F877A là bộ nhớ flash, dung

lượng bộ

nhớ 8K word (1 word = 14 bit) và

được phân thành nhiều trang (từ

page0 đến page 3) .Như vậy bộ

nhớ chương trình có khả năng

chứa được 8*1024 = 8192 lệnh (vì

một lệnh sau khi mã hóa sẽ có

dung lượng 1 word (14 bit).Để mã

hóa được địa chỉ của 8K word

bộ nhớ chương trình, bộ đếm

chương trình có dung lượng 13 bit

(PC<12:0>).Khi vi điều khiển được

reset, bộ đếm chương trình sẽ

chỉ đến địa chỉ 0000h (Reset

vector) Khi có ngắt xảy ra, bộ

đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interruptvector).Bộ nhớ chương trình không bao gồm:Bộ nhớstack và không được địa chỉ hóa bởi bộ đếm chương

Trang 16

trình Bộ nhớ stack sẽ được đề cập cụ thể trong phầnsau.

3.3.2 BỘ NHỚ DỮ LIỆU

Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM đượcchia ra làm nhiều bank Đối với PIC16F877A bộ nhớ dữliệu được chia ra làm 4 bank Mỗi bank có dung lượng 128byte, bao gồm các thanh ghi có chức năng đặc biệt SFG(Special Function Register) nằm ở các vùng địa chỉ thấpvà các thanh ghi mục đích chung GPR (General PurposeRegister) nằm ở vùng địa chỉ còn lại trong bank Cácthanh ghi SFR thường xuyên được sử dụng (ví dụ nhưthanh ghi STATUS) sẽ được đặt ở tất cà các bank củabộ nhớ dữ liệu giúp thuận tiện trong quá trình truyxuất và làm giảm bớt lệnh của chương trình Sơ đồcụ thể của bộ nhớ dữ liệu PIC16F877A như sau:

Trang 18

3.4 Các port của PIC16F87X

* PORTA và thanh ghi TRISA

PORTA có độ rộng 6 bit , là port vào ra hai chiều Thanh ghi dữliệu trực tiếptương ứng là TRISA Cho tất cảa các bit của TRISA là

1 thì các chân tương ứng ởPORTA là ngõ vào Cho tất cả các bitcủa TRISA là 0 thì các chân tương ứng ở PORTA là ngõ ra Việc đọccác thanh ghi của PORTA sẽ đọc trạng thái của những chân ,ngược lại việc ghi lên nó sẽ ghi qua port chốt Tất cả những hoạtđộng ghi là các hoạt động đọc-điều chỉnh-ghi Bởi vậy , dữ liệuđược ghi đến port có nghĩa là những chân của port là đọc , giá trịđược chỉnh sửa và được ghi vào port chốt dữ liệu Chân RA4 được

đa hợp với xung clock ngoài ở ngõ vào của Timer0 thànhchânRA4/T0CKI Chân RA4/T0CKI là ngõ vào có một TriggerSchmitt và một ngõ ra códạng thoát mở Tất cả những chân kháccủa PORTA có ngõ vào TTL và có ngõ ra điều khiển CMOS Nhữngchân khác của PORTA được đa hợp với ngõ vào tương tự và ngõvàotương tự VREF Hoạt động của mỗi chân được chọn bằng cáchxoá hoặc đặt những bit điều khiển trong thanh ghi ADCON1 ( A/DControl Register1 ).Thanh ghi TRISA điều khiển hướng của nhữngchân RA , ngay cả khi chúng được sử dụng như ngõ vào tương

tự Người sử dụng cần phải chắc rằng những bit trong thanh ghiTRISA luôn luôn được đặt khi sử dụng chúng như ngõ vào tương

tự

Trang 19

* PORTB và thanh ghi TRISB

PORTB có độ rộng 8 bit , là port vào ra hai chiều Ba chân củaPORTB được đahợp với chức năng lập trình mức điện thế thấp(Low Voltage Programming ) :RB3/PGM , RB6/PGC và RB7/PGD Mỗi chân của PORTB có một điện trở kéo lên yếu ở bên trong Một bit điều khiển đơn có thể mở tất cả những điện trở kéo lên

này .Điều này được thực hiện bằng cách xóa bit RBPU

(OPTION_REG<7>) Những điệntrở kéo lên này sẽ tự động tắt khicác chân của port được cấu hình như ngõ ra Các điện trở này bịcấm khi có một Power-on Reset Bốn chân của PORTB ,RB7:RB4 ,có một ngắt để thay đổi đặc tính Chỉ những chân đượccấu hình như ngõ vào mới có thể gây ra ngắt này Những chânvào RB7:RB4 ) được so sánh với giá trị được chốt trước đó tronglần đọc cuối cùng của PORTB Các kết quả không phù hợp ở ngõ

ra trên chân RB7: RB4 được OR với nhau để phát ra một ngắt PortChange RB với cờ ngắt là RBIF ( INTCON<0> ) Ngắt này có thểđánh thức thiết bị từ trạng thái nghĩ( SLEEP ) Trong thủ tục phục

vụ ngắt , người sử dụng có thể xóa ngắt theo cách sau

a) Đọc hoặc ghi bất kì lên PORTB Điều này sẽ kết thúc điều kiệnkhông hòa hợp

b)XóabitcờRBIF

Trang 20

*PORTC và thanh ghi TRISC

PORTC có độ rộng là 8 bit , là port hai chiều Thanh ghi dữ liệutrực tiếp tương ứng là TRISC Cho tất cả các bit của TRISC là 1 thìcác chân tương ứng ở PORTC là ngõ vào Cho tất cả các bit củaTRISC là 0 thì các chân tương ứng ở PORTC là ngõ ra PORTC được

đa hợp với vài chức năng ngoại vi , những chân của PORTC cóđệmTrigger Schmitt ở ngõ vào Khi bộ I2C được cho phép , chân 3

và 4 của PORTC cóthể được cấu hình với mức I2C bình thường ,hoặc với mức SMBus bằng cách sử dụng bit CKE (SSPSTAT<6>) Khi những chức năng ngoại vi được cho phép , chúng tacần phảiquan tâm đến việc định nghĩa các bit của TRIS cho mỗi chân củaPORTC Một vài thiết bị ngoại vi ghi đè lên bit TRIS để tạo nên mộtchân ở ngõ ra , trong khi những thiết bị ngoại vi khác ghi đè lênbit TRIS thì sẽ tạo nên một chân ở ngõ vào Khi những bit TRIS ghi

đè bị tác động trong khi thiết bị ngoại vi được cho phép ,nhữnglệnh đọc-thay thế-ghi ( BSF , BCF , XORWF ) với TRISC là nơi đếncần phải được tránh Người sử dụng cần phải chỉ ra vùng ngoại vitương ứng để đảm bảo choviệc đặt TRIS bit là đúng

Trang 22

*PORTD và thanh ghi TRISD

PORTD và TRISD không có đối với PIC16F873 hoặc PIC16F876 PORTD là port 8 bit với đệm Trigger Schmitt ở ngõ vào Mỗi chân

có thể được cấu hình riêng lẻ như một ngõ vào hoặc ngõra.PORTD có thể được cấu hình như port của bộ vi xử lýrộng 8 bit( parallel slave port ) bằng cách đặt bit điều khiển PSPMIDE( TRISE <4>)

Trong chế độ này , đệm ở ngõ vào là TTL

PORTE và thanh ghi TRISE

PORTE và TRISE không có đối với PIC16F873 hoặc PIC16F876 PORTE có ba chân (RE0/RD/AN5 , RE1/WR/AN6 , và RE2/CS/AN7 ) mỗi chân được cấu hình riêng lẻ như những ngõ vào hoặc những ngõ ra Những chân này có đệm TriggerSchmitt ở ngõ vào

Những chân của PORTE đóng vai trò như những ngõ vào điều khiển vào ra cho port của vi xử lý khi bit PSPMODE ( TRISE <4> ) được set Trong chế độ này , người sử dụng cần phải chắc rằng những bit TRISE <2:0> được set , và chắc rằng những chân này được cấu hình như những ngõ vào số Cũng bảo đảm

rằngADCON1 được cấu hình cho vào ra số Trong chế độ này , những đệm ở ngõ vào làTTL Những chân của PORTE được đa hợp

Trang 23

với những ngõ vào tương tự Khi được chọn cho ngõ vào tương

tự , những chân này sẽ đọc giá trị ‘0’ TRISE điều khiểnhướng của những chân RE chỉ khi những chân này được sử dụng như những ngõ vào tương tự Người sử dụng cần phải giữ những chân được cấu hình như những ngõ vào khi sử dụng chúng như những ngõ vào tương tự

3.3.4 – Bộ nhớ dữ liệu EEPROM và bộ nhớ chương trình FLASH

Bộ nhớ dữ liệu EEPROM và bộ nhớ chương trình FLASH cho phépđọc hoặc ghi trong suốt hoạt động bình thường trong phạm viVDD Những thao tác này xảy ra trên một byte đơn cho bộ nhớ

dữ liệu EEPROM và trên một từ đơn cho bộ nhớ chươngtrìnhFLASH Một thao tác ghi gây ra sự xóa rồi ghi , thao tác nàyđược thực hiện trên mộtbyte hoặc một từ được chỉ định Sự truycập vào bộ nhớ chương trình phải kể đến sự tính toánchecksum Ghi một byte hoặc một word sẽ tự động xóa vùng nhớ

và ghi lên giá trị mới ( xóatrước khi ghi ) Việc ghi vào bộ nhớ dữliệu EEPROM không ảnh hưởng đến hoạt độngcủa thiết bị Việcghi vào bộ nhớ chương trình sẽ dừng thực thi các lệnh cho đến khiquátrình ghi hoàn thành Bộ nhớ chương trình không thể đượctruy cập trong suốt quátrìnhghi Trong suốt quá trình ghi , bộ daođộng tiếp tục chạy , thiết bị ngoại vi vẫn tiếp tục hoạt động vànhững sự kiện về ngắt sẽ được phát hiện và đợi cho đến khi quátrình ghi hoàn thành Khi quá trình ghi hoàn thành , lệnh tiếptheo trong hàng đợi lệnh sẽ được thực hiện và một rẽ nhánh đếnvectơ ngắt sẽ xảy ra đến ngắt được phép và gây ra trong suốtquá trình ghi Việc đọc và ghi truy cập đến cả hai bộ nhớ xảy ragiántiếp thông qua việc đặt những thanh ghi mục đích chung( SFR ) Có sáu thanh ghi mục đích chung được sử dụng là

Trang 24

khiển Khi có sự trao đổi với bộ nhớ dữ liệu EEPROM , thanh ghiEEADR giữ địa chỉ sẽ được truy cập .Phụ thuộc vào thao tác,thanh ghi EEDATA giữ dữ liệu được ghi hoặc được đọc tại địa chỉtrong thanh ghiEEADR PIC16F873/874 có 128 byte cho bộ nhớ

dữ liệu EEPROM PIC16F876/877 có 256 byte cho bộ nhớ dữ liệuEEPROM và do đó nó sử dụng tất cả 8 bit của EEADR

– Quá trình đọc bộ nhớ dữ liệu EEPROM

Quá trình đọc bộ nhớ dữ liệu EEPROM chỉ yêu cầu địa chỉ cần truycập phải được ghi vào thanh ghi EEADR và xóa bit EEPGD Saukhi bit RD được set , dữ liệu sẽ phải sẵnsàng trong thanh ghiEEDATA trong chu kỳ lệnh kế tiếp EEDATA sẽ giữ giá trị nàychođến khi thao tác đọc kế tiếp được bắt đầu hoặc cho đến khi nóđược ghi bởi vi chương trình

Các bước trong quá trình đọc bộ nhớ dữ liệu EEPROM là :

1 Ghi địa chỉ cần truy cập vào thanh ghi EEADR và hãy chắc rằngđịa chỉ này thì không lớn hơn kích thước bộ nhớ của linh kiện PIC16F87X

2 Xóa bit EEPGD để trỏ đến bộ nhớ dữ liệu EEPROM

3 Set bit RD để bắt đầu thao tác đọc

4 Đọc dữ liệu từ thanh ghi EEDATA:

Quá trình ghi dữ liệu vào bộ nhớ dữ liệu EEPROM được tiến hànhqua vài bước Cả địa chỉ và giá trị dữ liệu cần phải được ghi vàonhững thanh ghi mục đích chung SFR Bit EEPGD cần phải đượcxóa , và bit WREN phải được set để cho phép ghi Bit WREN phaỉ

bị xóa trong suốt thời gian ngoại trừ trong quá trình ghi vào bộnhớ dữ liệuEEPROM Bit WR chỉ có thể được set khi bit WREN đãđược set

Trang 25

Chương 4:Bộ Hoạt Động Định thời

4.1 – Bộ định thời TIMER0

Trong phần này ta sẽ làm bước đầu làm quen với cácTimer của vi điều khiển PIC16F877A và các thao tác cơbản đối với các Timer, bao gồm thao tác khởi tạo vàxử lí ngắt Để cụ thể hơn ta sẽ đi sâu vào ứng dụngsau:hiển thị các giá trị đã được cập nhật ra LED 7 đoạn

Bộ định thời/bộ đếm Timer0 cĩ các đặc tính sau :

Bộ định thời / bộ đếm 8 bit

Cho phép đọc và ghi

Bộ chia 8 bit lập trình được bằng phần mềm

Chọn xung clock nội hoặc ngoại

Ngắt khi cĩ sự tràn từ FFh đến 00h

Chọn cạnh cho xung clock ngồi

Bên dưới là sơ đồ khối của bộ định thời Timer0 và bộ chia dùng chung với WDT

Chế độ định thời (Timer) được chọn bằng cách xĩa bit T0CS( OPTION_REG<5> Trong chế độ định thời , bộ định thời Timer0

sẽ tăng dần sau mỗi chu kỳ lệnh ( khơng cĩbộ chia ) Nếu thanhghi TMR0 được ghi thì sự tăng sẽ bị ngăn lại sau hai chu kỳ

Trang 26

lệnh Chế độ đếm (Counter) được chọn bằng cách set bit T0SC(OPTION_REG<5> ) Trong chế độ đếm , Timer0 sẽ tăng dần ởmỗi cạnh lên hoặc cạnh xuống của chânRA4/T0CKI Sự tăng cạnhđược xác định bởi bit Timer0 Source Edge Select , T0SE(OPTION_REG<4> ) Bộ chia chỉ được dùng chung qua lại giữa bộđịnh thời Timer0 và bộ định thời Watchdog Bộ chia không chophép đọc hoặc ghi

Ngắt TMR0 được phát ra khi thanh ghi TMR0 tràn từ FFh đến 00h

Sự tràn này sẽ set bit T0IF (INTCON<2>) Ngắt này có thể đượcgiấu đi bằng cách xóa đi bit T0IE(INTCON<5>) Bit T0IF cần phảiđược xóa trong chương trình bởi thủ tục phục vụngắt của bộ địnhthời Timer0 trước khi ngắt này được cho phép lại

2 – Sử dụng Timer0 với xung clock ngoại

Khi bộ chia không được sử dụng , clock ngoài đặt vào thì giốngnhư bộ chia ở ngõ ra Sự đồng bộ của chân T0CKI với clock ngoàiđược thực hiện bằng cách lấy mẫu bộ chia ở ngõ ra trên chân Q2

và Q4 Vì vậy thưc sự cần thiết để chân T0CKIở mức cao trong ítnhất 2 chu kỳ máy và ở mức thấp trong ít nhất 2 chu kỳ máy

4.2*Bộ định thời TMR1 :

Trang 27

Bộ định thời 1 là một bộ định thời/bộ đếm 16 bit gồm hai thanhghi TMR1H ( byte cao ) và TMR1L ( byte thấp ) mà có thể đọchoặc ghi Cặp thanh ghi này tăng số đếm từ0000h đến FFFFh vàmột tràn sẽ xuất hiện khi có sự chuyển số đếm từ FFFFhxuống0000h Ngắt, nếu được phép có thể phát ra khi có số đếmtràn và được đặt ở bit cờ ngắt TMR1IF Ngắt có thể được phéphoặc cấm bằng cách đặt hoặc xóa bit cho phép ngắtTMR1IE.Bộđịnh thời Timer1 có thể được cấu hình để hoạt động một trong haichế độ sau:

_Định thời một khoảng thời gian ( Timer )

_Đếm sự kiện ( Counter )

Việc lựa chọn một trong hai chế độ được xác định bằng cách đặthoặc xóa bit chọn clock TMR1CS Trong chế độ định một khoảngthời gian, bộ định thời tăng số đếm lênsau mỗi chu kỳ lệnh Trongchế độ đếm sự kiện, bộ định thời tăng sau mỗi

cạnh lên của clock ngoài đặt vào Bộ định thời 1 có thể được phéphoặc cấm bằng cách đặt hoặc xóa bit điều khiển TMR1ON.\

1 – Chế độ Timer

Chế độ Timer được chọn bằng cách xóa bit TMR1CS Trong chế độnày, nguồn clock đặt vào Timer là mạch dao động FOSC/4 Bit điều khiển đồng bộ không bị tác động vì clock ngoài luôn luôn đồng bộ

Trang 28

và sau đó reset lại giá trị 00h trong chu kỳ kếtiếp PR2 là thanhghi có thể đọc hoặc ghi.Giá trị trùng hợp trong thanh ghi TMR2được đi qua bộ postscaler 4 bit để phát ra

một ngắt TMR2(được đặt ở bit cờ ngắt TMR2IF) Bộ định thời 2 cóthể được tắt ( không hoạt động ) bằng cách xóa bit điều khiểnTMR2ON để giảm thiểu công suất tiêu tán nguồn

Trang 30

4.4 NGẮT (INTERRUPT)

PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắtđược điều khiển bởi thanh ghi INTCON (bit GIE) Bên cạnhđó mỗi ngắt còn có một bit điều khiển và cờ ngắtriêng Các cờ ngắt vẫn được set bình thường khi thỏamãn điều kiện ngắt xảy ra bất chấp trạng thái của bitGIE, tuy nhiên hoạt động ngắt vẫn phụ thuôc vào bit GIEvà các bit điều khiển khác Bit điều khiển ngắt RB0/INTvà TMR0 nằm trong thanh ghi INTCON, thanh ghi này cònchứa bit cho phép các ngắt ngoại vi PEIE Bit điều khiểncác ngắt nằm trong thanh ghi PIE1 và PIE2 Cờ ngắt củacác ngắt nằm trong thanh ghi PIR1 và PIR2

Trong một thời điểm chỉ có một chương trình ngắtđược thực thi, chương trình ngắt được kết thúc bằng lệnhRETFIE Khi chương trình ngắt được thực thi, bit GIE tự độngđược xóa, địa chỉ lệnh tiếp theo của chương trình chínhđược cất vào trong bộ nhớ Stack và bộ đếm chương trìnhsẽ chỉ đến địa chỉ 0004h Lệnh RETFIE được dùng đểthoát khỏi chương trình ngắt và quay trở về chương trìnhchính, đồng thời bit GIE cũng sẽ được set để cho phépcác ngắt hoạt động trở lại Các cờ hiệu được dùng đểkiểm tra ngắt nào đang xảy ra và phải được xóa bằngchương trình trước khi cho phép ngắt tiếp tục hoạt độngtrở lại để ta có thể phát hiện được thời điểm tiếp theomà ngắt xảy ra.Đối với các ngắt ngoại vi như ngắt từchân INT hay ngắt từ sự thay đổi trạng thái các pin của

Trang 31

PORTB (PORTB Interrupt on change), việc xác định ngắt nàoxảy ra cần 3 hoặc 4chu kì lệnh tùy thuộc vào thờiđiểm xảy ra ngắt.Cần chú ý là trong quá trình thực thingắt, chỉ có giá trị của bộ đếm chương trình được cấtvào trong Stack, trong khi một số thanh ghi quan trọng sẽkhông được cất và có thể bị thay đổi giá trị trong quátrình thực thi chương trình ngắt Điều này nên được xử líbằng chương trình để tránh hiện tượng trên xảy ra.

*Giới Thiệu 1 số thanh ghi trong PIC

P2.24 Thanh ghi RCSTA: địa chỉ 18h

Thanh ghi chứa các bit trạng thái và các bit điều khiểnquá trình nhận dữ liệu qua

chuẩn giao tiếp USART

P2.25 Thanh ghi XTREG: địa chỉ 19h

Thanh ghi đóng vai trò là buffer đệm 8 bit trong quá trìnhtruyền dữ liệu thông qua

chuẩn giao tiếp USART

P2.26 Thanh ghi RCREG: địa chỉ 1Ah

Trang 32

Thanh ghi đóng vai trò là buffer đệm trong quá trình nhậndữ liệu qua chuẩn giao tiếp USART.

P2.27 Thanh ghi CCPR2L: địa chỉ 1Bh

Thanh ghi chứa 8 bit thấp của khối CCP2

P2.28 Thanh ghi CCPR2H: địa chỉ 1Ch

Thanh ghi chứa 8 bit cao của khối CCP2

P2.29 Thanh ghi ADRESH: địa chỉ 1Eh

Thanh ghi chứa byte cao của kết quả quá trình chuyểnđổi ADC

P2.30 Thanh ghi ADCON0: địa chỉ 1Fh

Đây là một trong hai thanh ghi điều khiển khối chuyểnđổi ADC Thanh ghi còn lại là thanh ghi ADCON1 (địa chỉ9Fh)

P2.32 Thanh ghi TRISA: địa chỉ 85h

Thanh ghi điều khiển xuất nhập của các pin trong PORTA

P2.33 Thanh ghi TRISB: địa chỉ 86h, 186h

Thanh ghi điều khiển xuất nhập của các pin trong PORTB

P2.34 Thanh ghi TRISC: địa chỉ 87h

Thanh ghi điều khiển xuất nhập của các pin trong PORTC

P2.35 Thanh ghi TRISD: địa chỉ 88h

Thanh ghi điều khiển xuất nhập của các pin trong PORTD

P2.36 Thanh ghi TRISE: địa chỉ 89h

Thanh ghi điều khiển xuất nhập của các pin trong PORTE,điều khiển cổng giao tiếp song song PSP (Parallel Slave Port)

P2.37 Thanh ghi PIE1: địa chỉ 8Ch

Thanh ghi chứa các bit cho phép các ngắt ngoại vi

P2.38 Thanh ghi PIE2: địa chỉ 8Dh

Thanh ghi chứa các bit cho phép các ngắt ngọai vi

P2.39 Thanh ghi PCON: địa chỉ 8Eh

Thanh ghi điều khiển chứa các cờ hiệu cho biết trạngthái các chế độ reset của vi điều khiển

P2.40 Thanh ghi SSPCON2: địa chỉ 91h

Thanh ghi điều khiển các chế độ hoạt động của chuẩngiao tiếp I2C

P2.41 Thanh ghi PR2: địa chỉ 92h

Thanh ghi dùng để ấn định trước giá trị đếm cho Timer2.Khi vi điều khiển được reset, PR2 mang giá trị FFh Khi ta đưamột giá trị vào thanh ghi PR2, Timer2 sẽ đếm từ 00h chođến khi giá trị bộ đếm của Timer2 bằng với giá trị của

Trang 33

bộ đếm trong thanh ghi PR2 Như vậy mặc định Timer2 sẽđếm từ 00h đến FFh.

P2.42 Thanh ghi SSPADD: địa chỉ 93h Thanh ghi chứa địa

chỉ của vi điều khiển khi hoạt động ở chuẩn giao tiếpI2C Slavemode Khi không dùng để chứa địa chỉ (I2CMaster mode) SSPADD được dùng để chứa giá trị tạo raxung clock đồng bộ tại pin SCL Và 1 số thanh ghi khác

Chương 5:LẬP TRÌNH C CHO VI ĐIỀU KHIỂN PIC 16F877A

5.1 Giới thiệu chung

C là một ngơn ngữ khá mạnh và rất nhiều người dùng Nếu nĩi sốlệnh cơ bản của C thì khá nhiều Nhưng đối với lập trình cho vi xử lý,chúng ta chỉ cần biết số lượng lệnh khơng nhiều Đầu tiên chúng ta phảilàm quen với:

- Các kiểu tốn tử ở C

- Các kiểu dữ liệu

- Cấu trúc cơ bản của một chương trình

- Các cấu trúc điều khiển (các tập lệnh chính)

- Cấu trúc điều kiện: if …else…

- Cấu trúc lựa chọn: switch… case

- Biết sử dụng các hàm và chương trình con

Sau đây chúng ta sẽ nghiên cứu về lập trình C cho vi điều khiển PIC, sửdụng phần mềmCCS

Trang 34

Cơ bản về lập trình C cho vi điều khiển PIC

5.2 Các chỉ thị tiền xử lý

Chúng ta sẽ nĩi về các chỉ thị tiền xử lý thường dùng:

a/ _#INCLUDE :

- Cú pháp : #include <filename>hoặc #include “ filename”

khác thì thêm đường dẫn vào Chỉ thị này luơn phải cĩ để khai báochương trình viết cho vi điều khiển nào, và luơn đặt ở dịng đầu tiên

báo tên chip ở # include

* = 5 dùng pointer 5 bit ( tất cả PIC )

* = 8 dùng pointer 8 bit ( PIC14 và PIC18 )

* = 16 dùng pointer 16 bit ( PIC14 ,PIC 18)

ADC = x: sử dụng ADC x bit ( 8 , 10 , bit tùy chip ) , khi dùng hàmread_adc( ) , sẽ trả về giá trị x bit ICD = TRUE: tạo mã tương thíchdebug phần cứng Microchip HIGH_INTS = TRUE: cho phép dùng ngắt

ưu tiên cao

Lưu ý: Khai báo pointer 8 bit, sử dụng được tối đa 256 byte RAM cho

tất cả biến chương trình Khai báo pointer 16 bit , sử dụng được tồn bộdung lượng RAM cĩ của vi điều khiển.Vì vậy, chỉ nên dùng duy nhất 1khai báo #device cho cả pointer và ADC

- VD : #device * = 16 ADC = 10

c/ _ # USE :

#use delay( clock = 40000000)

Chỉ khi cĩ chỉ thị này thì trong chương trình chúng ta mới được dùng hàmdelay_us ( ) và delay_ms( )

Dùng chỉ thị này thì trong chương trình khi dùng các lệnh io nhưoutput_low() , nĩ sẽ set chỉ với 1 lệnh , nhanh hơn so với khikhơng dùng chỉ thị này.Trong hàm main( ) chúng ta phải dùng hàm

Trang 35

set_tris_x( ) để chỉ rõ chân vào ra thì chỉ thị trên mới có hiệu lực, khôngthì chương trình sẽ chạy sai

- VD : # use fast_io( A ) // Dùng port A là port xuất-nhập

- Thiết lập giao tiếp I2C

- Options bao gồm các thông số sau, cách nhau bởi dấu phẩy :

từ thấp lên cao

tự

- VD :

#use I2C ( master , sda=pin_B0 , scl = pin_B1 )

#use I2C (slave , sda= pin_C4 , scl= pin_C3 , address = 0xa00 , FORCE_HW )

- Thiết lập giao tiếp RS232 cho chip ( có hiệu lực sau khi nạpchương trình cho chip , không phải giao tiếp RS232 đang sử dụng đểnạp chip )

- Option bao gồm :

Trang 36

- C đủ mạnh để thay thế Assmemly Vì vậy nên hạn chế lồng mã Assembly vào vì thường gây ra xáo trộn dẫn đến sau khi biên dịch mã chạy sai.

- Khi sử dụng các biến không ở bank hiện tại , CCS sinh thêm mã chuyển bank tự động cho các biến đó Nếu sử dụng #ASM thì CCS không sinh thêm mã chuyển bank tự động, ta phải tự thêm vào trong mã ASM

không phải mã kiểu MPLAB

- VD : int find_parity (int data)

do id chỉ là danh định đại diện cho bit chỉ định ở biến x Vì thế khithay đổi giá trị id ( 0 / 1 ) sẽ thay đổi giá trị bit tương ứng y, dẫnđến thay đổi giá trị biến x

- VD:

#bit TMR1Flag = 0xb.2 //bit cờ ngắt timer1 ở địa chỉ 0xb.2

// Khi đó TMR1Flag = 0 xoá cờ ngắt timer1

int16 a=35; //a=00000000 00100011

#bit b= a.11 //b=0, nếu b=a.0 thì b chỉ vị trí LSB

Trang 37

Chỉ thị này có tác dụng gán tên biến id cho địa chỉ (thanh ghi ) x, sau

đó muốn gán hay kiểm tra địa chỉ x chỉ cần dùng id, không tốn thêm bộ nhớ, tên id thường dùng tên gợi nhớ chức năng thanh ghi ở địa chỉ đó

chương trình nên giá trị id cũng tự thay đổi theo giá trị thanh ghi đó

Vì vậy khôngnên dùng id cho thanh ghi đa mục đích như cách dùng biến int8 vì CCS có thể dùng các thanh ghi này bất kỳ lúc nào cho chương trình

- VD: # LOCATE temp = 0xc20 // 0xc20 :thanh ghi đa mục đích

- Sử dụng #LOCATE để gán biến cho 1 dãy địa chỉ kề nhau (cặp thanh ghi) sẽ tiện lợi hơn thay vì phải dùng 2 biến với #byte

- Cú pháp: # org start , end

hoặc # org segment

hoặc #org start , end { }

Trang 38

+ Start, end: bắt đầu và kết thúc vùng ROM dành riêng cho hàm theo sau, hoặc để riêng không dùng.

} //hàm này bắt đầu tuỳ ý ở 0x1E00 đến 0x1F00

Org 0x30 , 0x1F { } // không có gì cả đặt trong vùng ROM này

- Thường thì không dùng ORG

dành cho gười quen lập trình C

là 9

k3/ #PRIORITY ints: ints là danh sách các ngắt theo thứ tự ưu tiên thựchiện khi có nhiều ngắt xảy ra đồng thời, ngắt đứng đầu sẽ là ngắt ưutiên nhất

- Lệnh này chỉ dùng nếu sử dụng hơn 1 ngắt

- VD : #priority int_CCP1 , int_timer1 // ngaét CCP1 ưu tiê nhất

5.3 Khai báo biến, hằng,mảng

- Khai báo biến:

int mặc định như kiểu int8

+Thêm signed hoặc unsigned phía trước để chỉ đó là số có dấu hay không dấu.Nếu không dùng signed hoặc unsigned thì mặc định là không dấu

VD :

Signed int8 a ; // số a là số 8 bit có dấu

Trang 39

Signed int16 b; // số b là số 16 bit có dấu

Signed int32 c; // số c là số 32 bit có dấu

int mặc định như kiểu int8

+Thêm signed hoặc unsigned phía trước để chỉ đó là số có dấu hay không dấu Nếu không dùng signed hoặc unsigned thì mặc định là không dấu

VD :

Signed int8 a ; // số a là số 8 bit có dấu

Signed int16 b; // số b là số 16 bit có dấu

Signed int32 c; // số c là số 32 bit có dấu

Trang 40

int8 const a=231; // a là hằng số 8 bit, có giá trị bằng 231

- Hoạt động của vòng lặp này được mô tả như sau:

- Tạo vòng lặp mãi mãi Chương trình chính sẽ được viết trong dấu

ngoặc {}.Lệnh này rất hay dùng trong các chương trình của vi xử lý

Ngày đăng: 07/09/2017, 15:28

w