SlideShare uma empresa Scribd logo
1 de 54
GVHD: ThS Hoàng Văn Mạnh
Sinh viên: Phạm Trần Hoàng
MSV: 12020162
Lớp: K57M
Khoa: Cơ học kỹ thuật & Tự động hóa
Hà Nội, ngày 27/12/2015
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
BÁO CÁO THỰC TẬP TỐT NGHIỆP
Đề tài: Tìm hiểu về bộ điều khiển số TMS320F28335
và ứng dụng
Báo cáo thực tập Trang 1
Mục lục
I. Giới thiệu về bộ điều khiển số TMS320F28335.................................................................. 3
II. Cấu trúc phần cứng.................................................................................................................... 4
1. Sơ đồ khối.................................................................................................................................... 4
2. Bộ xử lý trung tâm (CPU)............................................................................................................ 4
3. Cấu trúc bus ngoại ....................................................................................................................... 5
4. Điều khiển bộ nhớ truy cập trực tiếp (DMA) .............................................................................. 5
5. Bộ tính toán số học (ALU)........................................................................................................... 6
6. Đường lệnh .................................................................................................................................. 6
7. Tổ chức bộ nhớ ............................................................................................................................ 7
8. Phản ứng ngắt .............................................................................................................................. 8
9. Sơ đồ khối tổng quát.................................................................................................................... 9
III. Trình biên dịch CCS.............................................................................................................. 10
IV. Xuất nhập dữ liệu số.............................................................................................................. 12
1. Các kết cấu ngoại vi................................................................................................................... 12
2. Bộ phận vào / ra số..................................................................................................................... 12
3. Phân chia các chân F28335........................................................................................................ 13
a. PORTA (GPIO0 – GPIO31) ................................................................................................... 13
b. PORTB (GPIO32 – GPIO63) ................................................................................................. 14
c. PORTC (GPIO64 – GPIO87)................................................................................................. 15
4. Định tính nhập dữ liệu GPIO (GPIO Input Qualification) ........................................................ 16
5. Tổng hợp thanh ghi vào – ra...................................................................................................... 16
6. Module Clock F28335 ............................................................................................................... 17
7. Watchdog Timer ........................................................................................................................ 19
8. Hệ thống điều khiển và thanh ghi trạng thái.............................................................................. 20
V. Hệ thống ngắt và bộ định thời............................................................................................... 21
1. Hệ thống ngắt............................................................................................................................. 21
a. Các đường ngắt....................................................................................................................... 21
b. Reset F28335 .......................................................................................................................... 22
c. Thiết lập lại bộ nạp khởi động................................................................................................ 22
d. Nguồn ngắt.............................................................................................................................. 24
e. Xử lý ngắt Maskable ............................................................................................................... 25
f. Khuếch đại ngắt ngoại vi........................................................................................................ 26
g. Phản ứng ngắt phần cứng liên tục.......................................................................................... 28
2. Bộ định thời ............................................................................................................................... 29
Báo cáo thực tập Trang 2
VI. Điều chế độ rộng xung - PWM........................................................................................... 31
1. Sơ đồ khối ePWM...................................................................................................................... 31
2. Đơn vị cơ sở ePWM................................................................................................................... 31
3. Pha đồng bộ ePWM ................................................................................................................... 32
4. Chế độ hoạt động định thời........................................................................................................ 33
5. Thanh ghi định thời cơ sở .......................................................................................................... 33
6. Thanh ghi điều khiển cơ sở TBCTL .......................................................................................... 34
7. Thanh ghi trạng thái cơ sở TBSTS ............................................................................................ 35
8. Công thức tính giá trị định nghĩa tần số tín hiệu (TBPRD)....................................................... 36
VII. Bộ chuyển đổi tương tự - số ADC.................................................................................... 36
1. Module ADC.............................................................................................................................. 36
2. Chế độ hoạt động ADC.............................................................................................................. 36
3. Chế độ thác lũ ............................................................................................................................ 36
4. Chế độ tuần tự kép ..................................................................................................................... 37
5. Thời gian chuyển đổi ADC........................................................................................................ 38
6. Khối thanh ghi ADC .................................................................................................................. 38
a. Thanh ghi ADCTRL1 .............................................................................................................. 39
b. Thanh ghi ADCTRL2 .............................................................................................................. 40
c. Thanh ghi ADCTRL3 .............................................................................................................. 41
d. Thanh ghi MAXCONV ............................................................................................................ 42
e. Thanh ghi ADCCHSELSEQ.................................................................................................... 42
f. Thanh ghi ADCRESULT......................................................................................................... 43
g. Thanh ghi ADCREFSEL ......................................................................................................... 44
VIII. Các chức năng khác ............................................................................................................ 44
IX. Một số chương trình mẫu ..................................................................................................... 44
1. Chương trình 1. Vào ra dữ liệu số.............................................................................................. 44
2. Chương trình 2. Ngắt Timer 0 ................................................................................................... 45
3. Chương trình 3. Tạo trễ 1s sử dụng ngắt Timer 0...................................................................... 47
4. Chương trình 4. PWM (duty cycle = 50%)................................................................................ 47
5. Chương trình 5. PWM (duty cycle thay đổi từ 0 đến 100%)..................................................... 49
6. Chương trình 6. Biến đổi ADC.................................................................................................. 51
X. Tài liệu tham khảo ................................................................................................................... 53
Báo cáo thực tập Trang 3
I. Giới thiệu về bộ điều khiển số TMS320F28335
TMS320F28335 là một trong những series mạnh nhất của dòng xử lý tín hiệu số 32 bit
C2000 nằm trong nhóm sản phẩm của hãng Texas Instruments. Được phát triển ở giai đoạn sau của
thế hệ TMS320, do đó TMS320F28335 được sử dụng rất rộng rãi hiện nay trong các phòng thí
nghiệm, trong ngành công nghiệp tự động hóa, robot, năng lương điện tử công suất và các lĩnh vực
cơ điện tử tiên tiến khác. TMS được trang bị lõi (core) hỗ trợ tính toán số thực với dấu phẩy động
(FPU). Với bộ nhớ là 68kb bộ nhớ RAM và 128kb bộ nhớ flash, tốc độ hoạt động tối đa lên tới
150MHz với mỗi chu kỳ lệnh là 6.67ns, tốc độ xử lý cao cho phép chúng ta nhúng các giải thuật điều
khiển như PID, Fuzzy, LQD, Neural, …
Chức năng chính bao gồm các khối sau:
+ 16 kênh ADC 12bit (0 – 3V) cho phép thời gian chuyển đổi nhanh (tối đa 80ns).
+ 18 kênh PWM trong đó có 6 kênh tốc độ cao sử dụng chức năng truy cập bộ nhớ trực tiếp
DMA.
+ Có 96 ngắt, 88 chân giao tiếp vào ra GPIO.
+ 3 Timer 16bit và 32 bit cho phép thực hiện cả những chức năng bios/boot.
+ Có đầy đủ các chức năng giao tiếp UART, SPI, SCI và truyền thông eCAN, …
+ DSP có điểm thuận lợi nhúng các giải thuật là chúng ta có thể viết các giải thuật này trên
Matlab hoặc Psim rồi nhúng các giải thuật này xuống DSP.
+ Khả năng debug online, breakpoint giúp chạy chương trình từng bước, liên tục hay có thể
tạm dừng. Đồng thời có thể theo dõi các thanh ghi, giá trị biến, biểu thức bất kỳ khi ta gọi trong
khung hình biến và biểu thức. Ngoài ra còn có chức năng hiển thị phân vùng bộ nhớ dưới dạng đồ
thị.
Các chức năng của TMS320F28335 vô cùng phong phú và tối ưu giúp ta dễ dàng lập trình
cho các ứng dụng đòi tốc độ và chính xác.
Hình 1. Sơ đồ ngoại vi của TMS320F28335
Báo cáo thực tập Trang 4
II. Cấu trúc phần cứng
1. Sơ đồ khối
Hình 2. Sơ đồ khối F28335
2. Bộ xử lý trung tâm (CPU)
Hình 3. Sơ đồ bộ xử lý trung tâm CPU
F2833x CPU có thể thực hiện hầu hết các lệnh để thực hiện thanh ghi đến thanh ghi hoạt
động và một loạt các lệnh được sử dụng phổ biến bởi vi điều khiển, ví dụ đóng gói byte và giải nén
và thao tác bit trong một chu kỳ đơn. Các kiến trúc cũng được hỗ trợ bởi chế độ địa chỉ tối đa, điều
này cho phép trình biên dịch cũng như người lập trình lắp ráp để tạo ra các mã nhỏ gọn mà gần như
tương ứng một - một với mã C.
F2833x có hiệu suất tính toán cao cho xử lý tín hiệu số như nhiệm vụ điều khiển hệ thống
thường được xử lý bởi các thiết bị vi điều khiển. Hiệu quả này cho phép loại bỏ sự cần thiết của một
bộ xử lý thứ hai trong nhiều hệ thống.
Ba bộ Timer 32bit có thể được sử dụng cho mục đích đúng thời gian chung hoặc để tạo ra
phần cứng điều khiển khoảng thời gian cho hệ điều hành thời gian thực. Quản lý ngắt ngoại vi (PIE)
cho phép ngắt phản ứng nhanh với các nguồn tín hiệu và các sự kiện bên ngoài và bên trong. PIE xử
lý vector ngắt riêng lẻ cho tất cả các nguồn và làm giảm thời gian đáp ứng với một sự kiện bên
ngoài, gọi là ngắt trễ, đến một mức tối thiểu.
Báo cáo thực tập Trang 5
3. Cấu trúc bus ngoại
Hình 4. Cấu trúc bus ngoại F28335
32bit bus dữ liệu cho phép chu kỳ hoạt động 32bit đơn. Kiến trúc đa bus này được biết đến
như kiến trúc Harvard cho phép F28335 lấy một lệnh, đọc giá trị dữ liệu đầu tiên và viết một giá trị
dữ liệu thứ hai trong tất cả trong một chu kỳ xung duy nhất.
Các thanh ghi điều khiển các bộ phận ngoại vi được ánh xạ vào các vị trí cụ thể trong không
gian bộ nhớ dữ liệu và có thể được truy cập với một bộ nhớ ghi dữ liệu bình thường hoặc chỉ thị đọc.
Đối với những thanh ghi quan trọng có một số cơ chế bảo mật được thực hiện để ngăn chặn sự sửa
đổi do các sự cố xảy ra. Tất cả các phần bộ nhớ trong được gắn cả hai bộ nhớ chương trình dữ liệu
(gọi là mô hình bộ nhớ thống nhất). Nó cho phép người thiết kế chọn một phần nhất định để được sử
dụng như là code hoặc như là một phần dữ liệu.
4. Điều khiển bộ nhớ truy cập trực tiếp (DMA)
Hình 5. Cấu trúc bộ nhớ truy cập trực tiếp
Báo cáo thực tập Trang 6
Module DMA là một máy tính dựa trên sự kiện, có nghĩa là nó đòi hỏi một ngắt kích hoạt
thiết bị ngoại vi để bắt đầu một chuyển DMA, chẳng hạn như:
+ Chuyển đổi tuần tự 1 (SEQ1INT) hoặc tuần tự 2 (SEQ2INT) từ tương tự sang số.
+ Bộ đêm đa kênh nối tiếp cổng A và B (McBSP – A, McBSP - B) truyền / nhận.
+ Ngắt ngoài tín hiệu đầu vào XINT 1 – 7 và XINT13
+ CPU Timer 0, 1, 2
+ Module độ rộng xung (PWM) và tín hiệu ePWM 1 – 6.
+ Phần mềm
Theo nguồn dữ liệu và (hoặc) các điểm đến có thể được khởi tạo:
+ SARAM nội các phần L4 đến L7.
+ Tất cả bộ nhớ bên ngoài vùng XINTF.
+ Thanh ghi kết quả ADC (Chỉ nguồn)
+ Bộ đệm truyền và nhận McBSP-A và McBSP-B
+ Các đơn vị PWM 1 – 6.
5. Bộ tính toán số học (ALU)
Hình 6. Cấu trúc bộ tính toán số học
Bộ tính toán số học phổ biến trong các hệ thống nhúng. Ví dụ như các toán tử logic, như
AND, OR và EXOR thực hiện trực tiếp tại các địa điểm bộ nhớ dữ liệu. Thông thường, những chỉ
lệnh này phải được thực hiện mà không có sự gián đoạn giữa đọc và viết truy cập; chúng được gọi là
"non-interrupt" hoặc chỉ lệnh "atomic". Hạt nhân bộ tính toán số học F28335 (ALU) có khả năng hỗ
trợ như các loại của chỉ lệnh.
Ngược lại, các mã hóa truyền thống sẽ thực thi một số chu kỳ chậm hơn so với các chỉ lệnh
nguyên tử.
6. Đường lệnh
Báo cáo thực tập Trang 7
Hình 7. Đường lệnh
Mỗi chỉ dẫn phải trải qua 8 giai đoạn cho đến khi hoàn thành cuối cùng. Một khi các đường
lệnh được lấp đầy với các lệnh, một trong những lệnh được thực hiện trên mỗi chu kỳ xung. Đối với
một thiết bị 150MHz, điều này tương đương với 6.67ns trên một lệnh.
Các bước gồm có:
+ F1: Tạo địa chỉ Instruction ở đường địa chỉ bus chương trình.
+ F2: Đọc kỹ lệnh từ các dòng bus dữ liệu chương trình.
+ D1: Giải mã lệnh
+ D2: Tính toán các địa chỉ thông tin cho các toán hạng của các lệnh
+ R1: Nạp địa chỉ toán hạng đến dữ liệu hoặc dòng địa chỉ bus chương
+ R2: Đọc toán hạng
+ X: Thực hiện các lệnh
+ W: Viết lại kết quả vào bộ nhớ dữ liệu
7. Tổ chức bộ nhớ
Hình 8. Tổ chức bộ nhớ F28335
Báo cáo thực tập Trang 8
Họ F2833x có thể truy cập vào bộ nhớ cả trong và ngoài chip.
F28335 sử dụng 32 bit địa chỉ dữ liệu và 22 bit địa chỉ chương trình, điều này cho phép tổng
địa chỉ gần 4Gwords (1 word = 16 bit) trong không gian dữ liệu và 4Mwords trong không gian
chương trình. Khối bộ nhớ trên tất cả các thiết kế F28335 được thống nhất lập bản đồ cho cả hai
chương trình và không gian dữ liệu.
Các bản đồ bộ nhớ trên cho thấy các khối khác nhau của bộ nhớ có sẵn cho các không gian
chương trình và dữ liệu.
8. Phản ứng ngắt
Hình 9. Quản lý phản ứng ngắt F28335
Báo cáo thực tập Trang 9
9. Sơ đồ khối tổng quát
Hình 10. Sơ đồ khối tổng quát F28335
Báo cáo thực tập Trang 10
III. Trình biên dịch CCS
Trình biên dịch sử dụng cho họ vi điều khiển TMS320F28335 là Code Composer Studio.
Hiện tại công ty Texas Instruments đã cho ra mắt phiên bản mới nhất là phiên bản 6, tuy nhiên các
phiên bản thấp hơn cũng đang được sử dụng rộng rãi cho việc viết mã nguồn.
Hình 11. Trình biên dịch CCS cho F28335
Code Composer Studio (CCS) là trình biên dịch sử dụng ngôn ngữ lập trình C hoặc C++. Để
tạo một dự án mới trong CCS, từ màn hình máy tính chọn biểu tượng shortcut CCS, khởi động
chương trình.
Ở lần chạy đầu tiên, giao diện CCS sẽ hiện lên như sau:
Hình 12. Giao diện ban đầu của CCS
Để tạo một dự án mới, kích chọn New Project trên màn hình chính hoặc từ File -> New ->
CCS Project.
Một cửa sổ nữa hiện ra, chọn loại vi điều khiển là TMS320F28335, sau đó đặt tên cho dự án
tại ô Project Name và sau đó nhấn Finish.
Báo cáo thực tập Trang 11
Hình 13. Tạo một dự án mới
Hình 14. Cửa sổ viết mã nguồn cho F28335
Sau khi viết xong mã nguồn, thêm các file thư viện phù hợp để việc biên dịch được thành
công. File được nạp vào vi điều khiển là file có đuôi .out
Hình 15. Chương trình biên dịch thành công tạo ra file .out
Báo cáo thực tập Trang 12
IV.Xuất nhập dữ liệu số
1. Các kết cấu ngoại vi
Tất cả các thanh ghi ngoại vi được gộp chung lại với nhau được gọi là kết cấu ngoại vi - PF0,
PF1, PF2 và PF3. Các kết cấu này được ánh xạ chỉ trong bộ nhớ dữ liệu. Kết cấu ngoại vi PF0 bao
gồm thiết lập thanh ghi kiểm soát tốc độ nội của bộ nhớ nội FLASH, cũng như các thiết lập thời gian
cho các thiết bị bộ nhớ ngoài, các thanh ghi đơn vị truy cập bộ nhớ trực tiếp, thanh ghi timer CPU
core và khối điều khiển module bảo mật. Flash là bộ nhớ nội bộ không khả biến, thường được sử
dụng để lưu trữ mã nguồn và dữ liệu mà phải xuất hiện lúc khởi động. Kết cấu ngoại vi PF1 chứa
hầu hết các thanh ghi điều khiển đơn vị ngoại vi, chẳng hạn như ePWM, ECAP, điều khiển số Input /
Output và khối thanh ghi CAN. CAN khu vực điều khiển mạng là một mạng lưới được thành lập sử
dụng rộng rãi bên trong xe có động cơ để xây dựng một mạng lưới giữa các bộ điều khiển điện tử
(ECU). Kết cấu ngoại vi PF2 kết hợp các thanh ghi điều khiển hệ thống cốt lõi, bộ chuyển đổi tương
tự số và tất cả các kênh truyền thông khác ngoài McBSP, mà đã được phân bổ cho PF3.
Bảng 1. Các ánh xạ chi tiết của thiết bị ngoại vi
PF0 PIE: Cho phép ngắt PIE và thêm bảng vector PIE vào thanh ghi điều khiển
Flash: Chờ trạng thái thanh ghi Flash
XINTF: Thanh ghi giao diện ngoại
DMA: Thanh ghi DMA
Timers: Thanh ghi bộ định thời CPU-Timers 0, 1, 2.
CSM: Mã bảo vệ module thanh ghi KEY
ADC: Thanh ghi kết quả ADC (ánh xạ kép)
PF1 eCAN: Hộp thư eCAN và thanh ghi điều khiển
GPIO: Cấu hình GPIO MUX và thanh ghi điều khiển
ePWM: Thanh ghi điều chế độ rộng xung nâng cao (ánh xạ kép)
eCAP: Thanh ghi và module nâng cao sự bắt giữ
eQEP: Module và thanh ghi tăng cường mã hóa xung vuông
PF2 SYS: Thanh ghi điều khiển hệ thống
SCI: Điều khiển giao tiếp truyền thông nối tiếp và thanh ghi RX / TX
SPI: Điều khiển giao tiếp cổng nối tiếp và thanh ghi RX / TX
ADC: Trạng thái, điều khiển và thanh ghi kết quả ADC
I2C: Module và thanh ghi liên mạch tích hợp
XINT: Thanh ghi ngắt ngoài
PF3 McBSP: Thanh ghi cổng nối tiếp đa kênh đệm
ePWM: Module và thanh ghi tăng cường điều chế độ rộng xung.
2. Bộ phận vào / ra số
Tất cả I/O được nhóm lại với nhau thành Ports, được gọi là GPIOA, GPIOB và GPIOC.
GPIO có nghĩa là đầu ra - đầu vào mục đích chung. F28335 có tổng cộng 88 chân I/O, bắt đầu từ
GPIO0 đến GPIO87. Thiết bị đi kèm với rất nhiều bộ phận nội bổ sung, không phải tất cả các tính
năng có thể được kết nối với các chân riêng của gói thiết bị cùng một lúc. Giải pháp là: multiplex.
Điều này có nghĩa, một chân vật lý duy nhất của thiết bị có thể được sử dụng cho đến 4 chức năng
khác nhau và những người lập trình quyết định chức năng được chọn. Sơ đồ khối của một chân vật
lý của thiết bị được cho như trong hình:
Báo cáo thực tập Trang 13
Hình 16. Sơ đồ khối chân F28335
Thuật ngữ Input Qualification đề cập đến một tùy chọn bổ sung cho các tín hiệu đầu vào số
tại các chân GPIO0 - GPIO63. Khi tính năng này được sử dụng, một xung đầu vào phải dài hơn số
chu kỳ đồng hồ quy định để trở thành tín hiệu đầu vào hợp lệ, điều này giúp loại bỏ nhiễu đầu vào.
Nhóm thanh ghi GPxPUD có thể được sử dụng để vô hiệu hóa điện trở kéo lên bên trong rời
khỏi mức điện áp trôi hoặc trở kháng cao.
Khi một hàm I/O được chọn, sau đó nhóm thanh ghi GPxDIR xác định hướng của các đầu
vào hoặc đầu ra. Bù vào vị trí một bit bằng 0, cấu hình chung đường như một đầu vào, thiết lập các
vị trí bit cho 1 cấu hình các dòng như một đầu ra.
Một dữ liệu đọc từ dòng đầu vào được thực hiện với một tập các thanh ghi GPxDAT.
Một dữ liệu vào ghi vào một dòng đầu ra cũng có thể được thực hiện với thanh ghi GPxDAT.
Ngoài ra, còn có nhiều hơn ba nhóm thanh ghi:
+ GPxSET
+ GPxCLEAR
+ GPxTOGGLE
Mục đích của các thanh ghi này là sử dụng kỹ thuật mặt nạ để cài đặt, xóa hoặc chuyển đổi
những dòng đầu ra, tương ứng với thiết lập bit 1 trong mặt nạ sử dụng.
Ví dụ, để xóa dòng GPIO5 về giá trị 0, ta có thể sử dụng lệnh:
GpioDataRegs.GPACLEAR.bit.GPIO5 = 0;
3. Phân chia các chân F28335
88 chân I/O được chia thành 3 cổng, chức năng riêng của từng chân được cho trong các bảng
sau:
a. PORTA (GPIO0 – GPIO31)
Báo cáo thực tập Trang 14
Hình 17. Phân chia chức năng chân trên thanh ghi GPAMUX1
GPIO0 – GPIO15 được khai báo trên thanh ghi GPAMUX1
Hình 18. Phân chia chức năng chân trên thanh ghi GPAMUX2
GPIO16 – GPIO31 được khai báo trên thanh ghi GPAMUX2
b. PORTB (GPIO32 – GPIO63)
Báo cáo thực tập Trang 15
Hình 19. Phân chia chức năng chân trên thanh ghi GPBMUX1
GPIO32 – GPIO47 được khai báo trên thanh ghi GPBMUX1
Hình 20. Phân chia chức năng chân trên thanh ghi GPBMUX2
GPIO48 – GPIO63 được khai báo trên thanh ghi GPBMUX2
c. PORTC (GPIO64 – GPIO87)
Báo cáo thực tập Trang 16
Hình 21. Phân chia chức năng trên thanh ghi GPCMUX1 và GPCMUX2
Phân chia chức năng chân trên PORTC (GPIO64 – 79 : GPCMUX1; GPIO80 – 87 :
GPCMUX2)
4. Định tính nhập dữ liệu GPIO (GPIO Input Qualification)
Tính năng này được thiết lập trên các chân từ GPIO0 – GPIO63 hoạt động như một bộ lọc
đầu vào thông thấp qua các tín hiệu đầu vào nhiễu, nó được điều khiển bởi một cặp thanh ghi bổ
sung.
Hình 22. Thanh ghi quyền lựa chọn GPxQSEL
5. Tổng hợp thanh ghi vào – ra
Bảng 2. Các thanh ghi điều khiển GPIO F28335
Báo cáo thực tập Trang 17
Thanh ghi Mô tả
GPACTRL GPIO A – Thanh ghi điều khiển [GPIO0 – GPIO31]
GPAQSEL1 GPIO A – Thanh ghi quyền lựa chọn 1 [GPIO0 – GPIO15]
GPAQSEL2 GPIO A – Thanh ghi quyền lựa chọn 2 [GPIO16 – GPIO31]
GPAMUX1 GPIO A – Thanh ghi đa hợp 1 [GPIO0 – GPIO15]
GPAMUX2 GPIO A – Thanh ghi đa hợp 2 [GPIO16 – GPIO31]
GPADIR GPIO A – Thanh ghi định hướng [GPIO0 – GPIO31]
GPAPUD GPIO A – Thanh ghi vô hiệu hóa đẩy kéo [GPIO0 – GPIO31]
GPBCTRL GPIO B – Thanh ghi điều khiển [GPIO32 – GPIO63]
GPBQSEL1 GPIO B – Thanh ghi quyền lựa chọn 1 [GPIO32 – GPIO47]
GPBQSEL2 GPIO B – Thanh ghi quyền lựa chọn 2 [GPIO48 – GPIO63]
GPBMUX1 GPIO B – Thanh ghi đa hợp 1 [GPIO32 – GPIO47]
GPBMUX2 GPIO B – Thanh ghi đa hợp 2 [GPIO48 – GPIO63]
GPBDIR GPIO B – Thanh ghi định hướng [GPIO32 – GPIO63]
GPBPUD GPIO B – Thanh ghi vô hiệu hóa đẩy kéo [GPIO32 – GPIO63]
GPCMUX1 GPIO C – Thanh ghi đa hợp 1 [GPIO64 – GPIO79]
GPCMUX2 GPIO C – Thanh ghi đa hợp 2 [GPIO80 – GPIO87]
GPCDIR GPIO C – Thanh ghi định hướng [GPIO64 – GPIO87]
GPCPUD GPIO C – Thanh ghi vô hiệu hóa kéo – đẩy [GPIO64 – GPOI87]
Bảng 3. Các thanh ghi dữ liệu F28335
Thanh ghi Mô tả
GPADAT GPIO A – Thanh ghi dữ liệu [GPIO0 – GPIO31]
GPASET GPIO A – Thanh ghi thiết lập dữ liệu [GPIO0 – GPIO31]
GPACLEAR GPIO A – Thanh ghi xóa dữ liệu [GPIO0 – GPIO31]
GPATOGGLE GPIO A – Thanh ghi chốt [GPIO0 – GPIO31]
GPBDAT GPIO B – Thanh ghi dữ liệu [GPIO32 – GPIO63]
GPBSET GPIO B – Thanh ghi thiết lập dữ liệu [GPIO32 – GPIO63]
GPBCLEAR GPIO B – Thanh ghi xóa dữ liệu [GPIO32 – GPIO63]
GPBTOGGLE GPIO B – Thanh ghi chốt dữ liệu [GPIO32 – GPIO63]
GPCDAT GPIO C – Thanh ghi dữ liệu [GPIO64 – GPIO87]
GPCSET GPIO C – Thanh ghi thiết lập dữ liệu [GPIO64 – GPIO87]
GPCCLEAR GPIO C – Thanh ghi xóa dữ liệu [GPIO64 – GPIO87]
GPCTOGGLE GPIO C – Thanh ghi chốt dữ liệu [GPIO64 – GPIO87]
6. Module Clock F28335
Trước khi bắt đầu sử dụng chức năng I/O số, cần phải thiết lập module clock F28335. Giống
như tất cả các bộ xử lý hiện đại, F28335 được điều khiển bên ngoài bằng máy phát xung đồng hồ
chậm hơn nhiều hoặc dao động để giảm nhiễu điện từ. Các ControlCard F28335 trong các bài thực
hành được thiết lập ở tần số 20MHz ngoại. Để đạt được các tần số nội 100 MHz, chúng ta phải sử
dụng bằng cách nhân với hệ số 10, sau đó chia cho 2. Điều này được thực hiện bằng cách lập trình
điều khiển thanh ghi PLL (PLLCR).
Báo cáo thực tập Trang 18
Hình 23. Module clock F28335
Xung bộ đếm tốc độ cao (HISPCP) và tốc độ thấp (LOSPCP) được sử dụng như bộ chia xung
đồng hồ bổ sung. Các đầu ra của hai bộ đếm được sử dụng như là nguồn đồng hồ cho các bộ phận
ngoại vi. Có thể thiết lập hai bộ đếm riêng và độc lập.
Hình 24. F28335 Clock Scaling
Để sử dụng một bộ phận ngoại vi, phải cho phép phân phối xung đồng hồ bằng cách thiết lập
các trường bit riêng lẻ của thanh ghi PCLKCRx. Trường bit GPIOIN_ENCLK cho phép các tín hiệu
đồng hồ cho các bộ lọc các bậc đầu vào. Nếu đầu vào không được sử dụng, thì nó không cần thiết để
cho phép.
Báo cáo thực tập Trang 19
Hình 25. Đơn vị điều khiển xung clock F28335
7. Watchdog Timer
Watchdog Timer là một bộ phận đếm chạy tự do gây nên một thiết lập lại nếu nó không được
giải phóng định kỳ bằng một chuỗi lệnh cụ thể. Nó được sử dụng để nhận ra sự kiện mà chương trình
được dời đi, được chỉ định thực hiện tuần tự, ví dụ: nếu chương trình bị treo.
Hình 26. Module bộ định thời Watchdog
Watchdog luôn kích hoạt khi DSP được cấp lên. Khi không giải phóng Watchdog định kỳ, nó
sẽ kích hoạt một thiết lập lại. Một trong những phương pháp đơn giản nhất để đối phó với các
Watchdog là vô hiệu hóa nó. Điều này được thực hiện bằng cách thiết lập bit 6 của thanh ghi WDCR
lên 1. Tất nhiên đây không phải là một quyết định khôn ngoan, bởi vì Watchdog là một tính năng
bảo mật và một dự án thực tế nên đề cao tính năng bảo mật.
Báo cáo thực tập Trang 20
Bộ đếm Watchdog có thể được sử dụng để tăng chu kỳ tràn của Watchdog. Các bits kiểm tra
logic (WDCHK) là một trường bit bảo mật. Tất cả ghi các truy cập vào thanh ghi WDCR phải bao
gồm sự kết hợp 101 cho 3 trường bit này, nếu không truy cập bị từ chối và trạng thái RESET được
kích hoạt ngay lập tức.
Bit cờ Watchdog (WDFLAG) có thể được sử dụng để phân biệt giữa một ảnh hưởng bình
thường trên RESET (WDFLAG = 0) và một thiết lập lại Watchdog (WDFLAG = 1).
Để xóa cờ này bằng phần mềm thì phải thiết lập '1' vào bit này.
Hình 27. Thanh ghi điều khiển Watchdog
Cấu trúc lệnh: SysCtrlRegs.WDCR
Bảng 4. Các giá trị ghi vào thanh ghi WDKEY:
Các bước
liên tiếp
Giá trị được đặt
cho WDKEY
Kết quả
1 AAh Không hành động
2 AAh Không hành động
3 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp
4 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp
5 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp
6 AAh Bộ đếm WD được thiết lập lại
7 AAh Không hành động
8 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp
9 AAh Bộ đếm WD được thiết lập lại
10 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp
11 23h Không ảnh hưởng, bộ đếm WD không thiết lập lại AAh kế tiếp
12 AAh Không hành động vì giá trị tiếp theo không hợp lệ
13 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp
14 AAh Bộ đếm WD được reset
8. Hệ thống điều khiển và thanh ghi trạng thái
Thanh ghi SCSR điều khiển cho dù Watchdog gây ra thiết lập lại (WDENINT = 0) hoặc một
yêu cầu ngắt dịch vụ (WDENINT = 1). Các trạng thái mặc định sau khi RESET là để kích hoạt một
thiết lập lại.
Bit WDOVERRIDE là bit chỉ xóa, có nghĩa là, một khi đã đóng switch bằng cách thiết lập 1
vào bit, thì không thể mở lại switch này một lần nữa. Tại thời điểm này các bit vô hiệu hóa WD
không có tác dụng, vì vậy không có cách nào để vô hiệu hóa các Watchdog.
Báo cáo thực tập Trang 21
Bit 2 (WDINTS) là bit chỉ đọc các cờ trạng thái của ngắt Watchdog.
Hình 28. Thanh ghi trạng thái và điều khiển hệ thống
Cấu trúc lệnh: SysCtrlRegs.SCSR
V. Hệ thống ngắt và bộ định thời
1. Hệ thống ngắt
a. Các đường ngắt
Các hệ thống ngắt của F2833x bao gồm 16 đường ngắt; hai trong số đó được gọi là Non-
Maskable (RESET, NMI), 14 đường khác là maskable - điều này cho phép người lập trình có thể cho
phép hoặc vô hiệu hóa ngắt từ 14 đường này.
Một mặt nạ là sự kết hợp nhị phân của 1 và 0. 1 là cho phép kích hoạt, 0 là vô hiệu hóa.
Bằng cách nạp các mặt nạ vào trong thanh ghi IER thì có thể chọn đường ngắt sẽ được kích hoạt để
yêu cầu một dịch vụ bị ngắt từ CPU.
Đối với một ngắt Non-Maskable, chúng ta không thể vô hiệu hóa một yêu cầu ngắt. Một khi
các đường tín hiệu đang hoạt động, các chương trình đang chạy sẽ bị treo và các dịch vụ thường
xuyên ngắt riêng lẻ sẽ bắt đầu. Nói chung, ngắt non maskable được ưu tiên sử dụng cao.
Hình 29. Lõi đường ngắt F28335
Tất cả 16 đường ngắt được nối với một bảng của vectơ ngắt, trong đó bao gồm 32 vị trí bộ
nhớ bit cho mỗi ngắt. Nhiệm vụ của người lập trình là điền vào bảng này với các địa chỉ bắt đầu của
các dịch vụ ngắt riêng lẻ. Với F28335, bảng này trong ROM và điền với địa chỉ được xác định bởi
Texas Instruments.
Báo cáo thực tập Trang 22
b. Reset F28335
Một sự thay đổi từ cao đến thấp ở bên ngoài chân RESET (RS) sẽ gây ra một thiết lập lại của
bộ điều khiển tín hiệu số. Sườn lên kế tiếp RS sẽ buộc các CPU đọc địa chỉ bắt đầu từ 0x3F FFC0
trong bộ nhớ code. Sự kiện này không phải là một ngắt với ý nghĩa chương trình cũ sẽ được khôi
phục lại. Một thiết lập lại được tạo ra trong quá trình cung cấp năng lượng cho các thiết bị.
Một nguồn cho một reset tràn bộ định thời watchdog. Để thông báo cho tất cả các thiết bị bên
ngoài khác mà CPU đã thừa nhận một thiết lập lại, các thiết bị tự điều khiển các chân hoạt động
thấp. Điều này có nghĩa là chân reset phải có tính hai chiều.
Hình 30. Nguồn ngắt F28335
Reset sẽ buộc bộ điều khiển không chỉ bắt đầu từ địa chỉ 0x3F FFC0, nhưng nó cũng sẽ xóa
tất cả hoạt động của thanh ghi nội, thiết lập lại một nhóm cờ CPU-Flags để dập tắt các giai đoạn và
vô hiệu hóa tất cả 16 đường ngắt.
c. Thiết lập lại bộ nạp khởi động
Sau khi một tín hiệu Reset đã được giải phóng, CPU bắt đầu thực hiện một phần mã đầu tiên
trong ROM, được gọi là bộ nạp khởi động. Chức năng này xác định các bước tiếp theo, tùy thuộc
vào tình trạng của bốn chân GPIO (GPIO 87, 86, 85 và 84).
Hình 31. Reset – Bootloader
Bảng 5. Các tùy chọn nạp khởi động
GPIO Pins
87 86 85 84
XA15 XA14 XA13 XA12
1 1 1 1 Nhảy đến địa chỉ Flash 0x33 FFF6
Báo cáo thực tập Trang 23
1 1 1 0 Nạp khởi động code đến bộ nhớ trên chip qua SCI-A
1 1 0 1 Nạp khởi động EEPROM ngoại đến bộ nhớ trên chip qua SPI-A
1 1 0 0 Nạp khởi động EEPROM ngoại đến bộ nhớ trên chip qua I2C
1 0 1 1 Gọi CAN_Boot để nạp từ hộp thư 1 eCAN-A
1 0 1 0 Nạp khởi động code đến bộ nhớ trên chip qua McBSP-A
1 0 0 1 Nhảy đến 6 địa chỉ vùng XINTF 0x10 0000 cho 16bit dữ liệu
1 0 0 0 Nhảy đến 6 địa chỉ vùng XINTF 0x10 0000 cho 32bit dữ liệu
0 1 1 1 Nhảy đến địa chỉ OTP 0x38 0400
0 1 1 0
Nạp khởi động code đến bộ nhớ trên chip qua cổng GPIO A
(song song)
0 1 0 1
Nạp khởi động code đến bộ nhớ trên chip qua XINTF (song
song)
0 1 0 0 Nhảy đến địa chỉ M0 SARAM 0x00 0000
0 0 1 1 Nhánh kiểm tra chế độ hoạt động
0 0 1 0 Nhánh Flash không cần hiệu chỉnh ADC (chỉ cần TI debug)
0 0 0 1 Nhánh M0 SARAM không cần hiệu chỉnh ADC (chỉ TI debug)
0 0 0 0 Nhánh SCI-A không cần hiệu chỉnh ADC (chỉ TI debug)
+ Reset CPU - buộc các DSC để Reset Địa chỉ 0x3F FFC0
+ Restart - buộc các DSC trực tiếp để mã nhập điểm "_c_int00", bỏ qua các trình tự khởi
động phần cứng
+ Go main - hoàn thành "_c_int00", gọi là "main" và dừng lại ở câu lệnh đầu tiên của main.
Tóm tắt các dòng mã thiết lập cho các tùy chọn khởi động của F28335:
Hình 32. Tóm lược reset các dòng code
Bảng 6. Các bit trên thanh ghi được xác định bởi reset:
Bit Địa chỉ
PC 0x3F FFC0 PC được nạp với vector reset
ACC 0x0000 0000 Bộ chứa được xóa
XAR0 – XAR7 0x0000 0000 Các thanh ghi bổ trợ
Báo cáo thực tập Trang 24
DP 0x0000 Con trỏ trang dữ liệu trỏ đến trang 0
P 0x0000 0000 Thanh ghi P được xóa
XT 0x0000 0000 Thanh ghi XT được xóa
SP 0x0400 Địa chỉ con trỏ ngăn xếp 0400
RPC 0x00 0000 Bộ đếm chương trình quay trở lại bị xóa
IFR 0x0000 Không chờ các ngắt
IER 0x0000 Vô hiệu hóa ngắt maskable
DBGIER 0x0000 Vô hiệu hóa các ngắt debug
Tất cả thanh ghi toán nội (ACC, P, XT) và thanh ghi bổ trợ (XAR0 để XAR7) sẽ bị xóa, ngắt
bị vô hiệu hóa (IER) và cấp phát ngắt, mà đã được yêu cầu trước khi reset, bị hủy bỏ (IFR). Con trỏ
ngăn xếp (SP) được khởi tạo địa chỉ 0x400 và bộ đếm chương trình (PC) trỏ tới địa chỉ phần cứng
bắt đầu là 0x3F FFC0.
Hai thanh ghi ST0 và ST1 kết hợp điều khiển tất cả cờ trạng thái của CPU. ST0 chứa tất cả
các bit toán như bằng không (Z), thực hiện (C) và dấu âm (N), trong khi ST1 bao gồm một số bit chế
độ hoạt động tổng quát hơn.
Bảng 7. Các bit điều khiển khởi tạo ở reset
Thanh ghi trạng thái 0 (ST0)
SXM = 0 Dấu hiệu mở rộng giảm
OVM = 0 Chế độ tràn giảm N = 0 Cờ phủ định
TC = 0 Kiểm tra / điều khiển cờ V = 0 Bit tràn
C = 0 Bit mang PM = 000 Thiết lập dịch trái 1
Z = 0 Cờ 0 OVC = 00 0000 Bộ đếm tràn
Thanh ghi trạng thái 1 (ST1)
INTM = 1 Vô hiệu hóa tất cả các ngắt maskable – toàn cục
DBGM = 1 Vô hiệu hóa mô phỏng truy cập / các sự kiện
PAGE0 = 0 Chế độ cho phép giải quyết ngăn xếp / trực tiếp giải quyết vô hiệu hóa
VMAP = 1 Các vector ngắt được ánh xạ đến PM 0x3F FFC0 – 0x3F FFFF
SPA = 0 Con trỏ ngăn xếp liên kết địa chỉ bit trạng thái
LOOP = 0 Lệnh lặp bit trạng thái
EALLOW = 0 Cho phép truy cập bit mô phỏng
IDLESTAT = 0 Lệnh chờ bit trạng thái
AMODE = 0 Chế độ giải quyết C27x / C28x
OBJMODE = 0 Chế độ đối tượng C27x
M0M1MAP = 1 Chế độ ánh xạ bit
XF = 0 Bit trạng thái XF
ARP = 0 ARP trỏ đến AR0
d. Nguồn ngắt
Báo cáo thực tập Trang 25
Hình 33. Nguồn ngắt
Bảng vector ngắt được mở rộng với quy mô lớn hơn, đặt mục 32 bit riêng lẻ cho mỗi 96
nguồn ngắt có thể. Một phản ngắt với sự trợ giúp của các bộ phận này nhanh hơn nhiều so với không
có nó. Để sử dụng PIE ta phải làm lại bản đồ vị trí của bảng vector ngắt đến địa chỉ 0x00 0D00. Đây
là trong bộ nhớ không ổn định. Trước khi có thể sử dụng bộ nhớ này thì phải khởi tạo nó.
e. Xử lý ngắt Maskable
Thanh ghi cờ ngắt IFR
Hình 34. Thanh ghi cờ ngắt
Báo cáo thực tập Trang 26
Hình 35. Thanh ghi cho phép ngắt
Bit ngắt toàn cục Mask
Hình 36. Bit ngắt mặt nạ toàn cục
f. Khuếch đại ngắt ngoại vi
Tất cả 96 nguồn ngắt có thể được nhóm lại thành 12 đường PIE, 8 nguồn trên mỗi đường. Để
bật / tắt nguồn riêng lẻ, có một nhóm chương trình khác nhau của thanh ghi: PIEIFRx và PIEIERx.
Hình 37. Mở rộng ngắt ngoại vi - PIE
Báo cáo thực tập Trang 27
Hình 38. Các thanh ghi PIE
Hình 39. Bảng phân chia các ngắt PIE
Ví dụ: ADCINT = INT1.6; T2PINT = INT1.3; SCITXINTA = INT9.2;
Bảng vị trí vector khi reset:
Báo cáo thực tập Trang 28
Hình 40. Bảng vector ngắt mặc định khi reset
Hình 41. Bản đồ vector PIE (ENPIE = 1)
g. Phản ứng ngắt phần cứng liên tục
Báo cáo thực tập Trang 29
Hình 42. Phản ứng ngắt – phần cứng liên tiếp
Hình 43. Ngắt trễ
2. Bộ định thời
F28335 được đặc trưng bởi 3 bộ định thời 32bit độc lập nhau
Hình 44. Bộ định thời CPU F28335
INT
Báo cáo thực tập Trang 30
Các nguồn xung đồng hồ là nguồn nội SYSCLKOUT, mà thường là 150MHz, giả sử một bộ
dao động bên ngoài 30MHz và một PLL-tỷ lệ 10/2. Một khi thời gian được kích hoạt (TCR-bit 4 =
0), đồng hồ đếm ngược đến một bộ đếm 16-bit (PSCH: PSC). Tín hiệu mượn được sử dụng để đếm
xuống bộ đếm 32bit (TIMH: TIM). Vào cuối, khi bộ đếm thời gian này tràn xuống, một yêu cầu ngắt
được chuyển lên cho CPU.
Thanh ghi bộ chia 16-bit (TDDRH: TDDR) được sử dụng như một thanh ghi nạp lại cho bộ
đếm. Mỗi lần bộ đếm tràn xuống, giá trị từ thanh ghi bộ chia được nạp lại vào bộ đếm prescalser.
Một chức năng nạp lại tương tự cho các bộ đếm được thực hiện bởi các chu kỳ thanh ghi 32bit
(PRDH_PRD).
Timer1 và Timer 2 thường được sử dụng bởi Texas Instruments cho hệ thống hoạt động thời
gian thực DSP / BIOS, trong khi Timer 0 thương được sử dụng tự do.
Hệ thống ngắt timer F28335
Hình 45. Ngắt 28335
Hình 46. Thanh ghi Timer F28335
Báo cáo thực tập Trang 31
Hình 47. Thanh ghi điều khiển timer TIMERxTCR
VI. Điều chế độ rộng xung - PWM (Pulse Width Modulation)
1. Sơ đồ khối ePWM
ePWM là viết tắt của cụm từ enhanced Pulse Width Modulation có nghĩa là điều chế độ rộng
xung tăng cường. Mỗi đơn vị ePWM được kiểm soát bởi khối logic riêng của nó. Khối logic này có
thể tự động tạo ra các tín hiệu về các sự kiện thời gian khác nhau và cũng yêu cầu các dịch vụ bị ngắt
khác nhau từ hệ thống ngắt F28335 PIE, để hỗ trợ các chế độ hoạt động của nó.
Một tính năng độc đáo của module ePWM là khả năng bắt đầu bộ chuyển đổi tương tự - số
(ADC) mà không cần thêm phần mềm tương tác, trực tiếp từ một sự kiện phần cứng bên trong. Một
vi điều khiển thông thường sẽ phải yêu cầu một dịch vụ ngắt để làm như vậy; F28335 thực hiện điều
này tự động.
2. Đơn vị cơ sở ePWM
Khối trung tâm của một đơn vị ePWM là một bộ định thời 16bit (thanh ghi TBCTR), với tín
hiệu SYSCLKOUT như thời gian cơ sở. Tùy vào việc khởi tạo các lõi chạy với tần số 100MHz hoặc
150MHz, phụ thuộc vào xung đồng hồ bên ngoài của F28335, tần số này thiết lập thời gian cơ bản
cho tất cả các đơn vị ePWM.
Báo cáo thực tập Trang 32
Một prescaler clock (thanh ghi TBCTL, bit 7 – 12) có thể được sử dụng để giảm tần số đếm
đầu vào bằng một hệ số có thể lựa chọn từ 1 đến 1792.
Thanh ghi TBPRD xác định độ dài của một chu kỳ tín hiệu đầu ra, gấp nhiều lần khoảng thời
gian của tín hiệu đầu vào.
Một tính năng độc đáo của F28335 là "shadow" chức năng của thanh ghi hoạt động, trong
trường hợp của các đơn vị ePWM sẵn sàng để so sánh thanh ghi A, B và thanh ghi chu kỳ. Đối với
một số ứng dụng nó là cần thiết để thay đổi các giá trị bên trong một so sánh hoặc thanh ghi chu kỳ,
mỗi chu kỳ.
3. Pha đồng bộ ePWM
Hai tín hiệu phần cứng SYNCI (đồng bộ trong) và SYNCO (đồng bộ ra) có thể được sử dụng
để đồng bộ hóa các đơn vị ePWM với nhau. Ví dụ, chúng ta có thể xác định một đơn vị ePWM như
là một master để tạo ra một tín hiệu đầu ra SYNCO mỗi khi truy cập bằng thời gian. Hai đơn vị
ePWM hoặc nhiều hơn hơn có thể được khởi tạo để nhận biết tín hiệu này như SYNCI và bắt đầu
đếm ngay lập tức, mỗi khi chúng nhận được tín hiệu này. Bằng cách đó, có thể thiết lập một bộ đồng
bộ của 3 kênh ePWM. Bằng cách sử dụng thanh ghi khác gọi là TBPHS, có thể tạo ra một sự lệch
pha giữa master, slave 1 và slave 2, thực sự cần thiết cho hệ thống điều khiển ba pha.
Hình 48. Pha đồng bộ ePWM
Báo cáo thực tập Trang 33
Trong hình trên, thanh ghi TBCNT của ePWM2 và ePWM3 được nạp sẵn với một giá trị
khởi đầu tương ứng với 120° và 240° tương ứng. ePWM1 đã được khởi tạo như là master để tạo
SYNCO mỗi lần bộ đếm thanh ghi bằng 0. Đặc tính pha đầu vào được kích hoạt cho ePWM2 và
ePWM3 hai kênh hoạt động như slave 1 và slave 2 và sẽ được nạp vào bộ đếm thanh ghi TBCNT
với những số được lưu trong thanh ghi pha TBPHS tương ứng.
Ví dụ:
+ ePWM1 counts from 0 to 6000. TBPRD = 6000
+ ePWM2 register TBPHS = 2000
+ ePWM3 register TBPHS = 4000
4. Chế độ hoạt động định thời
Mỗi module ePWM có thể hoạt động ở một trong ba chế độ tính khác nhau, được lựa chọn
bởi bit 1 và 0 của thanh ghi TBCTL:
+ Chế độ đếm tiến
+ Chế độ đếm lùi
+ Chế độ đếm tiến lùi
Hình 49. Chế độ đếm thời gian cơ bản
Trong ba chế độ được sử dụng chủ yếu là được xác định bởi các ứng dụng. Hai chế độ hoạt
động đầu tiên được gọi là đối xứng bởi vì trong các hình dạng của mô hình đếm từ 0 đến TBPRD
(đếm lên) hoặc từ TBPRD về 0 (đếm ngược). Ngoài ra, trong một hệ thống ba pha, có thể xác định
ba sự kiện thời gian khác nhau giữa 0 và TBPRD để chuyển đổi một pha tín hiệu đầu ra để ON và sử
dụng sự phù hợp giữa TBCNT và TBPRD chuyển OFF cả ba pha cùng một lúc, do đó tạo ra một
hình dạng không đối xứng của các tín hiệu chuyển đổi.
Trong chế độ dạng sóng đối xứng, thanh ghi TBCNT bắt đầu từ 0 đếm cho đến khi nó bằng
TBPRD. Sau đó TBCNT chuyển hướng để đếm ngược trở về số không để kết thúc một chu kỳ đếm.
5. Thanh ghi định thời cơ sở
Tên Mô tả Cấu trúc
TBCTL Điều khiển thời gian cơ sở EPwmxRegs.TBCTL.all =
TBSTS Trạng thái thời gian cơ sở EPwmxRegs.TBSTS.all =
TBPHS Pha thời gian cơ sở EPwmxRegs.TBPHS =
TBCTR Bộ đếm thời gian cơ sở EPwmxRegs.TBCTR =
TBPRD Chu kỳ thời gian cơ sở EPwmxRegs.TBPRD =
Báo cáo thực tập Trang 34
Mục đích của ePWMs này định nghĩa 6 cấu trúc EPwm1Regs đến EPwm6Regs, bao gồm tất
cả các thanh ghi thuộc về một trong những bộ phận phần cứng.
Thời gian liên quan đến thanh ghi như thanh ghi chu kỳ có thể được truy cập trực tiếp, ví dụ
để xác định một khoảng thời gian đếm 6000 xung có thể sử dụng: Epwm1Regs.TBPRD = 6000;
Đối với thanh ghi điều khiển, như TBCTL, các thành phần cấu trúc đã được định nghĩa như
là union. Kỹ thuật này cho phép truy cập vào thanh ghi vi khối (thành phần union “all”) hoặc các
nhóm bit cá nhân (thành phần union "bit"). Ví dụ, một dòng để ghi thanh ghi TBCTL đầy đủ sẽ
giống như thế này: EPwm1Regs.TBCTL.all = 0x1234;
Một trường bit truy cập vào các trường CLKDIV sẽ chỉ thấy như này:
EPwm1Regs.TBCTL.bit.CLKDIV = 7;
6. Thanh ghi điều khiển cơ sở TBCTL
Thanh ghi master điều khiển cho một đơn vị ePWM là thanh ghi TBCTL
Hình 50. Các bit cao của thanh ghi TBCTL
FREE_SOFT:
+ Điều khiển sự tương tác giữa DSC và JTAG - Emulator.
+ Nếu trình tự thực hiện của code truy cập một breakpoint, thì có thể xác định những gì nên
xảy ra với đơn vị ePWM này.
PHSDIR:
+ Xác định rõ nếu đơn vị ePWM này bắt đầu đếm lên hoặc xuống sau một xung SYNC đã
được nhìn thấy.
+ Trong trường hợp một thiết lập ePWM duy nhất với tính năng vô hiệu hóa đồng, bit này là
don’t care.
CLKDIV và HSPCLKDIV:
+ Trường bit Prescaler giảm tần số đầu vào SYSCLKOUT.
+ Đối với một hệ thống 100MHz mỗi xung chuyển thành 10ns, với hệ thống 150MHz mỗi
xung chuyển thanh 6,667ns.
Báo cáo thực tập Trang 35
Hình 51. Các bit thấp thanh ghi TBCTL
SWFSYNC: Một lệnh mà thiết lập bộ bit này sẽ ngay lập tức tạo ra một xung SYNC từ đơn
vị này ePWM.
SYNCOSEL: Lựa chọn nguồn cho tín hiệu SYNC. Nếu không có đồng bộ hóa kênh được sử
dụng, tắt tính năng này.
PRDLD: Cho phép 0 hoặc vô hiệu hóa 1 vùng tối chức năng của thanh ghi TBPRD. Nếu tắt,
tất cả các lệnh ghi vào TBPRD sẽ trực tiếp thay đổi thanh ghi thời gian. Nếu được kích hoạt, một
lệnh ghi sẽ lưu trữ một giá trị mới trong vùng tối. Với các sự kiện CTR = 0 tiếp theo giá trị vùng tối
sẽ được nạp vào TBPRD tự động
PHSEN: Cho phép 1 nạp trước của thanh ghi TBCTR từ TBPHS bởi kích hoạt SYNCIN.
CTRMODE: Xác định các chế độ hoạt động của đơn vị ePWM này
7. Thanh ghi trạng thái cơ sở TBSTS
Thanh ghi cờ trạng thái hiên tại của đơn vị ePWM:
Hình 52. Thanh ghi TBSTS
CTRDIR: Cho biết, nếu ePWM đếm lên 1 hoặc xuống 0
SYNCI: Nếu một sự kiện SYNCI đã được thấy bởi đơn vị ePWM này, bit này là 1, nếu
không, nó là 0. Để xóa bit này, phải viết 1 vào nó.
CTRMAX: Nếu vì một số lý do bộ đếm 16-bit thanh ghi TBCTR bị tràn, bit CTRMAX sẽ
được thiết lập lên 1. Trong những trường hợp bình thường điều này không nên xảy ra, vì vậy có thể
xử lý bit này như một tín hiệu cảnh báo bảo mật. Để xóa bit này, phải viết 1 vào nó.
Báo cáo thực tập Trang 36
8. Công thức tính giá trị định nghĩa tần số tín hiệu (TBPRD)
1 1
2 2
PWM TSYSCLKOUT
SYSCLKOUT PWM
T f
TBPRD
T CLKDIV HSPCLKDIV f CLKDIV HSPCLKDIV
 
   
Trong đó:
+ TBPRD: Giá trị định nghĩa tần số tín hiệu
+ TPWM: Chu kỳ tín hiệu
+ TSYSCLKOUT: Chu kỳ hoạt động của vi điều khiển
+ fPWM: Tần số của tín hiệu
+ fSYSCLKOUT: Tần số hoạt động của vi điều khiển
+ CLKDIV: Giá trị TB Clock Prescale, thường chọn mặc định bằng 1.
+ HSPCLKDIV: Giá trị High Speed TB Clock Prescale, thường chọn mặc định bằng 2.
VII. Bộ chuyển đổi tương tự - số ADC (Analogue to Digital Converter)
1. Module ADC
Một trong những bộ phận ngoại vi quan trọng của một bộ điều khiển nhúng là chuyển đổi
tương tự sang số ADC. Bộ phận này cung cấp một giao diện giữa bộ điều khiển và thế giới thực.
Hầu hết các tín hiệu vật lý như nhiệt độ, độ ẩm, áp suất, hiện tại, tốc độ và khả năng tăng tốc là tín
hiệu tương tự. Với sự trợ giúp của các bộ chuyển đổi thích hợp, gần như tất cả trong số này có thể
được biểu diễn như là một điện áp giữa Vmin và Vmax, ví dụ 0 ... 3V, đó là tỷ lệ thuận với tín hiệu ban
đầu. Mục đích của ADC là để chuyển đổi điện áp tương tự này sang dạng số. Mối quan hệ giữa điện
áp đầu vào tương tự (Vin), số lượng các chữ số nhị phân để đại diện cho số kỹ thuật số (n) và số
lượng kỹ thuật số (D) được cho bởi:
( )
2 1
REF REF
in REFn
D V V
V V 


 

