SlideShare a Scribd company logo
Cùng Bạn vào InterNet: Tìm hiểu cách dùng PIC để chạy motor bước
Rất vui khi thấy Bạn vào
xem...
Dẫn nhập,
Tôi làm nghề điện tử trên 40 năm, vừa làm thợ mở tiệm sửa
máy, vừa mở trường dạy nghề, vừa viết sách kỹ thuật,...
do vậy tư liệu kỹ thuật đối với tôi rất cần yếu, nhớ lại lúc
trước, khi muốn tập trung tư liệu cho một đề tài, tôi phải
mất rất nhiều thời gian, lại phải nhờ công sức của bạn bè
khắp nơi, tốn rất nhiều tiền bạc mới có. Còn bây giờ thời đại
của Internet, trên đó tích gốp vô số thông tin kỹ thuật từ
đơn giản cho đến tận cao siêu, nhiều không kể siết, và với ý
niệm "thông tin là của chung, mọi người cùng hưởng", với
Internet chúng ta có thể trong một khoảng thời gian ngắn là
đã lấy đủ thông tin liên quan đến chủ đề mà mình muốn
tìm, muốn tập trung cho công việc muốn làm trước mắt,
thật tiện lợi vô cùng.
Trong lần này, tôi sẽ cùng Bạn đi tìm tư liệu về ic lập trình
họ PIC và tìm hiểu cách viết các chương trình nguồn dùng
để chạy motor bước (Stepper motor, 步進馬達) và cũng
sẽ giới thiệu với Bạn nhiều địa chỉ Web có liên quan đến chủ
đề PIC để Bạn tham khảo khi cần, mong bài viết sẽ có ích
với nhiều Bạn. (VKH).
Giới thiệu trang Web
Có một trang Web của người Nhật đã chuyển qua Anh ngữ (và nhiều thứ tiếng
khác), viết về đề tài kỹ thuật điện tử rất hay, quá hay, trong trang Web này,
Bạn có thể tìm thấy một mãnh chuyên viết về PIC, dành cho người mới làm
quen với PIC, cách viết, cách trình bày, bố cục đi từ dễ đến khó rất rõ ràng dễ
hiểu. Tôi muốn giời thiệu với Bạn trang Web này.
Bạn Click vào đây để mở trang Web nói về bộ môn điện tử của người Nhật (Bản
chữ Anh).
Khi vào trang Web này, Bạn sẽ thấy bản đề mục như hình sau, trong đó có 2
mục liên quan đến chủ đề PIC.
Bạn hãy vào 2 mục:
Guide to use the PIC (giới thiệu cách dùng ic PIC)
PIC Circuit Gallery (Các ứng dụng của ic PIC)
Tôi sẽ dùng tư liệu có trong 2 mục này và kết hợp thêm một số tư liệu của các
trang Web khác và hiểu biết của chính mình để tìm hiểu về chủ đề motor bước
hay còn gọi là motor bộ tiến. Do bài viết ở mức phổ quát nên tôi chọn cách viết
bình dị phù hợp cho nhiều Bạn mới làm quen với PIC.
Khái quát về PIC
PIC là gì?
PIC(Peripheral Interface Controller) là nhóm các IC dùng để chấp hành câu
lệnh điều khiển theo các chương trình đã có trong bộ nhớ. Bộ nhớ và CPU có
thể xem như bộ óc của máy và PIC là các hệ thần kinh dùng để chấp hành các
chương trình đã có trong bộ nhớ.
Để cụ thể chúng ta sẽ đơn cử một ic PIC dùng để phân tích, đó là ic PIC16F84A
Khi trên tay Bạn có một ic PIC, 3 điều Bạn cần hiểu về nó là:
(1) Sơ đồ chân và công dụng của các chân.
(2) Sơ đồ chức năng cho thấy cấu trúc bên trong và sự vận hành của nó.
(3) Sơ đồ tổ chức của các loại bộ nhớ, nhất là các thanh nhớ đặc dụng.
(1) Sơ đồ chân của IC sẽ cho Bạn những hiểu biết về cấu trúc mạch điện,
quen gọi là phần cứng.
Về các sơ đồ mạch điện dùng ic vi điều kiển họ PIC, nói chung rất đơn giản. Bạn
chú ý đến việc cấp nguồn, việc gắn thạch anh định tần và chọn định kiểu reset.
Tất cả các lệnh xuất nhập bit dùng cho chức năng điều khiển đều cho thực hiện
trên các cảng. Ở ic PIC16F84A có 2 cảng: Cảng A có 5 chân và cảng B có 8
chân. Do đó muốn sử dụng các ic vi điều khiển (dù cho đối với họ nào đi nữa)
thì điều đầu tiên là Bạn phải hiểu rõ hoạt động của các bến cảng của ic đó. Ở
đây chúng ta sẽ nói đến 2 cảng của PIC16F84A, cảng A và cảng B.
Bạn xem một sơ đồ kinh điển dùng ic PIC16F84A (dùng điều khiển 8 Led
trên cảng B).
Hình vẽ cho thấy:
* Chân 5 nối masse, chân 14 nối nguồn. Nguồn 5V được tạo ra từ ic ổn áp
7805.
* Chân 15, chân 16 gắn thạch anh định tần (tần số thạch anh là 10MHz).
* Chân 4, chân reset cho nối lên mức áp cao, vậy sơ đồ này dùng mạch reset
nội.
* Các cảng:
+ Trên cảng A gắn 5 nút nhấn chọn mode với 5 điện trở treo áp
+ Trên cảng B gắn 8 Led biểu hiện trạng thái bit trên cảng B với 8 điện trở hạn
dòng, Led sáng với bit 0 và tắt với bit 1.
Chỉ với mạch điện này, Bạn đã có thể dùng câu lệnh (35 câu lệnh, xem phần
dưới, trình bày 35 câu lệnh dùng để viết các chương trình nguồn chạy các ic PIC
) để tạo ra các trạng thái nhấp nháy của 8 Led theo ý muốn của Bạn, Bạn có thể
chọn các kiểu nhấp nháy theo các nút nhấn gắn trên cảng A.
(2) Nhìn sơ đồ chức năng, Bạn sẽ hiểu được các trình thức hoạt động của
IC.
Giải thích khái quát về sơ đồ khối:
Flash Program Memory có dung lượng 1024 thanh nhớ, loại rộng 14 bit
(1Kx14). Ở đây Bạn cất giữ các mã lệnh của chương trình nguồn. Các mã lệnh
được truy cập theo mã địa chỉ có trong thanh ghi PC (Program Counter). Mã
lệnh xuất ra trên thanh ghi Instruction Register.
Thanh ghi Program Counter dùng ghi các địa chỉ của mã lệnh của bộ nhớ
Flash ROM. Trong hoạt động, khi dùng lệnh nhẩy đến các chương trình con, thì
địa chỉ hiện tại sẽ được tạm thời cho cất giữ trong các thanh ghi ngăn xếp, ở
đây chiều xâu ngăn xếp chỉ có 8 lớp (8 Level Stack).
Ngăn xếp 8 Level Stack dùng lưu giữ các mã địa chỉ của chương trình chính
khi trong chương trình có dùng lệnh nhẩy. Địa chỉ cất vào ngăn xếp có thể hiểu
như dùng lệnh Push và địa chỉ lấy ra từ ngăn xếp có thể hiểu như dùng lệnh
Pop.
Instruction Register là thanh ghi mã lệnh, ở ngả ra, mã lệnh có thể chuyển đến
khối giải mã Instruction Decode & Control để tạo ra lệnh điều khiển. Hay chuyển
đến khối xử lý địa chỉ đa kênh Address Multiplex để truy cập các thanh nhớ
trong bộ nhớ RAM (File Register).
Instruction Decode & Control là khối giải mã, xác định tính năng điều khiển trong câu
lệnh, nó tác dụng vào khối định trạng thái cho IC. Khối này gồm có các chức năng: Power-
up Timer, Oscillator Start-up Timer, Power-on Reset, Watchdog Timer.
Power-up Timer dùng kích hoạt IC theo đồng hồ Timer.
Oscillator Start-up Timer dùng kích hoạt mạch dao động theo đồng hồ Timer.
Power-on Reset dùng “phục nguyên” các thanh ghi trong ic PIC khi nó mới
được cấp nguồn.
Watchdog Timer dùng vào ra mode “Chó giữ nhà” theo đồng hồ Timer, một tính
năng dùng để tiết kiệm điện.
Timing Generation là khối tạo ra xung nhịp chính, tần số của xung nhịp thường
định theo thạch anh. PIC16F84A có thể hoạt động với xung nhịp 20MHz.
Đồng hồ Timer 0 (TMR0) dùng một thanh đếm 8 bit để tạo ra chức năng điều
khiển theo thời gian. Nó có thể đếm tối đa 256 xung nhịp, khi thanh đếm đầy, bit
báo tràn sẽ chuyển lên mức 1.
Các bến cảng I/O Port (gồm Port A có 5 chân và Port B có 8 chân) dùng xuất
nhập dữ liệu. Nhiều chân còn có tính đa nhiệm (một chân mà làm nhiều nhiệm
vụ), nên ngoài công năng xuất nhập dữ liệu nó còn có các công năng khác. Như
công năng nhập xung đếm trên chân RA4/TOCKI, công năng ngắt trên chân
RB0/INT…
Bộ nhớ dữ liệu EEPROM Data Memory, đây là bộ nhớ xóa ghi được trên 1 triệu
lần, EEPROM có 64 thanh nhớ, với độ rộng 8 bit (1 byte). Để truy cập dữ liệu
trong các thanh nhớ, mã địa chỉ sẽ chuyển vào thanh ghi EEADR và dữ liệu
xuất nhập trên thanh ghi EEDATA.
Bộ nhớ RAM File Register, đây là bộ nhớ RAM có 68 thanh nhớ, với độ rộng 8
bit, trong đó có 12 thanh nhớ đặc dụng (SFR, Special Function Register), các
thanh nhớ còn lại được dùng làm thanh nhớ phổ dụng (GPR, General Purpose
Register). Các thanh nhớ đặc dụng xác định hoạt động của IC, các thanh nhớ
phổ dụng dùng làm thanh nhớ tạm. Khi IC mất nguồn, các dữ liệu trong các
thanh nhớ RAM đều bị xóa sạch. Người ta truy cập dữ liệu trong các thanh nhớ
của RAM với bó nối mã địa chỉ RAM Addr (7 đường) và xuất nhập dữ liệu trên
bó nối Data Bus (8 đường)
Thanh ghi FSR (File Select Register) dùng truy tìm dữ liệu theo mã địa chỉ gián
tiếp (Indirect Address), dùng bó nối Indirect Addr (7 đường).
Thanh ghi STATUS (Status Register) dùng chọn định các điều kiện làm việc
cho IC (Thanh ghi trạng thái này rất thường dùng).
MUX (Multiplex) là khối xử lý đa nhiệm, nó cung cấp mã cho khối tính toán
ALU.
ALU (Arithmetic & Logic Unit) là khối thực hiện các phép toán số học và logic.
Không có bộ phận này, IC không được gọi là IC máy tính.
Thanh ghi W reg (Work Register) là thanh ghi công tác (một thanh ghi cực kỳ
quan trọng của PIC), nó cất giữ các kết quả của khối toán ALU.
(3). Bạn phải hiểu rõ công năng của các bộ nhớ, nhất là hiểu rõ các thanh
nhớ đặc dụng.
Các thanh nhớ của bộ nhớ File Register của RAM (Random Access Memory).
Ở đây, người ta dùng cách chuyển dãi nhớ ( chuyển bank) cho bộ nhớ này. Mỗi
dãi nhớ có dung lượng là 80 byte (80 thanh nhớ với mã địa chỉ là 00h đến 4fh).
Trong IC vi điều khiển PIC16F84A có 2 dãi nhớ (có 2 Bank, bank0 và bank1).
Bộ nhớ này chia ra làm 2 phần:
Ở phần đầu, người ta lấy 12 byte (tức 12 thanh nhớ có địa chỉ từ 00h đến 0bh)
của mỗi dãi dùng làm các thanh nhớ đặc dụng (SFR, Special Function Register)
và dùng nó để đặt bit 0/1 xác định các trạng thái vận hành của PIC. Định điều
kiện cho việc xuất nhập trên các bến cảng và còn định các điều kiện khác nữa.
Có 16 thanh ghi khác nhau trong vùng chứa các thanh ghi đặc dụng (11 thanh trong bank0 và 5 thanh trong bank1). Nội
dung trong mỗi thanh ghi này dùng quản lý sự vận hành của PIC. Mặc dù có tổng cộng 24 thanh ghi lưu trữ (file
register), nhưng 7 trong chúng nằm chung trong cả hai bank.
Còn lại 68 byte (tức 68 thanh nhớ, có địa chỉ từ 0ch đến 4fh), từ byte thứ 13 trở
lên, được gọi là các thanh ghi phổ dụng (GPR, General Purpose Register), nó
được dùng như các thanh nhớ tam thời dùng ghi các kết quả, các dữ liệu khi
chương trình đang chạy.
Nội dung ghi trong các thanh ghi phổ dụng GPR đều giống nhau trong cả hai
dãi, do vậy việc dùng bit để chuyển bank0 hay bank1 cũng chỉ dùng được có 68
byte mà thôi (tức có 68 thanh nhớ thôi). Chúng ta biết, nội dung trong các thanh
ghi phổ dụng sẽ bị xóa hết khi IC không được cấp điện. Với các thanh ghi này,
số lần xóa ghi là không hạn chế.
Mỗi thanh nhớ đặc dụng SFR đều có các công năng chuyên dùng như sau:
INDF: Data memory contents by indirect addressing. Nội dung dữ liệu trong
bộ nhớ xác định theo địa chỉ gián tiếp.
TMR0: Timer counter. Thanh đếm của 8 bit của đồng hồ Timer0.
PCL: Low order 8 bits of program counter. 8 bit thấp trong thanh ghi Program
counter.
STATUS: Flag of calculation result. Các bit cờ dùng cho các phép toán và
chuyển bank.
FSR: Indirect data memory address pointer. Thanh ghi con trỏ chỉ dữ liệu
trong bộ nhớ theo mã địa chỉ gián tiếp.
PORT A: PORT A DATA I/O. Gồm 5 bit thấp dùng xác lập trạng thái bit trên bến
cảng Port A.
PORT B: PORT B DATA I/O. Gồm 8 bit dùng xác lập trạng thái bit trên bến
cảng Port B.
EEDATA: Data for EEPROM. Thanh ghi dữ liệu dùng cho bộ nhớ EEPROM.
EEDR: Address for EEPROM. Thanh ghi địa chỉ dùng cho bộ nhớ EEPROM.
PCLATH: Write buffer for upper 5 bits of the program counter. Thanh ghi
đệm dùng ghi 5 bit cao dùng cho thanh ghi con trỏ PC.
INTCON: Interruption control. Gồm 8 bit dùng xác định tính năng ngắt.
OPTIN_REG: Mode set. Gồm 8 bit dùng khai báo các mode cho PIC.
TRISA: Mode set for PORTA. Thanh ghi 5 bit dùng xác định hướng chuyển dữ
liệu xuất hay nhập cho Port A.
TRISB: Mode set for PORTB. Thanh ghi 8 bit dùng xác định hướng dữ liệu
xuất hay nhập cho Port B.
EECON1: Control Register for EEPROM. Thanh ghi điều khiển việc ghi đọc
cho bộ nhớ EEPROM.
EECON2: Write protection Register for EEPROM. Thanh ghi thứ 2, dùng điều
khiển bộ nhớ EEPROM.
(Ở các ic PIC khác nó sẽ có cấu trúc bộ nhớ khác, muốn sử dụng ic PIC nào
trước tiên Bạn phải tìm hiểu thật rõ các công năng của các thanh nhớ đặc dùng
của nó, vì thông qua các thanh nhớ đặc dụng, Bạn mới có thể viết chính xác các
chương trình nguồn và vận hành các ic PIC làm việc theo ý muốn của riêng
Bạn).
Sau đây là bảng ghi các thanh ghi đặc dụng: Bạn nên in ra để trước mặt
khi viết các chương trình nguồn cho PIC
Bây giờ hãy nói đến
cách dùng 35 câu lệnh của ic vi điều khiển
họ PIC.
IC vi điều khiển họ PIC chỉ có 35 câu lệnh, muốn sử dụng ic PIC Bạn phải quen
cách dùng các câu lệnh này, sau đâu là cách dùng và ý nghĩa của từng cầu
lệnh.
Trước hết hãy hiểu rõ một số qui định dùng trong câu lệnh.
Trong các câu lệnh, ký tự f dùng để chỉ địa chỉ của các thanh nhớ, ký tự W là
chỉ thanh ghi tích lũy. Ký tự b có các số 0, 1, 2 ,3 ,4 ,5 ,6 ,7 dùng chỉ vị trí bit
trong thanh ghi mà Bạn muốn chọn. Ký tự k là một trị hằng, cũng có thể là tên
nhãn. Dùng ký tự x ý muốn nói ở đó lấy 0 hay 1 cũng được. Dùng ký tự d để
chỉ việc chọn thanh f hay thanh W để giữ kết quả, chọn d = 0 cho kết quả giữ
trong thanh W, chọn d =1 cho kết quả giữ trong thanh f. Chữ PC là thanh ghi
dùng để đếm lệnh của chương trình. Chữ TO là bit tràn và chữ PD là bit dùng
giảm công suất khi cho ic vào mode tắt chờ.
Dưới đây là bảng tra nhanh 35 câu lệnh dùng viết các
chương trình nguồn cho ic PIC:
(Bạn nên in ra và để bảng này trước mặt mỗi khi viết các chương trình nguồn
cho ic PIC)
Tìm hiểu cú pháp và ý nghĩa của từng câu lệnh:
(Tôi soạn lại 35 lệnh này theo hình thức của trang Web Nhật, chú thích bằng
chữ Việt để Bạn dễ tham khảo)
Các câu lệnh được trình bày trong khung theo các phân mục như hình sau:
* Tên lệnh: Viết tắt, đó là các từ khóa đã qui định cho lệnh.
* Giải thích tên lệnh: Chú thích ngắn gọn ý nghĩa của câu lệnh.
* Cú pháp: Cách viết câu lệnh. phần tên nhãn ở trước có khi không có, tên lệnh
và các toán hạng.
* Toán hạng: Mục này cho thấy các giá trị làm việc của các toán hạng.
* Tác dụng bit cờ: Cho thấy tác dụng của lệnh có ảnh hưởng vào các bit cờ nào.
* Chu kỳ lệnh: Lệnh được thực hiện nhanh hay chậm, lệnh dùng mấy chu kỳ
lệnh để làm xong.
(Bạn xem 35 câu lệnh viết cho PIC ở phần phụ lục)
Một thí dụ:
Về cách viết các lệnh dùng để chọn hướng xuất nhập cho cảng portA và cảng
portB trong PIC:
Trước hết Bạn phải hiểu ý nghĩa các bit trong thanh ghi đặc dụng Status. (Bạn
xem hình)
Hãy tìm hiểu ý nghĩa của từng bit trong thanh ghi STATUS (có địa chỉ 03h, 83h).
Bit 7 ( IRP): Register Bank Select bit (used for indirect addressing).
Bit dùng chọn dãi nhớ. Bit IRP không dùng với PIC16F84A. Sau lệnh Reset nó
xác lập ở mức 0.
Bit 6-5 (RP1-RP0): Register Bank Select bits (used for direct addressing).
Các bit dùng để chọn dãi nhớ Bank 0 hay Bank 1.
Khi xác lập trị 00 là chọn các thanh nhớ ở dãi 0 (Bank 0 có địa chỉ 00h – 7fh).
Khi xác lập trị 01 là chọn các thanh nhớ ở dãi 1 (Bank 1 có địa chỉ 80h – ffh).
Mỗi dãi nhớ có 128 byte (thanh nhớ). Trong PIC16F84A chỉ dùng bit RP0, bit RP1 luôn đặt ở BIT 0
BIT 4 (/TO: Time-out bit).
Bit báo thoát ra trạng thái Power-up, trạng thái Watch-dog, trạng thái Sleep.
Được xác lập ở mức 1, sau Power-up, dùng lệnh CLRWDT hay lệnh SLEEP.
Được xác lập ở mức 0, Khi thoát ra trạng thái WDT.
Bit 3 (/PD): Power-down bit
Bit báo trạng thái giảm mức nguồn.
Được xác lập ở mức 1, sau Power-down hay sau lệnh CLRWDT.
Được xác lập ở mức 0, sau chấp hành câu lệnh SLEEP.
Bit 2 (Z): Zero bit
Bit báo trạng thái 0.
Được xác lập ở mức 1, khi ở khối toán cho kết quả là 0.
Được xác lập ở mức 0, khi kết quả ở khối toán khác 0.
Bit 1 (DC): Digit carry/-borrow bit (for ADDWF and ADDLW instructions)
(For borrow the polarity is reversed)
Bit xác lập trạng thái tràn trong phép toán cộng số (Trong câu lệnh ADDWF và
ADDLW) hay số mượn trong phép toán trừ SỐ.
Được xác lập ở mức 1, khi xuất hiện tràn số ở bit thấp thứ 4.
Được xác lập ở mức 0, khi không có số tràn ở bit thấp thứ 4.
Bit 0 (C): Carry/-borrow bit (for ADDWF and ADDLW instructions)
Bit xác lập trạng thái tràn trong phép toán cộng (Trong câu lệnh ADDWF và
ADDLW) hay số mượn trong phép toán trừ.
Được xác lập ở mức 1, khi xuất hiện tràn số ở thanh ghi.
Được xác lập ở mức 0, khi không có số tràn ở thanh ghi.
Từ thanh ghi Status Bạn thấy bit RP1, RP0 chọn định Bank, vậy khi muốn làm
việc với Bank nào trước hết Bạn phải set ở 2 bit này.
Với PIC, việc chọn tính Input / Output cho các chân của cảng portA và portB
Bạn phải khai báo trước, Cách làm như sau (Bạn xem hình).
Chọn định tính Input/Output cho các cảng RA và cảng RB:
Hình vẽ cho thấy trong PIC người ta dùng thanh ghi đặc dụng TRISA và TRISB
(đặt trong bank1) để chỉ định tính Input/Output cho portA và portB (lại nằm
trong bank0). Do vậy khi muốn đặt bit 1 hay 0 cho thanh TRISA, hay TRISB Bạn
phải set ở 2 bit RP1, RP0 trong thanh ghi đặc dụng Status. Sau khi chọn định
xong 2 thanh TRISA và TRISB, và Bạn phải trở lại bank0 để làm việc với portA
và portB. Do vậy, khởi đầu ở các chương trình của PIC, Bạn thường gặp các câu
lệnh như sau:
;**************** Initial Process *********************
init
bsf status,rp0 ; Đặt 1 vào bit rp0 của thanh Status, làm vậy
để vào Bank1.
clrf trisa ; Xóa sạch trisa, có nghĩa là chọn định cả
PORTA làm OUT.
movlw b'00100111'
; Chuyển số nhị phân '00100111' vào W để có RB0,1,2.5=IN RB7=OUT
movwf trisb ; Chuyển dãy số trên vào trisb để set tính In/Out
cho PORTB
* Với PIC Bạn muốn chuyển số vào một thanh nhớ nào đó, Bạn thường phải
dùng 2 câu lệnh, đó là lệnh:
movlw <trị> ; Trước hết cho chuyển <trị> vào thanh W.
movwf <địa chỉ thnah nhớ> ; Kế đó, cho chuyện trị trong W vào <địa chỉ
thanh nhớ>.
movlw b'10000000' ; Chuyển số nhị phân '10000000' vào W, không
dùng RBPU=1
movwf option_reg ; Chuyển dãy số trên vào để set thanh
OPTION_REG
bcf status,rp0 ; Đặt 0 vào bit rp0 của thanh Status để về lại
Bank0
* Bit RBPU dùng để cho treo chân B lên mức áp cao bằng chính mạch điện có
trong IC. Khi đặt RBPU ở mức 1 là không cho treo áp, bit này trong thanh ghi
OPTION_REG.
* Bạn thấy với PIC, trước hết Bạn thường phải vào Bank1 để định nghĩa chân
vào (Input) chân ra (Output) cho các cảng PortA hay PortB. Trong 8 bit của
thanh trisa và trisb, nếu Bạn đặt 0 là ngả ra và nếu đặt 1 là ngả vào.
movlw b'00000101' ;Set PORTA initial value (Chuyển trị '0000010' vào
W)
movwf porta ;Write PORTA (Chuyển trị trong W
vào cảng porta)
bsf portb,rb7 ;Set RB7 = 1 (Đặt bit 1 vào rb7 của cảng
portb)
btfsc portb,rb5 ;RB5 = 0 ? (Xét bit rb5 của portb để
nhẩy)
goto $-1 ;No. Wait (quay lại dòng lệnh trên
để xét tiếp)
Đoạn chương trình trên cho thấy cách khởi tạo các tính IN/OUT cho các chân
của cảng portA và cảng portB.
Ứng dụng: Viết chương trình nguồn cho motor bước.
Trước hết hãy nói về nguyên lý hoạt động của motor bước.
Cấu tạo của motor bước: Bạn xem hình
Motor bước lấy bước góc làm đơn vị tính (các loại motor khác lấy số vòng quay
làm đơn vị tính), motor bước gồm có 2 phần: Phần tĩnh (Stator) gồm các cuộn
dây quấn trên các trụ từ cực khi các cuộn dây này nhận dòng xung nó sẽ trở
thành các cực nam châm điện và tương tác với Phần quay (Rotor) là nam
châm vĩnh cữu và sẽ tạo ra chuyển động quay. Đặc tính là phần quay, quay mỗi
nhịp chỉ nhíc 1 bước, đo đó góc của bước là một tham số của motor bước.
Sự vận hành của motor bước: Bạn thấy khi xung cấp cho cuộn dây, cuộn
dây sẽ có từ tính và tạo ra tương tác với phần quay (vốn là một nam châm vĩnh
cữu) để tạo ra chuyển động quay, mỗi lần chỉ quay một bước.
Các cách đấu dây của một motor bước:
Hình vẽ trên cho thấy cách đấu các cuộn dây của motor bước. Bạn có thể cho
đấu ra 8 dây, 6 dây, 5 dây hay 4 dây.
Trình bày cách tháo một motor bước (gồm 12 bước): Nhìn các hình động
(12 hình) Bạn thấy rõ các thành phần cấu tạo của một motor bước.
Tìm hiểu đề tài này trong trang Web của Nhật. Chúng ta trở lại thử phân
tích một bài ứng dụng của PIC16F84A trên trang Web của Nhật. Dùng
PIC16F84A để điều khiển một motor bước với 3 nút nhấn: STOP, LEFT và
RIGHT và một biến trở chỉnh tốc.
Nguyên lý vận hành của motor bước:
Trong bài viết, tác giả dùng motor bước 2 pha (4 cuộn dây) với phần quay là
một từ cực tạo từ nam châm vĩnh cữu và cho xung cấp dòng cho các cuộn dây
trên phần tĩnh và tạo ra chuyển động quay, góc bước là 90 độ (Bạn xem hình).
Dùng hình động để trình bày nguyên lý vận hành của một motor bước có góc
bước là 90 độ.
Với Motor bước có góc bước 7.5 độ, chúng ta sẽ phải cung cấp tín hiệu cho
các cuộn dây 2 pha theo qui trình sau (Đoạn chương trình sẽ cấp tín hiệu theo
bảng này cho motor bước):
Sơ đồ mạch điện và bản mạch bố trí linh kện:
Giải thích sơ đồ mạch điện:
Phần mạch cơ bản: Chân 5 cho nối masse để lấy dòng (dòng điện tử chảy vào
IC qua chân số 5), chân 14 nối với nguồn 5V. Đường nguồn 5V lấy ra từ một ic
ổn áp 78L05. Khi dùng ic ổn áp họ 78xx, Bạn nhớ gắn tụ lọc nhỏ ở dập nhỏ ở
ngả ra để dập hiện tượng tự dao động. Chân 15, 16 mắc thạch anh định tần
4MHz, vậy tần số xung nhịp trong PIC sẽ là 1MHz (tức 1us). Mạch điều khiển
thực hiện trên các cảng portA và portB. Chúng ta thấy c1 3 nhóm mạch:
* Nhóm các chân của portA dùng cấp xung cho các transistor phức hợp TR2,
TR3, TR4, TR5 để cấp dòng cho các cuộn dây làm quay motor, trên các cuộn
dây gắn các diode dập các xung ứng biên cao, phản hồi từ các cuộn dây để bảo
vệ các transistor trong mạch.
* Nhóm các chân trên portB (chân 6, 7, 8) gắn các nút chỉnh để chọn mode.
* Hai chân 11, 13 của portB dùng điều khiển mạch nạp xả của tụ C1 qua điện
trở R4 và VR1 để làm mạch chỉnh tốc.
Giải thích nguyên lý vận hành của mạch:
Mạch cấp dòng cho các cuộn dây và mạch điều khiển quá trình nạp xả của tụ để
chính tốc.
Khi chân RAx lên mức áp cao (bit 1), chân B của transistor phức hợp được cấp
dòng IB và transistor dẫn điện, có dòng IB sẽ có dòng chảy ra trên chân C
(dòng IC), dòng IC qua cuộn dây trong motor và biến đó thành nam châm điện
để tương tác với phần quay, phần quay vốn là một nam châm vĩnh cữu. Khi
chân RAx xuống mức áp thấp (bit 0), transistor ngưng dẫn, nó cắt dòng qua các
cuộn dây, ngay lúc này từ 2 đầu cuộn dây phát ra điện áp ứng nghịch biên cao,
và diode sẽ hấp thu dòng và tạo tác dụng dập biên nhờ tính ghim áp của nó.
Khi chân RB7 còn ở mức áp thấp (L, bit 0), transistor ngưng dẫn, nó tạo điều
kiện cho tụ C nạp dòng, dòng nạp chảy qua điện trở R, và chúng ta biết khi tụ
nạp thì mức áp trên tụ sẽ tăng cao dần, chỉ khi mức áp trên tụ lên đến mức đủ
cao (H), nó sẽ tác động vào chân RB5 (Đặt chân RB5 lên mức cao), lúc này
chương trình sẽ cho đặt chân RB7 lên mức áp cao (H, bit 1), vậy transistor sẽ
dẫn điện, nó cho tụ xả điện nhanh và rồi chân RB7 lại chuyển xuống mức áp
thấp (L) để qui trình trên được lập lại. Vậy với điện trở R có trị lớn thì mức áp
trên tụ sẽ lên chậm, điều này cho phép chúng ta có thể làm thay đổi tốc độ
quay của motor bằng cách chỉnh điện trở R và kiểm tra bit 1 vào trên chân RB5.
Giải thích các linh kiện dùng trong mạch:
Tôi dùng hình động để giải thích nhanh các linh kiện dùng trong mạch, cách
trình bày này ít chiếm chổ trong bài viết, không gây cảm giác là bài viết dài lê
thê, đọc thấy mệt, phải không?
Phân tích cách viết chương trình nguồn dùng để điều khiển
motor bước:
Đây là chương trình nguồn
dùng điều khiển motor bước theo sơ đồ mạch điện bên trên.
Source code file of Stepper Motor controller
;********************************************************
;
; Stepper Motor controller
;
; Author : Seiichi Inoue
;********************************************************
list p=pic16f84a
include p16f84a.inc
__config _hs_osc & _wdt_off & _pwrte_on & _cp_off
;**************** Label Definition ********************
cblock h'0c'
mode ;Operation mode
;0=stop 1=right 2=left
count1 ;Wait counter
count2 ;Wait counter(for 1msec)
endc
rb0 equ 0 ;RB0 of PORTB
rb1 equ 1 ;RB1 of PORTB
rb2 equ 2 ;RB2 of PORTB
rb5 equ 5 ;RB5 of PORTB
rb7 equ 7 ;RB7 of PORTB
;**************** Program Start ***********************
org 0 ;Reset Vector
goto init
org 4 ;Interrupt Vector
clrf intcon ;Clear Interruption reg
;**************** Initial Process *********************
init
bsf status,rp0 ;Change to Bank1
clrf trisa ;Set PORTA all OUT
movlw b'00100111' ;RB0,1,2.5=IN RB7=OUT
movwf trisb ;Set PORTB
movlw b'10000000' ;RBPU=1 Pull up not use
movwf option_reg ;Set OPTION_REG
bcf status,rp0 ;Change to Bank0
clrf mode ;Set mode = stop
clrf count1 ;Clear counter
clrf count2 ;Clear counter
movlw b'00000101' ;Set PORTA initial value
movwf porta ;Write PORTA
bsf portb,rb7 ;Set RB7 = 1
btfsc portb,rb5 ;RB5 = 0 ?
goto $-1 ;No. Wait
start
;************* Check switch condition *****************
btfsc portb,rb1 ;RB1(stop key) = ON ?
goto check1 ;No. Next
clrf mode ;Yes. Set stop mode
goto drive ;No. Jump to motor drive
check1
btfsc portb,rb2 ;RB2(right key) = ON ?
goto check2 ;No. Next
movlw d'1' ;Yes. Set right mode
movwf mode ;Save mode
goto drive ;No. Jump to motor drive
check2
btfsc portb,rb0 ;RB0(left key) = ON ?
goto drive ;No. Jump to motor drive
movlw d'2' ;Yes. Set left mode
movwf mode ;Save mode
;******************** Motor drive *********************
drive
movf mode,w ;Read mode
bz start ;mode = stop
bsf portb,rb7 ;Set RB7 = 1
btfsc portb,rb5 ;RB5 = 0 ?
goto $-1 ;No. Wait
movlw d'5' ;Set loop count(5msec)
movwf count1 ;Save loop count
loop call timer ;Wait 1msec
decfsz count1,f ;count - 1 = 0 ?
goto loop ;No. Continue
bcf portb,rb7 ;Set RB7 = 0
btfss portb,rb5 ;RB5 = 1 ?
goto $-1 ;No. Wait
movf porta,w ;Read PORTA
sublw b'000000101' ;Check motor position
bnz drive2 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive1 ;Yes. Right
movlw b'00001001' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive1
movlw b'00000110' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive2
movf porta,w ;Read PORTA
sublw b'000000110' ;Check motor position
bnz drive4 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive3 ;Yes. Right
movlw b'00000101' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive3
movlw b'00001010' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive4
movf porta,w ;Read PORTA
sublw b'000001010' ;Check motor position
bnz drive6 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive5 ;Yes. Right
movlw b'00000110' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive5
movlw b'00001001' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive6
movf porta,w ;Read PORTA
sublw b'000001001' ;Check motor position
bnz drive8 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive7 ;Yes. Right
movlw b'00001010' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive7
movlw b'00000101' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive8
movlw b'00000101' ;Compulsion setting
drive_end
movwf porta ;Write PORTA
goto start ;Jump to start
;************* 1msec Timer Subroutine *****************
timer
movlw d'200' ;Set loop count
movwf count2 ;Save loop count
tmlp nop ;Time adjust
nop ;Time adjust
decfsz count2,f ;count - 1 = 0 ?
goto tmlp ;No. Continue
return ;Yes. Count end
;********************************************************
; END of Stepper Motor controller
;********************************************************
end
(Nhắn Bạn, nếu Bạn không có MPLAB để soạn và dịch đoạn chương trình
nguồn trên, Bạn có thể vào trang Web này, để lấy file .hex đã dịch rồi và dùng
hộp nạp cho nạp các mã lệnh của file này vào bộ nhớ của ic PIC16F84A. Hẹn khi
có dịp tôi sẽ trở lại giới thiệu với Bạn cách soạn các chương trình nguồn với
MPLAB và phân tích vài bo nạp PIC đơn giản, để Bạn ráp và dùng nạp PIC.
VKH).
Chúng ta tách chương trình ra từng phần
để tìm hiểu cách viết chương trình điều khiển motor bước.
(1). Phần đặt tên, tất cả các chú thích Bạn phải đặt sau dấu ;.
Source code file of Stepper Motor controller
;********************************************************
;
; Stepper Motor controller
;
; Author : Seiichi Inoue
;********************************************************
list p=pic16f84a
include p16f84a.inc
__config _hs_osc & _wdt_off & _pwrte_on & _cp_off
(2) Phần định nghĩa, dùng để đặt tên dễ nhớ, dễ dùng.
;**************** Label Definition ********************
cblock h'0c'
; Đặt tên cho các thanh nhớ, theo dạng liệt kê, bắt đầu từ địa chỉ h'0c'.
mode
; các mode vận hành
;0=stop 1=right 2=left
count1
; Bộ đến để chờ 1
count2
; Bộ đếm để chờ 2 (cho 1msec)
endc
rb0 equ 0
;RB0 of PORTB (Đặt tên theo số cho dễ dùng)
rb1 equ 1
;RB1 of PORTB (Đặt tên theo số cho dễ dùng)
rb2 equ 2
;RB2 of PORTB (Đặt tên theo số cho dễ dùng)
rb5 equ 5
;RB5 of PORTB (Đặt tên theo số cho dễ dùng)
rb7 equ 7
;RB7 of PORTB (Đặt tên theo số cho dễ dùng)
(3) Vào chương trình với câu lệnh xác định mọi chuyện bắt đầu từ
thanh reset.
;**************** Program Start ***********************
org 0
; Cho khởi đầu từ thanh nhớ reset
goto init
; Nhẩy đến tên nhãn init
org 4
; Vị trí đặt câu lệnh cho chương trình ngắt
clrf intcon
; Cho xóa ngắt
(4) Đặt tên nhãn init khởi đầu cho chương trình
;**************** Initial Process *********************
init
bsf status,rp0
; Đặt 1 vào bit rp0 của thanh Status, làm vậy để vào Bank1.
clrf trisa
; Xóa sạch thanh trisa, có nghĩa là chọn cả PORTA làm OUT.
movlw b'00100111'
; Chuyển số nhị phân '00100111' vào W để có RB0,1,2.5=IN RB7=OUT
movwf trisb
; Chuyển dãy số trên vào trisb để set PORTB
* Với PIC Bạn muốn chuyển số vào một thanh nhớ nào đó, Bạn thường phải
dùng 2 câu lệnh, đó là lệnh:
movlw <trị>
; Trước hết cho chuyển <trị> vào thanh W.
movwf <địa chỉ thnah nhớ>
; Kế đó, cho chuyện trị trong W vào <địa chỉ thanh nhớ>.
movlw b'10000000'
; Chuyển số nhị phân '10000000' vào W, không dùng RBPU=1
movwf option_reg
; Chuyển dãy số trên vào để set thanh OPTION_REG
bcf status,rp0
; Đặt 0 vào bit rp0 của thanh Status để về lại Bank0
* Bạn thấy với PIC, trước hết Bạn thường phải vào Bank1 để định nghĩa chân
vào (Input) chân ra (Output) cho các cảng PortA hay PortB. Trong 8 bit của
thanh trisa và trisb, nếu Bạn đặt 0 là ngả ra và nếu đặt 1 là ngả vào.
clrf mode
;Set mode = stop (Cho xóa sạch thanh mode)
clrf count1
;Clear counter (Cho xóa sạch thanh đếm 1)
clrf count2
;Clear counter (Cho xóa sạch thanh đếm 2)
movlw b'00000101'
;Set PORTA initial value (Chuyển trị '0000010' vào W)
movwf porta
;Write PORTA (Chuyển trị trong W vào cảng porta)
bsf portb,rb7
;Set RB7 = 1 (Đặt bit 1 vào rb7 của cảng portb)
btfsc portb,rb5
;RB5 = 0 ? (Xét bit rb5 của portb để nhẩy)
goto $-1
;No. Wait (quay lại dòng lệnh trên để xét tiếp)
(5) Chương trình khởi động với tên nhãn start
start
;************* Check switch condition *****************
btfsc portb,rb1
;RB1(stop key) = ON ? (Xét bit rb1của portb=0? để nhẩy, bit STOP)
goto check1
;No. Next (Nếu nút STOP, chưa nhấn thì nhẩy đến tên nhãn ckeck1)
clrf mode
;Yes. Set stop mode (Nếu nút STOP, thì trước hết cho xóa thanh mode )
goto drive
;No. Jump to motor drive (Xóa xong thanh mode, nhẩy đến tên nhãn drive)
(6) Chương trình kiểm tra phím nhấn
check1
btfsc portb,rb2 ;RB2(right key) = ON ?
goto check2 ;No. Next
movlw d'1' ;Yes. Set right mode
movwf mode ;Save mode
goto drive ;No. Jump to motor drive
check2
btfsc portb,rb0 ;RB0(left key) = ON ?
goto drive ;No. Jump to motor drive
movlw d'2' ;Yes. Set left mode
movwf mode ;Save mode
(7) Chương trình kiểm tra portb và cấp tín hiệu ra trên port A để chạy
motor.
;******************** Motor drive *********************
drive
movf mode,w
;Read mode (Cho chuyển trị trong thanh mode và thanh W để xét W)
bz start
;mode = stop (Xét bit cờ Z, nhẩy về tên nhãn Start)
bsf portb,rb7
;Set RB7 = 1 (Set 1 cho bit rb7 trong cảng portb)
btfsc portb,rb5
;RB5 = 0 ? (Lệnh nhẩy theo bit 0 ở rb5 của portb)
goto $-1
;No. Wait (Quay lên lệnh trên, tạo tính chờ)
movlw d'5'
;Set loop count(5msec) (Đặt trị thập phân 5 vào thanh W)
movwf count1
;Save loop count (Cho chuyển trị 5 vào thanh Count1)
loop call timer
;Wait 1msec (Cho gọi chương trình trễ có tên nhãn là timer)
decfsz count1,f
;count - 1 = 0 ? (Cho trị trong Count1 giảm theo -1 để nhẩy khi = 0)
goto loop
;No. Continue (Quay lại tên nhãn loop)
bcf portb,rb7
;Set RB7 = 0 (Set 0 cho bit rb7 trong cảng portb)
btfss portb,rb5
;RB5 = 1 ? (Lệnh nhẩy theo bit 1 ở rb5 của portb)
goto $-1
;No. Wait (Quay lên lệnh trên, tạo tính chờ)
movf porta,w
;Read PORTA (Cho chuyển trị của portA vào thanh W)
sublw b'000000101'
;Check motor position (Kiểm tra vị trí của motor)
bnz drive2
;Unmatch (Nhẩy đến tên nhãn drive2 theo bit cờ Z = 0)
movf mode,w
;Read mode (chuyển trị trong thanh mode vào thanh W)
sublw d'1'
;Right ? (Làm phép trừ trị trong W cho 1 để xác định chiều quay phải?)
bz drive1
;Yes. Right (Xét bit cờ Z, biết là đúng đang quay phải)
movlw b'00001001'
;No. Set Left data (Không đúng thì chọn dữ liệu cho quay trái)
goto drive_end
;Jump to PORTA write (Nhẩy về tên nhãn drive_end kết thúc)
drive1
movlw b'00000110' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive2
movf porta,w ;Read PORTA
sublw b'000000110' ;Check motor position
bnz drive4 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive3 ;Yes. Right
movlw b'00000101' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive3
movlw b'00001010' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive4
movf porta,w ;Read PORTA
sublw b'000001010' ;Check motor position
bnz drive6 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive5 ;Yes. Right
movlw b'00000110' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive5
movlw b'00001001' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive6
movf porta,w ;Read PORTA
sublw b'000001001' ;Check motor position
bnz drive8 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive7 ;Yes. Right
movlw b'00001010' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive7
movlw b'00000101' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive8
movlw b'00000101' ;Compulsion setting
drive_end
; (Tên nhãn kết thúc qui trình quay)
movwf porta
;Write PORTA (Chuyển trị có trong thanh W vào portA)
goto start
;Jump to start (Rồi nhẩy về tên nhãn Start, khởi đầu lại)
(8) Chương trình làm trễ.
;************* 1msec Timer Subroutine *****************
timer
movlw d'200'
;Set loop count (Đặt trị thập phân 200 vào thanh W)
movwf count2
;Save loop count (Rồi chuyển trị vào thanh Count2)
tmlp nop
;Time adjust (Lệnh không tác vụ, dùng kéo dài xung nhịp)
nop
;Time adjust (Lệnh không tác vụ, dùng kéo dài xung nhịp thêm nữa)
decfsz count2,f
;count - 1 = 0 ? (Cho trị trong Count2 giảm theo bước -1, để nhẩy)
goto tmlp
;No. Continue (Cho tiếp tục giảm đến khi thanh Count2 bằng 0)
return
;Yes. Count end (Nếu đã bằng 0 thì quay lại sau lệnh CALL)
;********************************************************
; END of Stepper Motor controller
;********************************************************
end
Các ứng dụng mở rộng khác .
Dưới đây là các ứng dụng khác của PIC được soạn trong trang Web này. Tất cả
các bài viết đều rất rõ ràng, rất sư phạm, có bố cụ tường minh, rất đáng để
chúng ta tìm hiểu và học tập.
Tóm tắt các ứng dụng trên
(Các ứng dụng khác... Bạn hãy vào trang Web trên để xem,
nhé!)
Phụ lục:
Dưới đây liệt kê 35 lệnh dùng viết các chương trình nguồn
cho nhóm PIC16.
35 câu lệnh:
Tạm kết
Qua bài viết trên, Bạn thấy nếu biết khai thác các tư liệu thông tin kỹ thuật trên
mạng, công việc của chúng ta sẽ thuận lợi nhiều lắm phải không? Đó là cái lợi
trước mắt của Internet, điều chúng ta còn mong muốn hơn nữa là ngày càng có
nhiều trang Web "chân tình" "viết thật lòng" "thật rõ, thật hay, thật hấp dẫn"
về các chủ đề có ích cho nhiều người (nhất là đối với dân yêu thích môn kỹ
thuật điện tử), như vậy cái lợi của Internet đối với mọi người thật không biết
sao kể hết.
Hoa Kỳ sắp vào mùa Đông, trời sẽ rất lạnh đây, tuyết sẽ
phủ kín mọi lối nẽo, và tôi ngồi trong phòng thực hành ấm
cúng của riêng mình để viết Web kỹ thuật, cũng khoái lắm
lắm!!!
Dưới đây là một số trang Web tôi thường vào đề tìm hiểu về PIC:
http://www.piclist.com/images/www/hobby_elec/e_menu.htm
http://www.mikroe.com/en/tools/
http://www.microchip.com/
http://www.mikroe.com/
http://www.pic16.com/jszl/jszl.htm
http://www.pic16.com/jszl/jszl3.htm
http://www.pic16.com/cuxue/cuxue.htm
http://www.pic16.com/jszl/jszl2.htm
http://www.talkingelectronics.com/te_interactive_index.html
http://www.ssreader.com/index.asp
http://www.21xr.com/21xrwd/pic/shouye.htm
http://www.pic16.com/cuxue/cuxue.htm
http://www.pic16.com/cuxue/pic2.htm
http://en.wikipedia.org/wiki/PIC_microcontroller
http://down.cndzz.com/soft/11961.htm
http://usbpicprog.org/

