Ngôn ngữ lập trình C cho STM32F103

Một phần của tài liệu Nghiên cứu, cải tiến và ứng dụng công nghệ tự động xác định vùng cực đại năng lượng mặt trời dựa theo vị trí địa lí lắp đặt nhằm nâng cao hiệu suất phát điện hệ thống pin mặt trời (Trang 62)

a. Giới thiệu ngôn ngữ C

Trong kỹ thuật lập trình vi điều khiển nói chung, ngôn ngữ lập trình được sử dụng thường chia làm hai loại: ngôn ngữ bậc thấp và ngôn ngữ bậc cao.

Ngôn ngữ bậc cao là các ngôn ngữ gần với ngôn ngữ con người hơn, do đó việc lập trình bằng các ngôn ngữ này trở nên dễ dàng và đơn giản hơn. Có thể kể đến một số ngôn ngữ lập trình bậc cao như C, Basic, Pascal… trong đó C là ngôn ngữ thông dụng hơn cả trong kỹ thuật vi điều khiển. Về bản chất, sử dụng các ngôn ngữ này thay cho ngôn ngữ bậc thấp là giảm tải cho lập trình viên trong việc nghiên cứu các tập lệnh và xây dựng các cấu trúc giải thuật. Chương trình viết bằng ngôn ngữ bậc cao cũng sẽ được một phần mềm trên máy tính gọi là trình biên dịch (Compiler) chuyển sang dạng hợp ngữ trước khi chuyển sang mã máy.

Khi sử dụng ngôn ngữ C người lập trình không cần hiểu sâu sắc về cấu trúc của bộ vi điều khiển. Có nghĩa là với một người chưa quen với một vi điểu

Start

Nhận dữ liệu thời gian, địa điểm

Giao tiếp phím bấm Chế độ nghỉ Chế độ tự động Chế độ bám tự động Chế độ điều khiển bằng tay Hiển thị End

không phải mất thời gian tìm hiểu kiến trúc của vi điều khiển đó. Và việc sử dụng lại các chương trình đã xây dựng trước đó cũng dễ dàng hơn, có thể sử dụng toàn bộ hoặc sửa chữa một phần.

b. Ngôn ngữ C

• Cấu trúc một chương trình: //Đính kèm các file

#include <file.h> #include <file.c>

//Khai báo biến toàn cục unsigned char x,y;

int z; long n=0;

//Khai báo và định nghĩa các hàm void Ham1(void)