VREF+ và VREF- là điện áp tham chiếu và được sử dụng để giới hạn phạm vi điện áp tương tự.
Bất kỳ điện áp đầu vào, ngoài các điện áp tham chiếu sẽ sản xuất một số kỹ thuật số bão hòa. Với
F28335, VREF- điện áp cố định ở 0V và VREF+ được kết nối đến +3.0V. ADC nội có độ phân giải
12bit (n = 12) cho số lượng kỹ thuật số D. Điều này cho phép một phương trình đơn giản hóa:
*3.0
4095
in
D V
V 
2. Chế độ hoạt động ADC
Các module ADC có thể hoạt động trong các thiết lập khác nhau. Một chế độ hoạt động luôn
luôn là một sự kết hợp của ba lựa chọn khác nhau cơ bản:
+ Chế độ tuần tự
+ Chế độ lấy mẫu
+ Chế độ khởi động
Bằng cách chọn đồng thời lấy mẫu cho chế độ lấy mẫu ta chuyển đổi 2 tín hiệu đầu vào
tương tự cùng một lúc. Nếu chọn tuần tự lấy mẫu chỉ có một kênh đầu vào ghép được chuyển đổi
cùng một lúc. Cuối cùng bằng cách chọn chế độ trình tự đơn (hoặc chế độ bắt đầu / dừng) chuỗi tự
động bắt đầu vào tín hiệu đầu vào kích hoạt đầu tiên, thực hiện các số được xác định trước chuyển
đổi và dừng lại ở phần cuối của chuỗi chuyển đổi này - sau đó để chờ đợi một kích hoạt thứ hai.
Trong chế độ liên tục chuỗi tự động bắt đầu trên một lần nữa vào cuối của chuỗi chuyển đổi đầu tiên
mà không cần chờ đợi một tín hiệu kích hoạt đầu vào.
3. Chế độ thác lũ
Báo cáo thực tập Trang 37
Một sự điều khiển tự động tuần tự dòng chảy của sự chuyển đổi. Trước khi bắt đầu một
chuyển đổi, thì phải thiết lập số lượng chuyển đổi (MAX_CONV1) và có đầu vào dòng phải được
chuyển đổi trong giai đoạn (CHSELxx). Các kết quả được đệm vào sổ thanh ghi kết quả riêng lẻ
(RESULT0 đến RESULT15) cho từng giai đoạn.
Có thể lựa chọn giữa hai lựa chọn: lấy mẫu đồng thời và lấy mẫu tuần tự. Trong trường hợp
lấy mẫu đồng thời, cả hai mẫu và các bộ phận được sử dụng song song. Hai dòng đầu vào với các mã
đầu vào tương tự (ví dụ ADCINA3 và ADCINB3) được chuyển đổi cùng một lúc bởi giai đoạn
CONV00. Trong chế độ tuần tự, các dòng đầu vào có thể được kết nối với bất kỳ của các giai đoạn
tự động tuần tự.
Có thể sử dụng ngắt ADC sau khi kết thúc một chuỗi (hoặc cho một số ứng dụng vào cuối
mỗi chuỗi khác) để đọc ra kết quả trên mỗi khối thanh ghi.
4. Chế độ tuần tự kép
Báo cáo thực tập Trang 38
Chế độ này sử dụng tín hiệu ePWM_SOC_A (bắt đầu của chuyển đổi A) như là sự kích hoạt
phần cứng cho SEQ1 và ePWM_SOC_B cho SEQ2. Để mã hóa các kênh đầu vào cho từng giai đoạn
riêng lẻ của hai trình tự, ta có thể tự do lựa chọn bất kỳ trong số 16 đầu vào đối với bất kỳ của các
giai đoạn 2x8. Thanh ghi RESULT0 đến RESULT7 chứa các giá trị từ SEQ1 và thanh ghi
RESULT8 đến RESULT15 cho SEQ2.
Lý do cho sự phân chia này là có hai bộ ADC độc lập, kích hoạt bằng cách riêng của trên cơ
sở điều khiển thời gian cho SEQ1 và SEQ2. Trong trường hợp một sự bắt đầu đồng thời của SEQ1
và SEQ2 các Sequencer Arbiter sẽ chăm sóc của tình trạng này. Trong SEQ1 sự kiện này có ưu tiên
cao hơn; đầu SEQ2 sẽ bị trì hoãn cho đến cuối của chuỗi chuyển đổi SEQ1
5. Thời gian chuyển đổi ADC
Có một số hạn chế khi thiết lập thời gian chuyển đổi ADC. Đầu tiên, các nguồn đồng hồ cơ
bản cho ADC là đồng hồ SPCLK nội. Đồng hồ này có nguồn gốc từ các dao động bên ngoài, nhân
bởi PLLCR và chia bởi HISPCP.
Hạn chế thứ hai là tần số tối đa cho FCLK như các tín hiệu đầu vào nội bộ cho các đơn vị
ADC. Tại thời điểm này tín hiệu này được giới hạn 25MHz. Để thiết lập FCLK phải khởi tạo các
trường bit ADCCLKPS cho phù hợp. Bit CPS cung cấp cho các tùy chọn khác chia cho 2. ADCCLK
đồng hồ cung cấp thời gian cơ sở cho các đường ống xử lý nội bộ của ADC.
Hạn chế thứ ba là cửa sổ lấy mẫu điều khiển bởi các trường ACQ_PS. Nhóm các bit xác định
chiều dài của cửa sổ được sử dụng giữa nhiều switch và thời gian khi lấy mẫu (hoặc đóng băng) điện
áp đầu vào. Thời gian này phụ thuộc vào trở kháng dòng của tín hiệu đầu vào.
6. Khối thanh ghi ADC
Ba thanh ghi điều khiển ADCTRL1 tới ADCTRL3 được sử dụng để thiết lập một trong
những điều kiện hoạt động khác nhau của các đơn vị ADC. Thanh ghi ADCST bao gồm trạng thái
hiện tại của ADC.
Thanh ghi Mô tả
ADCTRL1 ADC – Thanh ghi điều khiển 1
ADCTRL2 ADC – Thanh ghi điều khiển 2
ADCTRL3 ADC – Thanh ghi điều khiển 3
ADCMAXCONV ADC – Thanh ghi kênh chuyển đổi tối đa
Báo cáo thực tập Trang 39
ADCCHSELSEQ1 ADC – Thanh ghi điều khiển chọn kênh tuần tự 1
ADCCHSELSEQ2 ADC – Thanh ghi điều khiển chọn kênh tuần tự 2
ADCCHSELSEQ3 ADC – Thanh ghi điều khiển chọn kênh tuần tự 3
ADCCHSELSEQ4 ADC – Thanh ghi điều khiển chọn kênh tuần tự 4
ADCASEQSR ADC – Thanh ghi trạng thái tự động tuần tự
ADCRESULT0 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 0
ADCRESULT1 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 1
ADCRESULT2 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 2
… …
ADCRESULT14 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 14
ADCRESULT15 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 15
ADCREFSEL ADC – Thanh ghi chọn điện áp tham chiếu
ADCOFFTRIM ADC – Thanh ghi cắt phần bù
ADCST ADC – Thanh ghi cờ và trạng thái
a. Thanh ghi điều khiển ADCTRL1
Cấu trúc biến trong C: AdcRegs.ADCTRL1
Hình 53. Các bit trên của thanh ghi ADCTRL1
Bit 14 (RESET) có thể được sử dụng để thiết lập lại hoàn toàn các đơn vị ADC về trạng thái
ban đầu. Nó luôn là điều tốt để áp dụng một lệnh RESET trước khi khởi tạo ADC. Không thể khởi
tạo các phần còn lại của thanh ghi này với những lệnh giống nhau, khi thiết lập lại ADC - nên sử
dụng các lệnh kế tiếp để khởi tạo ADCTRL1.
Bit 13 và 12 (SUSMOD) xác định sự tương tác giữa các ADC và một lệnh giả lập.
Bit 8 đến 11 (ACQ_PS) xác định độ dài của cửa sổ mẫu.
Bit 7 (CPS) được sử dụng để phân chia tần số đầu vào bằng 1 hoặc 2
Báo cáo thực tập Trang 40
Hình 54. Các bit thấp thanh ghi ADCTRL1
Bit 6 (CONT_RUN) xác định sự tuần tự tự động bắt đầu vào cuối của một chuỗi (= 0) và đợi
cho trigger khác hoặc nếu trình tự cần bắt đầu lại ngay lập tức (= 1).
Bit 5 (SEQ_OVRD) định nghĩa hai tùy chọn khác nhau cho chế độ liên tục.
Bit 4 (SEQ_CASC) là chuỗi bit / tầng. Nó định nghĩa các chế độ tuần tự là máy tính trạng
thái với 16 trạng thái (SEQCASC = 1), hoặc hoạt động như hai máy tính trạng thái độc lập từng có 8
trạng thái (SEQ_CASC = 0).
b. Thanh ghi điều khiển ADCTRL2
Cấu trúc biến trong C: AdcRegs.ADCTRL2
Hình 55. Các bit cao thanh ghi ADCTRL2
Nửa trên của thanh ghi ADCTRL2 chịu trách nhiệm điều khiển chế độ hoạt động của bộ sắp
xếp SEQ1.
Thiết lập bit 15 (ePWM_SOCB_SEQ) cho phép tầng sắp xếp thứ tự được bắt đầu bằng một
tín hiệu ePWM_SOCB. Các bit không làm việc trong chế độ Dual Sequencer (xem bit 0).
Sử dụng Bit 14 (RST_SEQ1), ta có thể thiết lập lại máy tính trạng thái của SEQ1 về trạng
thái ban đầu của nó. Điều ngày có nghĩa rằng sự kích hoạt tiếp theo sẽ bắt đầu một chuyển đổi mới
của kênh được định nghĩa trong CONV00.
Thiết lập bit 13 (SOC_SEQ1) là 1, sẽ thực hiện việc bắt đầu chuyển đổi dưới sự điều khiển
của phần mềm.
Bit 11 (INT_ENA_SEQ1) và 10 (INT_MOD_SEQ1) xác định chế độ ngắt của SEQ1. Có thể
xác định xem liệu có một yêu cầu ngắt mỗi khi kết thúc chuỗi (EOS) hoặc khác (EOS).
Báo cáo thực tập Trang 41
Bit 8 (ePWM_SOCA_SEQ1) là bit mặt nạ để cho phép tín hiệu ePWM SOCA sẽ được sử
dụng như sự kích hoạt bộ chuyển đổi.
Hình 56. Các bit thấp của thanh ghi ADCTRL2
Các byte thấp của ADCTRL2 là tương tự như nửa trên của nó: nó điều khiển chuỗi SEQ2.
Thiết lập bit 7 cho phép một ADC tự động chuyển đổi tuần tự được bắt đầu bởi một tín hiệu
từ GPIO cổng A, chân GPIO0 - 31 cấu hình như XINT2 trong thanh ghi GPIOXINT2SEL.
Bit 0 đến bit 0: Phần còn lại của ADCTRL2 tương tự như bit 14 ... 8 ở nửa trên của thanh
ghi. Tuy nhiên chúng được sử dụng để khởi tạo các chế độ hoạt động của SEQ2.
c. Thanh ghi điều khiển ADCTRL3
Cấu trúc biến trong C: AdcRegs.ADCTRL3
Hình 57. Thanh ghi ADCTRL3
Bit 0 chọn chế độ lấy mẫu là tuần tự hoặc đồng thời (trong chế độ đồng thời hai tín hiệu đầu
vào tương tự được chuyển đổi song song).
Ví dụ: Để chuyển đổi tín hiệu ADCINA4 và ADCINB4 song song, khởi tạo các giá trị:
+ SMODE_SEL = 1 // lấy mẫu đồng thời
+ MAXCONV = 0 //
SMODE_SEL = 1 //
+ CONV00 = 4 // số kênh cho ADCINA4
Báo cáo thực tập Trang 42
Sau khi chuyển đổi hoàn thành, thanh ghi RESULT0 sẽ chứa giá trị cho ADCINA4 và thanh
ghi RESULT1 chứa kết quả cho ADCINB4.
Bit 1 - 4 sẽ khởi tạo FCLK như đồng hồ cơ bản của module ADC.
Bit 5 là chuyển đổi năng lượng chính cho các mạch tương tự bên trong thiết bị. Bằng cách
thiết lập bit này, hiệu suất của ADC được tăng lên trừ khe hở năng lượng và mạch tham chiếu.
Bit 7-6 điều khiển khoảng trống dải ADC và điện áp tham chiếu điện xuống chuỗi các hệ
thống điện áp tham chiếu nội bộ:
+ Bit 7-6 = 00: dải khoảng trống và mạch tham chiếu ngắt nguồn.
+ Bit 7-6 = 11: dải khoảng trống và mạch tham chiếu được cấp nguồn.
d. Thanh ghi kênh tối đa chuyển đổi MAXCONV (Maximum Conversion Channels Register)
MAXCONV xác định số lượng các giai đoạn chuyển đổi của chuỗi tự động. Sau khi một tín
hiệu kích hoạt hợp lệ, Auto sequencer sẽ chuyển đổi số được xác định trước của các kênh tự động.
Số trường thanh ghi bit tương ứng với số lần chuyển đồi trừ 1.
Ví dụ: MAXCONV = 4; // nghĩa là 5 chuyển đổi với số kênh đầu vào được mã hóa trong
trường bit CONV00 đến CONV04 của thanh ghi ADCCHSELSEQ1 và ADCCHSELSEQ2.
Cấu trúc biến trong C: AdcRegs.ADCMAXCONV
Hình 58. Thanh ghi ADCMAXCONV
Nếu sử dụng chế độ Dual Sequencer việc giải thích thanh ghi MAXCONV thay đổi một chút.
Trong chế độ này bit 0-2 được sử dụng để xác định số lượng các chuyển đổi trong chuỗi SEQ1 và bit
4-6 được sử dụng cho SEQ2. Trong chế độ này mỗi chuỗi có một số lượng tối đa 8 chuyển đổi, do
đó giới hạn tới 3 bit trong MAXCONV.
Chuỗi tự động hoạt động như một máy tính trạng thái bắt đầu với một trạng thái ban đầu và
xử lý sau mỗi lần chuyển đổi sang kế tiếp. Nguyên tắc này tiếp tục cho đến khi máy trạng thái kết
thúc hoặc thiết lập lại các con trỏ máy trạng thái trở lại trạng thái khởi tạo (bit 14 và bit 6 của
ADCTRL2). Nếu không thiết lập lại và máy đã đạt đến trạng thái kết thúc, nó sẽ bao bọc lại đến
trạng thái 0 tự động.
e. Thanh ghi chọn kênh ADC đầu vào ADCCHSELSEQ
Báo cáo thực tập Trang 43
Hình 59. Thanh ghi ADCCHSELSEQ
Các nhóm bốn thanh ghi ADCCHSELSEQ1 ... 4 được sử dụng để xác định số nhị phân của
các kênh đầu vào ADCINA0 ... ADCINB7 bằng 16 nhóm 4-bit CONV00 ... CONV15.
Có thể sử dụng lên đến 16 giai đoạn trong sắp xếp thứ tự tự động. Các giai đoạn này tương
ứng với CONV00 để CONV15. Tất cả những gì phải làm là điền vào những con số chính xác cho
các kênh đầu vào tương tự.
Ví dụ: chuyển đổi của 5 kênh trong một tuần tự:
+ ADCINA6, ADCINB1, ADCINA2, ADCINA0 and ADCINB6
o CONV00 = 6
o CONV01 = 9
o CONV02 = 2
o CONV03 = 0
o CONV04 = 14
f. Thanh ghi thiết lập kết quả ADCRESULT
Hình 60. Thanh ghi ADCRESULT
12bit số kết quả có sẵn trong hai phần bộ nhớ khác nhau.
Thanh ghi ADCRESULTn được hợp lý trái khi đọc từ khung ngoại vi 2 (0x7108 - 0x7117;
biến C toàn cục AdcRegs) với hai trạng thái chờ và hợp lý phải khi đọc từ khung ngoại vi 0 (0x0B00
- 0x0B0F; biến C toàn cục AdcMirror) với trạng thái chờ 0.
Kết quả hợp lý trái thuận lợi khi điều khiển hệ thống hoạt động từng phần.
Báo cáo thực tập Trang 44
g. Thanh ghi chọn điện áp tham chiếu ADCREFSEL
Để chuyển đổi giữa các điện áp ADC tham chiếu nội hay bên ngoài, chúng ta có thể sử dụng
thanh ghi ADCREFSEL.
Cấu trúc biến trong C: AdcRegs.ADCREFSEL
VIII.Các chức năng khác
Giống như những vi điều khiển lập trình khác, họ vi điều khiển TMS320F28335 cũng bao
gồm các chức năng như giao tiếp SPI, I2C, SCI, truyền thông nối tiếp UART, … Tuy nhiên trong
phạm vi tìm hiểu của đề tài nên không đề cập đến các chức năng này.
IX. Một số chương trình mẫu
1. Chương trình vào ra, hiển thị trên các led được kết nối đến các chân 9, 11, 34, 49.
#include "DSP2833x_Device.h"
void Gpio_select(void);
void InitSystem(void);
void delay_loop(long);
void main(void)
{
int counter=0;
InitSystem();
DINT;
Gpio_select();
while(1)
{
counter++;
if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1;
if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1;
if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1;
delay_loop(1000000);
}
}
Báo cáo thực tập Trang 45
void delay_loop(long end)
{
long i;
for (i = 0; i < end; i++)
{
asm(" NOP");
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
SysCtrlRegs.WDKEY = 0xAA;
EDIS;
}
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0;
GpioCtrlRegs.GPAMUX2.all = 0;
GpioCtrlRegs.GPBMUX1.all = 0;
GpioCtrlRegs.GPBMUX2.all = 0;
GpioCtrlRegs.GPCMUX1.all = 0;
GpioCtrlRegs.GPCMUX2.all = 0;
GpioCtrlRegs.GPADIR.all = 0;
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;
GpioCtrlRegs.GPBDIR.all = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;
GpioCtrlRegs.GPCDIR.all = 0;
EDIS;
}
void InitSystem(void)
{
EALLOW;
SysCtrlRegs.WDCR = 0x0028;
SysCtrlRegs.PLLSTS.bit.DIVSEL = 2;
SysCtrlRegs.PLLCR.bit.DIV = 10;
SysCtrlRegs.HISPCP.all = 0x0001;
SysCtrlRegs.LOSPCP.all = 0x0002;
SysCtrlRegs.PCLKCR0.all = 0x0000;
SysCtrlRegs.PCLKCR1.all = 0x0000;
SysCtrlRegs.PCLKCR3.all = 0x0000;
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;
EDIS;
}
2. Sử dụng ngắt và Timer 0, đầu ra được kết nối đến các chân 9, 11, 34, 49.
#include "DSP2833x_Device.h"
extern void InitSysCtrl(void);
extern void InitPieCtrl(void);
extern void InitPieVectTable(void);
extern void InitCpuTimers(void);
extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float);
void Gpio_select(void);
interrupt void cpu_timer0_isr(void);
void main(void)
{
int counter=0;
InitSysCtrl();
Báo cáo thực tập Trang 46
EALLOW;
SysCtrlRegs.WDCR= 0x00AF;
EDIS;
DINT;
Gpio_select();
InitPieCtrl();
InitPieVectTable();
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,150,100000);
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
IER |=1;
EINT;
ERTM;
CpuTimer0Regs.TCR.bit.TSS = 0; // start timer0
while(1)
{
while(CpuTimer0.InterruptCount == 0);
CpuTimer0.InterruptCount = 0;
EALLOW;
SysCtrlRegs.WDKEY = 0x55; // service WD #1
EDIS;
counter++;
if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1;
if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1;
if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1;
}
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0;
GpioCtrlRegs.GPAMUX2.all = 0;
GpioCtrlRegs.GPBMUX1.all = 0;
GpioCtrlRegs.GPBMUX2.all = 0;
GpioCtrlRegs.GPCMUX1.all = 0;
GpioCtrlRegs.GPCMUX2.all = 0;
GpioCtrlRegs.GPADIR.all = 0;
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;
GpioCtrlRegs.GPBDIR.all = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;
GpioCtrlRegs.GPCDIR.all = 0;
EDIS;
}
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
Báo cáo thực tập Trang 47
EALLOW;
SysCtrlRegs.WDKEY = 0xAA;
EDIS;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
3. Chương trình nhấp nháy Led sử dụng Timer 0 tạo trễ 1s.
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
interrupt void cpu_timer0_isr(void);
void main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
InitCpuTimers();
#if(CPU_FRQ_150MHZ)
ConfigCpuTimer(&CpuTimer0, 150, 1000000);
#endif
#if(CPU_FRQ_100MHZ)
ConfigCpuTimer(&CpuTimer0, 100, 1000000);
#endif
CpuTimer0Regs.TCR.all = 0x4001; //
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO30 = 1;
EDIS;
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
EINT;
ERTM;
for(;;);
}
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
GpioDataRegs.GPATOGGLE.bit.GPIO30 = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
4. Tạo xung vuông tần số 1kHz với ePWM1A, chu kỳ hoạt động là 50% (duty cycle = 50%)
#include "DSP2833x_Device.h"
extern void InitSysCtrl(void);
extern void InitPieCtrl(void);
extern void InitPieVectTable(void);
extern void InitCpuTimers(void);
extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float);
Báo cáo thực tập Trang 48
void Gpio_select(void);
void Setup_ePWM1A(void);
interrupt void cpu_timer0_isr(void);
void main(void)
{
int counter=0;
InitSysCtrl();
EALLOW;
SysCtrlRegs.WDCR= 0x00AF;
EDIS;
DINT;
Gpio_select();
Setup_ePWM1A();
InitPieCtrl();
InitPieVectTable();
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,150,100000);
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
IER |=1;
EINT;
ERTM;
CpuTimer0Regs.TCR.bit.TSS = 0;
while(1)
{
while(CpuTimer0.InterruptCount == 0);
CpuTimer0.InterruptCount = 0;
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
EDIS;
counter++;
if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1;
if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1;
if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1;
}
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
GpioCtrlRegs.GPAMUX2.all = 0;
Báo cáo thực tập Trang 49
GpioCtrlRegs.GPBMUX1.all = 0;
GpioCtrlRegs.GPBMUX2.all = 0;
GpioCtrlRegs.GPCMUX1.all = 0;
GpioCtrlRegs.GPCMUX2.all = 0;
GpioCtrlRegs.GPADIR.all = 0;
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;
GpioCtrlRegs.GPBDIR.all = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;
GpioCtrlRegs.GPCDIR.all = 0;
EDIS;
}
void Setup_ePWM1A(void)
{
EPwm1Regs.TBCTL.bit.CLKDIV = 0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1;
EPwm1Regs.TBCTL.bit.CTRMODE = 2;
EPwm1Regs.AQCTLA.all = 0x0006; // Mặc định: duty cycle = 50%
EPwm1Regs.TBPRD = 37500; // C{i đặt tần số xung l{ 1kHz
}
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
EALLOW;
SysCtrlRegs.WDKEY = 0xAA; // service WD #2
EDIS;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
5. Tạo xung vuông tần số 1kHz với ePWM1A, chu kỳ hoạt động thay đổi được từ 0 đến 100%.
#include "DSP2833x_Device.h"
extern void InitSysCtrl(void);
extern void InitPieCtrl(void);
extern void InitPieVectTable(void);
extern void InitCpuTimers(void);
extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float);
void Gpio_select(void);
void Setup_ePWM1A(void);
interrupt void cpu_timer0_isr(void);
void main(void)
{
int counter=0;
InitSysCtrl();
EALLOW;
SysCtrlRegs.WDCR= 0x00AF;
EDIS;
DINT;
Gpio_select();
Setup_ePWM1A();
InitPieCtrl();
InitPieVectTable();
Báo cáo thực tập Trang 50
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,150,100);
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
IER |=1;
EINT;
ERTM;
CpuTimer0Regs.TCR.bit.TSS = 0;
while(1)
{
while(CpuTimer0.InterruptCount == 0);
CpuTimer0.InterruptCount = 0;
EALLOW;
SysCtrlRegs.WDKEY = 0x55; // service WD #1
EDIS;
counter++;
if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1;
if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1;
if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1;
}
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
GpioCtrlRegs.GPAMUX2.all = 0;
GpioCtrlRegs.GPBMUX1.all = 0;
GpioCtrlRegs.GPBMUX2.all = 0;
GpioCtrlRegs.GPCMUX1.all = 0;
GpioCtrlRegs.GPCMUX2.all = 0;
GpioCtrlRegs.GPADIR.all = 0;
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;
GpioCtrlRegs.GPBDIR.all = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;
GpioCtrlRegs.GPCDIR.all = 0;
EDIS;
}
void Setup_ePWM1A(void)
{
EPwm1Regs.TBCTL.bit.CLKDIV = 0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1;
EPwm1Regs.TBCTL.bit.CTRMODE = 2;
EPwm1Regs.AQCTLA.all = 0x0060;
EPwm1Regs.TBPRD = 37500; // tần số xung l{ 1kHz
Báo cáo thực tập Trang 51
EPwm1Regs.CMPA.half.CMPA = 0; // duty cycle = 100%
}
interrupt void cpu_timer0_isr(void)
{
static int up_down = 1;
CpuTimer0.InterruptCount++;
EALLOW;
SysCtrlRegs.WDKEY = 0xAA; // service WD #2
EDIS;
if(up_down)
{
if(EPwm1Regs.CMPA.half.CMPA < EPwm1Regs.TBPRD)
EPwm1Regs.CMPA.half.CMPA++;
else up_down = 0;
}
else
{
if(EPwm1Regs.CMPA.half.CMPA > 0) EPwm1Regs.CMPA.half.CMPA--;
else up_down = 1;
}
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
6. Biến đổi giá trị ADC sử dụng biến trở
#include "DSP2833x_Device.h"
extern void InitAdc(void);
extern void InitSysCtrl(void);
extern void InitPieCtrl(void);
extern void InitPieVectTable(void);
extern void InitCpuTimers(void);
extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float);
extern void display_ADC(unsigned int);
void Gpio_select(void);
interrupt void cpu_timer0_isr(void);
interrupt void adc_isr(void);
unsigned int Voltage_VR1;
unsigned int Voltage_VR2;
void main(void)
{
InitSysCtrl();
EALLOW;
SysCtrlRegs.WDCR = 0x00AF;
EDIS;
DINT;
Gpio_select();
InitPieCtrl();
InitPieVectTable();
InitAdc();
AdcRegs.ADCTRL1.all = 0;
AdcRegs.ADCTRL1.bit.ACQ_PS = 7;
AdcRegs.ADCTRL1.bit.SEQ_CASC =1;
AdcRegs.ADCTRL1.bit.CPS = 0;
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;
Báo cáo thực tập Trang 52
AdcRegs.ADCTRL2.all = 0;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 =1;
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0;
AdcRegs.ADCTRL3.bit.ADCCLKPS = 3;
AdcRegs.ADCMAXCONV.all = 0x0001;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1;
EPwm2Regs.TBCTL.all = 0xC030;
EPwm2Regs.TBPRD = 2999;
EPwm2Regs.ETPS.all = 0x0100;
EPwm2Regs.ETSEL.all = 0x0A00;
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
PieVectTable.ADCINT = &adc_isr;
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,150,100000);
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |=1;
EINT;
ERTM;
CpuTimer0Regs.TCR.bit.TSS = 0;
while(1)
{
while(CpuTimer0.InterruptCount < 5)
{
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
EDIS;
}
display_ADC(Voltage_VR1);
while(CpuTimer0.InterruptCount < 10)
{
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
EDIS;
}
display_ADC(Voltage_VR2);
CpuTimer0.InterruptCount = 0;
}
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0;
GpioCtrlRegs.GPAMUX2.all = 0;
GpioCtrlRegs.GPBMUX1.all = 0;
GpioCtrlRegs.GPBMUX2.all = 0;
GpioCtrlRegs.GPCMUX1.all = 0;
Báo cáo thực tập Trang 53
GpioCtrlRegs.GPCMUX2.all = 0;
GpioCtrlRegs.GPADIR.all = 0;
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;
GpioCtrlRegs.GPBDIR.all = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;
GpioCtrlRegs.GPCDIR.all = 0;
EDIS;
}
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
EALLOW;
SysCtrlRegs.WDKEY = 0xAA; // service WD #2
EDIS;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
interrupt void adc_isr(void)
{
Voltage_VR1 = AdcMirror.ADCRESULT0; // store results global
Voltage_VR2 = AdcMirror.ADCRESULT1;
// Reinitialize for next ADC sequence
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
}
X. Tài liệu tham khảo
http://www.ti.com/product/tms320f28335
http://www.google.com/