More Related Content

What's hot

57080715 dung-7805-như-thế-nao-la-hợp-lý
57080715 dung-7805-như-thế-nao-la-hợp-lý57080715 dung-7805-như-thế-nao-la-hợp-lý
57080715 dung-7805-như-thế-nao-la-hợp-lý
tagbagtroj
 
Mach nghich luu
Mach nghich luuMach nghich luu
Mach nghich luu
Dan Vu
 
BÀI GIẢNG SỬA CHỮA BOARD MÁY LẠNH 2 CỤM (PHẦN CƠ BẢN)
BÀI GIẢNG SỬA CHỮA BOARD MÁY LẠNH 2 CỤM (PHẦN CƠ BẢN)BÀI GIẢNG SỬA CHỮA BOARD MÁY LẠNH 2 CỤM (PHẦN CƠ BẢN)
BÀI GIẢNG SỬA CHỮA BOARD MÁY LẠNH 2 CỤM (PHẦN CƠ BẢN)
Hau Cao Trung
 
Sửa chữa board máy lạnh cơ bản
Sửa chữa board máy lạnh cơ bảnSửa chữa board máy lạnh cơ bản
Sửa chữa board máy lạnh cơ bản
123thue
 
Chuong 0 kien thuc co ban ve he thong dien va dien tu tren oto
Chuong 0 kien thuc co ban ve he thong dien va dien tu tren otoChuong 0 kien thuc co ban ve he thong dien va dien tu tren oto
Chuong 0 kien thuc co ban ve he thong dien va dien tu tren oto
Bút Chì
 