{

…//Các câu lệnh }

void Ham2(unsigned char x) {

…//Các câu lệnh }

//Hàm chính bắt buộc chương trình nào cũng phải có void main(void)

{

…//Các câu lệnh }

- Các câu lệnh trong hàm chính có thể có lời gọi các hàm đã khai báo ở trên hoặc không

- Khi có lời gọi hàm nào thì chương trình nhảy đến hàm đó thực hiện hàm đó xong con trở lại quay về chương trình chính (hàm main) thực hiện tiếp các hàm hoặc câu lệnh.

- Các câu lệnh trong C kết thúc bằng dấu “;”

- Nếu lời giải thích trên 1 dòng thì có thể dùng dấu: “//”

- Khi lập trình nên giải thích các câu lệnh khối lệnh làm gì để về sau khi chương trình lớn dễ sửa lỗi.

• Các loại biến trong C:

Dạng Biến Số Bit Số Byte Miền Giá Trị char -128 đến +127 unsigned char 0 đến 255 short -32,768 đến +32,767 unsigned short 0 đến 65,535 int -32,768 đến +32,767 unsigned int 0 đến 65,535 long -2,147,483,648 đến+2,147,483,647 unsigned long 0 đến 4,294,697,295 Khai báo biến

Cấu trúc : Kiểu biến Tên biến VD: unsigned char x;

Khi khai báo biến có thể gán luôn cho biến giá trị ban đầu. VD :

Thay vì: unsigned char x; x=0;

Ta chỉ cần : unsigned char x=0;

Có thể khai báo nhiều biến cùng một kiểu một lúc VD: unsigned int x,y,z;

• Hàm trong C:

Hàm trong C có cấu trúc như sau Có 2 loại hàm

- Hàm trả lại giá trị:

Cấu trúc: Kiểu giá trị hàm trả lại Tên hàm (Biến truyền vào hàm) {

// Các lệnh xử lý ở đây }

VD : unsigned char Cong(unsigned char x,unsigned char y) {

}

- Hàm không trả lại giá trị

Cấu trúc: void Tên hàm (Biến truyền vào hàm) {

// Các câu lệnh xử lý ở đây }

VD dụ: void Cong(unsigned char x, unsigned char y) {

// Các câu lệnh xử lý ở đây }

- Hàm có thể truyền vào biến hoặc không VD

+ Hàm không có biến truyền vào: unsigned char tenham(void) {

// Các câu lệnh xử lí ở đây }

- Hàm có biến truyền vào: void tenham (unsigned char x) {

// Các câu lệnh xử lí ở đây }

Số biến truyền vào tùy ý (miễn đủ bộ nhớ), ngăn cách bởi dấu “,” Ví dụ:

Void tenham (unsigned char x, unsigned char y, unsigned char z) {

// Các câu lệnh xử lí ở đây }

• Các toán tử cơ bản: Phép gán: =

VD: x=y; // x phải là biến y có thể là biến hoặc giá trị nhưng phải phù hợp kiểu Phép cộng: +

Phép trừ: - Phép nhân: * Phép chia: /

Các toán tử logic: Bằng : == And: && Or: || Not: ! Dịch trái: << Dịch phải: >>

• Các cấu trúc lệnh rẽ nhánh, kiểm tra thường dùng: - Câu lệnh rẽ nhánh if:

Cấu trúc: if (Điềukiện) { // Các câu lệnh xử lí }

Giải thích: Nếu Điều kiện đúng thì xử lí các câu lệnh bên trong còn sai thì nhảy qua

- Câu lệnh lựa chọn switch: Cấu trúc: switch(Biến) {

case giatri1: { // Các câu lệnh break; } case giatri2: { // Các câu lệnh break; } case giatri3: { // Các câu lệnh break; } …

case giatrin: { // Các câu lệnh break; } }

Giải thích: Tùy vào Biến có giatri1 thì thực hiện các câu lệnh sau đó tương ứng rồi thoát khỏi cấu trúc nhờ câu lệnh break;

Biến có giatri2 thì thực hiện các câu lệnh sau đó tương ứng rồi thoát Biến có giá trị thì thực hiện các câu lệnh sau đó tương ứng rồi thoát - Câu lệnh vòng lặp xác định for:

Cấu trúc: for( n=m; n<l; n++) {// Các câu lệnh xử lí } Giải thích:

Trong đó m,l là giá trị(m>l), còn n là biến Thực hiện lặp các câu lệnh (l-m) lần Câu lệnh vòng lặp không xác định while: Cấu trúc:

While( Điều kiện) {

}

Giải thích:

Thực hiện lặp các câu lệnh khi điều kiện đúng, nếu câu lệnh sai thi thoát khỏi vòng lặp • Bộ tiền xử lý: #define : Dùng để định nghĩa. Ví dụ: #define dung 1 #define sai 0

có nghĩa là dung có giá trị bằng 1. Trong chương trình có thể có đoạn code như sau: bit kiemtra if (bit==dung) { // Các câu lệnh} if (bit==sai) { // Các câu lệnh} 4.3. Phần mềm lập trình Keil uVision5 a. Giới thiệu phần mềm

Keil C hay còn gọi là Keil 8051 là công cụ phần mềm hỗ trợ khá đầy đủ để người dùng soạn thảo và biên dịch chương trình dành cho các vi điều khiển thuộc họ 8051 bằng ngôn ngữ C và Assembly.

b. Tạo Project trên Keil C

Sau khi cài đặt Keil C, trên desktop xuất hiện icon của phần mềm, mở nó lên và tiến hành làm theo các bước sau đây:

- Tạo mới Project. Chọn menu Project và chọn New Project…

Hình 4.3: Tạo project trong Keil C

- Chọn đường dẫn lưu Project, gõ tên Project vào khung File name, chọn Save - Chọn đến tên chip cần lập trình, ví dụ chip STM32F103RC của hãng ST, chọn OK

- Màn hình như sau xuất hiện, chọn OK

- Project được tạo ra như sau:

- Thực hiện add file viết code đã tạo và các thư viện vào Project. Chọn chuột phải vào Source Group 1 và chọn Add File to Group ‘Source Group 1’, chọn đến file và Add

Hình 4.6: Thêm file vào project

- Màn hình sau xuất hiện, nhập tần số hoạt động của thạch anh

Hình 4.8: Nhập tần số thạch anh

- Chọn tab C/C++, chọn đường dẫn các thư mục chứa các file thư viện

- Thực hiện viết code cho Project vào vùng soạn thảo và tiến hành biên dịch chúng.

Hình 4.10: Viết chương trình trong phần mềm

4.4. Mạch và chương trình nạp vi điều khiển STM32F103

Sau khi lập trình cho hệ thống, phần mềm sẽ tự động sửa các lỗi cú pháp, nếu không có lỗi xuất hiện, phần mềm sẽ dịch chương trình ra ngôn ngữ máy lưu dưới dạng file đuôi .hex. Công việc còn lại là nạp file này vào chíp bằng phần mềm và mạch nạp phù hợp.

Hình 4.12: Giao diện phần mềm.

Chọn loại mạch nạp, cổng nạp của máy tính (USB), mode nạp (SWD) và tên chip sử dụng

Hình 4.13: Giao diện cấu hình nạp chíp của ST Vitual Programmer

Tiếp theo ta chọn đường dẫn tới file .hex cần nạp bằng thẻ “Load Flash”

Hình 4.14: Load file hex cần nạp

4.5. Code chương trình

Code chương trình đầy đủ tại phụ lục: Code chương trình. Một số đoạn code quan trọng của chương trình:

- Hàm GPIO_Configuration() cấu hình các chân vào ra của vi điều khiển:

- Các hàm tính toán các giá trị góc quay của các trục trong chế độ tự động -

4.6. Hoạt động của hệ thống

Hệ thống có 3 chế độ hoạt động:

• CHẾ ĐỘ 1: Chế độ bám tự động theo chuyển dịch của mặt trời (Tracking mode):

Khi hệ thống ở chế độ này, tấm pin sẽ tự động di chuyển đến vị trí thẳng góc với tia sáng mặt trời nhờ các cảm biến. Mặt trời chuyển động theo 2 phương Đông – Tây, Nam – Bắc gây ra sự thay đổi bóng của khối lập phương đặt giữa 4 cảm biến tại 4 phương, khiến điện trở của 4 cảm biến này thay đổi, làm biến thiên điện áp ở đầu ra của mạch cảm biến. Điện áp này dao động trong khoảng 0 – 5V tùy theo vị trí của mặt trời.

Tín hiệu từ mạch cảm biến này được chuyển sang mạch so sánh, 4 opamp (trong 2 IC LM358) sẽ so sánh điện áp này với các điện áp chuẩn, chuyển đổi tín hiệu tương tự từ mạch cảm biến sang tín hiệu số rồi đưa vào mạch xử lý trung tâm.

Mạch xử lý trung tâm sau khi xác định chế độ hoat động hiện thời sẽ quyết định chế độ hoạt động của hệ thống. Khi ở chế độ bám, nó sẽ nhận 2 cặp tín hiệu từ mạch so sánh (mỗi phương sẽ có 2 tín hiệu ra), xử lý để tìm ra phương di chuyển hiện tại của mặt trời. Sau khi mạch so sánh xác định được hướng di chuyển, vi điều khiển xuất tín hiệu điều khiển động cơ đến mạch công suất.

Mạch công suất sử dụng 8 transistor công suất, khuếch đại công suất đủ lớn cung cấp cho 2 động cơ làm việc. Hai động cơ quay theo 2 phương vuông góc, tạo chuyển động cho tấm pin cùng mạch cảm biến hướng theo mặt trời. Qua đó tấm pin sẽ nhận được lượng quang năng lớn nhất và như vậy lượng điện thu được sẽ là nhiều nhất.

• CHẾ ĐỘ 2: Chế độ dịch chuyển tự động theo góc đặt sẵn (Auto mode): Khi mặt trời bị mây che, hoặc vào những ngày mưa… cường độ sáng sẽ xuống mức rất thấp, do đó cảm biến sẽ không nhận đủ độ sáng cần thiết để xác định hướng di chuyển cần thiết, khi đó hệ thống sẽ chuyển sang chế độ tự động. Mạch xử lý trung tâm sẽ dựa vào các giá trị thời gian thực về ngày, giờ, vị trí địa lý hiện tại, dựa vào các hàm đã được lập trình sẵn trong vi điều khiển, tính toán xuất ra các giá trị góc quay điều khiển các trục quay của hệ thống, đảm bảo cho hệ thống vẫn hoạt động tốt trong điều kiện xấu mà vẫn đạt được hiệu suất cao.

Ở chế độ này, hệ thống sẽ đượcđiều chỉnh về các góc cố định từ thao tác nút bấm của người sử dụng. Hệ thống cũng có thể được điều khiển thông qua các nút bấm để quay về các góc mong muốn phục vụ cho quá trình bảo trì hoặc tránh gió bão.

4.7. Giao diện người dùng

Hộp điều khiển có màn hình text LCD 8x2 và các khối nút bấm

• Chức năng của LCD: là một thành phần quan trọng của hệ thống hiển thị các nội dung sau:

- Các thông số cấu hình hệ thống như ngày, giờ, vị trí địa lý

- Thông số trạng thái hệ thống: mode, góc quay các trong, trạng thái hoạt động của động cơ…

- Các chức năng tùy chọn của hệ thống trong chế độ điều khiển bằng tay..

• Chức năng của các nút bấm

- Nút MODE: Dùng để chọn chế độ hoạt động bao gồm chế độ bám, chế độ tự động và chế độ bằng tay.

- Nút UP: Dùng để tăng giá trị tham số trong chế độ cài đặt.

- Nút DOWN/ENTER: Dùng để giảm giá trị tham số trong chế độ cài đặt hoặc thực thi lựa chọn (trong mode điều khiển bằng tay)

- Nút NEXT: Chuyển đến tham số, lựa chọn tiếp theo, tùy vào trạng thái hệ thống

- Nút RESET: Khởi động lại hệ thống để nhập lại các tham số đầu vào: thời gian, vị trí địa lý….

4.8. Vận hành hệ thống

Khi bắt đầu cấp nguồn cho hệ thống, màn LCD sẽ sáng, hệ thống tự động nhảy vào chế độ cài đặt ban đầu, người dùng sẽ sử dụng các nút bấm để chỉnh các thông số về thời gian( giờ, phút, giây, ngày, tháng, năm), vị trí địa lý (tỉnh thành). Tiếp theo, hệ thống sẽ tự động đưa các trục về vị trí 0 đã cài đặt trước (nếu các trục đang ở vị trí khác vị trí 0). Sau khi đã ở vị trí 0 hệ thống sẽ ở trạng thái chờ (STANDBY), đợi người dùng lựa chọn mode hoạt động. Màn hình lúc này hiển thị thông tin về ngày, giờ. Người dùng sẽ dụng nút MODE để chuyển chọn sang các chế độ:

• AUTO: Chế độ dịch chuyển tự động theo góc tính toán sẵn dựa vào các tham số đầu vào. Hệ thống sẽ tự động tính toán, quay trục và hiển thị góc quay theo các hàm đã được lập trình, màn hình sẽ đan xen hiển thị thời gian, góc quay, trạng thái hoạt động của động cơ.

• TRACKING: Khi ở chế độ này hệ thống tự động bám theo hướng sáng tối ưu, màn hình hiển thị các thông số về trạng thái hệ thống (đang quay về hướng nào)

• MANUAL: Ở chế độ này, tấm pin sẽ được xoay theo các góc cố định theo mùa và vùng miền hoặc xoay về các góc nhất định để tránh mưa, bão tuyết, hoặc bảo trì hệ thống. Người dùng sử dụng nút NEXT và ENTER để điều khiển và thực thi các lựa chọn.

KẾT LUẬN 1. Ý nghĩa khoa học và ứng dụng thực tiễn:

Nhóm nghiên cứu đã thiết kế, chế tạo thành công hệ thống điều khiển định hướng pin mặt trời. Đây là một hệ thống cơ điện tử hoàn chỉnh kết hợp của cơ khí - điện tử - tin học, có thể áp dụng ngay vào thực tế, cung cấp nguồn năng lượng sạch cho vùng sâu, vùng xa, hải đảo, trạm biên phòng, chốt tiền tiêu…

Hệ thống làm việc ổn định, linh hoạt với ba chế độ: chế độ bám tự động theo chuyển dịch của mặt trời, chế độ dịch chuyển tự động theo góc đặt sẵn và chế độ điều khiển bằng tay, dễ dàng thay đổi các thông số đầu vào nhờ lập trình điều khiển.

Hệ thống được tính toán, chế tạo với kết cấu cơ khí đảm bảo độ bền trong điều kiện thời tiết khắc nghiệt bên ngoài, hệ thống cảm biến xác định phương hướng chính xác, hoạt động bển bỉ, mạch điều khiển đơn giản, dễ chế tạo, chương trình chạy thay đổi linh hoạt theo yêu cầu sử dụng, nên sản phẩm có tính ứng dụng thực tế cao.

Đề tài sẽ là tài liệu tham khảo, phục vụ tốt cho công tác đào tạo, nghiên cứu, ứng dụng và phát triển sử dụng năng lượng xanh, năng lượng tái tạo tại Việt Nam.

2. Định hướng phát triển:

• Sử dụng tấm pin năng lượng mặt trời kết hợp với hệ thống đun nước sử dụng bức xạ nhiệt mặt trời, phục vụ cho hệ thống làm nóng nước sinh hoạt hoặc sấy khô.

• Nâng cấp hệ thống với bộ lưu điện năng, kết nối với pin, ắc quy, hoạt động độc lập (offline); sử dụng inverter, hòa vào lưới điện (online grid).

TÀI LIỆU THAM KHẢO

[1] – Hossein Mousazadeh, Alireza Keyhani, Arzhang Javadi, Hossein Mobli, Karen Abrinia, Ahmad Sharifi, A review of principle and sun-tracking methods for maximizing solar systems output, tạp chí Renewable and Sustainable Energy Reviews 13, 2009.

[2] – Christiana Honsberg and Stuart Bowden, Sách điện tử trực tuyến pveducation.org.

[3] – Roger A. Messenger, Jerry Ventre, Photovoltaic systems engineering

[4] – Đinh Hồng Bộ, Nguyễn Nhật Dương, Nguyễn Hồng Long, Đỗ Văn Sơn,

Thiết kế, chế tạo hệ điều khiển định hướng pin mặt trời.

Một phần của tài liệu Nghiên cứu, cải tiến và ứng dụng công nghệ tự động xác định vùng cực đại năng lượng mặt trời dựa theo vị trí địa lí lắp đặt nhằm nâng cao hiệu suất phát điện hệ thống pin mặt trời (Trang 62)

Tải bản đầy đủ (PDF)

(81 trang)