Mais conteúdo relacionado

Mais procurados

Tài liệu lập trình plc s7 200 full-01_2011_v1
Tài liệu lập trình plc s7 200 full-01_2011_v1Tài liệu lập trình plc s7 200 full-01_2011_v1
Tài liệu lập trình plc s7 200 full-01_2011_v1quanglocbp
 
Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520Vũ Anh
 
Kĩ thuật đo lường
Kĩ thuật đo lường Kĩ thuật đo lường
Kĩ thuật đo lường Vũ Quang
 
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnđồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnhttps://www.facebook.com/garmentspace
 
Các phương pháp thiết kế bộ điều khiển PID.docx
Các phương pháp thiết kế bộ điều khiển PID.docxCác phương pháp thiết kế bộ điều khiển PID.docx
Các phương pháp thiết kế bộ điều khiển PID.docxhunhlhongthi
 
Bài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệt
Bài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệtBài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệt
Bài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệtMan_Ebook
 
Bai giang-vhdl
Bai giang-vhdlBai giang-vhdl
Bai giang-vhdlhoangclick
 

Mais procurados (20)

Tài liệu lập trình plc s7 200 full-01_2011_v1
Tài liệu lập trình plc s7 200 full-01_2011_v1Tài liệu lập trình plc s7 200 full-01_2011_v1
Tài liệu lập trình plc s7 200 full-01_2011_v1
 
Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520
 