Chuong 2 case-power
Chuong 2 case-powerChuong 2 case-power
Chuong 2 case-powerHate To Love
 
Mạch nghịch lưu 1 pha 12 v to 220v
Mạch nghịch lưu 1 pha 12 v to 220vMạch nghịch lưu 1 pha 12 v to 220v
Mạch nghịch lưu 1 pha 12 v to 220v
Son Dang
 
Bao cao
Bao caoBao cao
Bao cao
ngocbao1002
 
Chương 2: Sơ đồ khối điện thoại di động
Chương 2: Sơ đồ khối điện thoại di độngChương 2: Sơ đồ khối điện thoại di động
Chương 2: Sơ đồ khối điện thoại di động
viendongcomputer
 
Đề tài: Đồ án mạch cảm biến ánh sáng, HAY
Đề tài: Đồ án mạch cảm biến ánh sáng, HAYĐề tài: Đồ án mạch cảm biến ánh sáng, HAY
Đề tài: Đồ án mạch cảm biến ánh sáng, HAY
Viết thuê trọn gói ZALO 0934573149
 
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩmĐiều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Đề tài: Thiết kế hệ thống đo nhiệt độ, HAY, 9đ
Đề tài: Thiết kế hệ thống đo nhiệt độ, HAY, 9đĐề tài: Thiết kế hệ thống đo nhiệt độ, HAY, 9đ
Đề tài: Thiết kế hệ thống đo nhiệt độ, HAY, 9đ
Dịch vụ viết bài trọn gói ZALO 0917193864
 
