Chương 1: GIỚI THIỆU Chương 2: CƠ SỞ LÝ THUYẾT Chương 3: THIẾT KẾ PHẦN CỨNG VÀ PHẦN MỀM Chương 4: NHẬN XÉT KẾT QUẢ ĐẠT ĐƯỢC Chương 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 2 do an CHƯƠNG 2 CƠ SỞ LÝ THUYẾT LIÊN QUAN 2. Giới thiệu chung về ARM Cấu trúc ARM (viết tắt từ tên gốc là Advanced RISC Machine) là một loại cấu trúc vi xử lý 32 bit và 64 bit kiểu RISC được sử dụng rộng rãi trong các thiết kếnhúng. Do có đặc điểm tiết kiệm năng lượng, các bộ CPU ARM chiếm ưu thế trong các sản phẩm điện tử di động, mà với các sản phẩm này việc tiêu tán công suất thấp là một mục tiêu thiết kế quan trọng hàng đầu. Ngày nay, hơn 75% CPU nhúng 32-bit là thuộc họ ARM, điều này khiến ARM trở thành cấu trúc 32-bit được sản xuất nhiều nhất trên thế giới.
CPU ARM được tìm thấy khắp nơi trong các sản phẩm thương mại điện tử, từ thiết bị cầm tay (PDA, điện thoại di động, máy đa phương tiện, máy trò chơi cầm tay, và máy tính cầm tay) cho đến các thiết bị ngoại vi máy tính 2. Giới thiệu về dòng STM32: Họ STM32 có hai nhánh đầu tiên riêng biệt: dòng Performance và dòng Access. Dòng Performance tập hợp đầy đủ các thiết bị ngoại vi và chạy với xung nhịp tối đa 72MHz. Dòng Access có các thiết bị ngoại vi ít hơn và chạy tối đa 36MHz.
Quan trọng hơn là cách bố trí chân (pins layout) và các kiểu đóng gói chip (package type) là như nhau giữa dòng Access và dòng Performance. Điều này cho phép các phiên bản khác nhau của STM32 được hoán vị mà không cần phải sửa đổi sắp sếp lại footprint (mô hình chân của chip trong công cụ layout bo mạch) trên PCB (Printed Circuit Board). Thoạt nhìn thì các ngoại vi của STM32 cũng giống như những vi điều khiển khác, như hai bộ chuyển đổi ADC, timer, I2C, SPI, CAN, USB và RTC. Tuy nhiên mỗi ngoại vi trên đều có rất nhiều đặc điểm thú vị.
Ví dụ như bộ ADC 12-bit có tích hợp một cảm biến nhiệt độ để tự động hiệu chỉnh khi nhiệt độ thay đổi và hỗ trợ nhiều chế độ chuyển đổi. Mỗi bộ định thời có 4 khối capture compare (dùng để bắt sự kiện với tính năng input capture và tạo dạng sóng ở ngõ ra với output compare), 3 do an mỗi khối định thời có thể liên kết với các khối định thời khác để tạo ra một mảng các định thời tinh vi hơn. Một bộ định thời cao cấp chuyên hỗ trợ điều khiển động cơ, với 6 đầu ra PWM với dead time (khoảng thời gian được chèn vào giữa hai đầu tín hiệu xuất PWM bù nhau trong điều khiển mạch cầu H) lập trình được và một đường break input (khi phát hiện điều kiện dừng khẩn cấp) sẽ buộc tín hiệu PWM sang một trạng thái an toàn đã được cài sẵn. Ngoại vi nối tiếp SPI có một khối kiểm tổng (CRC) bằng phần cứng cho 8 và 16 word hỗ trợ tích cực cho giao tiếp thẻ nhớ SD STM32 có hỗ trợ thêm tối đa 12 kênh DMA (Direct Memory Access).
Mỗi kênh có thể được dùng để truyền dữ liệu đến các thanh ghi ngoại vi hoặc từ các thanh ghi ngoại vi đi với kích thước từ (word) dữ liệu truyền đi có thể là 8/16 hoặc 32-bit. Mỗi ngoại vi có thể có một bộ điều khiển DMA (DMA controller) đi kèm dùng để gửi hoặc đòi hỏi dữ liệu như yêu cầu. Một bộ phân xử bus nội (bus arbiter) và ma trận bus (bus matrix) tối thiểu hoá sự tranh chấp bus giữa truy cập dữ liệu thông qua CPU (CPU data access) và các kênh DMA. Điều đó cho phép các đơn vị DMA hoạt động linh hoạt, dễ dùng và tự động điều khiển các luồng dữ liệu bên trong vi điều khiển.
STM32 là một vi điều khiển tiêu thụ năng lượng thấp và đạt hiệu suất cao. Nó có thể hoạt động ở điện áp 2V, chạy ở tần số 72MHz và dòng tiêu thụ chỉ có 36mA với tất cả các khối bên trong vi điều khiển đều được hoạt động. Kết hợp với các chế độ tiết kiệm năng lượng của Cortex, STM32 chỉ tiêu thụ 2μA khi ở chế độ Standby. Một bộ dao động nội RC 8MHz cho phép chip nhanh chóng thoát khỏi chế độ tiết kiệm năng lượng trong khi bộ dao động ngoài đang khởi động.
Khả năng nhanh đi vào và thoát khỏi các chế độ tiết kiệm năng lượng làm giảm nhiều sự tiêu thụ năng lượng tổng thể. Giới thiệu về ARM Cortex M3 STM32F103 Như đã thấy trong phần giới thiệu, bộ xử lý Cortex là thế hệ lõi nhúng kế tiếp từ ARM. Cortex thừa kế các ưu điểm từ các bộ xử lí ARM trước đó, nó là một lõi xử lý hoàn chỉnh, bao gồm bộ xử lí trung tâm Cortex và một hệ thống các thiết bị 4 do an ngoại vi xung quanh, Cortex cung cấp phần xử lí trung tâm của một hệ thống nhúng. Để đáp ứng yêu cầu khắc khe và đa dạng của các hệ thống nhúng, bộ xử lý Cortex gồm có 3 nhánh, được biểu hiện bằng các ký tự sau tên Cortex như sau: Cortex-A : bộ vi xử lý dành cho hệ điều hành và các ứng dụng của người dung phức tạp.
Hỗ trợ các tập lệnh ARM, Thumb và Thumb-2. Cortex-R : bộ xử lí dành cho các hệ thống đòi hỏi khắc khe về tính thời gian thực. Hỗ trợ các tập lệnh ARM, Thumb, và Thumb-2. Cortex-M : bộ xử lí dành cho dòng vi điều khiển, được tối ưu hóa cho các ứng dụng nhạy cảm về chi phí.
Chỉ hỗ trợ tập lệnh Thumb-2. Con số nằm cuối tên Cortex cho biết mức độ hiệu suất tương đối, với 1 là thấp nhất và 8 là cao nhất. Hiện nay dòng Cortex-M có mức hiệu suất cao nhất là mức 3. STM32 dựa trên bộ xử lý Cortex-M3.3 : Kiến trúc vi xử lí ARM Cortex-M3 5 do an Vi điều khiển STM32F103C8T6 là họ vi điều khiển 32 bit của hãng TexasInstrument với 64-128 Kb bộ nhớ Flash, USB 2.0 full-speed, CAN, 7 bộ Timer, 2 bộ ADC và 9 giao diện kết nối.
Thông tin chung: ● Lõi : ARM 32 bit Cortex-M3 ● Tần số hoạt động lên tới 72 Mhz ● Bộ nhớ : 64-128 Kb Flash, 20 Kb SRAM ● ADC : 2×12 bit, tần số lấy mẫu 1Mhz ● DAC : không ● DMA : Điều khiển 7 kênh DMA ● Timer : 7 bộ, 16 bit ● Giao diện kết nối : 2xI2C, 3xUSART, 2xSPI, CAN, USB 2. [1] ● Kiểu chân : VFQFPN36, UFQFPN48, BGA100, LQFP48, LQFP64, LQFP100 Ứng dụng : ● Điều khiển động cơ ● Thiết bị cầm tay và thiết bị y tế ● Ứng dụng công nghiệp ● PLC ● Inverters ● Hệ thống cảnh báo ● HVAC 2. Giới thiệu Timer STM32 có bốn khối định thời. Timer1 là khối nâng cao dành cho điều khiển động cơ.
3 khối còn lại đảm nhiệm chức năng đa nhiệm. Tất cả chúng đều có chung kiến trúc, khối nâng cao sẽ có thêm các đặc tính phần cứng riêng biệt. Tất cả các khối định thời đều gồm bộ đếm 16-bit với thanh ghi chia tần số dao động 16-bit(prescaler) và thanh ghi tự nạp(auto-reload). Bộ đếm của khối định thời có thể được cấu hình để đếm lên, đếm xuống hay trung tính(lên xuống xen kẽ nhau).
Xung nhịp cho đồng hồ có thể được lựa chọn dựa trên 8 nguồn khác nhau: từ đồng hồ chuyên biệt được lấy từ đồng hồ hệ thống, từ xung nhịp chân ra lấy từ khối định thời khác, hoặc từ nguồn xung nhịp ngoại. 6 do an Timer trong STM32F1 có rất nhiều chức năng chẳng hạn như bộ đếm counter, PWM, input … Trong đó, Timer1 có cùng tần số xung clock với hệ thống là 72Mhz. Các Timer lại là 2,3,4 có tần số bằng một nửa. Tức là 36Mhz.4a : Hệ thống Timer của STM32f1 [2] Dựa vào sơ đồ của 4 bộ Timer ta có thể thấy rằng Timer4 được quản lí bởi bus APB1 (Advanced Peripheral Bus) và có clock tối đa là 36MHz (1/2 clock hệ thống).
Để tiến hành thiết lập Timer, ta lập trình các thanh ghi sau: - TIM_Prescaler: hiểu đơn giản như một bộ chia tần số hoặc bộ chia trước. - TIM_Period: là chu kì ta thiết lập cho timer, trong trường hợp này tức là sau khi đếm 999 xung (từ 0) thì timer sẽ bắt đầu đếm lại từ 0. 7 do an - Mode counter: ta chọn đếm tăng, có nghĩa là mỗi xung nhịp timer, bộ đếm counter sẽ tự tăng lên một giá trị theo chiều dương cho đến khi nào bằng giá trị period sẽ đếm lại từ đầu, người ta thường gọi trường hợp này là tràn bộ đếm. Ngoài ra ta cũng phải thiết lập IRQ để lập trình chương trình ngắt và mức độ ưu tiên ngắt khi bộ đếm đủ chu kỳ và tràn.4b : Cách hoạt động timer sau khi thiết lập Như hình ta thấy rằng sau khi thiết lập Timer, cứ 36 lần xung hệ thống thì sẽ ứng với 1 chu kỳ xung Timer và mỗi lần như vậy, Counter sẽ đếm lên 1 giá trị và khi giá trị đó đạt đến 999, xung Timer tiếp theo sẽ làm cho Counter tràn và bắt đầu đếm lại từ đầu (từ 0) đồng thời tạo ra sự kiện ngắt (tràn timer).
Giới thiệu I2C I2C là tên viết tắt của cụm từ Inter-Intergrated Circuit. Đây là đường Bus giao tiếp giữa các IC với nhau. I2C mặc dù được phát triển bới Philips, nhưng nó đã được rất nhiều nhà sản xuất IC trên thế giới sử dụng. I2C trở thành một chuẩn công nghiệp cho các giao tiếp điều khiển.
Bus I2C được sử dụng làm bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại Vi điều khiển 8051, PIC, AVR, ARM. I2C là 1 bus 2 chiều, truyền thông giữa 2 IC khác nhau hay 2 modules. Truyền thông dữ liệu nối tiếp qua đường SDA và truyền xung đồng hồ qua đường 8 do an SCL để đồng bộ, 2 đường này phải được kết nối với nguồn cấp tích cực thông qua 1 trở pull-up khi kết nối với các đường ra của thiết bị. Việc truyền dữ liệu đi có thế thực hiện khi bus không bận.
Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDA là đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng hồ để đồng bộ và chỉ theo một hướng. Như hình vẽ trên, khi một thiết bị ngoại vi kết nối vào đường bus I2C thì chân SDA của nó sẽ nối với dây SDA của bus, chân SCL sẽ nối với dây SCL.5a : Quá trình truyền nhận Để bắt đầu cho việc truyền dữ liệu thì điều kiện cần để thao tác truyền diễn ra là START và STOP. START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủ muốn thiết lập giao tiếp với một thiết bị nào đó trên bus I2C.