Hệ năng lượng mặt trời và phương pháp để thu công suất cực đại
Hệ năng lượng mặt trời và phương pháp để thu công suất cực đạiHệ năng lượng mặt trời và phương pháp để thu công suất cực đại
Hệ năng lượng mặt trời và phương pháp để thu công suất cực đại
 
Kĩ thuật đo lường
Kĩ thuật đo lường Kĩ thuật đo lường
Kĩ thuật đo lường
 
Đề tài: Thiết kế hệ thống điều khiển nhiệt độ bằng máy tính, HOT
Đề tài: Thiết kế hệ thống điều khiển nhiệt độ bằng máy tính, HOTĐề tài: Thiết kế hệ thống điều khiển nhiệt độ bằng máy tính, HOT
Đề tài: Thiết kế hệ thống điều khiển nhiệt độ bằng máy tính, HOT
 
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnđồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
 
Đề tài: Hệ thống Iot điều khiển và giám sát ngôi nhà, HAY, 9đ
Đề tài: Hệ thống Iot điều khiển và giám sát ngôi nhà, HAY, 9đĐề tài: Hệ thống Iot điều khiển và giám sát ngôi nhà, HAY, 9đ
Đề tài: Hệ thống Iot điều khiển và giám sát ngôi nhà, HAY, 9đ
 
Các phương pháp thiết kế bộ điều khiển PID.docx
Các phương pháp thiết kế bộ điều khiển PID.docxCác phương pháp thiết kế bộ điều khiển PID.docx
Các phương pháp thiết kế bộ điều khiển PID.docx
 
Đề 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
 
Đề tài: Ứng dụng vi điều khiển pic 16f877a trong thí nghiệm vật lí
Đề tài: Ứng dụng vi điều khiển pic 16f877a trong thí nghiệm vật líĐề tài: Ứng dụng vi điều khiển pic 16f877a trong thí nghiệm vật lí
Đề tài: Ứng dụng vi điều khiển pic 16f877a trong thí nghiệm vật lí
 
Bài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệt
Bài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệtBài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệt
Bài tập lớn Lý thuyết điều khiển - Đề tài lò nhiệt
 
Đề tài: Thiết kế hệ thống cân định lượng và đóng bao tự động, HOT
Đề tài: Thiết kế hệ thống cân định lượng và đóng bao tự động, HOTĐề tài: Thiết kế hệ thống cân định lượng và đóng bao tự động, HOT
Đề tài: Thiết kế hệ thống cân định lượng và đóng bao tự động, HOT
 
Bai giang-vhdl
Bai giang-vhdlBai giang-vhdl
Bai giang-vhdl
 
Đề tài: Thiết kế mạch điều khiển máy bơm nước tự động, HAY
Đề tài: Thiết kế mạch điều khiển máy bơm nước tự động, HAYĐề tài: Thiết kế mạch điều khiển máy bơm nước tự động, HAY
Đề tài: Thiết kế mạch điều khiển máy bơm nước tự động, HAY
 
Đề tài: Hệ thống giám sát quá trình chiết rót và đóng nắp chai tự động
Đề tài: Hệ thống giám sát quá trình chiết rót và đóng nắp chai tự độngĐề tài: Hệ thống giám sát quá trình chiết rót và đóng nắp chai tự động
Đề tài: Hệ thống giám sát quá trình chiết rót và đóng nắp chai tự động
 
Đề tài: Thiết kế hệ thống điều khiển bơm nước sử dụng PLC, HOT
Đề tài: Thiết kế hệ thống điều khiển bơm nước sử dụng PLC, HOTĐề tài: Thiết kế hệ thống điều khiển bơm nước sử dụng PLC, HOT
Đề tài: Thiết kế hệ thống điều khiển bơm nước sử dụng PLC, HOT
 
Đề tài: Điều khiển băng tải gắp và đóng nhãn sản phẩm, 9đ
Đề tài: Điều khiển băng tải gắp và đóng nhãn sản phẩm, 9đĐề tài: Điều khiển băng tải gắp và đóng nhãn sản phẩm, 9đ
Đề tài: Điều khiển băng tải gắp và đóng nhãn sản phẩm, 9đ
 
Đề tài: Mô hình ứng dụng IOT điều khiển các thiết bị điện trong nhà
Đề tài: Mô hình ứng dụng IOT điều khiển các thiết bị điện trong nhàĐề tài: Mô hình ứng dụng IOT điều khiển các thiết bị điện trong nhà
Đề tài: Mô hình ứng dụng IOT điều khiển các thiết bị điện trong nhà
 
Đề tài: Hệ thống điều khiển tốc độ động cơ DC sử dụng bộ PID
Đề tài: Hệ thống điều khiển tốc độ động cơ DC sử dụng bộ PIDĐề tài: Hệ thống điều khiển tốc độ động cơ DC sử dụng bộ PID
Đề tài: Hệ thống điều khiển tốc độ động cơ DC sử dụng bộ PID
 
ĐỒ ÁN TỐT NGHIỆP LẬP TRÌNH VDK PIC
ĐỒ ÁN TỐT NGHIỆP LẬP TRÌNH VDK PICĐỒ ÁN TỐT NGHIỆP LẬP TRÌNH VDK PIC
ĐỒ ÁN TỐT NGHIỆP LẬP TRÌNH VDK PIC
 

Destaque

Đ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 atmega16Pham Hoang
 
[ĐAMH] Thiết kế máy ép củi trấu
[ĐAMH] Thiết kế máy ép củi trấu[ĐAMH] Thiết kế máy ép củi trấu
[ĐAMH] Thiết kế máy ép củi trấuPham Hoang
 
Tìm hiểu về cảm biến độ ẩm
Tìm hiểu về cảm biến độ ẩmTìm hiểu về cảm biến độ ẩm
Tìm hiểu về cảm biến độ ẩmPham Hoang
 
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
[BTL] Kiểm tra tính ổn định của hệ thống liên tục[BTL] Kiểm tra tính ổn định của hệ thống liên tục
[BTL] Kiểm tra tính ổn định của hệ thống liên tụcPham Hoang
 
[ĐAMH] Điều khiển thiết bị điện qua máy tính
[ĐAMH] Điều khiển thiết bị điện qua máy tính[ĐAMH] Điều khiển thiết bị điện qua máy tính
[ĐAMH] Điều khiển thiết bị điện qua máy tínhPham Hoang
 
Tìm hiểu về cảm biến nhiệt độ
Tìm hiểu về cảm biến nhiệt độTìm hiểu về cảm biến nhiệt độ
Tìm hiểu về cảm biến nhiệt độPham Hoang
 
Fuzzy controller - Bộ điều khiển mờ
Fuzzy controller - Bộ điều khiển mờFuzzy controller - Bộ điều khiển mờ
Fuzzy controller - Bộ điều khiển mờTien Anh Nguyen Van
 
Chuong 2
Chuong 2Chuong 2
Chuong 2btminh
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Nhóc Nhóc
 
Tài liệu Matlab kỹ thuật
Tài liệu Matlab kỹ thuậtTài liệu Matlab kỹ thuật
Tài liệu Matlab kỹ thuậtPham Hoang
 
Arduino a000066-datasheet
Arduino a000066-datasheetArduino a000066-datasheet
Arduino a000066-datasheetThien Tranminh
 

Destaque (12)

Đ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
 
[ĐAMH] Thiết kế máy ép củi trấu
[ĐAMH] Thiết kế máy ép củi trấu[ĐAMH] Thiết kế máy ép củi trấu
[ĐAMH] Thiết kế máy ép củi trấu
 
Tìm hiểu về cảm biến độ ẩm
Tìm hiểu về cảm biến độ ẩmTìm hiểu về cảm biến độ ẩm
Tìm hiểu về cảm biến độ ẩm
 
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
[BTL] Kiểm tra tính ổn định của hệ thống liên tục[BTL] Kiểm tra tính ổn định của hệ thống liên tục
[BTL] Kiểm tra tính ổn định của hệ thống liên tục
 
[ĐAMH] Điều khiển thiết bị điện qua máy tính
[ĐAMH] Điều khiển thiết bị điện qua máy tính[ĐAMH] Điều khiển thiết bị điện qua máy tính
[ĐAMH] Điều khiển thiết bị điện qua máy tính
 
Tìm hiểu về cảm biến nhiệt độ
Tìm hiểu về cảm biến nhiệt độTìm hiểu về cảm biến nhiệt độ
Tìm hiểu về cảm biến nhiệt độ
 