Hướng dẫn sửa chữa bếp từ trong thực tế
Hướng dẫn sửa chữa bếp từ trong thực tếHướng dẫn sửa chữa bếp từ trong thực tế
Hướng dẫn sửa chữa bếp từ trong thực tế
Điện Tử Bách Khoa
 
7 khoi quet dong va cao ap
7 khoi quet dong va cao ap7 khoi quet dong va cao ap
7 khoi quet dong va cao apHate To Love
 
Tailieu.vncty.com do-an-vi-dieu-khien
Tailieu.vncty.com   do-an-vi-dieu-khienTailieu.vncty.com   do-an-vi-dieu-khien
Tailieu.vncty.com do-an-vi-dieu-khien
Trần Đức Anh
 

What's hot (18)

57080715 dung-7805-như-thế-nao-la-hợp-lý
57080715 dung-7805-như-thế-nao-la-hợp-lý57080715 dung-7805-như-thế-nao-la-hợp-lý
57080715 dung-7805-như-thế-nao-la-hợp-lý
 
Mach nghich luu
Mach nghich luuMach nghich luu
Mach nghich luu
 
BÀI GIẢNG SỬA CHỮA BOARD MÁY LẠNH 2 CỤM (PHẦN CƠ BẢN)
BÀI GIẢNG SỬA CHỮA BOARD MÁY LẠNH 2 CỤM (PHẦN CƠ BẢN)BÀI GIẢNG SỬA CHỮA BOARD MÁY LẠNH 2 CỤM (PHẦN CƠ BẢN)
BÀI GIẢNG SỬA CHỮA BOARD MÁY LẠNH 2 CỤM (PHẦN CƠ BẢN)
 
Sửa chữa board máy lạnh cơ bản
Sửa chữa board máy lạnh cơ bảnSửa chữa board máy lạnh cơ bản
Sửa chữa board máy lạnh cơ bản
 
880 linh kien_dien_tu
880 linh kien_dien_tu880 linh kien_dien_tu
880 linh kien_dien_tu
 
Chuong 0 kien thuc co ban ve he thong dien va dien tu tren oto
Chuong 0 kien thuc co ban ve he thong dien va dien tu tren otoChuong 0 kien thuc co ban ve he thong dien va dien tu tren oto
Chuong 0 kien thuc co ban ve he thong dien va dien tu tren oto
 
Chuong 2 case-power
Chuong 2 case-powerChuong 2 case-power
Chuong 2 case-power
 
Mạch nghịch lưu 1 pha 12 v to 220v
Mạch nghịch lưu 1 pha 12 v to 220vMạch nghịch lưu 1 pha 12 v to 220v
Mạch nghịch lưu 1 pha 12 v to 220v
 
Bao cao
Bao caoBao cao
Bao cao
 
Chuong3 khoinguon
Chuong3 khoinguonChuong3 khoinguon
Chuong3 khoinguon
 
THJ
THJTHJ
THJ
 
Chương 2: Sơ đồ khối điện thoại di động
Chương 2: Sơ đồ khối điện thoại di độngChương 2: Sơ đồ khối điện thoại di động
Chương 2: Sơ đồ khối điện thoại di động
 
Đề tài: Đồ án mạch cảm biến ánh sáng, HAY
Đề tài: Đồ án mạch cảm biến ánh sáng, HAYĐề tài: Đồ án mạch cảm biến ánh sáng, HAY
Đề tài: Đồ án mạch cảm biến ánh sáng, HAY
 
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩmĐiều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
 
Đề tài: Thiết kế hệ thống đo nhiệt độ, HAY, 9đ
Đề tài: Thiết kế hệ thống đo nhiệt độ, HAY, 9đĐề tài: Thiết kế hệ thống đo nhiệt độ, HAY, 9đ
Đề tài: Thiết kế hệ thống đo nhiệt độ, HAY, 9đ
 
Hướng dẫn sửa chữa bếp từ trong thực tế
Hướng dẫn sửa chữa bếp từ trong thực tếHướng dẫn sửa chữa bếp từ trong thực tế
Hướng dẫn sửa chữa bếp từ trong thực tế
 
7 khoi quet dong va cao ap
7 khoi quet dong va cao ap7 khoi quet dong va cao ap
7 khoi quet dong va cao ap
 
Tailieu.vncty.com do-an-vi-dieu-khien
Tailieu.vncty.com   do-an-vi-dieu-khienTailieu.vncty.com   do-an-vi-dieu-khien
Tailieu.vncty.com do-an-vi-dieu-khien
 

Viewers also liked

Reference letter from Tim Cottrell (1)
Reference letter from Tim Cottrell (1)Reference letter from Tim Cottrell (1)
Reference letter from Tim Cottrell (1)Ridwanur Ishan
 
Creation of Social Housing with Private Investors
Creation of Social Housing with Private InvestorsCreation of Social Housing with Private Investors
Creation of Social Housing with Private Investors
FEANTSA
 