Fuzzy controller - Bộ điều khiển mờ
Fuzzy controller - Bộ điều khiển mờFuzzy controller - Bộ điều khiển mờ
Fuzzy controller - Bộ điều khiển mờ
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
Ltdktd2
Ltdktd2Ltdktd2
Ltdktd2
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05
 
Tài liệu Matlab kỹ thuật
Tài liệu Matlab kỹ thuậtTài liệu Matlab kỹ thuật
Tài liệu Matlab kỹ thuật
 
Arduino a000066-datasheet
Arduino a000066-datasheetArduino a000066-datasheet
Arduino a000066-datasheet
 

Semelhante a Tìm hiểu về bộ điều khiển số TMS320F28335

Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316minhpv32
 
Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Cao Toa
 
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoXây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoMan_Ebook
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhCao Toa
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_banzeus_91
 
giáo trình c căn bản
giáo trình c căn bảngiáo trình c căn bản
giáo trình c căn bảnLam Hoang
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_bankatakhung89
 
Lap trinh c can ban
Lap trinh c can banLap trinh c can ban
Lap trinh c can bandaihoccantho
 
Điều khiển dự báo thiết bị kho điện sử dụng trong hệ thống phát điện sức gió ...
Điều khiển dự báo thiết bị kho điện sử dụng trong hệ thống phát điện sức gió ...Điều khiển dự báo thiết bị kho điện sử dụng trong hệ thống phát điện sức gió ...
Điều khiển dự báo thiết bị kho điện sử dụng trong hệ thống phát điện sức gió ...Man_Ebook
 
50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmemNga Khổng
 
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​Man_Ebook
 
Giao trinh
Giao trinhGiao trinh
Giao trinhPhi Phi
 
Giao trinh dieu khien lap trinh co nho
Giao trinh dieu khien lap trinh co nhoGiao trinh dieu khien lap trinh co nho
Giao trinh dieu khien lap trinh co nhophuongnam2018
 
Giáo trình điều khiển lập trình cỡ nhỏ - LOGO!
Giáo trình điều khiển lập trình cỡ nhỏ - LOGO!Giáo trình điều khiển lập trình cỡ nhỏ - LOGO!
Giáo trình điều khiển lập trình cỡ nhỏ - LOGO!Văn Phong Cao
 
Nghiên cứu thực thi bộ điều khiển robot công nghiệp trên nền tảng FPGA.pdf
Nghiên cứu thực thi bộ điều khiển robot công nghiệp trên nền tảng FPGA.pdfNghiên cứu thực thi bộ điều khiển robot công nghiệp trên nền tảng FPGA.pdf
Nghiên cứu thực thi bộ điều khiển robot công nghiệp trên nền tảng FPGA.pdfMan_Ebook
 
Nghiên cứu thiết kế bộ quan sát và điều khiển nhiệt độ trong phôi theo mô hìn...
Nghiên cứu thiết kế bộ quan sát và điều khiển nhiệt độ trong phôi theo mô hìn...Nghiên cứu thiết kế bộ quan sát và điều khiển nhiệt độ trong phôi theo mô hìn...
Nghiên cứu thiết kế bộ quan sát và điều khiển nhiệt độ trong phôi theo mô hìn...Man_Ebook
 

Semelhante a Tìm hiểu về bộ điều khiển số TMS320F28335 (20)

Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAYLuận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
 
Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải PhòngĐề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
 
Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316
 
Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Bai giang he thong nhung 2010
Bai giang he thong nhung 2010
 
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạoXây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
Xây dựng Robot tự hành dạng Nonholonomic và tổng hợp bộ điều khiển bám quỹ đạo
 
Bài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tínhBài giảng kiến trúc máy tính
Bài giảng kiến trúc máy tính
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_ban
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_ban
 
giáo trình c căn bản
giáo trình c căn bảngiáo trình c căn bản
giáo trình c căn bản
 
Giao trinh c_can_ban
Giao trinh c_can_banGiao trinh c_can_ban
Giao trinh c_can_ban
 
Lap trinh c can ban
Lap trinh c can banLap trinh c can ban
Lap trinh c can ban
 
Điều khiển dự báo thiết bị kho điện sử dụng trong hệ thống phát điện sức gió ...
Điều khiển dự báo thiết bị kho điện sử dụng trong hệ thống phát điện sức gió ...Điều khiển dự báo thiết bị kho điện sử dụng trong hệ thống phát điện sức gió ...
Điều khiển dự báo thiết bị kho điện sử dụng trong hệ thống phát điện sức gió ...
 
50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem50315210 baigiangkythuatphanmem
50315210 baigiangkythuatphanmem
 
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​
Nghiên cứu điều chỉnh khoảng giãn cách sản phẩm trong các băng chuyền​
 
Giao trinh
Giao trinhGiao trinh
Giao trinh
 
Giao trinh dieu khien lap trinh co nho
Giao trinh dieu khien lap trinh co nhoGiao trinh dieu khien lap trinh co nho
Giao trinh dieu khien lap trinh co nho
 
Giáo trình điều khiển lập trình cỡ nhỏ - LOGO!
Giáo trình điều khiển lập trình cỡ nhỏ - LOGO!Giáo trình điều khiển lập trình cỡ nhỏ - LOGO!
Giáo trình điều khiển lập trình cỡ nhỏ - LOGO!
 
3.5 g va quy hoach
3.5 g va quy hoach3.5 g va quy hoach
3.5 g va quy hoach
 
Nghiên cứu thực thi bộ điều khiển robot công nghiệp trên nền tảng FPGA.pdf
Nghiên cứu thực thi bộ điều khiển robot công nghiệp trên nền tảng FPGA.pdfNghiên cứu thực thi bộ điều khiển robot công nghiệp trên nền tảng FPGA.pdf
Nghiên cứu thực thi bộ điều khiển robot công nghiệp trên nền tảng FPGA.pdf
 
Nghiên cứu thiết kế bộ quan sát và điều khiển nhiệt độ trong phôi theo mô hìn...
Nghiên cứu thiết kế bộ quan sát và điều khiển nhiệt độ trong phôi theo mô hìn...Nghiên cứu thiết kế bộ quan sát và điều khiển nhiệt độ trong phôi theo mô hìn...
Nghiên cứu thiết kế bộ quan sát và điều khiển nhiệt độ trong phôi theo mô hìn...
 

Mais de Pham Hoang

Bit manipulation in atmel studio for AVR
Bit manipulation in atmel studio for AVRBit manipulation in atmel studio for AVR
Bit manipulation in atmel studio for AVRPham Hoang
 
Design, construction and operation details biomass briquetti
Design, construction and operation details biomass briquettiDesign, construction and operation details biomass briquetti
Design, construction and operation details biomass briquettiPham Hoang
 
Mach dien 3 pha
Mach dien 3 phaMach dien 3 pha
Mach dien 3 phaPham Hoang
 
Zero voltage switching resonant power conversion
Zero voltage switching resonant power conversionZero voltage switching resonant power conversion
Zero voltage switching resonant power conversionPham Hoang
 
Noise in Electronic System
Noise in Electronic SystemNoise in Electronic System
Noise in Electronic SystemPham Hoang
 
TCVN 5699-1/2014
TCVN 5699-1/2014TCVN 5699-1/2014
TCVN 5699-1/2014Pham Hoang
 
Dien tu cong nghiep
Dien tu cong nghiepDien tu cong nghiep
Dien tu cong nghiepPham Hoang
 
Hệ thống bôi trơn và làm mát
Hệ thống bôi trơn và làm mátHệ thống bôi trơn và làm mát
Hệ thống bôi trơn và làm mátPham Hoang
 
Đ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 MCP4921Pham Hoang
 

Mais de Pham Hoang (11)

Bit manipulation in atmel studio for AVR
Bit manipulation in atmel studio for AVRBit manipulation in atmel studio for AVR
Bit manipulation in atmel studio for AVR
 
Design, construction and operation details biomass briquetti
Design, construction and operation details biomass briquettiDesign, construction and operation details biomass briquetti
Design, construction and operation details biomass briquetti
 
Sóng hài
Sóng hàiSóng hài
Sóng hài
 
Mach dien 3 pha
Mach dien 3 phaMach dien 3 pha
Mach dien 3 pha
 
Zero voltage switching resonant power conversion
Zero voltage switching resonant power conversionZero voltage switching resonant power conversion
Zero voltage switching resonant power conversion
 
Noise in Electronic System
Noise in Electronic SystemNoise in Electronic System
Noise in Electronic System
 
TCVN 5699-1/2014
TCVN 5699-1/2014TCVN 5699-1/2014
TCVN 5699-1/2014
 
3000 tu
3000 tu3000 tu
3000 tu
 
Dien tu cong nghiep
Dien tu cong nghiepDien tu cong nghiep
Dien tu cong nghiep
 
Hệ thống bôi trơn và làm mát
Hệ thống bôi trơn và làm mátHệ thống bôi trơn và làm mát
Hệ thống bôi trơn và làm mát
 
Đ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
 

Tìm hiểu về bộ điều khiển số TMS320F28335

  • 1. GVHD: ThS Hoàng Văn Mạnh Sinh viên: Phạm Trần Hoàng MSV: 12020162 Lớp: K57M Khoa: Cơ học kỹ thuật & Tự động hóa Hà Nội, ngày 27/12/2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÁO CÁO THỰC TẬP TỐT NGHIỆP Đề tài: Tìm hiểu về bộ điều khiển số TMS320F28335 và ứng dụng
  • 2. Báo cáo thực tập Trang 1 Mục lục I. Giới thiệu về bộ điều khiển số TMS320F28335.................................................................. 3 II. Cấu trúc phần cứng.................................................................................................................... 4 1. Sơ đồ khối.................................................................................................................................... 4 2. Bộ xử lý trung tâm (CPU)............................................................................................................ 4 3. Cấu trúc bus ngoại ....................................................................................................................... 5 4. Điều khiển bộ nhớ truy cập trực tiếp (DMA) .............................................................................. 5 5. Bộ tính toán số học (ALU)........................................................................................................... 6 6. Đường lệnh .................................................................................................................................. 6 7. Tổ chức bộ nhớ ............................................................................................................................ 7 8. Phản ứng ngắt .............................................................................................................................. 8 9. Sơ đồ khối tổng quát.................................................................................................................... 9 III. Trình biên dịch CCS.............................................................................................................. 10 IV. Xuất nhập dữ liệu số.............................................................................................................. 12 1. Các kết cấu ngoại vi................................................................................................................... 12 2. Bộ phận vào / ra số..................................................................................................................... 12 3. Phân chia các chân F28335........................................................................................................ 13 a. PORTA (GPIO0 – GPIO31) ................................................................................................... 13 b. PORTB (GPIO32 – GPIO63) ................................................................................................. 14 c. PORTC (GPIO64 – GPIO87)................................................................................................. 15 4. Định tính nhập dữ liệu GPIO (GPIO Input Qualification) ........................................................ 16 5. Tổng hợp thanh ghi vào – ra...................................................................................................... 16 6. Module Clock F28335 ............................................................................................................... 17 7. Watchdog Timer ........................................................................................................................ 19 8. Hệ thống điều khiển và thanh ghi trạng thái.............................................................................. 20 V. Hệ thống ngắt và bộ định thời............................................................................................... 21 1. Hệ thống ngắt............................................................................................................................. 21 a. Các đường ngắt....................................................................................................................... 21 b. Reset F28335 .......................................................................................................................... 22 c. Thiết lập lại bộ nạp khởi động................................................................................................ 22 d. Nguồn ngắt.............................................................................................................................. 24 e. Xử lý ngắt Maskable ............................................................................................................... 25 f. Khuếch đại ngắt ngoại vi........................................................................................................ 26 g. Phản ứng ngắt phần cứng liên tục.......................................................................................... 28 2. Bộ định thời ............................................................................................................................... 29
  • 3. Báo cáo thực tập Trang 2 VI. Điều chế độ rộng xung - PWM........................................................................................... 31 1. Sơ đồ khối ePWM...................................................................................................................... 31 2. Đơn vị cơ sở ePWM................................................................................................................... 31 3. Pha đồng bộ ePWM ................................................................................................................... 32 4. Chế độ hoạt động định thời........................................................................................................ 33 5. Thanh ghi định thời cơ sở .......................................................................................................... 33 6. Thanh ghi điều khiển cơ sở TBCTL .......................................................................................... 34 7. Thanh ghi trạng thái cơ sở TBSTS ............................................................................................ 35 8. Công thức tính giá trị định nghĩa tần số tín hiệu (TBPRD)....................................................... 36 VII. Bộ chuyển đổi tương tự - số ADC.................................................................................... 36 1. Module ADC.............................................................................................................................. 36 2. Chế độ hoạt động ADC.............................................................................................................. 36 3. Chế độ thác lũ ............................................................................................................................ 36 4. Chế độ tuần tự kép ..................................................................................................................... 37 5. Thời gian chuyển đổi ADC........................................................................................................ 38 6. Khối thanh ghi ADC .................................................................................................................. 38 a. Thanh ghi ADCTRL1 .............................................................................................................. 39 b. Thanh ghi ADCTRL2 .............................................................................................................. 40 c. Thanh ghi ADCTRL3 .............................................................................................................. 41 d. Thanh ghi MAXCONV ............................................................................................................ 42 e. Thanh ghi ADCCHSELSEQ.................................................................................................... 42 f. Thanh ghi ADCRESULT......................................................................................................... 43 g. Thanh ghi ADCREFSEL ......................................................................................................... 44 VIII. Các chức năng khác ............................................................................................................ 44 IX. Một số chương trình mẫu ..................................................................................................... 44 1. Chương trình 1. Vào ra dữ liệu số.............................................................................................. 44 2. Chương trình 2. Ngắt Timer 0 ................................................................................................... 45 3. Chương trình 3. Tạo trễ 1s sử dụng ngắt Timer 0...................................................................... 47 4. Chương trình 4. PWM (duty cycle = 50%)................................................................................ 47 5. Chương trình 5. PWM (duty cycle thay đổi từ 0 đến 100%)..................................................... 49 6. Chương trình 6. Biến đổi ADC.................................................................................................. 51 X. Tài liệu tham khảo ................................................................................................................... 53
  • 4. Báo cáo thực tập Trang 3 I. Giới thiệu về bộ điều khiển số TMS320F28335 TMS320F28335 là một trong những series mạnh nhất của dòng xử lý tín hiệu số 32 bit C2000 nằm trong nhóm sản phẩm của hãng Texas Instruments. Được phát triển ở giai đoạn sau của thế hệ TMS320, do đó TMS320F28335 được sử dụng rất rộng rãi hiện nay trong các phòng thí nghiệm, trong ngành công nghiệp tự động hóa, robot, năng lương điện tử công suất và các lĩnh vực cơ điện tử tiên tiến khác. TMS được trang bị lõi (core) hỗ trợ tính toán số thực với dấu phẩy động (FPU). Với bộ nhớ là 68kb bộ nhớ RAM và 128kb bộ nhớ flash, tốc độ hoạt động tối đa lên tới 150MHz với mỗi chu kỳ lệnh là 6.67ns, tốc độ xử lý cao cho phép chúng ta nhúng các giải thuật điều khiển như PID, Fuzzy, LQD, Neural, … Chức năng chính bao gồm các khối sau: + 16 kênh ADC 12bit (0 – 3V) cho phép thời gian chuyển đổi nhanh (tối đa 80ns). + 18 kênh PWM trong đó có 6 kênh tốc độ cao sử dụng chức năng truy cập bộ nhớ trực tiếp DMA. + Có 96 ngắt, 88 chân giao tiếp vào ra GPIO. + 3 Timer 16bit và 32 bit cho phép thực hiện cả những chức năng bios/boot. + Có đầy đủ các chức năng giao tiếp UART, SPI, SCI và truyền thông eCAN, … + DSP có điểm thuận lợi nhúng các giải thuật là chúng ta có thể viết các giải thuật này trên Matlab hoặc Psim rồi nhúng các giải thuật này xuống DSP. + Khả năng debug online, breakpoint giúp chạy chương trình từng bước, liên tục hay có thể tạm dừng. Đồng thời có thể theo dõi các thanh ghi, giá trị biến, biểu thức bất kỳ khi ta gọi trong khung hình biến và biểu thức. Ngoài ra còn có chức năng hiển thị phân vùng bộ nhớ dưới dạng đồ thị. Các chức năng của TMS320F28335 vô cùng phong phú và tối ưu giúp ta dễ dàng lập trình cho các ứng dụng đòi tốc độ và chính xác. Hình 1. Sơ đồ ngoại vi của TMS320F28335
  • 5. Báo cáo thực tập Trang 4 II. Cấu trúc phần cứng 1. Sơ đồ khối Hình 2. Sơ đồ khối F28335 2. Bộ xử lý trung tâm (CPU) Hình 3. Sơ đồ bộ xử lý trung tâm CPU F2833x CPU có thể thực hiện hầu hết các lệnh để thực hiện thanh ghi đến thanh ghi hoạt động và một loạt các lệnh được sử dụng phổ biến bởi vi điều khiển, ví dụ đóng gói byte và giải nén và thao tác bit trong một chu kỳ đơn. Các kiến trúc cũng được hỗ trợ bởi chế độ địa chỉ tối đa, điều này cho phép trình biên dịch cũng như người lập trình lắp ráp để tạo ra các mã nhỏ gọn mà gần như tương ứng một - một với mã C. F2833x có hiệu suất tính toán cao cho xử lý tín hiệu số như nhiệm vụ điều khiển hệ thống thường được xử lý bởi các thiết bị vi điều khiển. Hiệu quả này cho phép loại bỏ sự cần thiết của một bộ xử lý thứ hai trong nhiều hệ thống. Ba bộ Timer 32bit có thể được sử dụng cho mục đích đúng thời gian chung hoặc để tạo ra phần cứng điều khiển khoảng thời gian cho hệ điều hành thời gian thực. Quản lý ngắt ngoại vi (PIE) cho phép ngắt phản ứng nhanh với các nguồn tín hiệu và các sự kiện bên ngoài và bên trong. PIE xử lý vector ngắt riêng lẻ cho tất cả các nguồn và làm giảm thời gian đáp ứng với một sự kiện bên ngoài, gọi là ngắt trễ, đến một mức tối thiểu.
  • 6. Báo cáo thực tập Trang 5 3. Cấu trúc bus ngoại Hình 4. Cấu trúc bus ngoại F28335 32bit bus dữ liệu cho phép chu kỳ hoạt động 32bit đơn. Kiến trúc đa bus này được biết đến như kiến trúc Harvard cho phép F28335 lấy một lệnh, đọc giá trị dữ liệu đầu tiên và viết một giá trị dữ liệu thứ hai trong tất cả trong một chu kỳ xung duy nhất. Các thanh ghi điều khiển các bộ phận ngoại vi được ánh xạ vào các vị trí cụ thể trong không gian bộ nhớ dữ liệu và có thể được truy cập với một bộ nhớ ghi dữ liệu bình thường hoặc chỉ thị đọc. Đối với những thanh ghi quan trọng có một số cơ chế bảo mật được thực hiện để ngăn chặn sự sửa đổi do các sự cố xảy ra. Tất cả các phần bộ nhớ trong được gắn cả hai bộ nhớ chương trình dữ liệu (gọi là mô hình bộ nhớ thống nhất). Nó cho phép người thiết kế chọn một phần nhất định để được sử dụng như là code hoặc như là một phần dữ liệu. 4. Điều khiển bộ nhớ truy cập trực tiếp (DMA) Hình 5. Cấu trúc bộ nhớ truy cập trực tiếp
  • 7. Báo cáo thực tập Trang 6 Module DMA là một máy tính dựa trên sự kiện, có nghĩa là nó đòi hỏi một ngắt kích hoạt thiết bị ngoại vi để bắt đầu một chuyển DMA, chẳng hạn như: + Chuyển đổi tuần tự 1 (SEQ1INT) hoặc tuần tự 2 (SEQ2INT) từ tương tự sang số. + Bộ đêm đa kênh nối tiếp cổng A và B (McBSP – A, McBSP - B) truyền / nhận. + Ngắt ngoài tín hiệu đầu vào XINT 1 – 7 và XINT13 + CPU Timer 0, 1, 2 + Module độ rộng xung (PWM) và tín hiệu ePWM 1 – 6. + Phần mềm Theo nguồn dữ liệu và (hoặc) các điểm đến có thể được khởi tạo: + SARAM nội các phần L4 đến L7. + Tất cả bộ nhớ bên ngoài vùng XINTF. + Thanh ghi kết quả ADC (Chỉ nguồn) + Bộ đệm truyền và nhận McBSP-A và McBSP-B + Các đơn vị PWM 1 – 6. 5. Bộ tính toán số học (ALU) Hình 6. Cấu trúc bộ tính toán số học Bộ tính toán số học phổ biến trong các hệ thống nhúng. Ví dụ như các toán tử logic, như AND, OR và EXOR thực hiện trực tiếp tại các địa điểm bộ nhớ dữ liệu. Thông thường, những chỉ lệnh này phải được thực hiện mà không có sự gián đoạn giữa đọc và viết truy cập; chúng được gọi là "non-interrupt" hoặc chỉ lệnh "atomic". Hạt nhân bộ tính toán số học F28335 (ALU) có khả năng hỗ trợ như các loại của chỉ lệnh. Ngược lại, các mã hóa truyền thống sẽ thực thi một số chu kỳ chậm hơn so với các chỉ lệnh nguyên tử. 6. Đường lệnh
  • 8. Báo cáo thực tập Trang 7 Hình 7. Đường lệnh Mỗi chỉ dẫn phải trải qua 8 giai đoạn cho đến khi hoàn thành cuối cùng. Một khi các đường lệnh được lấp đầy với các lệnh, một trong những lệnh được thực hiện trên mỗi chu kỳ xung. Đối với một thiết bị 150MHz, điều này tương đương với 6.67ns trên một lệnh. Các bước gồm có: + F1: Tạo địa chỉ Instruction ở đường địa chỉ bus chương trình. + F2: Đọc kỹ lệnh từ các dòng bus dữ liệu chương trình. + D1: Giải mã lệnh + D2: Tính toán các địa chỉ thông tin cho các toán hạng của các lệnh + R1: Nạp địa chỉ toán hạng đến dữ liệu hoặc dòng địa chỉ bus chương + R2: Đọc toán hạng + X: Thực hiện các lệnh + W: Viết lại kết quả vào bộ nhớ dữ liệu 7. Tổ chức bộ nhớ Hình 8. Tổ chức bộ nhớ F28335
  • 9. Báo cáo thực tập Trang 8 Họ F2833x có thể truy cập vào bộ nhớ cả trong và ngoài chip. F28335 sử dụng 32 bit địa chỉ dữ liệu và 22 bit địa chỉ chương trình, điều này cho phép tổng địa chỉ gần 4Gwords (1 word = 16 bit) trong không gian dữ liệu và 4Mwords trong không gian chương trình. Khối bộ nhớ trên tất cả các thiết kế F28335 được thống nhất lập bản đồ cho cả hai chương trình và không gian dữ liệu. Các bản đồ bộ nhớ trên cho thấy các khối khác nhau của bộ nhớ có sẵn cho các không gian chương trình và dữ liệu. 8. Phản ứng ngắt Hình 9. Quản lý phản ứng ngắt F28335
  • 10. Báo cáo thực tập Trang 9 9. Sơ đồ khối tổng quát Hình 10. Sơ đồ khối tổng quát F28335
  • 11. Báo cáo thực tập Trang 10 III. Trình biên dịch CCS Trình biên dịch sử dụng cho họ vi điều khiển TMS320F28335 là Code Composer Studio. Hiện tại công ty Texas Instruments đã cho ra mắt phiên bản mới nhất là phiên bản 6, tuy nhiên các phiên bản thấp hơn cũng đang được sử dụng rộng rãi cho việc viết mã nguồn. Hình 11. Trình biên dịch CCS cho F28335 Code Composer Studio (CCS) là trình biên dịch sử dụng ngôn ngữ lập trình C hoặc C++. Để tạo một dự án mới trong CCS, từ màn hình máy tính chọn biểu tượng shortcut CCS, khởi động chương trình. Ở lần chạy đầu tiên, giao diện CCS sẽ hiện lên như sau: Hình 12. Giao diện ban đầu của CCS Để tạo một dự án mới, kích chọn New Project trên màn hình chính hoặc từ File -> New -> CCS Project. Một cửa sổ nữa hiện ra, chọn loại vi điều khiển là TMS320F28335, sau đó đặt tên cho dự án tại ô Project Name và sau đó nhấn Finish.
  • 12. Báo cáo thực tập Trang 11 Hình 13. Tạo một dự án mới Hình 14. Cửa sổ viết mã nguồn cho F28335 Sau khi viết xong mã nguồn, thêm các file thư viện phù hợp để việc biên dịch được thành công. File được nạp vào vi điều khiển là file có đuôi .out Hình 15. Chương trình biên dịch thành công tạo ra file .out
  • 13. Báo cáo thực tập Trang 12 IV.Xuất nhập dữ liệu số 1. Các kết cấu ngoại vi Tất cả các thanh ghi ngoại vi được gộp chung lại với nhau được gọi là kết cấu ngoại vi - PF0, PF1, PF2 và PF3. Các kết cấu này được ánh xạ chỉ trong bộ nhớ dữ liệu. Kết cấu ngoại vi PF0 bao gồm thiết lập thanh ghi kiểm soát tốc độ nội của bộ nhớ nội FLASH, cũng như các thiết lập thời gian cho các thiết bị bộ nhớ ngoài, các thanh ghi đơn vị truy cập bộ nhớ trực tiếp, thanh ghi timer CPU core và khối điều khiển module bảo mật. Flash là bộ nhớ nội bộ không khả biến, thường được sử dụng để lưu trữ mã nguồn và dữ liệu mà phải xuất hiện lúc khởi động. Kết cấu ngoại vi PF1 chứa hầu hết các thanh ghi điều khiển đơn vị ngoại vi, chẳng hạn như ePWM, ECAP, điều khiển số Input / Output và khối thanh ghi CAN. CAN khu vực điều khiển mạng là một mạng lưới được thành lập sử dụng rộng rãi bên trong xe có động cơ để xây dựng một mạng lưới giữa các bộ điều khiển điện tử (ECU). Kết cấu ngoại vi PF2 kết hợp các thanh ghi điều khiển hệ thống cốt lõi, bộ chuyển đổi tương tự số và tất cả các kênh truyền thông khác ngoài McBSP, mà đã được phân bổ cho PF3. Bảng 1. Các ánh xạ chi tiết của thiết bị ngoại vi PF0 PIE: Cho phép ngắt PIE và thêm bảng vector PIE vào thanh ghi điều khiển Flash: Chờ trạng thái thanh ghi Flash XINTF: Thanh ghi giao diện ngoại DMA: Thanh ghi DMA Timers: Thanh ghi bộ định thời CPU-Timers 0, 1, 2. CSM: Mã bảo vệ module thanh ghi KEY ADC: Thanh ghi kết quả ADC (ánh xạ kép) PF1 eCAN: Hộp thư eCAN và thanh ghi điều khiển GPIO: Cấu hình GPIO MUX và thanh ghi điều khiển ePWM: Thanh ghi điều chế độ rộng xung nâng cao (ánh xạ kép) eCAP: Thanh ghi và module nâng cao sự bắt giữ eQEP: Module và thanh ghi tăng cường mã hóa xung vuông PF2 SYS: Thanh ghi điều khiển hệ thống SCI: Điều khiển giao tiếp truyền thông nối tiếp và thanh ghi RX / TX SPI: Điều khiển giao tiếp cổng nối tiếp và thanh ghi RX / TX ADC: Trạng thái, điều khiển và thanh ghi kết quả ADC I2C: Module và thanh ghi liên mạch tích hợp XINT: Thanh ghi ngắt ngoài PF3 McBSP: Thanh ghi cổng nối tiếp đa kênh đệm ePWM: Module và thanh ghi tăng cường điều chế độ rộng xung. 2. Bộ phận vào / ra số Tất cả I/O được nhóm lại với nhau thành Ports, được gọi là GPIOA, GPIOB và GPIOC. GPIO có nghĩa là đầu ra - đầu vào mục đích chung. F28335 có tổng cộng 88 chân I/O, bắt đầu từ GPIO0 đến GPIO87. Thiết bị đi kèm với rất nhiều bộ phận nội bổ sung, không phải tất cả các tính năng có thể được kết nối với các chân riêng của gói thiết bị cùng một lúc. Giải pháp là: multiplex. Điều này có nghĩa, một chân vật lý duy nhất của thiết bị có thể được sử dụng cho đến 4 chức năng khác nhau và những người lập trình quyết định chức năng được chọn. Sơ đồ khối của một chân vật lý của thiết bị được cho như trong hình:
  • 14. Báo cáo thực tập Trang 13 Hình 16. Sơ đồ khối chân F28335 Thuật ngữ Input Qualification đề cập đến một tùy chọn bổ sung cho các tín hiệu đầu vào số tại các chân GPIO0 - GPIO63. Khi tính năng này được sử dụng, một xung đầu vào phải dài hơn số chu kỳ đồng hồ quy định để trở thành tín hiệu đầu vào hợp lệ, điều này giúp loại bỏ nhiễu đầu vào. Nhóm thanh ghi GPxPUD có thể được sử dụng để vô hiệu hóa điện trở kéo lên bên trong rời khỏi mức điện áp trôi hoặc trở kháng cao. Khi một hàm I/O được chọn, sau đó nhóm thanh ghi GPxDIR xác định hướng của các đầu vào hoặc đầu ra. Bù vào vị trí một bit bằng 0, cấu hình chung đường như một đầu vào, thiết lập các vị trí bit cho 1 cấu hình các dòng như một đầu ra. Một dữ liệu đọc từ dòng đầu vào được thực hiện với một tập các thanh ghi GPxDAT. Một dữ liệu vào ghi vào một dòng đầu ra cũng có thể được thực hiện với thanh ghi GPxDAT. Ngoài ra, còn có nhiều hơn ba nhóm thanh ghi: + GPxSET + GPxCLEAR + GPxTOGGLE Mục đích của các thanh ghi này là sử dụng kỹ thuật mặt nạ để cài đặt, xóa hoặc chuyển đổi những dòng đầu ra, tương ứng với thiết lập bit 1 trong mặt nạ sử dụng. Ví dụ, để xóa dòng GPIO5 về giá trị 0, ta có thể sử dụng lệnh: GpioDataRegs.GPACLEAR.bit.GPIO5 = 0; 3. Phân chia các chân F28335 88 chân I/O được chia thành 3 cổng, chức năng riêng của từng chân được cho trong các bảng sau: a. PORTA (GPIO0 – GPIO31)
  • 15. Báo cáo thực tập Trang 14 Hình 17. Phân chia chức năng chân trên thanh ghi GPAMUX1 GPIO0 – GPIO15 được khai báo trên thanh ghi GPAMUX1 Hình 18. Phân chia chức năng chân trên thanh ghi GPAMUX2 GPIO16 – GPIO31 được khai báo trên thanh ghi GPAMUX2 b. PORTB (GPIO32 – GPIO63)
  • 16. Báo cáo thực tập Trang 15 Hình 19. Phân chia chức năng chân trên thanh ghi GPBMUX1 GPIO32 – GPIO47 được khai báo trên thanh ghi GPBMUX1 Hình 20. Phân chia chức năng chân trên thanh ghi GPBMUX2 GPIO48 – GPIO63 được khai báo trên thanh ghi GPBMUX2 c. PORTC (GPIO64 – GPIO87)
  • 17. Báo cáo thực tập Trang 16 Hình 21. Phân chia chức năng trên thanh ghi GPCMUX1 và GPCMUX2 Phân chia chức năng chân trên PORTC (GPIO64 – 79 : GPCMUX1; GPIO80 – 87 : GPCMUX2) 4. Định tính nhập dữ liệu GPIO (GPIO Input Qualification) Tính năng này được thiết lập trên các chân từ GPIO0 – GPIO63 hoạt động như một bộ lọc đầu vào thông thấp qua các tín hiệu đầu vào nhiễu, nó được điều khiển bởi một cặp thanh ghi bổ sung. Hình 22. Thanh ghi quyền lựa chọn GPxQSEL 5. Tổng hợp thanh ghi vào – ra Bảng 2. Các thanh ghi điều khiển GPIO F28335
  • 18. Báo cáo thực tập Trang 17 Thanh ghi Mô tả GPACTRL GPIO A – Thanh ghi điều khiển [GPIO0 – GPIO31] GPAQSEL1 GPIO A – Thanh ghi quyền lựa chọn 1 [GPIO0 – GPIO15] GPAQSEL2 GPIO A – Thanh ghi quyền lựa chọn 2 [GPIO16 – GPIO31] GPAMUX1 GPIO A – Thanh ghi đa hợp 1 [GPIO0 – GPIO15] GPAMUX2 GPIO A – Thanh ghi đa hợp 2 [GPIO16 – GPIO31] GPADIR GPIO A – Thanh ghi định hướng [GPIO0 – GPIO31] GPAPUD GPIO A – Thanh ghi vô hiệu hóa đẩy kéo [GPIO0 – GPIO31] GPBCTRL GPIO B – Thanh ghi điều khiển [GPIO32 – GPIO63] GPBQSEL1 GPIO B – Thanh ghi quyền lựa chọn 1 [GPIO32 – GPIO47] GPBQSEL2 GPIO B – Thanh ghi quyền lựa chọn 2 [GPIO48 – GPIO63] GPBMUX1 GPIO B – Thanh ghi đa hợp 1 [GPIO32 – GPIO47] GPBMUX2 GPIO B – Thanh ghi đa hợp 2 [GPIO48 – GPIO63] GPBDIR GPIO B – Thanh ghi định hướng [GPIO32 – GPIO63] GPBPUD GPIO B – Thanh ghi vô hiệu hóa đẩy kéo [GPIO32 – GPIO63] GPCMUX1 GPIO C – Thanh ghi đa hợp 1 [GPIO64 – GPIO79] GPCMUX2 GPIO C – Thanh ghi đa hợp 2 [GPIO80 – GPIO87] GPCDIR GPIO C – Thanh ghi định hướng [GPIO64 – GPIO87] GPCPUD GPIO C – Thanh ghi vô hiệu hóa kéo – đẩy [GPIO64 – GPOI87] Bảng 3. Các thanh ghi dữ liệu F28335 Thanh ghi Mô tả GPADAT GPIO A – Thanh ghi dữ liệu [GPIO0 – GPIO31] GPASET GPIO A – Thanh ghi thiết lập dữ liệu [GPIO0 – GPIO31] GPACLEAR GPIO A – Thanh ghi xóa dữ liệu [GPIO0 – GPIO31] GPATOGGLE GPIO A – Thanh ghi chốt [GPIO0 – GPIO31] GPBDAT GPIO B – Thanh ghi dữ liệu [GPIO32 – GPIO63] GPBSET GPIO B – Thanh ghi thiết lập dữ liệu [GPIO32 – GPIO63] GPBCLEAR GPIO B – Thanh ghi xóa dữ liệu [GPIO32 – GPIO63] GPBTOGGLE GPIO B – Thanh ghi chốt dữ liệu [GPIO32 – GPIO63] GPCDAT GPIO C – Thanh ghi dữ liệu [GPIO64 – GPIO87] GPCSET GPIO C – Thanh ghi thiết lập dữ liệu [GPIO64 – GPIO87] GPCCLEAR GPIO C – Thanh ghi xóa dữ liệu [GPIO64 – GPIO87] GPCTOGGLE GPIO C – Thanh ghi chốt dữ liệu [GPIO64 – GPIO87] 6. Module Clock F28335 Trước khi bắt đầu sử dụng chức năng I/O số, cần phải thiết lập module clock F28335. Giống như tất cả các bộ xử lý hiện đại, F28335 được điều khiển bên ngoài bằng máy phát xung đồng hồ chậm hơn nhiều hoặc dao động để giảm nhiễu điện từ. Các ControlCard F28335 trong các bài thực hành được thiết lập ở tần số 20MHz ngoại. Để đạt được các tần số nội 100 MHz, chúng ta phải sử dụng bằng cách nhân với hệ số 10, sau đó chia cho 2. Điều này được thực hiện bằng cách lập trình điều khiển thanh ghi PLL (PLLCR).
  • 19. Báo cáo thực tập Trang 18 Hình 23. Module clock F28335 Xung bộ đếm tốc độ cao (HISPCP) và tốc độ thấp (LOSPCP) được sử dụng như bộ chia xung đồng hồ bổ sung. Các đầu ra của hai bộ đếm được sử dụng như là nguồn đồng hồ cho các bộ phận ngoại vi. Có thể thiết lập hai bộ đếm riêng và độc lập. Hình 24. F28335 Clock Scaling Để sử dụng một bộ phận ngoại vi, phải cho phép phân phối xung đồng hồ bằng cách thiết lập các trường bit riêng lẻ của thanh ghi PCLKCRx. Trường bit GPIOIN_ENCLK cho phép các tín hiệu đồng hồ cho các bộ lọc các bậc đầu vào. Nếu đầu vào không được sử dụng, thì nó không cần thiết để cho phép.
  • 20. Báo cáo thực tập Trang 19 Hình 25. Đơn vị điều khiển xung clock F28335 7. Watchdog Timer Watchdog Timer là một bộ phận đếm chạy tự do gây nên một thiết lập lại nếu nó không được giải phóng định kỳ bằng một chuỗi lệnh cụ thể. Nó được sử dụng để nhận ra sự kiện mà chương trình được dời đi, được chỉ định thực hiện tuần tự, ví dụ: nếu chương trình bị treo. Hình 26. Module bộ định thời Watchdog Watchdog luôn kích hoạt khi DSP được cấp lên. Khi không giải phóng Watchdog định kỳ, nó sẽ kích hoạt một thiết lập lại. Một trong những phương pháp đơn giản nhất để đối phó với các Watchdog là vô hiệu hóa nó. Điều này được thực hiện bằng cách thiết lập bit 6 của thanh ghi WDCR lên 1. Tất nhiên đây không phải là một quyết định khôn ngoan, bởi vì Watchdog là một tính năng bảo mật và một dự án thực tế nên đề cao tính năng bảo mật.
  • 21. Báo cáo thực tập Trang 20 Bộ đếm Watchdog có thể được sử dụng để tăng chu kỳ tràn của Watchdog. Các bits kiểm tra logic (WDCHK) là một trường bit bảo mật. Tất cả ghi các truy cập vào thanh ghi WDCR phải bao gồm sự kết hợp 101 cho 3 trường bit này, nếu không truy cập bị từ chối và trạng thái RESET được kích hoạt ngay lập tức. Bit cờ Watchdog (WDFLAG) có thể được sử dụng để phân biệt giữa một ảnh hưởng bình thường trên RESET (WDFLAG = 0) và một thiết lập lại Watchdog (WDFLAG = 1). Để xóa cờ này bằng phần mềm thì phải thiết lập '1' vào bit này. Hình 27. Thanh ghi điều khiển Watchdog Cấu trúc lệnh: SysCtrlRegs.WDCR Bảng 4. Các giá trị ghi vào thanh ghi WDKEY: Các bước liên tiếp Giá trị được đặt cho WDKEY Kết quả 1 AAh Không hành động 2 AAh Không hành động 3 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp 4 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp 5 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp 6 AAh Bộ đếm WD được thiết lập lại 7 AAh Không hành động 8 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp 9 AAh Bộ đếm WD được thiết lập lại 10 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp 11 23h Không ảnh hưởng, bộ đếm WD không thiết lập lại AAh kế tiếp 12 AAh Không hành động vì giá trị tiếp theo không hợp lệ 13 55h Bộ đếm WD kích hoạt cho thiết lập lại AAh kế tiếp 14 AAh Bộ đếm WD được reset 8. Hệ thống điều khiển và thanh ghi trạng thái Thanh ghi SCSR điều khiển cho dù Watchdog gây ra thiết lập lại (WDENINT = 0) hoặc một yêu cầu ngắt dịch vụ (WDENINT = 1). Các trạng thái mặc định sau khi RESET là để kích hoạt một thiết lập lại. Bit WDOVERRIDE là bit chỉ xóa, có nghĩa là, một khi đã đóng switch bằng cách thiết lập 1 vào bit, thì không thể mở lại switch này một lần nữa. Tại thời điểm này các bit vô hiệu hóa WD không có tác dụng, vì vậy không có cách nào để vô hiệu hóa các Watchdog.
  • 22. Báo cáo thực tập Trang 21 Bit 2 (WDINTS) là bit chỉ đọc các cờ trạng thái của ngắt Watchdog. Hình 28. Thanh ghi trạng thái và điều khiển hệ thống Cấu trúc lệnh: SysCtrlRegs.SCSR V. Hệ thống ngắt và bộ định thời 1. Hệ thống ngắt a. Các đường ngắt Các hệ thống ngắt của F2833x bao gồm 16 đường ngắt; hai trong số đó được gọi là Non- Maskable (RESET, NMI), 14 đường khác là maskable - điều này cho phép người lập trình có thể cho phép hoặc vô hiệu hóa ngắt từ 14 đường này. Một mặt nạ là sự kết hợp nhị phân của 1 và 0. 1 là cho phép kích hoạt, 0 là vô hiệu hóa. Bằng cách nạp các mặt nạ vào trong thanh ghi IER thì có thể chọn đường ngắt sẽ được kích hoạt để yêu cầu một dịch vụ bị ngắt từ CPU. Đối với một ngắt Non-Maskable, chúng ta không thể vô hiệu hóa một yêu cầu ngắt. Một khi các đường tín hiệu đang hoạt động, các chương trình đang chạy sẽ bị treo và các dịch vụ thường xuyên ngắt riêng lẻ sẽ bắt đầu. Nói chung, ngắt non maskable được ưu tiên sử dụng cao. Hình 29. Lõi đường ngắt F28335 Tất cả 16 đường ngắt được nối với một bảng của vectơ ngắt, trong đó bao gồm 32 vị trí bộ nhớ bit cho mỗi ngắt. Nhiệm vụ của người lập trình là điền vào bảng này với các địa chỉ bắt đầu của các dịch vụ ngắt riêng lẻ. Với F28335, bảng này trong ROM và điền với địa chỉ được xác định bởi Texas Instruments.
  • 23. Báo cáo thực tập Trang 22 b. Reset F28335 Một sự thay đổi từ cao đến thấp ở bên ngoài chân RESET (RS) sẽ gây ra một thiết lập lại của bộ điều khiển tín hiệu số. Sườn lên kế tiếp RS sẽ buộc các CPU đọc địa chỉ bắt đầu từ 0x3F FFC0 trong bộ nhớ code. Sự kiện này không phải là một ngắt với ý nghĩa chương trình cũ sẽ được khôi phục lại. Một thiết lập lại được tạo ra trong quá trình cung cấp năng lượng cho các thiết bị. Một nguồn cho một reset tràn bộ định thời watchdog. Để thông báo cho tất cả các thiết bị bên ngoài khác mà CPU đã thừa nhận một thiết lập lại, các thiết bị tự điều khiển các chân hoạt động thấp. Điều này có nghĩa là chân reset phải có tính hai chiều. Hình 30. Nguồn ngắt F28335 Reset sẽ buộc bộ điều khiển không chỉ bắt đầu từ địa chỉ 0x3F FFC0, nhưng nó cũng sẽ xóa tất cả hoạt động của thanh ghi nội, thiết lập lại một nhóm cờ CPU-Flags để dập tắt các giai đoạn và vô hiệu hóa tất cả 16 đường ngắt. c. Thiết lập lại bộ nạp khởi động Sau khi một tín hiệu Reset đã được giải phóng, CPU bắt đầu thực hiện một phần mã đầu tiên trong ROM, được gọi là bộ nạp khởi động. Chức năng này xác định các bước tiếp theo, tùy thuộc vào tình trạng của bốn chân GPIO (GPIO 87, 86, 85 và 84). Hình 31. Reset – Bootloader Bảng 5. Các tùy chọn nạp khởi động GPIO Pins 87 86 85 84 XA15 XA14 XA13 XA12 1 1 1 1 Nhảy đến địa chỉ Flash 0x33 FFF6
  • 24. Báo cáo thực tập Trang 23 1 1 1 0 Nạp khởi động code đến bộ nhớ trên chip qua SCI-A 1 1 0 1 Nạp khởi động EEPROM ngoại đến bộ nhớ trên chip qua SPI-A 1 1 0 0 Nạp khởi động EEPROM ngoại đến bộ nhớ trên chip qua I2C 1 0 1 1 Gọi CAN_Boot để nạp từ hộp thư 1 eCAN-A 1 0 1 0 Nạp khởi động code đến bộ nhớ trên chip qua McBSP-A 1 0 0 1 Nhảy đến 6 địa chỉ vùng XINTF 0x10 0000 cho 16bit dữ liệu 1 0 0 0 Nhảy đến 6 địa chỉ vùng XINTF 0x10 0000 cho 32bit dữ liệu 0 1 1 1 Nhảy đến địa chỉ OTP 0x38 0400 0 1 1 0 Nạp khởi động code đến bộ nhớ trên chip qua cổng GPIO A (song song) 0 1 0 1 Nạp khởi động code đến bộ nhớ trên chip qua XINTF (song song) 0 1 0 0 Nhảy đến địa chỉ M0 SARAM 0x00 0000 0 0 1 1 Nhánh kiểm tra chế độ hoạt động 0 0 1 0 Nhánh Flash không cần hiệu chỉnh ADC (chỉ cần TI debug) 0 0 0 1 Nhánh M0 SARAM không cần hiệu chỉnh ADC (chỉ TI debug) 0 0 0 0 Nhánh SCI-A không cần hiệu chỉnh ADC (chỉ TI debug) + Reset CPU - buộc các DSC để Reset Địa chỉ 0x3F FFC0 + Restart - buộc các DSC trực tiếp để mã nhập điểm "_c_int00", bỏ qua các trình tự khởi động phần cứng + Go main - hoàn thành "_c_int00", gọi là "main" và dừng lại ở câu lệnh đầu tiên của main. Tóm tắt các dòng mã thiết lập cho các tùy chọn khởi động của F28335: Hình 32. Tóm lược reset các dòng code Bảng 6. Các bit trên thanh ghi được xác định bởi reset: Bit Địa chỉ PC 0x3F FFC0 PC được nạp với vector reset ACC 0x0000 0000 Bộ chứa được xóa XAR0 – XAR7 0x0000 0000 Các thanh ghi bổ trợ
  • 25. Báo cáo thực tập Trang 24 DP 0x0000 Con trỏ trang dữ liệu trỏ đến trang 0 P 0x0000 0000 Thanh ghi P được xóa XT 0x0000 0000 Thanh ghi XT được xóa SP 0x0400 Địa chỉ con trỏ ngăn xếp 0400 RPC 0x00 0000 Bộ đếm chương trình quay trở lại bị xóa IFR 0x0000 Không chờ các ngắt IER 0x0000 Vô hiệu hóa ngắt maskable DBGIER 0x0000 Vô hiệu hóa các ngắt debug Tất cả thanh ghi toán nội (ACC, P, XT) và thanh ghi bổ trợ (XAR0 để XAR7) sẽ bị xóa, ngắt bị vô hiệu hóa (IER) và cấp phát ngắt, mà đã được yêu cầu trước khi reset, bị hủy bỏ (IFR). Con trỏ ngăn xếp (SP) được khởi tạo địa chỉ 0x400 và bộ đếm chương trình (PC) trỏ tới địa chỉ phần cứng bắt đầu là 0x3F FFC0. Hai thanh ghi ST0 và ST1 kết hợp điều khiển tất cả cờ trạng thái của CPU. ST0 chứa tất cả các bit toán như bằng không (Z), thực hiện (C) và dấu âm (N), trong khi ST1 bao gồm một số bit chế độ hoạt động tổng quát hơn. Bảng 7. Các bit điều khiển khởi tạo ở reset Thanh ghi trạng thái 0 (ST0) SXM = 0 Dấu hiệu mở rộng giảm OVM = 0 Chế độ tràn giảm N = 0 Cờ phủ định TC = 0 Kiểm tra / điều khiển cờ V = 0 Bit tràn C = 0 Bit mang PM = 000 Thiết lập dịch trái 1 Z = 0 Cờ 0 OVC = 00 0000 Bộ đếm tràn Thanh ghi trạng thái 1 (ST1) INTM = 1 Vô hiệu hóa tất cả các ngắt maskable – toàn cục DBGM = 1 Vô hiệu hóa mô phỏng truy cập / các sự kiện PAGE0 = 0 Chế độ cho phép giải quyết ngăn xếp / trực tiếp giải quyết vô hiệu hóa VMAP = 1 Các vector ngắt được ánh xạ đến PM 0x3F FFC0 – 0x3F FFFF SPA = 0 Con trỏ ngăn xếp liên kết địa chỉ bit trạng thái LOOP = 0 Lệnh lặp bit trạng thái EALLOW = 0 Cho phép truy cập bit mô phỏng IDLESTAT = 0 Lệnh chờ bit trạng thái AMODE = 0 Chế độ giải quyết C27x / C28x OBJMODE = 0 Chế độ đối tượng C27x M0M1MAP = 1 Chế độ ánh xạ bit XF = 0 Bit trạng thái XF ARP = 0 ARP trỏ đến AR0 d. Nguồn ngắt
  • 26. Báo cáo thực tập Trang 25 Hình 33. Nguồn ngắt Bảng vector ngắt được mở rộng với quy mô lớn hơn, đặt mục 32 bit riêng lẻ cho mỗi 96 nguồn ngắt có thể. Một phản ngắt với sự trợ giúp của các bộ phận này nhanh hơn nhiều so với không có nó. Để sử dụng PIE ta phải làm lại bản đồ vị trí của bảng vector ngắt đến địa chỉ 0x00 0D00. Đây là trong bộ nhớ không ổn định. Trước khi có thể sử dụng bộ nhớ này thì phải khởi tạo nó. e. Xử lý ngắt Maskable Thanh ghi cờ ngắt IFR Hình 34. Thanh ghi cờ ngắt
  • 27. Báo cáo thực tập Trang 26 Hình 35. Thanh ghi cho phép ngắt Bit ngắt toàn cục Mask Hình 36. Bit ngắt mặt nạ toàn cục f. Khuếch đại ngắt ngoại vi Tất cả 96 nguồn ngắt có thể được nhóm lại thành 12 đường PIE, 8 nguồn trên mỗi đường. Để bật / tắt nguồn riêng lẻ, có một nhóm chương trình khác nhau của thanh ghi: PIEIFRx và PIEIERx. Hình 37. Mở rộng ngắt ngoại vi - PIE
  • 28. Báo cáo thực tập Trang 27 Hình 38. Các thanh ghi PIE Hình 39. Bảng phân chia các ngắt PIE Ví dụ: ADCINT = INT1.6; T2PINT = INT1.3; SCITXINTA = INT9.2; Bảng vị trí vector khi reset:
  • 29. Báo cáo thực tập Trang 28 Hình 40. Bảng vector ngắt mặc định khi reset Hình 41. Bản đồ vector PIE (ENPIE = 1) g. Phản ứng ngắt phần cứng liên tục
  • 30. Báo cáo thực tập Trang 29 Hình 42. Phản ứng ngắt – phần cứng liên tiếp Hình 43. Ngắt trễ 2. Bộ định thời F28335 được đặc trưng bởi 3 bộ định thời 32bit độc lập nhau Hình 44. Bộ định thời CPU F28335 INT
  • 31. Báo cáo thực tập Trang 30 Các nguồn xung đồng hồ là nguồn nội SYSCLKOUT, mà thường là 150MHz, giả sử một bộ dao động bên ngoài 30MHz và một PLL-tỷ lệ 10/2. Một khi thời gian được kích hoạt (TCR-bit 4 = 0), đồng hồ đếm ngược đến một bộ đếm 16-bit (PSCH: PSC). Tín hiệu mượn được sử dụng để đếm xuống bộ đếm 32bit (TIMH: TIM). Vào cuối, khi bộ đếm thời gian này tràn xuống, một yêu cầu ngắt được chuyển lên cho CPU. Thanh ghi bộ chia 16-bit (TDDRH: TDDR) được sử dụng như một thanh ghi nạp lại cho bộ đếm. Mỗi lần bộ đếm tràn xuống, giá trị từ thanh ghi bộ chia được nạp lại vào bộ đếm prescalser. Một chức năng nạp lại tương tự cho các bộ đếm được thực hiện bởi các chu kỳ thanh ghi 32bit (PRDH_PRD). Timer1 và Timer 2 thường được sử dụng bởi Texas Instruments cho hệ thống hoạt động thời gian thực DSP / BIOS, trong khi Timer 0 thương được sử dụng tự do. Hệ thống ngắt timer F28335 Hình 45. Ngắt 28335 Hình 46. Thanh ghi Timer F28335
  • 32. Báo cáo thực tập Trang 31 Hình 47. Thanh ghi điều khiển timer TIMERxTCR VI. Điều chế độ rộng xung - PWM (Pulse Width Modulation) 1. Sơ đồ khối ePWM ePWM là viết tắt của cụm từ enhanced Pulse Width Modulation có nghĩa là điều chế độ rộng xung tăng cường. Mỗi đơn vị ePWM được kiểm soát bởi khối logic riêng của nó. Khối logic này có thể tự động tạo ra các tín hiệu về các sự kiện thời gian khác nhau và cũng yêu cầu các dịch vụ bị ngắt khác nhau từ hệ thống ngắt F28335 PIE, để hỗ trợ các chế độ hoạt động của nó. Một tính năng độc đáo của module ePWM là khả năng bắt đầu bộ chuyển đổi tương tự - số (ADC) mà không cần thêm phần mềm tương tác, trực tiếp từ một sự kiện phần cứng bên trong. Một vi điều khiển thông thường sẽ phải yêu cầu một dịch vụ ngắt để làm như vậy; F28335 thực hiện điều này tự động. 2. Đơn vị cơ sở ePWM Khối trung tâm của một đơn vị ePWM là một bộ định thời 16bit (thanh ghi TBCTR), với tín hiệu SYSCLKOUT như thời gian cơ sở. Tùy vào việc khởi tạo các lõi chạy với tần số 100MHz hoặc 150MHz, phụ thuộc vào xung đồng hồ bên ngoài của F28335, tần số này thiết lập thời gian cơ bản cho tất cả các đơn vị ePWM.
  • 33. Báo cáo thực tập Trang 32 Một prescaler clock (thanh ghi TBCTL, bit 7 – 12) có thể được sử dụng để giảm tần số đếm đầu vào bằng một hệ số có thể lựa chọn từ 1 đến 1792. Thanh ghi TBPRD xác định độ dài của một chu kỳ tín hiệu đầu ra, gấp nhiều lần khoảng thời gian của tín hiệu đầu vào. Một tính năng độc đáo của F28335 là "shadow" chức năng của thanh ghi hoạt động, trong trường hợp của các đơn vị ePWM sẵn sàng để so sánh thanh ghi A, B và thanh ghi chu kỳ. Đối với một số ứng dụng nó là cần thiết để thay đổi các giá trị bên trong một so sánh hoặc thanh ghi chu kỳ, mỗi chu kỳ. 3. Pha đồng bộ ePWM Hai tín hiệu phần cứng SYNCI (đồng bộ trong) và SYNCO (đồng bộ ra) có thể được sử dụng để đồng bộ hóa các đơn vị ePWM với nhau. Ví dụ, chúng ta có thể xác định một đơn vị ePWM như là một master để tạo ra một tín hiệu đầu ra SYNCO mỗi khi truy cập bằng thời gian. Hai đơn vị ePWM hoặc nhiều hơn hơn có thể được khởi tạo để nhận biết tín hiệu này như SYNCI và bắt đầu đếm ngay lập tức, mỗi khi chúng nhận được tín hiệu này. Bằng cách đó, có thể thiết lập một bộ đồng bộ của 3 kênh ePWM. Bằng cách sử dụng thanh ghi khác gọi là TBPHS, có thể tạo ra một sự lệch pha giữa master, slave 1 và slave 2, thực sự cần thiết cho hệ thống điều khiển ba pha. Hình 48. Pha đồng bộ ePWM
  • 34. Báo cáo thực tập Trang 33 Trong hình trên, thanh ghi TBCNT của ePWM2 và ePWM3 được nạp sẵn với một giá trị khởi đầu tương ứng với 120° và 240° tương ứng. ePWM1 đã được khởi tạo như là master để tạo SYNCO mỗi lần bộ đếm thanh ghi bằng 0. Đặc tính pha đầu vào được kích hoạt cho ePWM2 và ePWM3 hai kênh hoạt động như slave 1 và slave 2 và sẽ được nạp vào bộ đếm thanh ghi TBCNT với những số được lưu trong thanh ghi pha TBPHS tương ứng. Ví dụ: + ePWM1 counts from 0 to 6000. TBPRD = 6000 + ePWM2 register TBPHS = 2000 + ePWM3 register TBPHS = 4000 4. Chế độ hoạt động định thời Mỗi module ePWM có thể hoạt động ở một trong ba chế độ tính khác nhau, được lựa chọn bởi bit 1 và 0 của thanh ghi TBCTL: + Chế độ đếm tiến + Chế độ đếm lùi + Chế độ đếm tiến lùi Hình 49. Chế độ đếm thời gian cơ bản Trong ba chế độ được sử dụng chủ yếu là được xác định bởi các ứng dụng. Hai chế độ hoạt động đầu tiên được gọi là đối xứng bởi vì trong các hình dạng của mô hình đếm từ 0 đến TBPRD (đếm lên) hoặc từ TBPRD về 0 (đếm ngược). Ngoài ra, trong một hệ thống ba pha, có thể xác định ba sự kiện thời gian khác nhau giữa 0 và TBPRD để chuyển đổi một pha tín hiệu đầu ra để ON và sử dụng sự phù hợp giữa TBCNT và TBPRD chuyển OFF cả ba pha cùng một lúc, do đó tạo ra một hình dạng không đối xứng của các tín hiệu chuyển đổi. Trong chế độ dạng sóng đối xứng, thanh ghi TBCNT bắt đầu từ 0 đếm cho đến khi nó bằng TBPRD. Sau đó TBCNT chuyển hướng để đếm ngược trở về số không để kết thúc một chu kỳ đếm. 5. Thanh ghi định thời cơ sở Tên Mô tả Cấu trúc TBCTL Điều khiển thời gian cơ sở EPwmxRegs.TBCTL.all = TBSTS Trạng thái thời gian cơ sở EPwmxRegs.TBSTS.all = TBPHS Pha thời gian cơ sở EPwmxRegs.TBPHS = TBCTR Bộ đếm thời gian cơ sở EPwmxRegs.TBCTR = TBPRD Chu kỳ thời gian cơ sở EPwmxRegs.TBPRD =
  • 35. Báo cáo thực tập Trang 34 Mục đích của ePWMs này định nghĩa 6 cấu trúc EPwm1Regs đến EPwm6Regs, bao gồm tất cả các thanh ghi thuộc về một trong những bộ phận phần cứng. Thời gian liên quan đến thanh ghi như thanh ghi chu kỳ có thể được truy cập trực tiếp, ví dụ để xác định một khoảng thời gian đếm 6000 xung có thể sử dụng: Epwm1Regs.TBPRD = 6000; Đối với thanh ghi điều khiển, như TBCTL, các thành phần cấu trúc đã được định nghĩa như là union. Kỹ thuật này cho phép truy cập vào thanh ghi vi khối (thành phần union “all”) hoặc các nhóm bit cá nhân (thành phần union "bit"). Ví dụ, một dòng để ghi thanh ghi TBCTL đầy đủ sẽ giống như thế này: EPwm1Regs.TBCTL.all = 0x1234; Một trường bit truy cập vào các trường CLKDIV sẽ chỉ thấy như này: EPwm1Regs.TBCTL.bit.CLKDIV = 7; 6. Thanh ghi điều khiển cơ sở TBCTL Thanh ghi master điều khiển cho một đơn vị ePWM là thanh ghi TBCTL Hình 50. Các bit cao của thanh ghi TBCTL FREE_SOFT: + Điều khiển sự tương tác giữa DSC và JTAG - Emulator. + Nếu trình tự thực hiện của code truy cập một breakpoint, thì có thể xác định những gì nên xảy ra với đơn vị ePWM này. PHSDIR: + Xác định rõ nếu đơn vị ePWM này bắt đầu đếm lên hoặc xuống sau một xung SYNC đã được nhìn thấy. + Trong trường hợp một thiết lập ePWM duy nhất với tính năng vô hiệu hóa đồng, bit này là don’t care. CLKDIV và HSPCLKDIV: + Trường bit Prescaler giảm tần số đầu vào SYSCLKOUT. + Đối với một hệ thống 100MHz mỗi xung chuyển thành 10ns, với hệ thống 150MHz mỗi xung chuyển thanh 6,667ns.
  • 36. Báo cáo thực tập Trang 35 Hình 51. Các bit thấp thanh ghi TBCTL SWFSYNC: Một lệnh mà thiết lập bộ bit này sẽ ngay lập tức tạo ra một xung SYNC từ đơn vị này ePWM. SYNCOSEL: Lựa chọn nguồn cho tín hiệu SYNC. Nếu không có đồng bộ hóa kênh được sử dụng, tắt tính năng này. PRDLD: Cho phép 0 hoặc vô hiệu hóa 1 vùng tối chức năng của thanh ghi TBPRD. Nếu tắt, tất cả các lệnh ghi vào TBPRD sẽ trực tiếp thay đổi thanh ghi thời gian. Nếu được kích hoạt, một lệnh ghi sẽ lưu trữ một giá trị mới trong vùng tối. Với các sự kiện CTR = 0 tiếp theo giá trị vùng tối sẽ được nạp vào TBPRD tự động PHSEN: Cho phép 1 nạp trước của thanh ghi TBCTR từ TBPHS bởi kích hoạt SYNCIN. CTRMODE: Xác định các chế độ hoạt động của đơn vị ePWM này 7. Thanh ghi trạng thái cơ sở TBSTS Thanh ghi cờ trạng thái hiên tại của đơn vị ePWM: Hình 52. Thanh ghi TBSTS CTRDIR: Cho biết, nếu ePWM đếm lên 1 hoặc xuống 0 SYNCI: Nếu một sự kiện SYNCI đã được thấy bởi đơn vị ePWM này, bit này là 1, nếu không, nó là 0. Để xóa bit này, phải viết 1 vào nó. CTRMAX: Nếu vì một số lý do bộ đếm 16-bit thanh ghi TBCTR bị tràn, bit CTRMAX sẽ được thiết lập lên 1. Trong những trường hợp bình thường điều này không nên xảy ra, vì vậy có thể xử lý bit này như một tín hiệu cảnh báo bảo mật. Để xóa bit này, phải viết 1 vào nó.
  • 37. Báo cáo thực tập Trang 36 8. Công thức tính giá trị định nghĩa tần số tín hiệu (TBPRD) 1 1 2 2 PWM TSYSCLKOUT SYSCLKOUT PWM T f TBPRD T CLKDIV HSPCLKDIV f CLKDIV HSPCLKDIV       Trong đó: + TBPRD: Giá trị định nghĩa tần số tín hiệu + TPWM: Chu kỳ tín hiệu + TSYSCLKOUT: Chu kỳ hoạt động của vi điều khiển + fPWM: Tần số của tín hiệu + fSYSCLKOUT: Tần số hoạt động của vi điều khiển + CLKDIV: Giá trị TB Clock Prescale, thường chọn mặc định bằng 1. + HSPCLKDIV: Giá trị High Speed TB Clock Prescale, thường chọn mặc định bằng 2. VII. Bộ chuyển đổi tương tự - số ADC (Analogue to Digital Converter) 1. Module ADC Một trong những bộ phận ngoại vi quan trọng của một bộ điều khiển nhúng là chuyển đổi tương tự sang số ADC. Bộ phận này cung cấp một giao diện giữa bộ điều khiển và thế giới thực. Hầu hết các tín hiệu vật lý như nhiệt độ, độ ẩm, áp suất, hiện tại, tốc độ và khả năng tăng tốc là tín hiệu tương tự. Với sự trợ giúp của các bộ chuyển đổi thích hợp, gần như tất cả trong số này có thể được biểu diễn như là một điện áp giữa Vmin và Vmax, ví dụ 0 ... 3V, đó là tỷ lệ thuận với tín hiệu ban đầu. Mục đích của ADC là để chuyển đổi điện áp tương tự này sang dạng số. Mối quan hệ giữa điện áp đầu vào tương tự (Vin), số lượng các chữ số nhị phân để đại diện cho số kỹ thuật số (n) và số lượng kỹ thuật số (D) được cho bởi: ( ) 2 1 REF REF in REFn D V V V V       VREF+ và VREF- là điện áp tham chiếu và được sử dụng để giới hạn phạm vi điện áp tương tự. Bất kỳ điện áp đầu vào, ngoài các điện áp tham chiếu sẽ sản xuất một số kỹ thuật số bão hòa. Với F28335, VREF- điện áp cố định ở 0V và VREF+ được kết nối đến +3.0V. ADC nội có độ phân giải 12bit (n = 12) cho số lượng kỹ thuật số D. Điều này cho phép một phương trình đơn giản hóa: *3.0 4095 in D V V  2. Chế độ hoạt động ADC Các module ADC có thể hoạt động trong các thiết lập khác nhau. Một chế độ hoạt động luôn luôn là một sự kết hợp của ba lựa chọn khác nhau cơ bản: + Chế độ tuần tự + Chế độ lấy mẫu + Chế độ khởi động Bằng cách chọn đồng thời lấy mẫu cho chế độ lấy mẫu ta chuyển đổi 2 tín hiệu đầu vào tương tự cùng một lúc. Nếu chọn tuần tự lấy mẫu chỉ có một kênh đầu vào ghép được chuyển đổi cùng một lúc. Cuối cùng bằng cách chọn chế độ trình tự đơn (hoặc chế độ bắt đầu / dừng) chuỗi tự động bắt đầu vào tín hiệu đầu vào kích hoạt đầu tiên, thực hiện các số được xác định trước chuyển đổi và dừng lại ở phần cuối của chuỗi chuyển đổi này - sau đó để chờ đợi một kích hoạt thứ hai. Trong chế độ liên tục chuỗi tự động bắt đầu trên một lần nữa vào cuối của chuỗi chuyển đổi đầu tiên mà không cần chờ đợi một tín hiệu kích hoạt đầu vào. 3. Chế độ thác lũ
  • 38. Báo cáo thực tập Trang 37 Một sự điều khiển tự động tuần tự dòng chảy của sự chuyển đổi. Trước khi bắt đầu một chuyển đổi, thì phải thiết lập số lượng chuyển đổi (MAX_CONV1) và có đầu vào dòng phải được chuyển đổi trong giai đoạn (CHSELxx). Các kết quả được đệm vào sổ thanh ghi kết quả riêng lẻ (RESULT0 đến RESULT15) cho từng giai đoạn. Có thể lựa chọn giữa hai lựa chọn: lấy mẫu đồng thời và lấy mẫu tuần tự. Trong trường hợp lấy mẫu đồng thời, cả hai mẫu và các bộ phận được sử dụng song song. Hai dòng đầu vào với các mã đầu vào tương tự (ví dụ ADCINA3 và ADCINB3) được chuyển đổi cùng một lúc bởi giai đoạn CONV00. Trong chế độ tuần tự, các dòng đầu vào có thể được kết nối với bất kỳ của các giai đoạn tự động tuần tự. Có thể sử dụng ngắt ADC sau khi kết thúc một chuỗi (hoặc cho một số ứng dụng vào cuối mỗi chuỗi khác) để đọc ra kết quả trên mỗi khối thanh ghi. 4. Chế độ tuần tự kép
  • 39. Báo cáo thực tập Trang 38 Chế độ này sử dụng tín hiệu ePWM_SOC_A (bắt đầu của chuyển đổi A) như là sự kích hoạt phần cứng cho SEQ1 và ePWM_SOC_B cho SEQ2. Để mã hóa các kênh đầu vào cho từng giai đoạn riêng lẻ của hai trình tự, ta có thể tự do lựa chọn bất kỳ trong số 16 đầu vào đối với bất kỳ của các giai đoạn 2x8. Thanh ghi RESULT0 đến RESULT7 chứa các giá trị từ SEQ1 và thanh ghi RESULT8 đến RESULT15 cho SEQ2. Lý do cho sự phân chia này là có hai bộ ADC độc lập, kích hoạt bằng cách riêng của trên cơ sở điều khiển thời gian cho SEQ1 và SEQ2. Trong trường hợp một sự bắt đầu đồng thời của SEQ1 và SEQ2 các Sequencer Arbiter sẽ chăm sóc của tình trạng này. Trong SEQ1 sự kiện này có ưu tiên cao hơn; đầu SEQ2 sẽ bị trì hoãn cho đến cuối của chuỗi chuyển đổi SEQ1 5. Thời gian chuyển đổi ADC Có một số hạn chế khi thiết lập thời gian chuyển đổi ADC. Đầu tiên, các nguồn đồng hồ cơ bản cho ADC là đồng hồ SPCLK nội. Đồng hồ này có nguồn gốc từ các dao động bên ngoài, nhân bởi PLLCR và chia bởi HISPCP. Hạn chế thứ hai là tần số tối đa cho FCLK như các tín hiệu đầu vào nội bộ cho các đơn vị ADC. Tại thời điểm này tín hiệu này được giới hạn 25MHz. Để thiết lập FCLK phải khởi tạo các trường bit ADCCLKPS cho phù hợp. Bit CPS cung cấp cho các tùy chọn khác chia cho 2. ADCCLK đồng hồ cung cấp thời gian cơ sở cho các đường ống xử lý nội bộ của ADC. Hạn chế thứ ba là cửa sổ lấy mẫu điều khiển bởi các trường ACQ_PS. Nhóm các bit xác định chiều dài của cửa sổ được sử dụng giữa nhiều switch và thời gian khi lấy mẫu (hoặc đóng băng) điện áp đầu vào. Thời gian này phụ thuộc vào trở kháng dòng của tín hiệu đầu vào. 6. Khối thanh ghi ADC Ba thanh ghi điều khiển ADCTRL1 tới ADCTRL3 được sử dụng để thiết lập một trong những điều kiện hoạt động khác nhau của các đơn vị ADC. Thanh ghi ADCST bao gồm trạng thái hiện tại của ADC. Thanh ghi Mô tả ADCTRL1 ADC – Thanh ghi điều khiển 1 ADCTRL2 ADC – Thanh ghi điều khiển 2 ADCTRL3 ADC – Thanh ghi điều khiển 3 ADCMAXCONV ADC – Thanh ghi kênh chuyển đổi tối đa
  • 40. Báo cáo thực tập Trang 39 ADCCHSELSEQ1 ADC – Thanh ghi điều khiển chọn kênh tuần tự 1 ADCCHSELSEQ2 ADC – Thanh ghi điều khiển chọn kênh tuần tự 2 ADCCHSELSEQ3 ADC – Thanh ghi điều khiển chọn kênh tuần tự 3 ADCCHSELSEQ4 ADC – Thanh ghi điều khiển chọn kênh tuần tự 4 ADCASEQSR ADC – Thanh ghi trạng thái tự động tuần tự ADCRESULT0 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 0 ADCRESULT1 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 1 ADCRESULT2 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 2 … … ADCRESULT14 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 14 ADCRESULT15 ADC – Thanh ghi chuyển đổi kết quả bộ đệm 15 ADCREFSEL ADC – Thanh ghi chọn điện áp tham chiếu ADCOFFTRIM ADC – Thanh ghi cắt phần bù ADCST ADC – Thanh ghi cờ và trạng thái a. Thanh ghi điều khiển ADCTRL1 Cấu trúc biến trong C: AdcRegs.ADCTRL1 Hình 53. Các bit trên của thanh ghi ADCTRL1 Bit 14 (RESET) có thể được sử dụng để thiết lập lại hoàn toàn các đơn vị ADC về trạng thái ban đầu. Nó luôn là điều tốt để áp dụng một lệnh RESET trước khi khởi tạo ADC. Không thể khởi tạo các phần còn lại của thanh ghi này với những lệnh giống nhau, khi thiết lập lại ADC - nên sử dụng các lệnh kế tiếp để khởi tạo ADCTRL1. Bit 13 và 12 (SUSMOD) xác định sự tương tác giữa các ADC và một lệnh giả lập. Bit 8 đến 11 (ACQ_PS) xác định độ dài của cửa sổ mẫu. Bit 7 (CPS) được sử dụng để phân chia tần số đầu vào bằng 1 hoặc 2
  • 41. Báo cáo thực tập Trang 40 Hình 54. Các bit thấp thanh ghi ADCTRL1 Bit 6 (CONT_RUN) xác định sự tuần tự tự động bắt đầu vào cuối của một chuỗi (= 0) và đợi cho trigger khác hoặc nếu trình tự cần bắt đầu lại ngay lập tức (= 1). Bit 5 (SEQ_OVRD) định nghĩa hai tùy chọn khác nhau cho chế độ liên tục. Bit 4 (SEQ_CASC) là chuỗi bit / tầng. Nó định nghĩa các chế độ tuần tự là máy tính trạng thái với 16 trạng thái (SEQCASC = 1), hoặc hoạt động như hai máy tính trạng thái độc lập từng có 8 trạng thái (SEQ_CASC = 0). b. Thanh ghi điều khiển ADCTRL2 Cấu trúc biến trong C: AdcRegs.ADCTRL2 Hình 55. Các bit cao thanh ghi ADCTRL2 Nửa trên của thanh ghi ADCTRL2 chịu trách nhiệm điều khiển chế độ hoạt động của bộ sắp xếp SEQ1. Thiết lập bit 15 (ePWM_SOCB_SEQ) cho phép tầng sắp xếp thứ tự được bắt đầu bằng một tín hiệu ePWM_SOCB. Các bit không làm việc trong chế độ Dual Sequencer (xem bit 0). Sử dụng Bit 14 (RST_SEQ1), ta có thể thiết lập lại máy tính trạng thái của SEQ1 về trạng thái ban đầu của nó. Điều ngày có nghĩa rằng sự kích hoạt tiếp theo sẽ bắt đầu một chuyển đổi mới của kênh được định nghĩa trong CONV00. Thiết lập bit 13 (SOC_SEQ1) là 1, sẽ thực hiện việc bắt đầu chuyển đổi dưới sự điều khiển của phần mềm. Bit 11 (INT_ENA_SEQ1) và 10 (INT_MOD_SEQ1) xác định chế độ ngắt của SEQ1. Có thể xác định xem liệu có một yêu cầu ngắt mỗi khi kết thúc chuỗi (EOS) hoặc khác (EOS).
  • 42. Báo cáo thực tập Trang 41 Bit 8 (ePWM_SOCA_SEQ1) là bit mặt nạ để cho phép tín hiệu ePWM SOCA sẽ được sử dụng như sự kích hoạt bộ chuyển đổi. Hình 56. Các bit thấp của thanh ghi ADCTRL2 Các byte thấp của ADCTRL2 là tương tự như nửa trên của nó: nó điều khiển chuỗi SEQ2. Thiết lập bit 7 cho phép một ADC tự động chuyển đổi tuần tự được bắt đầu bởi một tín hiệu từ GPIO cổng A, chân GPIO0 - 31 cấu hình như XINT2 trong thanh ghi GPIOXINT2SEL. Bit 0 đến bit 0: Phần còn lại của ADCTRL2 tương tự như bit 14 ... 8 ở nửa trên của thanh ghi. Tuy nhiên chúng được sử dụng để khởi tạo các chế độ hoạt động của SEQ2. c. Thanh ghi điều khiển ADCTRL3 Cấu trúc biến trong C: AdcRegs.ADCTRL3 Hình 57. Thanh ghi ADCTRL3 Bit 0 chọn chế độ lấy mẫu là tuần tự hoặc đồng thời (trong chế độ đồng thời hai tín hiệu đầu vào tương tự được chuyển đổi song song). Ví dụ: Để chuyển đổi tín hiệu ADCINA4 và ADCINB4 song song, khởi tạo các giá trị: + SMODE_SEL = 1 // lấy mẫu đồng thời + MAXCONV = 0 // SMODE_SEL = 1 // + CONV00 = 4 // số kênh cho ADCINA4
  • 43. Báo cáo thực tập Trang 42 Sau khi chuyển đổi hoàn thành, thanh ghi RESULT0 sẽ chứa giá trị cho ADCINA4 và thanh ghi RESULT1 chứa kết quả cho ADCINB4. Bit 1 - 4 sẽ khởi tạo FCLK như đồng hồ cơ bản của module ADC. Bit 5 là chuyển đổi năng lượng chính cho các mạch tương tự bên trong thiết bị. Bằng cách thiết lập bit này, hiệu suất của ADC được tăng lên trừ khe hở năng lượng và mạch tham chiếu. Bit 7-6 điều khiển khoảng trống dải ADC và điện áp tham chiếu điện xuống chuỗi các hệ thống điện áp tham chiếu nội bộ: + Bit 7-6 = 00: dải khoảng trống và mạch tham chiếu ngắt nguồn. + Bit 7-6 = 11: dải khoảng trống và mạch tham chiếu được cấp nguồn. d. Thanh ghi kênh tối đa chuyển đổi MAXCONV (Maximum Conversion Channels Register) MAXCONV xác định số lượng các giai đoạn chuyển đổi của chuỗi tự động. Sau khi một tín hiệu kích hoạt hợp lệ, Auto sequencer sẽ chuyển đổi số được xác định trước của các kênh tự động. Số trường thanh ghi bit tương ứng với số lần chuyển đồi trừ 1. Ví dụ: MAXCONV = 4; // nghĩa là 5 chuyển đổi với số kênh đầu vào được mã hóa trong trường bit CONV00 đến CONV04 của thanh ghi ADCCHSELSEQ1 và ADCCHSELSEQ2. Cấu trúc biến trong C: AdcRegs.ADCMAXCONV Hình 58. Thanh ghi ADCMAXCONV Nếu sử dụng chế độ Dual Sequencer việc giải thích thanh ghi MAXCONV thay đổi một chút. Trong chế độ này bit 0-2 được sử dụng để xác định số lượng các chuyển đổi trong chuỗi SEQ1 và bit 4-6 được sử dụng cho SEQ2. Trong chế độ này mỗi chuỗi có một số lượng tối đa 8 chuyển đổi, do đó giới hạn tới 3 bit trong MAXCONV. Chuỗi tự động hoạt động như một máy tính trạng thái bắt đầu với một trạng thái ban đầu và xử lý sau mỗi lần chuyển đổi sang kế tiếp. Nguyên tắc này tiếp tục cho đến khi máy trạng thái kết thúc hoặc thiết lập lại các con trỏ máy trạng thái trở lại trạng thái khởi tạo (bit 14 và bit 6 của ADCTRL2). Nếu không thiết lập lại và máy đã đạt đến trạng thái kết thúc, nó sẽ bao bọc lại đến trạng thái 0 tự động. e. Thanh ghi chọn kênh ADC đầu vào ADCCHSELSEQ
  • 44. Báo cáo thực tập Trang 43 Hình 59. Thanh ghi ADCCHSELSEQ Các nhóm bốn thanh ghi ADCCHSELSEQ1 ... 4 được sử dụng để xác định số nhị phân của các kênh đầu vào ADCINA0 ... ADCINB7 bằng 16 nhóm 4-bit CONV00 ... CONV15. Có thể sử dụng lên đến 16 giai đoạn trong sắp xếp thứ tự tự động. Các giai đoạn này tương ứng với CONV00 để CONV15. Tất cả những gì phải làm là điền vào những con số chính xác cho các kênh đầu vào tương tự. Ví dụ: chuyển đổi của 5 kênh trong một tuần tự: + ADCINA6, ADCINB1, ADCINA2, ADCINA0 and ADCINB6 o CONV00 = 6 o CONV01 = 9 o CONV02 = 2 o CONV03 = 0 o CONV04 = 14 f. Thanh ghi thiết lập kết quả ADCRESULT Hình 60. Thanh ghi ADCRESULT 12bit số kết quả có sẵn trong hai phần bộ nhớ khác nhau. Thanh ghi ADCRESULTn được hợp lý trái khi đọc từ khung ngoại vi 2 (0x7108 - 0x7117; biến C toàn cục AdcRegs) với hai trạng thái chờ và hợp lý phải khi đọc từ khung ngoại vi 0 (0x0B00 - 0x0B0F; biến C toàn cục AdcMirror) với trạng thái chờ 0. Kết quả hợp lý trái thuận lợi khi điều khiển hệ thống hoạt động từng phần.
  • 45. Báo cáo thực tập Trang 44 g. Thanh ghi chọn điện áp tham chiếu ADCREFSEL Để chuyển đổi giữa các điện áp ADC tham chiếu nội hay bên ngoài, chúng ta có thể sử dụng thanh ghi ADCREFSEL. Cấu trúc biến trong C: AdcRegs.ADCREFSEL VIII.Các chức năng khác Giống như những vi điều khiển lập trình khác, họ vi điều khiển TMS320F28335 cũng bao gồm các chức năng như giao tiếp SPI, I2C, SCI, truyền thông nối tiếp UART, … Tuy nhiên trong phạm vi tìm hiểu của đề tài nên không đề cập đến các chức năng này. IX. Một số chương trình mẫu 1. Chương trình vào ra, hiển thị trên các led được kết nối đến các chân 9, 11, 34, 49. #include "DSP2833x_Device.h" void Gpio_select(void); void InitSystem(void); void delay_loop(long); void main(void) { int counter=0; InitSystem(); DINT; Gpio_select(); while(1) { counter++; if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1; if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1; if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1; delay_loop(1000000); } }
  • 46. Báo cáo thực tập Trang 45 void delay_loop(long end) { long i; for (i = 0; i < end; i++) { asm(" NOP"); EALLOW; SysCtrlRegs.WDKEY = 0x55; SysCtrlRegs.WDKEY = 0xAA; EDIS; } } void Gpio_select(void) { EALLOW; GpioCtrlRegs.GPAMUX1.all = 0; GpioCtrlRegs.GPAMUX2.all = 0; GpioCtrlRegs.GPBMUX1.all = 0; GpioCtrlRegs.GPBMUX2.all = 0; GpioCtrlRegs.GPCMUX1.all = 0; GpioCtrlRegs.GPCMUX2.all = 0; GpioCtrlRegs.GPADIR.all = 0; GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; GpioCtrlRegs.GPBDIR.all = 0; GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; GpioCtrlRegs.GPCDIR.all = 0; EDIS; } void InitSystem(void) { EALLOW; SysCtrlRegs.WDCR = 0x0028; SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; SysCtrlRegs.PLLCR.bit.DIV = 10; SysCtrlRegs.HISPCP.all = 0x0001; SysCtrlRegs.LOSPCP.all = 0x0002; SysCtrlRegs.PCLKCR0.all = 0x0000; SysCtrlRegs.PCLKCR1.all = 0x0000; SysCtrlRegs.PCLKCR3.all = 0x0000; SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; EDIS; } 2. Sử dụng ngắt và Timer 0, đầu ra được kết nối đến các chân 9, 11, 34, 49. #include "DSP2833x_Device.h" extern void InitSysCtrl(void); extern void InitPieCtrl(void); extern void InitPieVectTable(void); extern void InitCpuTimers(void); extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float); void Gpio_select(void); interrupt void cpu_timer0_isr(void); void main(void) { int counter=0; InitSysCtrl();
  • 47. Báo cáo thực tập Trang 46 EALLOW; SysCtrlRegs.WDCR= 0x00AF; EDIS; DINT; Gpio_select(); InitPieCtrl(); InitPieVectTable(); EALLOW; PieVectTable.TINT0 = &cpu_timer0_isr; EDIS; InitCpuTimers(); ConfigCpuTimer(&CpuTimer0,150,100000); PieCtrlRegs.PIEIER1.bit.INTx7 = 1; IER |=1; EINT; ERTM; CpuTimer0Regs.TCR.bit.TSS = 0; // start timer0 while(1) { while(CpuTimer0.InterruptCount == 0); CpuTimer0.InterruptCount = 0; EALLOW; SysCtrlRegs.WDKEY = 0x55; // service WD #1 EDIS; counter++; if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1; if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1; if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1; } } void Gpio_select(void) { EALLOW; GpioCtrlRegs.GPAMUX1.all = 0; GpioCtrlRegs.GPAMUX2.all = 0; GpioCtrlRegs.GPBMUX1.all = 0; GpioCtrlRegs.GPBMUX2.all = 0; GpioCtrlRegs.GPCMUX1.all = 0; GpioCtrlRegs.GPCMUX2.all = 0; GpioCtrlRegs.GPADIR.all = 0; GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; GpioCtrlRegs.GPBDIR.all = 0; GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; GpioCtrlRegs.GPCDIR.all = 0; EDIS; } interrupt void cpu_timer0_isr(void) { CpuTimer0.InterruptCount++;
  • 48. Báo cáo thực tập Trang 47 EALLOW; SysCtrlRegs.WDKEY = 0xAA; EDIS; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } 3. Chương trình nhấp nháy Led sử dụng Timer 0 tạo trễ 1s. #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" interrupt void cpu_timer0_isr(void); void main(void) { InitSysCtrl(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.TINT0 = &cpu_timer0_isr; EDIS; InitCpuTimers(); #if(CPU_FRQ_150MHZ) ConfigCpuTimer(&CpuTimer0, 150, 1000000); #endif #if(CPU_FRQ_100MHZ) ConfigCpuTimer(&CpuTimer0, 100, 1000000); #endif CpuTimer0Regs.TCR.all = 0x4001; // EALLOW; GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 0; GpioCtrlRegs.GPADIR.bit.GPIO30 = 1; EDIS; IER |= M_INT1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1; EINT; ERTM; for(;;); } interrupt void cpu_timer0_isr(void) { CpuTimer0.InterruptCount++; GpioDataRegs.GPATOGGLE.bit.GPIO30 = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } 4. Tạo xung vuông tần số 1kHz với ePWM1A, chu kỳ hoạt động là 50% (duty cycle = 50%) #include "DSP2833x_Device.h" extern void InitSysCtrl(void); extern void InitPieCtrl(void); extern void InitPieVectTable(void); extern void InitCpuTimers(void); extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float);
  • 49. Báo cáo thực tập Trang 48 void Gpio_select(void); void Setup_ePWM1A(void); interrupt void cpu_timer0_isr(void); void main(void) { int counter=0; InitSysCtrl(); EALLOW; SysCtrlRegs.WDCR= 0x00AF; EDIS; DINT; Gpio_select(); Setup_ePWM1A(); InitPieCtrl(); InitPieVectTable(); EALLOW; PieVectTable.TINT0 = &cpu_timer0_isr; EDIS; InitCpuTimers(); ConfigCpuTimer(&CpuTimer0,150,100000); PieCtrlRegs.PIEIER1.bit.INTx7 = 1; IER |=1; EINT; ERTM; CpuTimer0Regs.TCR.bit.TSS = 0; while(1) { while(CpuTimer0.InterruptCount == 0); CpuTimer0.InterruptCount = 0; EALLOW; SysCtrlRegs.WDKEY = 0x55; EDIS; counter++; if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1; if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1; if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1; } } void Gpio_select(void) { EALLOW; GpioCtrlRegs.GPAMUX1.all = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAMUX2.all = 0;
  • 50. Báo cáo thực tập Trang 49 GpioCtrlRegs.GPBMUX1.all = 0; GpioCtrlRegs.GPBMUX2.all = 0; GpioCtrlRegs.GPCMUX1.all = 0; GpioCtrlRegs.GPCMUX2.all = 0; GpioCtrlRegs.GPADIR.all = 0; GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; GpioCtrlRegs.GPBDIR.all = 0; GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; GpioCtrlRegs.GPCDIR.all = 0; EDIS; } void Setup_ePWM1A(void) { EPwm1Regs.TBCTL.bit.CLKDIV = 0; EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1; EPwm1Regs.TBCTL.bit.CTRMODE = 2; EPwm1Regs.AQCTLA.all = 0x0006; // Mặc định: duty cycle = 50% EPwm1Regs.TBPRD = 37500; // C{i đặt tần số xung l{ 1kHz } interrupt void cpu_timer0_isr(void) { CpuTimer0.InterruptCount++; EALLOW; SysCtrlRegs.WDKEY = 0xAA; // service WD #2 EDIS; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } 5. Tạo xung vuông tần số 1kHz với ePWM1A, chu kỳ hoạt động thay đổi được từ 0 đến 100%. #include "DSP2833x_Device.h" extern void InitSysCtrl(void); extern void InitPieCtrl(void); extern void InitPieVectTable(void); extern void InitCpuTimers(void); extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float); void Gpio_select(void); void Setup_ePWM1A(void); interrupt void cpu_timer0_isr(void); void main(void) { int counter=0; InitSysCtrl(); EALLOW; SysCtrlRegs.WDCR= 0x00AF; EDIS; DINT; Gpio_select(); Setup_ePWM1A(); InitPieCtrl(); InitPieVectTable();
  • 51. Báo cáo thực tập Trang 50 EALLOW; PieVectTable.TINT0 = &cpu_timer0_isr; EDIS; InitCpuTimers(); ConfigCpuTimer(&CpuTimer0,150,100); PieCtrlRegs.PIEIER1.bit.INTx7 = 1; IER |=1; EINT; ERTM; CpuTimer0Regs.TCR.bit.TSS = 0; while(1) { while(CpuTimer0.InterruptCount == 0); CpuTimer0.InterruptCount = 0; EALLOW; SysCtrlRegs.WDKEY = 0x55; // service WD #1 EDIS; counter++; if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1; if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1; if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1; } } void Gpio_select(void) { EALLOW; GpioCtrlRegs.GPAMUX1.all = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAMUX2.all = 0; GpioCtrlRegs.GPBMUX1.all = 0; GpioCtrlRegs.GPBMUX2.all = 0; GpioCtrlRegs.GPCMUX1.all = 0; GpioCtrlRegs.GPCMUX2.all = 0; GpioCtrlRegs.GPADIR.all = 0; GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; GpioCtrlRegs.GPBDIR.all = 0; GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; GpioCtrlRegs.GPCDIR.all = 0; EDIS; } void Setup_ePWM1A(void) { EPwm1Regs.TBCTL.bit.CLKDIV = 0; EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1; EPwm1Regs.TBCTL.bit.CTRMODE = 2; EPwm1Regs.AQCTLA.all = 0x0060; EPwm1Regs.TBPRD = 37500; // tần số xung l{ 1kHz
  • 52. Báo cáo thực tập Trang 51 EPwm1Regs.CMPA.half.CMPA = 0; // duty cycle = 100% } interrupt void cpu_timer0_isr(void) { static int up_down = 1; CpuTimer0.InterruptCount++; EALLOW; SysCtrlRegs.WDKEY = 0xAA; // service WD #2 EDIS; if(up_down) { if(EPwm1Regs.CMPA.half.CMPA < EPwm1Regs.TBPRD) EPwm1Regs.CMPA.half.CMPA++; else up_down = 0; } else { if(EPwm1Regs.CMPA.half.CMPA > 0) EPwm1Regs.CMPA.half.CMPA--; else up_down = 1; } PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } 6. Biến đổi giá trị ADC sử dụng biến trở #include "DSP2833x_Device.h" extern void InitAdc(void); extern void InitSysCtrl(void); extern void InitPieCtrl(void); extern void InitPieVectTable(void); extern void InitCpuTimers(void); extern void ConfigCpuTimer(struct CPUTIMER_VARS *, float, float); extern void display_ADC(unsigned int); void Gpio_select(void); interrupt void cpu_timer0_isr(void); interrupt void adc_isr(void); unsigned int Voltage_VR1; unsigned int Voltage_VR2; void main(void) { InitSysCtrl(); EALLOW; SysCtrlRegs.WDCR = 0x00AF; EDIS; DINT; Gpio_select(); InitPieCtrl(); InitPieVectTable(); InitAdc(); AdcRegs.ADCTRL1.all = 0; AdcRegs.ADCTRL1.bit.ACQ_PS = 7; AdcRegs.ADCTRL1.bit.SEQ_CASC =1; AdcRegs.ADCTRL1.bit.CPS = 0; AdcRegs.ADCTRL1.bit.CONT_RUN = 0;
  • 53. Báo cáo thực tập Trang 52 AdcRegs.ADCTRL2.all = 0; AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 =1; AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0; AdcRegs.ADCTRL3.bit.ADCCLKPS = 3; AdcRegs.ADCMAXCONV.all = 0x0001; AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0; AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; EPwm2Regs.TBCTL.all = 0xC030; EPwm2Regs.TBPRD = 2999; EPwm2Regs.ETPS.all = 0x0100; EPwm2Regs.ETSEL.all = 0x0A00; EALLOW; PieVectTable.TINT0 = &cpu_timer0_isr; PieVectTable.ADCINT = &adc_isr; EDIS; InitCpuTimers(); ConfigCpuTimer(&CpuTimer0,150,100000); PieCtrlRegs.PIEIER1.bit.INTx7 = 1; PieCtrlRegs.PIEIER1.bit.INTx6 = 1; IER |=1; EINT; ERTM; CpuTimer0Regs.TCR.bit.TSS = 0; while(1) { while(CpuTimer0.InterruptCount < 5) { EALLOW; SysCtrlRegs.WDKEY = 0x55; EDIS; } display_ADC(Voltage_VR1); while(CpuTimer0.InterruptCount < 10) { EALLOW; SysCtrlRegs.WDKEY = 0x55; EDIS; } display_ADC(Voltage_VR2); CpuTimer0.InterruptCount = 0; } } void Gpio_select(void) { EALLOW; GpioCtrlRegs.GPAMUX1.all = 0; GpioCtrlRegs.GPAMUX2.all = 0; GpioCtrlRegs.GPBMUX1.all = 0; GpioCtrlRegs.GPBMUX2.all = 0; GpioCtrlRegs.GPCMUX1.all = 0;
  • 54. Báo cáo thực tập Trang 53 GpioCtrlRegs.GPCMUX2.all = 0; GpioCtrlRegs.GPADIR.all = 0; GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; GpioCtrlRegs.GPBDIR.all = 0; GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; GpioCtrlRegs.GPCDIR.all = 0; EDIS; } interrupt void cpu_timer0_isr(void) { CpuTimer0.InterruptCount++; EALLOW; SysCtrlRegs.WDKEY = 0xAA; // service WD #2 EDIS; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } interrupt void adc_isr(void) { Voltage_VR1 = AdcMirror.ADCRESULT0; // store results global Voltage_VR2 = AdcMirror.ADCRESULT1; // Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE } X. Tài liệu tham khảo http://www.ti.com/product/tms320f28335 http://www.google.com/