Company_profile_public_Nov2016
Company_profile_public_Nov2016Company_profile_public_Nov2016
Company_profile_public_Nov2016Patrik Novák
 
De- and Reassembling Data Infrastructures
De- and Reassembling Data InfrastructuresDe- and Reassembling Data Infrastructures
De- and Reassembling Data Infrastructures
cgrltz
 
Anbefalingshæfte-ebog
Anbefalingshæfte-ebogAnbefalingshæfte-ebog
Anbefalingshæfte-ebogLea Sørensen
 
Certificate of Commendation Attendance 2006 Term 2
Certificate of Commendation Attendance 2006 Term 2Certificate of Commendation Attendance 2006 Term 2
Certificate of Commendation Attendance 2006 Term 2Irwan Shah
 
WORLD’S LATEST 3D DIGITAL MAMMOGRAPHY SYSTEM
WORLD’S LATEST 3D DIGITAL MAMMOGRAPHY SYSTEMWORLD’S LATEST 3D DIGITAL MAMMOGRAPHY SYSTEM
WORLD’S LATEST 3D DIGITAL MAMMOGRAPHY SYSTEM
MIOT Hospitals
 
SAF Service Transcript
SAF Service TranscriptSAF Service Transcript
SAF Service TranscriptIrwan Shah
 
"Hyvä mieli on päällimmäisin ajatus" - Kokemuksia järjestöistä oppimisympäris...
"Hyvä mieli on päällimmäisin ajatus" - Kokemuksia järjestöistä oppimisympäris..."Hyvä mieli on päällimmäisin ajatus" - Kokemuksia järjestöistä oppimisympäris...
"Hyvä mieli on päällimmäisin ajatus" - Kokemuksia järjestöistä oppimisympäris...
Heini Maijanen
 
Introduction
IntroductionIntroduction
Introduction
Milan Zdravković
 

Viewers also liked (13)

Reference letter from Tim Cottrell (1)
Reference letter from Tim Cottrell (1)Reference letter from Tim Cottrell (1)
Reference letter from Tim Cottrell (1)
 
Creation of Social Housing with Private Investors
Creation of Social Housing with Private InvestorsCreation of Social Housing with Private Investors
Creation of Social Housing with Private Investors
 
Company_profile_public_Nov2016
Company_profile_public_Nov2016Company_profile_public_Nov2016
Company_profile_public_Nov2016
 
Diseño sin título
Diseño sin títuloDiseño sin título
Diseño sin título
 
De- and Reassembling Data Infrastructures
De- and Reassembling Data InfrastructuresDe- and Reassembling Data Infrastructures
De- and Reassembling Data Infrastructures
 
Anbefalingshæfte-ebog
Anbefalingshæfte-ebogAnbefalingshæfte-ebog
Anbefalingshæfte-ebog
 
Certificate of Commendation Attendance 2006 Term 2
Certificate of Commendation Attendance 2006 Term 2Certificate of Commendation Attendance 2006 Term 2
Certificate of Commendation Attendance 2006 Term 2
 
WORLD’S LATEST 3D DIGITAL MAMMOGRAPHY SYSTEM
WORLD’S LATEST 3D DIGITAL MAMMOGRAPHY SYSTEMWORLD’S LATEST 3D DIGITAL MAMMOGRAPHY SYSTEM
WORLD’S LATEST 3D DIGITAL MAMMOGRAPHY SYSTEM
 
Certificate of Volunteer Service_James Welch
Certificate of Volunteer Service_James WelchCertificate of Volunteer Service_James Welch
Certificate of Volunteer Service_James Welch
 
DIVYA RESUME_Final
DIVYA RESUME_FinalDIVYA RESUME_Final
DIVYA RESUME_Final
 
SAF Service Transcript
SAF Service TranscriptSAF Service Transcript
SAF Service Transcript
 
"Hyvä mieli on päällimmäisin ajatus" - Kokemuksia järjestöistä oppimisympäris...
"Hyvä mieli on päällimmäisin ajatus" - Kokemuksia järjestöistä oppimisympäris..."Hyvä mieli on päällimmäisin ajatus" - Kokemuksia järjestöistä oppimisympäris...
"Hyvä mieli on päällimmäisin ajatus" - Kokemuksia järjestöistä oppimisympäris...
 
Introduction
IntroductionIntroduction
Introduction
 

Similar to Tìm hiểu cách dùng pic để chạy motor bước

vxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongvxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongLong Tran Huy
 
Bao cao vdk_va_pic
Bao cao vdk_va_picBao cao vdk_va_pic
Bao cao vdk_va_pic
Hải Nguyễn
 
Điều khiển động cơ sử dụng IC MCP4921
Điều khiển động cơ sử dụng IC MCP4921Điều khiển động cơ sử dụng IC MCP4921
Điều khiển động cơ sử dụng IC MCP4921
Pham Hoang
 
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thuTailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Trần Đức Anh
 
Atmel avr
Atmel avrAtmel avr
Atmel avr
Chinh Vo Wili
 
Gioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picGioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picCu Bi
 
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdfĐồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
NuioKila
 
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thư Viện Số
 
Bai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucBai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautruc
mster_dang
 
Điều khiển động cơ sử dụng atmega16
Điều khiển động cơ sử dụng atmega16Điều khiển động cơ sử dụng atmega16
Điều khiển động cơ sử dụng atmega16
Pham Hoang
 
Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951
Ngananh Saodem
 
Đề tài Lập trình C cho họ vi điều khiển 8051
Đề tài Lập trình C cho họ vi điều khiển 8051Đề tài Lập trình C cho họ vi điều khiển 8051
Đề tài Lập trình C cho họ vi điều khiển 8051
Brooklyn Abbott
 
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505Nguyen Luc
 
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Viết thuê báo cáo thực tập giá rẻ
 
Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520
Yến Thanh Thanh
 
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Tailieu.vncty.com   dong-ho-thoi-gian-thuc-ds1307-pic16 f87Tailieu.vncty.com   dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Trần Đức Anh
 
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaĐề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Viết thuê trọn gói ZALO 0934573149
 
Nhóm-HM.docx
Nhóm-HM.docxNhóm-HM.docx
Nhóm-HM.docx
tranxuanmninh
 
Assembly
AssemblyAssembly
Assembly
Jean Okio
 

Similar to Tìm hiểu cách dùng pic để chạy motor bước (20)

vxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongvxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhong
 
Bao cao vdk_va_pic
Bao cao vdk_va_picBao cao vdk_va_pic
Bao cao vdk_va_pic
 
Điều khiển động cơ sử dụng IC MCP4921
Điều khiển động cơ sử dụng IC MCP4921Điều khiển động cơ sử dụng IC MCP4921
Điều khiển động cơ sử dụng IC MCP4921
 
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thuTailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
 
Atmel avr
Atmel avrAtmel avr
Atmel avr
 
Gioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picGioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-pic
 
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdfĐồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
 
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
 
Bai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautrucBai 001 vxl_pic_cautruc
Bai 001 vxl_pic_cautruc
 
Vi dieu khien_pic
Vi dieu khien_picVi dieu khien_pic
Vi dieu khien_pic
 
Điều khiển động cơ sử dụng atmega16
Điều khiển động cơ sử dụng atmega16Điều khiển động cơ sử dụng atmega16
Điều khiển động cơ sử dụng atmega16
 
Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951
 
Đề tài Lập trình C cho họ vi điều khiển 8051
Đề tài Lập trình C cho họ vi điều khiển 8051Đề tài Lập trình C cho họ vi điều khiển 8051
Đề tài Lập trình C cho họ vi điều khiển 8051
 
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
Do an lap_trinh_c_cho_vi_dieu_khien_8051_8462_1505
 
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
Đồ án tốt nghiệp điện tử Điều khiển và giám sát thiết bị điện gia đình - sdt/...
 
Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520Bao cao thuc tap pic18 f4520
Bao cao thuc tap pic18 f4520
 
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Tailieu.vncty.com   dong-ho-thoi-gian-thuc-ds1307-pic16 f87Tailieu.vncty.com   dong-ho-thoi-gian-thuc-ds1307-pic16 f87
Tailieu.vncty.com dong-ho-thoi-gian-thuc-ds1307-pic16 f87
 
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaĐề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
 
Nhóm-HM.docx
Nhóm-HM.docxNhóm-HM.docx
Nhóm-HM.docx
 
Assembly
AssemblyAssembly
Assembly
 

Tìm hiểu cách dùng pic để chạy motor bước

  • 1. Cùng Bạn vào InterNet: Tìm hiểu cách dùng PIC để chạy motor bước Rất vui khi thấy Bạn vào xem... Dẫn nhập, Tôi làm nghề điện tử trên 40 năm, vừa làm thợ mở tiệm sửa máy, vừa mở trường dạy nghề, vừa viết sách kỹ thuật,... do vậy tư liệu kỹ thuật đối với tôi rất cần yếu, nhớ lại lúc trước, khi muốn tập trung tư liệu cho một đề tài, tôi phải mất rất nhiều thời gian, lại phải nhờ công sức của bạn bè khắp nơi, tốn rất nhiều tiền bạc mới có. Còn bây giờ thời đại của Internet, trên đó tích gốp vô số thông tin kỹ thuật từ đơn giản cho đến tận cao siêu, nhiều không kể siết, và với ý niệm "thông tin là của chung, mọi người cùng hưởng", với Internet chúng ta có thể trong một khoảng thời gian ngắn là đã lấy đủ thông tin liên quan đến chủ đề mà mình muốn tìm, muốn tập trung cho công việc muốn làm trước mắt, thật tiện lợi vô cùng. Trong lần này, tôi sẽ cùng Bạn đi tìm tư liệu về ic lập trình họ PIC và tìm hiểu cách viết các chương trình nguồn dùng để chạy motor bước (Stepper motor, 步進馬達) và cũng sẽ giới thiệu với Bạn nhiều địa chỉ Web có liên quan đến chủ đề PIC để Bạn tham khảo khi cần, mong bài viết sẽ có ích với nhiều Bạn. (VKH).
  • 2. Giới thiệu trang Web Có một trang Web của người Nhật đã chuyển qua Anh ngữ (và nhiều thứ tiếng khác), viết về đề tài kỹ thuật điện tử rất hay, quá hay, trong trang Web này, Bạn có thể tìm thấy một mãnh chuyên viết về PIC, dành cho người mới làm quen với PIC, cách viết, cách trình bày, bố cục đi từ dễ đến khó rất rõ ràng dễ hiểu. Tôi muốn giời thiệu với Bạn trang Web này. Bạn Click vào đây để mở trang Web nói về bộ môn điện tử của người Nhật (Bản chữ Anh). Khi vào trang Web này, Bạn sẽ thấy bản đề mục như hình sau, trong đó có 2 mục liên quan đến chủ đề PIC. Bạn hãy vào 2 mục:
  • 3. Guide to use the PIC (giới thiệu cách dùng ic PIC) PIC Circuit Gallery (Các ứng dụng của ic PIC) Tôi sẽ dùng tư liệu có trong 2 mục này và kết hợp thêm một số tư liệu của các trang Web khác và hiểu biết của chính mình để tìm hiểu về chủ đề motor bước hay còn gọi là motor bộ tiến. Do bài viết ở mức phổ quát nên tôi chọn cách viết bình dị phù hợp cho nhiều Bạn mới làm quen với PIC. Khái quát về PIC PIC là gì? PIC(Peripheral Interface Controller) là nhóm các IC dùng để chấp hành câu lệnh điều khiển theo các chương trình đã có trong bộ nhớ. Bộ nhớ và CPU có thể xem như bộ óc của máy và PIC là các hệ thần kinh dùng để chấp hành các chương trình đã có trong bộ nhớ. Để cụ thể chúng ta sẽ đơn cử một ic PIC dùng để phân tích, đó là ic PIC16F84A Khi trên tay Bạn có một ic PIC, 3 điều Bạn cần hiểu về nó là: (1) Sơ đồ chân và công dụng của các chân. (2) Sơ đồ chức năng cho thấy cấu trúc bên trong và sự vận hành của nó. (3) Sơ đồ tổ chức của các loại bộ nhớ, nhất là các thanh nhớ đặc dụng. (1) Sơ đồ chân của IC sẽ cho Bạn những hiểu biết về cấu trúc mạch điện, quen gọi là phần cứng.
  • 4. Về các sơ đồ mạch điện dùng ic vi điều kiển họ PIC, nói chung rất đơn giản. Bạn chú ý đến việc cấp nguồn, việc gắn thạch anh định tần và chọn định kiểu reset. Tất cả các lệnh xuất nhập bit dùng cho chức năng điều khiển đều cho thực hiện trên các cảng. Ở ic PIC16F84A có 2 cảng: Cảng A có 5 chân và cảng B có 8 chân. Do đó muốn sử dụng các ic vi điều khiển (dù cho đối với họ nào đi nữa) thì điều đầu tiên là Bạn phải hiểu rõ hoạt động của các bến cảng của ic đó. Ở đây chúng ta sẽ nói đến 2 cảng của PIC16F84A, cảng A và cảng B. Bạn xem một sơ đồ kinh điển dùng ic PIC16F84A (dùng điều khiển 8 Led trên cảng B). Hình vẽ cho thấy: * Chân 5 nối masse, chân 14 nối nguồn. Nguồn 5V được tạo ra từ ic ổn áp 7805. * Chân 15, chân 16 gắn thạch anh định tần (tần số thạch anh là 10MHz). * Chân 4, chân reset cho nối lên mức áp cao, vậy sơ đồ này dùng mạch reset nội. * Các cảng: + Trên cảng A gắn 5 nút nhấn chọn mode với 5 điện trở treo áp + Trên cảng B gắn 8 Led biểu hiện trạng thái bit trên cảng B với 8 điện trở hạn dòng, Led sáng với bit 0 và tắt với bit 1. Chỉ với mạch điện này, Bạn đã có thể dùng câu lệnh (35 câu lệnh, xem phần dưới, trình bày 35 câu lệnh dùng để viết các chương trình nguồn chạy các ic PIC ) để tạo ra các trạng thái nhấp nháy của 8 Led theo ý muốn của Bạn, Bạn có thể chọn các kiểu nhấp nháy theo các nút nhấn gắn trên cảng A.
  • 5. (2) Nhìn sơ đồ chức năng, Bạn sẽ hiểu được các trình thức hoạt động của IC. Giải thích khái quát về sơ đồ khối: Flash Program Memory có dung lượng 1024 thanh nhớ, loại rộng 14 bit (1Kx14). Ở đây Bạn cất giữ các mã lệnh của chương trình nguồn. Các mã lệnh được truy cập theo mã địa chỉ có trong thanh ghi PC (Program Counter). Mã lệnh xuất ra trên thanh ghi Instruction Register. Thanh ghi Program Counter dùng ghi các địa chỉ của mã lệnh của bộ nhớ Flash ROM. Trong hoạt động, khi dùng lệnh nhẩy đến các chương trình con, thì địa chỉ hiện tại sẽ được tạm thời cho cất giữ trong các thanh ghi ngăn xếp, ở đây chiều xâu ngăn xếp chỉ có 8 lớp (8 Level Stack). Ngăn xếp 8 Level Stack dùng lưu giữ các mã địa chỉ của chương trình chính khi trong chương trình có dùng lệnh nhẩy. Địa chỉ cất vào ngăn xếp có thể hiểu như dùng lệnh Push và địa chỉ lấy ra từ ngăn xếp có thể hiểu như dùng lệnh Pop.
  • 6. Instruction Register là thanh ghi mã lệnh, ở ngả ra, mã lệnh có thể chuyển đến khối giải mã Instruction Decode & Control để tạo ra lệnh điều khiển. Hay chuyển đến khối xử lý địa chỉ đa kênh Address Multiplex để truy cập các thanh nhớ trong bộ nhớ RAM (File Register). Instruction Decode & Control là khối giải mã, xác định tính năng điều khiển trong câu lệnh, nó tác dụng vào khối định trạng thái cho IC. Khối này gồm có các chức năng: Power- up Timer, Oscillator Start-up Timer, Power-on Reset, Watchdog Timer. Power-up Timer dùng kích hoạt IC theo đồng hồ Timer. Oscillator Start-up Timer dùng kích hoạt mạch dao động theo đồng hồ Timer. Power-on Reset dùng “phục nguyên” các thanh ghi trong ic PIC khi nó mới được cấp nguồn. Watchdog Timer dùng vào ra mode “Chó giữ nhà” theo đồng hồ Timer, một tính năng dùng để tiết kiệm điện. Timing Generation là khối tạo ra xung nhịp chính, tần số của xung nhịp thường định theo thạch anh. PIC16F84A có thể hoạt động với xung nhịp 20MHz. Đồng hồ Timer 0 (TMR0) dùng một thanh đếm 8 bit để tạo ra chức năng điều khiển theo thời gian. Nó có thể đếm tối đa 256 xung nhịp, khi thanh đếm đầy, bit báo tràn sẽ chuyển lên mức 1. Các bến cảng I/O Port (gồm Port A có 5 chân và Port B có 8 chân) dùng xuất nhập dữ liệu. Nhiều chân còn có tính đa nhiệm (một chân mà làm nhiều nhiệm vụ), nên ngoài công năng xuất nhập dữ liệu nó còn có các công năng khác. Như công năng nhập xung đếm trên chân RA4/TOCKI, công năng ngắt trên chân RB0/INT… Bộ nhớ dữ liệu EEPROM Data Memory, đây là bộ nhớ xóa ghi được trên 1 triệu lần, EEPROM có 64 thanh nhớ, với độ rộng 8 bit (1 byte). Để truy cập dữ liệu trong các thanh nhớ, mã địa chỉ sẽ chuyển vào thanh ghi EEADR và dữ liệu xuất nhập trên thanh ghi EEDATA. Bộ nhớ RAM File Register, đây là bộ nhớ RAM có 68 thanh nhớ, với độ rộng 8 bit, trong đó có 12 thanh nhớ đặc dụng (SFR, Special Function Register), các thanh nhớ còn lại được dùng làm thanh nhớ phổ dụng (GPR, General Purpose Register). Các thanh nhớ đặc dụng xác định hoạt động của IC, các thanh nhớ phổ dụng dùng làm thanh nhớ tạm. Khi IC mất nguồn, các dữ liệu trong các thanh nhớ RAM đều bị xóa sạch. Người ta truy cập dữ liệu trong các thanh nhớ của RAM với bó nối mã địa chỉ RAM Addr (7 đường) và xuất nhập dữ liệu trên bó nối Data Bus (8 đường) Thanh ghi FSR (File Select Register) dùng truy tìm dữ liệu theo mã địa chỉ gián tiếp (Indirect Address), dùng bó nối Indirect Addr (7 đường).
  • 7. Thanh ghi STATUS (Status Register) dùng chọn định các điều kiện làm việc cho IC (Thanh ghi trạng thái này rất thường dùng). MUX (Multiplex) là khối xử lý đa nhiệm, nó cung cấp mã cho khối tính toán ALU. ALU (Arithmetic & Logic Unit) là khối thực hiện các phép toán số học và logic. Không có bộ phận này, IC không được gọi là IC máy tính. Thanh ghi W reg (Work Register) là thanh ghi công tác (một thanh ghi cực kỳ quan trọng của PIC), nó cất giữ các kết quả của khối toán ALU. (3). Bạn phải hiểu rõ công năng của các bộ nhớ, nhất là hiểu rõ các thanh nhớ đặc dụng.
  • 8. Các thanh nhớ của bộ nhớ File Register của RAM (Random Access Memory). Ở đây, người ta dùng cách chuyển dãi nhớ ( chuyển bank) cho bộ nhớ này. Mỗi dãi nhớ có dung lượng là 80 byte (80 thanh nhớ với mã địa chỉ là 00h đến 4fh). Trong IC vi điều khiển PIC16F84A có 2 dãi nhớ (có 2 Bank, bank0 và bank1). Bộ nhớ này chia ra làm 2 phần: Ở phần đầu, người ta lấy 12 byte (tức 12 thanh nhớ có địa chỉ từ 00h đến 0bh) của mỗi dãi dùng làm các thanh nhớ đặc dụng (SFR, Special Function Register) và dùng nó để đặt bit 0/1 xác định các trạng thái vận hành của PIC. Định điều kiện cho việc xuất nhập trên các bến cảng và còn định các điều kiện khác nữa. Có 16 thanh ghi khác nhau trong vùng chứa các thanh ghi đặc dụng (11 thanh trong bank0 và 5 thanh trong bank1). Nội dung trong mỗi thanh ghi này dùng quản lý sự vận hành của PIC. Mặc dù có tổng cộng 24 thanh ghi lưu trữ (file register), nhưng 7 trong chúng nằm chung trong cả hai bank. Còn lại 68 byte (tức 68 thanh nhớ, có địa chỉ từ 0ch đến 4fh), từ byte thứ 13 trở lên, được gọi là các thanh ghi phổ dụng (GPR, General Purpose Register), nó được dùng như các thanh nhớ tam thời dùng ghi các kết quả, các dữ liệu khi chương trình đang chạy. Nội dung ghi trong các thanh ghi phổ dụng GPR đều giống nhau trong cả hai dãi, do vậy việc dùng bit để chuyển bank0 hay bank1 cũng chỉ dùng được có 68 byte mà thôi (tức có 68 thanh nhớ thôi). Chúng ta biết, nội dung trong các thanh ghi phổ dụng sẽ bị xóa hết khi IC không được cấp điện. Với các thanh ghi này, số lần xóa ghi là không hạn chế. Mỗi thanh nhớ đặc dụng SFR đều có các công năng chuyên dùng như sau: INDF: Data memory contents by indirect addressing. Nội dung dữ liệu trong bộ nhớ xác định theo địa chỉ gián tiếp.
  • 9. TMR0: Timer counter. Thanh đếm của 8 bit của đồng hồ Timer0. PCL: Low order 8 bits of program counter. 8 bit thấp trong thanh ghi Program counter. STATUS: Flag of calculation result. Các bit cờ dùng cho các phép toán và chuyển bank. FSR: Indirect data memory address pointer. Thanh ghi con trỏ chỉ dữ liệu trong bộ nhớ theo mã địa chỉ gián tiếp. PORT A: PORT A DATA I/O. Gồm 5 bit thấp dùng xác lập trạng thái bit trên bến cảng Port A. PORT B: PORT B DATA I/O. Gồm 8 bit dùng xác lập trạng thái bit trên bến cảng Port B. EEDATA: Data for EEPROM. Thanh ghi dữ liệu dùng cho bộ nhớ EEPROM. EEDR: Address for EEPROM. Thanh ghi địa chỉ dùng cho bộ nhớ EEPROM. PCLATH: Write buffer for upper 5 bits of the program counter. Thanh ghi đệm dùng ghi 5 bit cao dùng cho thanh ghi con trỏ PC. INTCON: Interruption control. Gồm 8 bit dùng xác định tính năng ngắt. OPTIN_REG: Mode set. Gồm 8 bit dùng khai báo các mode cho PIC. TRISA: Mode set for PORTA. Thanh ghi 5 bit dùng xác định hướng chuyển dữ liệu xuất hay nhập cho Port A. TRISB: Mode set for PORTB. Thanh ghi 8 bit dùng xác định hướng dữ liệu xuất hay nhập cho Port B. EECON1: Control Register for EEPROM. Thanh ghi điều khiển việc ghi đọc cho bộ nhớ EEPROM. EECON2: Write protection Register for EEPROM. Thanh ghi thứ 2, dùng điều khiển bộ nhớ EEPROM. (Ở các ic PIC khác nó sẽ có cấu trúc bộ nhớ khác, muốn sử dụng ic PIC nào trước tiên Bạn phải tìm hiểu thật rõ các công năng của các thanh nhớ đặc dùng của nó, vì thông qua các thanh nhớ đặc dụng, Bạn mới có thể viết chính xác các chương trình nguồn và vận hành các ic PIC làm việc theo ý muốn của riêng Bạn). Sau đây là bảng ghi các thanh ghi đặc dụng: Bạn nên in ra để trước mặt khi viết các chương trình nguồn cho PIC
  • 10. Bây giờ hãy nói đến cách dùng 35 câu lệnh của ic vi điều khiển họ PIC. IC vi điều khiển họ PIC chỉ có 35 câu lệnh, muốn sử dụng ic PIC Bạn phải quen cách dùng các câu lệnh này, sau đâu là cách dùng và ý nghĩa của từng cầu lệnh. Trước hết hãy hiểu rõ một số qui định dùng trong câu lệnh.
  • 11. Trong các câu lệnh, ký tự f dùng để chỉ địa chỉ của các thanh nhớ, ký tự W là chỉ thanh ghi tích lũy. Ký tự b có các số 0, 1, 2 ,3 ,4 ,5 ,6 ,7 dùng chỉ vị trí bit trong thanh ghi mà Bạn muốn chọn. Ký tự k là một trị hằng, cũng có thể là tên nhãn. Dùng ký tự x ý muốn nói ở đó lấy 0 hay 1 cũng được. Dùng ký tự d để chỉ việc chọn thanh f hay thanh W để giữ kết quả, chọn d = 0 cho kết quả giữ trong thanh W, chọn d =1 cho kết quả giữ trong thanh f. Chữ PC là thanh ghi dùng để đếm lệnh của chương trình. Chữ TO là bit tràn và chữ PD là bit dùng giảm công suất khi cho ic vào mode tắt chờ. Dưới đây là bảng tra nhanh 35 câu lệnh dùng viết các chương trình nguồn cho ic PIC: (Bạn nên in ra và để bảng này trước mặt mỗi khi viết các chương trình nguồn cho ic PIC)
  • 12. Tìm hiểu cú pháp và ý nghĩa của từng câu lệnh: (Tôi soạn lại 35 lệnh này theo hình thức của trang Web Nhật, chú thích bằng chữ Việt để Bạn dễ tham khảo) Các câu lệnh được trình bày trong khung theo các phân mục như hình sau:
  • 13. * Tên lệnh: Viết tắt, đó là các từ khóa đã qui định cho lệnh. * Giải thích tên lệnh: Chú thích ngắn gọn ý nghĩa của câu lệnh. * Cú pháp: Cách viết câu lệnh. phần tên nhãn ở trước có khi không có, tên lệnh và các toán hạng. * Toán hạng: Mục này cho thấy các giá trị làm việc của các toán hạng. * Tác dụng bit cờ: Cho thấy tác dụng của lệnh có ảnh hưởng vào các bit cờ nào. * Chu kỳ lệnh: Lệnh được thực hiện nhanh hay chậm, lệnh dùng mấy chu kỳ lệnh để làm xong. (Bạn xem 35 câu lệnh viết cho PIC ở phần phụ lục) Một thí dụ: Về cách viết các lệnh dùng để chọn hướng xuất nhập cho cảng portA và cảng portB trong PIC: Trước hết Bạn phải hiểu ý nghĩa các bit trong thanh ghi đặc dụng Status. (Bạn xem hình) Hãy tìm hiểu ý nghĩa của từng bit trong thanh ghi STATUS (có địa chỉ 03h, 83h).
  • 14. Bit 7 ( IRP): Register Bank Select bit (used for indirect addressing). Bit dùng chọn dãi nhớ. Bit IRP không dùng với PIC16F84A. Sau lệnh Reset nó xác lập ở mức 0. Bit 6-5 (RP1-RP0): Register Bank Select bits (used for direct addressing). Các bit dùng để chọn dãi nhớ Bank 0 hay Bank 1. Khi xác lập trị 00 là chọn các thanh nhớ ở dãi 0 (Bank 0 có địa chỉ 00h – 7fh). Khi xác lập trị 01 là chọn các thanh nhớ ở dãi 1 (Bank 1 có địa chỉ 80h – ffh). Mỗi dãi nhớ có 128 byte (thanh nhớ). Trong PIC16F84A chỉ dùng bit RP0, bit RP1 luôn đặt ở BIT 0 BIT 4 (/TO: Time-out bit). Bit báo thoát ra trạng thái Power-up, trạng thái Watch-dog, trạng thái Sleep. Được xác lập ở mức 1, sau Power-up, dùng lệnh CLRWDT hay lệnh SLEEP. Được xác lập ở mức 0, Khi thoát ra trạng thái WDT. Bit 3 (/PD): Power-down bit Bit báo trạng thái giảm mức nguồn. Được xác lập ở mức 1, sau Power-down hay sau lệnh CLRWDT. Được xác lập ở mức 0, sau chấp hành câu lệnh SLEEP. Bit 2 (Z): Zero bit Bit báo trạng thái 0. Được xác lập ở mức 1, khi ở khối toán cho kết quả là 0. Được xác lập ở mức 0, khi kết quả ở khối toán khác 0. Bit 1 (DC): Digit carry/-borrow bit (for ADDWF and ADDLW instructions) (For borrow the polarity is reversed) Bit xác lập trạng thái tràn trong phép toán cộng số (Trong câu lệnh ADDWF và ADDLW) hay số mượn trong phép toán trừ SỐ. Được xác lập ở mức 1, khi xuất hiện tràn số ở bit thấp thứ 4. Được xác lập ở mức 0, khi không có số tràn ở bit thấp thứ 4. Bit 0 (C): Carry/-borrow bit (for ADDWF and ADDLW instructions) Bit xác lập trạng thái tràn trong phép toán cộng (Trong câu lệnh ADDWF và ADDLW) hay số mượn trong phép toán trừ.
  • 15. Được xác lập ở mức 1, khi xuất hiện tràn số ở thanh ghi. Được xác lập ở mức 0, khi không có số tràn ở thanh ghi. Từ thanh ghi Status Bạn thấy bit RP1, RP0 chọn định Bank, vậy khi muốn làm việc với Bank nào trước hết Bạn phải set ở 2 bit này. Với PIC, việc chọn tính Input / Output cho các chân của cảng portA và portB Bạn phải khai báo trước, Cách làm như sau (Bạn xem hình). Chọn định tính Input/Output cho các cảng RA và cảng RB: Hình vẽ cho thấy trong PIC người ta dùng thanh ghi đặc dụng TRISA và TRISB (đặt trong bank1) để chỉ định tính Input/Output cho portA và portB (lại nằm trong bank0). Do vậy khi muốn đặt bit 1 hay 0 cho thanh TRISA, hay TRISB Bạn phải set ở 2 bit RP1, RP0 trong thanh ghi đặc dụng Status. Sau khi chọn định xong 2 thanh TRISA và TRISB, và Bạn phải trở lại bank0 để làm việc với portA và portB. Do vậy, khởi đầu ở các chương trình của PIC, Bạn thường gặp các câu lệnh như sau: ;**************** Initial Process ********************* init bsf status,rp0 ; Đặt 1 vào bit rp0 của thanh Status, làm vậy
  • 16. để vào Bank1. clrf trisa ; Xóa sạch trisa, có nghĩa là chọn định cả PORTA làm OUT. movlw b'00100111' ; Chuyển số nhị phân '00100111' vào W để có RB0,1,2.5=IN RB7=OUT movwf trisb ; Chuyển dãy số trên vào trisb để set tính In/Out cho PORTB * Với PIC Bạn muốn chuyển số vào một thanh nhớ nào đó, Bạn thường phải dùng 2 câu lệnh, đó là lệnh: movlw <trị> ; Trước hết cho chuyển <trị> vào thanh W. movwf <địa chỉ thnah nhớ> ; Kế đó, cho chuyện trị trong W vào <địa chỉ thanh nhớ>. movlw b'10000000' ; Chuyển số nhị phân '10000000' vào W, không dùng RBPU=1 movwf option_reg ; Chuyển dãy số trên vào để set thanh OPTION_REG bcf status,rp0 ; Đặt 0 vào bit rp0 của thanh Status để về lại Bank0 * Bit RBPU dùng để cho treo chân B lên mức áp cao bằng chính mạch điện có trong IC. Khi đặt RBPU ở mức 1 là không cho treo áp, bit này trong thanh ghi OPTION_REG. * Bạn thấy với PIC, trước hết Bạn thường phải vào Bank1 để định nghĩa chân vào (Input) chân ra (Output) cho các cảng PortA hay PortB. Trong 8 bit của thanh trisa và trisb, nếu Bạn đặt 0 là ngả ra và nếu đặt 1 là ngả vào. movlw b'00000101' ;Set PORTA initial value (Chuyển trị '0000010' vào W) movwf porta ;Write PORTA (Chuyển trị trong W vào cảng porta) bsf portb,rb7 ;Set RB7 = 1 (Đặt bit 1 vào rb7 của cảng portb) btfsc portb,rb5 ;RB5 = 0 ? (Xét bit rb5 của portb để nhẩy) goto $-1 ;No. Wait (quay lại dòng lệnh trên để xét tiếp)
  • 17. Đoạn chương trình trên cho thấy cách khởi tạo các tính IN/OUT cho các chân của cảng portA và cảng portB. Ứng dụng: Viết chương trình nguồn cho motor bước. Trước hết hãy nói về nguyên lý hoạt động của motor bước. Cấu tạo của motor bước: Bạn xem hình Motor bước lấy bước góc làm đơn vị tính (các loại motor khác lấy số vòng quay làm đơn vị tính), motor bước gồm có 2 phần: Phần tĩnh (Stator) gồm các cuộn dây quấn trên các trụ từ cực khi các cuộn dây này nhận dòng xung nó sẽ trở thành các cực nam châm điện và tương tác với Phần quay (Rotor) là nam châm vĩnh cữu và sẽ tạo ra chuyển động quay. Đặc tính là phần quay, quay mỗi nhịp chỉ nhíc 1 bước, đo đó góc của bước là một tham số của motor bước. Sự vận hành của motor bước: Bạn thấy khi xung cấp cho cuộn dây, cuộn dây sẽ có từ tính và tạo ra tương tác với phần quay (vốn là một nam châm vĩnh cữu) để tạo ra chuyển động quay, mỗi lần chỉ quay một bước.
  • 18. Các cách đấu dây của một motor bước: Hình vẽ trên cho thấy cách đấu các cuộn dây của motor bước. Bạn có thể cho đấu ra 8 dây, 6 dây, 5 dây hay 4 dây. Trình bày cách tháo một motor bước (gồm 12 bước): Nhìn các hình động (12 hình) Bạn thấy rõ các thành phần cấu tạo của một motor bước.
  • 19. Tìm hiểu đề tài này trong trang Web của Nhật. Chúng ta trở lại thử phân tích một bài ứng dụng của PIC16F84A trên trang Web của Nhật. Dùng PIC16F84A để điều khiển một motor bước với 3 nút nhấn: STOP, LEFT và RIGHT và một biến trở chỉnh tốc.
  • 20. Nguyên lý vận hành của motor bước: Trong bài viết, tác giả dùng motor bước 2 pha (4 cuộn dây) với phần quay là một từ cực tạo từ nam châm vĩnh cữu và cho xung cấp dòng cho các cuộn dây trên phần tĩnh và tạo ra chuyển động quay, góc bước là 90 độ (Bạn xem hình).
  • 21. Dùng hình động để trình bày nguyên lý vận hành của một motor bước có góc bước là 90 độ.
  • 22. Với Motor bước có góc bước 7.5 độ, chúng ta sẽ phải cung cấp tín hiệu cho các cuộn dây 2 pha theo qui trình sau (Đoạn chương trình sẽ cấp tín hiệu theo bảng này cho motor bước): Sơ đồ mạch điện và bản mạch bố trí linh kện:
  • 23. Giải thích sơ đồ mạch điện: Phần mạch cơ bản: Chân 5 cho nối masse để lấy dòng (dòng điện tử chảy vào IC qua chân số 5), chân 14 nối với nguồn 5V. Đường nguồn 5V lấy ra từ một ic ổn áp 78L05. Khi dùng ic ổn áp họ 78xx, Bạn nhớ gắn tụ lọc nhỏ ở dập nhỏ ở ngả ra để dập hiện tượng tự dao động. Chân 15, 16 mắc thạch anh định tần 4MHz, vậy tần số xung nhịp trong PIC sẽ là 1MHz (tức 1us). Mạch điều khiển thực hiện trên các cảng portA và portB. Chúng ta thấy c1 3 nhóm mạch: * Nhóm các chân của portA dùng cấp xung cho các transistor phức hợp TR2, TR3, TR4, TR5 để cấp dòng cho các cuộn dây làm quay motor, trên các cuộn dây gắn các diode dập các xung ứng biên cao, phản hồi từ các cuộn dây để bảo vệ các transistor trong mạch. * Nhóm các chân trên portB (chân 6, 7, 8) gắn các nút chỉnh để chọn mode. * Hai chân 11, 13 của portB dùng điều khiển mạch nạp xả của tụ C1 qua điện trở R4 và VR1 để làm mạch chỉnh tốc.
  • 24. Giải thích nguyên lý vận hành của mạch: Mạch cấp dòng cho các cuộn dây và mạch điều khiển quá trình nạp xả của tụ để chính tốc. Khi chân RAx lên mức áp cao (bit 1), chân B của transistor phức hợp được cấp dòng IB và transistor dẫn điện, có dòng IB sẽ có dòng chảy ra trên chân C (dòng IC), dòng IC qua cuộn dây trong motor và biến đó thành nam châm điện để tương tác với phần quay, phần quay vốn là một nam châm vĩnh cữu. Khi chân RAx xuống mức áp thấp (bit 0), transistor ngưng dẫn, nó cắt dòng qua các cuộn dây, ngay lúc này từ 2 đầu cuộn dây phát ra điện áp ứng nghịch biên cao, và diode sẽ hấp thu dòng và tạo tác dụng dập biên nhờ tính ghim áp của nó. Khi chân RB7 còn ở mức áp thấp (L, bit 0), transistor ngưng dẫn, nó tạo điều kiện cho tụ C nạp dòng, dòng nạp chảy qua điện trở R, và chúng ta biết khi tụ nạp thì mức áp trên tụ sẽ tăng cao dần, chỉ khi mức áp trên tụ lên đến mức đủ cao (H), nó sẽ tác động vào chân RB5 (Đặt chân RB5 lên mức cao), lúc này chương trình sẽ cho đặt chân RB7 lên mức áp cao (H, bit 1), vậy transistor sẽ dẫn điện, nó cho tụ xả điện nhanh và rồi chân RB7 lại chuyển xuống mức áp thấp (L) để qui trình trên được lập lại. Vậy với điện trở R có trị lớn thì mức áp
  • 25. trên tụ sẽ lên chậm, điều này cho phép chúng ta có thể làm thay đổi tốc độ quay của motor bằng cách chỉnh điện trở R và kiểm tra bit 1 vào trên chân RB5. Giải thích các linh kiện dùng trong mạch: Tôi dùng hình động để giải thích nhanh các linh kiện dùng trong mạch, cách trình bày này ít chiếm chổ trong bài viết, không gây cảm giác là bài viết dài lê thê, đọc thấy mệt, phải không? Phân tích cách viết chương trình nguồn dùng để điều khiển motor bước: Đây là chương trình nguồn dùng điều khiển motor bước theo sơ đồ mạch điện bên trên. Source code file of Stepper Motor controller ;******************************************************** ; ; Stepper Motor controller ; ; Author : Seiichi Inoue ;******************************************************** list p=pic16f84a include p16f84a.inc __config _hs_osc & _wdt_off & _pwrte_on & _cp_off
  • 26. ;**************** Label Definition ******************** cblock h'0c' mode ;Operation mode ;0=stop 1=right 2=left count1 ;Wait counter count2 ;Wait counter(for 1msec) endc rb0 equ 0 ;RB0 of PORTB rb1 equ 1 ;RB1 of PORTB rb2 equ 2 ;RB2 of PORTB rb5 equ 5 ;RB5 of PORTB rb7 equ 7 ;RB7 of PORTB ;**************** Program Start *********************** org 0 ;Reset Vector goto init org 4 ;Interrupt Vector clrf intcon ;Clear Interruption reg ;**************** Initial Process ********************* init bsf status,rp0 ;Change to Bank1 clrf trisa ;Set PORTA all OUT movlw b'00100111' ;RB0,1,2.5=IN RB7=OUT movwf trisb ;Set PORTB movlw b'10000000' ;RBPU=1 Pull up not use movwf option_reg ;Set OPTION_REG bcf status,rp0 ;Change to Bank0 clrf mode ;Set mode = stop clrf count1 ;Clear counter clrf count2 ;Clear counter movlw b'00000101' ;Set PORTA initial value movwf porta ;Write PORTA bsf portb,rb7 ;Set RB7 = 1 btfsc portb,rb5 ;RB5 = 0 ? goto $-1 ;No. Wait start ;************* Check switch condition ***************** btfsc portb,rb1 ;RB1(stop key) = ON ? goto check1 ;No. Next clrf mode ;Yes. Set stop mode goto drive ;No. Jump to motor drive check1 btfsc portb,rb2 ;RB2(right key) = ON ? goto check2 ;No. Next movlw d'1' ;Yes. Set right mode
  • 27. movwf mode ;Save mode goto drive ;No. Jump to motor drive check2 btfsc portb,rb0 ;RB0(left key) = ON ? goto drive ;No. Jump to motor drive movlw d'2' ;Yes. Set left mode movwf mode ;Save mode ;******************** Motor drive ********************* drive movf mode,w ;Read mode bz start ;mode = stop bsf portb,rb7 ;Set RB7 = 1 btfsc portb,rb5 ;RB5 = 0 ? goto $-1 ;No. Wait movlw d'5' ;Set loop count(5msec) movwf count1 ;Save loop count loop call timer ;Wait 1msec decfsz count1,f ;count - 1 = 0 ? goto loop ;No. Continue bcf portb,rb7 ;Set RB7 = 0 btfss portb,rb5 ;RB5 = 1 ? goto $-1 ;No. Wait movf porta,w ;Read PORTA sublw b'000000101' ;Check motor position bnz drive2 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive1 ;Yes. Right movlw b'00001001' ;No. Set Left data goto drive_end ;Jump to PORTA write drive1 movlw b'00000110' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive2 movf porta,w ;Read PORTA sublw b'000000110' ;Check motor position bnz drive4 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive3 ;Yes. Right movlw b'00000101' ;No. Set Left data goto drive_end ;Jump to PORTA write drive3 movlw b'00001010' ;Set Right data goto drive_end ;Jump to PORTA write ;-------
  • 28. drive4 movf porta,w ;Read PORTA sublw b'000001010' ;Check motor position bnz drive6 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive5 ;Yes. Right movlw b'00000110' ;No. Set Left data goto drive_end ;Jump to PORTA write drive5 movlw b'00001001' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive6 movf porta,w ;Read PORTA sublw b'000001001' ;Check motor position bnz drive8 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive7 ;Yes. Right movlw b'00001010' ;No. Set Left data goto drive_end ;Jump to PORTA write drive7 movlw b'00000101' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive8 movlw b'00000101' ;Compulsion setting drive_end movwf porta ;Write PORTA goto start ;Jump to start ;************* 1msec Timer Subroutine ***************** timer movlw d'200' ;Set loop count movwf count2 ;Save loop count tmlp nop ;Time adjust nop ;Time adjust decfsz count2,f ;count - 1 = 0 ? goto tmlp ;No. Continue return ;Yes. Count end ;******************************************************** ; END of Stepper Motor controller ;******************************************************** end
  • 29. (Nhắn Bạn, nếu Bạn không có MPLAB để soạn và dịch đoạn chương trình nguồn trên, Bạn có thể vào trang Web này, để lấy file .hex đã dịch rồi và dùng hộp nạp cho nạp các mã lệnh của file này vào bộ nhớ của ic PIC16F84A. Hẹn khi có dịp tôi sẽ trở lại giới thiệu với Bạn cách soạn các chương trình nguồn với MPLAB và phân tích vài bo nạp PIC đơn giản, để Bạn ráp và dùng nạp PIC. VKH). Chúng ta tách chương trình ra từng phần để tìm hiểu cách viết chương trình điều khiển motor bước. (1). Phần đặt tên, tất cả các chú thích Bạn phải đặt sau dấu ;. Source code file of Stepper Motor controller ;******************************************************** ; ; Stepper Motor controller ; ; Author : Seiichi Inoue ;******************************************************** list p=pic16f84a include p16f84a.inc __config _hs_osc & _wdt_off & _pwrte_on & _cp_off (2) Phần định nghĩa, dùng để đặt tên dễ nhớ, dễ dùng. ;**************** Label Definition ******************** cblock h'0c' ; Đặt tên cho các thanh nhớ, theo dạng liệt kê, bắt đầu từ địa chỉ h'0c'. mode ; các mode vận hành ;0=stop 1=right 2=left count1 ; Bộ đến để chờ 1 count2 ; Bộ đếm để chờ 2 (cho 1msec) endc rb0 equ 0 ;RB0 of PORTB (Đặt tên theo số cho dễ dùng) rb1 equ 1 ;RB1 of PORTB (Đặt tên theo số cho dễ dùng) rb2 equ 2
  • 30. ;RB2 of PORTB (Đặt tên theo số cho dễ dùng) rb5 equ 5 ;RB5 of PORTB (Đặt tên theo số cho dễ dùng) rb7 equ 7 ;RB7 of PORTB (Đặt tên theo số cho dễ dùng) (3) Vào chương trình với câu lệnh xác định mọi chuyện bắt đầu từ thanh reset. ;**************** Program Start *********************** org 0 ; Cho khởi đầu từ thanh nhớ reset goto init ; Nhẩy đến tên nhãn init org 4 ; Vị trí đặt câu lệnh cho chương trình ngắt clrf intcon ; Cho xóa ngắt (4) Đặt tên nhãn init khởi đầu cho chương trình ;**************** Initial Process ********************* init bsf status,rp0 ; Đặt 1 vào bit rp0 của thanh Status, làm vậy để vào Bank1. clrf trisa ; Xóa sạch thanh trisa, có nghĩa là chọn cả PORTA làm OUT. movlw b'00100111' ; Chuyển số nhị phân '00100111' vào W để có RB0,1,2.5=IN RB7=OUT movwf trisb ; Chuyển dãy số trên vào trisb để set PORTB * Với PIC Bạn muốn chuyển số vào một thanh nhớ nào đó, Bạn thường phải dùng 2 câu lệnh, đó là lệnh: movlw <trị> ; Trước hết cho chuyển <trị> vào thanh W. movwf <địa chỉ thnah nhớ> ; Kế đó, cho chuyện trị trong W vào <địa chỉ thanh nhớ>. movlw b'10000000' ; Chuyển số nhị phân '10000000' vào W, không dùng RBPU=1 movwf option_reg
  • 31. ; Chuyển dãy số trên vào để set thanh OPTION_REG bcf status,rp0 ; Đặt 0 vào bit rp0 của thanh Status để về lại Bank0 * Bạn thấy với PIC, trước hết Bạn thường phải vào Bank1 để định nghĩa chân vào (Input) chân ra (Output) cho các cảng PortA hay PortB. Trong 8 bit của thanh trisa và trisb, nếu Bạn đặt 0 là ngả ra và nếu đặt 1 là ngả vào. clrf mode ;Set mode = stop (Cho xóa sạch thanh mode) clrf count1 ;Clear counter (Cho xóa sạch thanh đếm 1) clrf count2 ;Clear counter (Cho xóa sạch thanh đếm 2) movlw b'00000101' ;Set PORTA initial value (Chuyển trị '0000010' vào W) movwf porta ;Write PORTA (Chuyển trị trong W vào cảng porta) bsf portb,rb7 ;Set RB7 = 1 (Đặt bit 1 vào rb7 của cảng portb) btfsc portb,rb5 ;RB5 = 0 ? (Xét bit rb5 của portb để nhẩy) goto $-1 ;No. Wait (quay lại dòng lệnh trên để xét tiếp) (5) Chương trình khởi động với tên nhãn start start ;************* Check switch condition ***************** btfsc portb,rb1 ;RB1(stop key) = ON ? (Xét bit rb1của portb=0? để nhẩy, bit STOP) goto check1 ;No. Next (Nếu nút STOP, chưa nhấn thì nhẩy đến tên nhãn ckeck1) clrf mode ;Yes. Set stop mode (Nếu nút STOP, thì trước hết cho xóa thanh mode ) goto drive ;No. Jump to motor drive (Xóa xong thanh mode, nhẩy đến tên nhãn drive) (6) Chương trình kiểm tra phím nhấn
  • 32. check1 btfsc portb,rb2 ;RB2(right key) = ON ? goto check2 ;No. Next movlw d'1' ;Yes. Set right mode movwf mode ;Save mode goto drive ;No. Jump to motor drive check2 btfsc portb,rb0 ;RB0(left key) = ON ? goto drive ;No. Jump to motor drive movlw d'2' ;Yes. Set left mode movwf mode ;Save mode (7) Chương trình kiểm tra portb và cấp tín hiệu ra trên port A để chạy motor. ;******************** Motor drive ********************* drive movf mode,w ;Read mode (Cho chuyển trị trong thanh mode và thanh W để xét W) bz start ;mode = stop (Xét bit cờ Z, nhẩy về tên nhãn Start) bsf portb,rb7 ;Set RB7 = 1 (Set 1 cho bit rb7 trong cảng portb) btfsc portb,rb5 ;RB5 = 0 ? (Lệnh nhẩy theo bit 0 ở rb5 của portb) goto $-1 ;No. Wait (Quay lên lệnh trên, tạo tính chờ) movlw d'5' ;Set loop count(5msec) (Đặt trị thập phân 5 vào thanh W) movwf count1 ;Save loop count (Cho chuyển trị 5 vào thanh Count1) loop call timer ;Wait 1msec (Cho gọi chương trình trễ có tên nhãn là timer) decfsz count1,f ;count - 1 = 0 ? (Cho trị trong Count1 giảm theo -1 để nhẩy khi = 0) goto loop ;No. Continue (Quay lại tên nhãn loop) bcf portb,rb7 ;Set RB7 = 0 (Set 0 cho bit rb7 trong cảng portb) btfss portb,rb5 ;RB5 = 1 ? (Lệnh nhẩy theo bit 1 ở rb5 của portb) goto $-1 ;No. Wait (Quay lên lệnh trên, tạo tính chờ) movf porta,w ;Read PORTA (Cho chuyển trị của portA vào thanh W) sublw b'000000101'
  • 33. ;Check motor position (Kiểm tra vị trí của motor) bnz drive2 ;Unmatch (Nhẩy đến tên nhãn drive2 theo bit cờ Z = 0) movf mode,w ;Read mode (chuyển trị trong thanh mode vào thanh W) sublw d'1' ;Right ? (Làm phép trừ trị trong W cho 1 để xác định chiều quay phải?) bz drive1 ;Yes. Right (Xét bit cờ Z, biết là đúng đang quay phải) movlw b'00001001' ;No. Set Left data (Không đúng thì chọn dữ liệu cho quay trái) goto drive_end ;Jump to PORTA write (Nhẩy về tên nhãn drive_end kết thúc) drive1 movlw b'00000110' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive2 movf porta,w ;Read PORTA sublw b'000000110' ;Check motor position bnz drive4 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive3 ;Yes. Right movlw b'00000101' ;No. Set Left data goto drive_end ;Jump to PORTA write drive3 movlw b'00001010' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive4 movf porta,w ;Read PORTA sublw b'000001010' ;Check motor position bnz drive6 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive5 ;Yes. Right movlw b'00000110' ;No. Set Left data goto drive_end ;Jump to PORTA write drive5 movlw b'00001001' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive6 movf porta,w ;Read PORTA sublw b'000001001' ;Check motor position bnz drive8 ;Unmatch
  • 34. movf mode,w ;Read mode sublw d'1' ;Right ? bz drive7 ;Yes. Right movlw b'00001010' ;No. Set Left data goto drive_end ;Jump to PORTA write drive7 movlw b'00000101' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive8 movlw b'00000101' ;Compulsion setting drive_end ; (Tên nhãn kết thúc qui trình quay) movwf porta ;Write PORTA (Chuyển trị có trong thanh W vào portA) goto start ;Jump to start (Rồi nhẩy về tên nhãn Start, khởi đầu lại) (8) Chương trình làm trễ. ;************* 1msec Timer Subroutine ***************** timer movlw d'200' ;Set loop count (Đặt trị thập phân 200 vào thanh W) movwf count2 ;Save loop count (Rồi chuyển trị vào thanh Count2) tmlp nop ;Time adjust (Lệnh không tác vụ, dùng kéo dài xung nhịp) nop ;Time adjust (Lệnh không tác vụ, dùng kéo dài xung nhịp thêm nữa) decfsz count2,f ;count - 1 = 0 ? (Cho trị trong Count2 giảm theo bước -1, để nhẩy) goto tmlp ;No. Continue (Cho tiếp tục giảm đến khi thanh Count2 bằng 0) return ;Yes. Count end (Nếu đã bằng 0 thì quay lại sau lệnh CALL) ;******************************************************** ; END of Stepper Motor controller ;******************************************************** end
  • 35. Các ứng dụng mở rộng khác . Dưới đây là các ứng dụng khác của PIC được soạn trong trang Web này. Tất cả các bài viết đều rất rõ ràng, rất sư phạm, có bố cụ tường minh, rất đáng để chúng ta tìm hiểu và học tập. Tóm tắt các ứng dụng trên
  • 36.
  • 37.
  • 38. (Các ứng dụng khác... Bạn hãy vào trang Web trên để xem, nhé!) Phụ lục: Dưới đây liệt kê 35 lệnh dùng viết các chương trình nguồn cho nhóm PIC16. 35 câu lệnh:
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56. Tạm kết Qua bài viết trên, Bạn thấy nếu biết khai thác các tư liệu thông tin kỹ thuật trên mạng, công việc của chúng ta sẽ thuận lợi nhiều lắm phải không? Đó là cái lợi trước mắt của Internet, điều chúng ta còn mong muốn hơn nữa là ngày càng có nhiều trang Web "chân tình" "viết thật lòng" "thật rõ, thật hay, thật hấp dẫn" về các chủ đề có ích cho nhiều người (nhất là đối với dân yêu thích môn kỹ thuật điện tử), như vậy cái lợi của Internet đối với mọi người thật không biết sao kể hết. Hoa Kỳ sắp vào mùa Đông, trời sẽ rất lạnh đây, tuyết sẽ phủ kín mọi lối nẽo, và tôi ngồi trong phòng thực hành ấm cúng của riêng mình để viết Web kỹ thuật, cũng khoái lắm lắm!!! Dưới đây là một số trang Web tôi thường vào đề tìm hiểu về PIC: http://www.piclist.com/images/www/hobby_elec/e_menu.htm http://www.mikroe.com/en/tools/ http://www.microchip.com/ http://www.mikroe.com/ http://www.pic16.com/jszl/jszl.htm http://www.pic16.com/jszl/jszl3.htm http://www.pic16.com/cuxue/cuxue.htm http://www.pic16.com/jszl/jszl2.htm