BÁO CÁO THỰC TẬP TỐT NGHIỆP CÔNG TY FIOTLỜI CẢM ƠN Tám tuần thực tập ngắn ngủi là cơ hội cho em tổng hợp và hệ thống hóa lại những kiến thức đã học, đồng thời kết hợp với thực tế để nâng cao kiến thức chuyên môn. Tuy chỉ có tám tuần thực tập, nhưng qua quá trình thực tập, em đã được mở rộng tầm nhìn và tiếp thu rất nhiều kiến thức thực tế. Từ đó em nhận thấy, việc cọ sát thực tế là vô cùng quan trọng – nó giúp sinh viên xây dựng nền tảng lý thuyết được học ở trường vững chắc hơn. Trong quá trình thực tập, từ chỗ còn bở ngỡ cho đến thiếu kinh nghiệm, em đã gặp phải rất nhiều khó khăn nhưng với sự giúp đỡ tận tình của quý thầy cô khoa điện – điện tử và sự nhiệt tình của các cô chú, anh chị trong cty FIOT đã giúp em có được những kinh nghiệm quý báu để hoàn thành tốt kì thực tập này cũng như viết lên bài báo cáo cuối kỳ. Em xin chân thành cám ơn. Lời cám ơn đầu tiên em xin gửi đến ban lãnh đạo cùng các phòng ban, các cô chú, anh chị trong cty FIOT – đơn vị đã tiếp nhận và nhiệt tình tạo mọi điều kiện thuận lợi cho em tiếp cận thực tế và nắm bắt quy trình công nghệ. Em cũng xin gửi lời cám ơn chân thành đến Ban giám hiệu trường Đại học Bách Khoa TP.HCM, quý thầy cô khoa điện – điện tử đã tận tâm giảng dạy và truyền đạt những kiến thức, kinh nghiệm quý báu cho em. Đặc biệt, em xin cán ơn thầy Hồ Trung Mỹ , người đã tận tình hướng dẫn em hoàn thành bài báo cáo này. Vì thời gian và kiến thức còn hạn hẹp nên bài báo cáo không thể tránh khỏi những thiếu sót, rất mong sự góp ý của công ty, quý thầy cô và các bạn, để em rút kinh nghiệm và hoàn thành tốt hơn. Em xin chân thành cám ơnTp. Hồ Chí Minh, ngày 28 tháng 8 năm 2019 . Sinh viên thực hiện PHẦN ITHỰC HÀNH MỤC LỤC1.GIỚI THIỆU31.1Giới thiệu về công ty31.2Nhiệm vụ được giao thực tập41.3Thời gian và lịch trình thực tập42.NỘI DUNG THỰC TẬP42.1Nội dung 142.2Nội dung 26 2.3Nội dung 362.4Nội dung 472.5Nội dung 582.6Nội dung 6113.TỔNG KẾT CÔNG VIỆC THỰC TẬP123.1Kết quả công việc thực tập123.2Kinh nghiệm học được sau khi thực tập124.TÀI LIỆU THAM KHẢO135.PHỤ LỤC13
GIỚI THIỆU
Giới thiệu về công ty
Fiot Co., Ltd là một công ty hệ thống nhúng hàng đầu tại Việt Nam, chuyên cung cấp giải pháp toàn diện trong phát triển sản phẩm điện tử Công ty đảm nhận mọi giai đoạn từ ý tưởng ban đầu, thiết kế nguyên mẫu cho đến sản xuất quy mô công nghiệp, đảm bảo chất lượng và hiệu quả trong từng sản phẩm.
Fiot chuyên phát triển các giải pháp và sản phẩm IoT toàn diện, bao gồm phần cứng, firmware, phần mềm và dịch vụ đám mây Công ty luôn cập nhật công nghệ mới nhất vào các giải pháp IoT, kết hợp tận dụng Big Data và Machine Learning để nâng cao độ thông minh, hiệu suất và độ chính xác của các sản phẩm và hệ thống mà Fiot phát triển.
- Định hướng phát triển và hoạt động chính của cty:
Fiot cung cấp các dịch vụ thiết kế và phát triển tiên tiến cho Internet of Things
(IoT) và thị trường thiết bị chăm sóc sức khỏe di động.
Vận hành và quản lý các hệ thống nhúng.
Phát triển ứng dụng đa nền tảng web và mobile.
Fiot có 5 năm kinh nghiệm cung cấp giải pháp IoT và phát triển nhúng cho khách hàng toàn cầu, chủ yếu tại Châu Âu và Hoa Kỳ Đối tượng khách hàng của công ty bao gồm các nhà sản xuất thiết bị, nhà mạng, công ty khởi nghiệp, cũng như các bệnh viện và phòng khám công nghệ cao.
Nhiệm vụ được giao thực tập
Tại cty, chúng em được training các kiến thức đã học ở trường lẫn các kiến thức mới nhất mà các doanh nghiệp nước ngoài đang áp dụng.
Nội dung 1: Đọc tài liệu về lập trình C/C++, tìm hiểu cấu trúc bộ nhớ
Nội dung 2: Thực hành code trên Keil C, CUBE MX, Visual Studio Code
Nội dung 3: Học cách quản lý project bằng Source Tree
Nội dung 4: Học cách code theo tiêu chuẩn của công ty
Nội dung 5: Lập trình căn bản về GPIO, ADC, PWM, TIMER, UART, SPI, I2C,
Nội dung 6: Lập trình firmware, device driver
Thời gian và lịch trình thực tập
Thời gian thực tập: 2 tháng (từ ngày 5/8/2019 đến ngày 23/9/2019)
Lịch trình thực tập được chia thành 8 tuần với các nội dung cụ thể: Tuần 1, học bổ sung kiến thức về C/C++ và luyện tập thao tác code để dễ đọc, dễ debug Tuần 2, tìm hiểu và lập trình về các ngoại vi như ADC, PWM, TIMER, và chống rung nút nhấn dựa trên ngắt ngoài Tuần 3, thực hành giao tiếp với UART và SPI thông qua việc sử dụng RFID quét thẻ từ Tuần 4, nghiên cứu về lập trình hệ điều hành thời gian thực (RTOS) Trong các tuần 5, 6, 7, thực hiện dự án theo yêu cầu của công ty Cuối cùng, tuần 8 sẽ tổng kết dự án.
NỘI DUNG THỰC TẬP
Nội dung 1
- Đọc hiểu về các kiểu dữ liệu cơ sở:
Kiểu số nguyên không dấu và có dấu: char, int, short, long
Kiểu số thực: float, double
Kiểu luận lý (bool): true, false
Kiểu ký tự (char): 256 mã ASCII
- Các loại biến const, static, volatile, extern, global, …
- Toán tử và mức độ ưu tiên toán tử: +, -, *, /, ++, , ^, &,…
- Các câu lệnh điều kiện và rẽ nhánh, vòng lặp
- Mảng 1 chiều, 2 chiều, con trỏ 1 chiều, con trỏ 2 chiều, con trỏ hàm, chuỗi ký tự
- Quản lý bộ nhớ, cấp phát bộ nhớ động, điều chỉnh kích thước vùng nhớ stack, heap,
Ngoài ra em còn được training thêm về các giải thuật lập trình như cây nhị phân, tìm kiếm, tìm kiếm tuyến tính, bubble sort, insertion sort, …
Nội dung 2
Để tạo dự án trên CUBEMX của STM, bạn cần ánh xạ các chân ngoại vi với chức năng cần sử dụng và điều chỉnh xung clock Sau đó, hãy tạo ra tập lệnh và mã nguồn trên Keil C hoặc Visual Studio Code.
Tập sử dụng chức năng debug và simulator của Keil C để sửa lỗi
Lập trình trên Visual studio code, cài thêm các tiện ích GitLen để kết hợp với công cụ SoureTree.
Hình 2: Giao diện VISUAL STUDIO CODE
Nội dung 3
Đây là phần mềm quản lý source code được các developer sử dụng nhiều nhất trên thế giới vì nó miễn phí và dễ dùng.
Tạo Repository trên GitLab sau đó Clone về máy.
Rẽ nhánh cho từng chức năng của project ví dụ như Wifi, nút nhấn, để dễ kiểm soát lỗi
Nội dung 4
Sau đây là một số tiêu chuẩn:
Enum name is written in lowercase_with_underscore, following by _enum
Enum's item is written in UPPERCASE_WITH_UNDERSCORE
Global public variable must have prefix g_
Lines longer than 110 columns should be avoided.
Two spaces for each indentation should be used Tabs are not allowed.
Unary operators shall never be separated from their operands with space.
Binary operators except comma (“,”) should be written with a space between them and their operand.
When parameter lists or enumerators exceed a single line, it's essential to break the line after each element, placing each one on a separate line for clarity For example, in a function declaration like `void a_long_function_name(parameter_type_t *param1, parameter_type_t *param2, int param3);`, each parameter should be listed individually on its own line to enhance readability.
When a conditional expression becomes complex and long, it should be broken up so that each expression is placed on a separate line.
In programming, brackets are unnecessary when each branch of the if statement consists of a single statement For example, the code snippet demonstrates this with an if condition checking if the state is not equal to zero, followed by a while loop that sets or clears a value based on the condition.
Brackets are not required if the body of while, for structures contain only 1 statement. while (counter > 0) counter ;
Do not open/close the bracket on same line with if, while, for, switch if the structure cannot fit in a single line. if (a > b)
Nội dung 5
Khi mới đầu thực tập:
- Đọc tài liệu, nghiên cứu về nguyên lý hoạt động của các ngoại vi, các thanh ghi chức năng.
- Config các cấu hình quan trọng như NVIC, CLOCK, GPIO, UART, I2C, SPI gắn vào các chân có chức năng tương ứng.
Hình 5: Lập trình trên KEIL C ARM
- Thực hành trên kit của công ty cấp.
Hình 6: Bộ kit thực tập
- Được nhân viên hướng dẫn thực tập review code và debug.
Một số project đã làm:
LED CHASING là một dự án sử dụng xung PWM để điều chỉnh độ sáng của đèn, tạo ra hiệu ứng rượt đuổi khi các LED trên bảng sáng và tắt lần lượt nhau Kỹ thuật này thường kết hợp với bộ đếm thời gian để tạo ra những hiệu ứng ánh sáng sinh động và hấp dẫn.
2 để điều khiển tốc độ thay đổi độ sáng tối.
- Macro điều khiển độ sáng:
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
- Hàm được gọi khi timer tràn: void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
Giao tiếp với IC DS1307: project này em dùng chuẩn giao tiếp I2C lấy hoặc ghi dữ liệu thời gian thực với IC DS1307
HAL_I2C_Master_Transmit(&hi2c1, DS1307_ADDRESS, (uint8_t*)&DS1307.I2C_buffer, 8, 100); // tham số truyền vào gồm handle của i2c, con trỏ tới ô data cần gửi, số byte cần gửi, time out
HAL_I2C_Master_Receive(&hi2c1, DS1307_ADDRESS, (uint8_t*)&DS1307.I2C_buffer, 7, 100);
- Cấu hình thêm 2 chân UART2: tốc độ baud 115200, 8 bit , k parity, non stop bit.
- Em được học cách sử dụng DMA: là kiểu ghi dữ liệu từ ngoại vi thẳng vào bộ nhớ mà không đến sự thực thi của CPU
Giao tiếp với RFID: RFID có thể dùng cả SPI và I2C để giao tiếp, sau đây là
1 function truyền và nhận data bằng chuẩn SPI: uint8_t SPI1SendByte(uint8_t data)
{ unsigned char writeCommand[1]; unsigned char readValue[1]; writeCommand[0] = data;
HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)&writeCommand,
Nội dung 6
Quy tắc viết file header bao gồm các hàm interface:
Chỉ những hàm mà khi trong module được gọi thì mới được viết vào file header
Khai báo tất cả các biến được dùng trong phần c
Các thư viện cần dùng
Thêm vào chỉ thị tiền xử lý như #ifndef, #ifdef , các macro
Quy tắc đặt tên các struct, các enum, con trỏ hàm
Các struct đặt tên phải có đuôi” _t” VD: ds1307_return_t
Các phần tử của enum phải viết in hoa tất cả
Con trỏ hàm nên đặt tên dễ hiểu và có đủ các tham số cần thiết
Viết device driver đa dụng
In the header file, it is essential to declare function pointers with all necessary parameters For instance, the typedef for writing to the DS1307 I2C device can be defined as `typedef uint8_t (*ds1307_i2c_write_t)(uint16_t device_address, uint8_t *p_buffer, uint16_t buffer_length);`, while reading from the device can be represented as `typedef uint8_t (*ds1307_i2c_read_t)(uint16_t device_address, uint8_t *p_buffer, uint16_t buffer_length);`.
{ uint8_t address; ds1307_i2c_write_t i2c_write; // Function write data ds1307_i2c_read_t i2c_read; // Function read data
} ds1307_handle_t; extern uint32_t ds1307_read_time(ds1307_handle_t *h);
Trong file c tạo hàm có tham số là handle chỉ tới struct nêu trên
uint32_t ds1307_read_time(ds1307_handle_t *h)
Đọc cảm biến bằng STM32F4 và gửi dữ liệu lên sever thông qua module
Kết hợp với các giao thức của team software để gửi dữ liệu lên sever
Yêu cầu: gửi dữ liệu sau mỗi 5s, có các hàm báo lỗi, hàm check sum giá trị gửi
TỔNG KẾT CÔNG VIỆC THỰC TẬP
GIỚI THIỆU
Nhiệm vụ đề tài
- Đề tài này sẽ giúp em nắm rõ nguyên lý hoạt động của các cảm biến thông dụng hiện nay.
- Qua đó giúp em hoàn thành đươc một phần luận văn trong năm học sắp tới.
LÝ THUYẾT
I Sơ lược về vi điều khiển PIC 16F877a
PIC là họ vi điều khiển RISC do công ty Microchip Technology sản xuất, với dòng sản phẩm đầu tiên là PIC1650, được phát triển bởi bộ phận Microelectronics của General Instrument.
PIC, viết tắt của "Programmable Intelligent Computer" (Máy tính khả trình thông minh), là sản phẩm đầu tiên của hãng General Instrument mang tên PIC1650 Thiết bị này được sử dụng để giao tiếp với các thiết bị ngoại vi cho máy chủ 16bit CP1600, do đó, PIC còn được gọi là "Peripheral Interface Controller" (Bộ điều khiển giao tiếp ngoại vi).
2) Ngôn ngữ lập trình cho PIC
PIC sử dụng tập lệnh RISC với các dòng PIC low-end (12 bit, ví dụ: PIC12Cxxx) và mid-range (14 bit, ví dụ: PIC16Fxxxx), bao gồm khoảng 35 lệnh Đối với các dòng PIC high-end (16 bit, ví dụ: PIC18Fxxxx), tập lệnh có khoảng 70 lệnh Tập lệnh này bao gồm các lệnh tính toán trên thanh ghi, hằng số và vị trí bộ nhớ, cũng như các lệnh điều kiện, nhảy/gọi hàm và quay trở về Ngoài ra, nó còn có các tính năng phần cứng như ngắt và chế độ tiết kiệm điện Microchip cung cấp môi trường lập trình MPLAB, bao gồm phần mềm mô phỏng và trình dịch ASM.
Hình 1: Sơ đồ khối PIC16F877a
II Sơ lược về cảm biến nhiệt độ
1) Phân loại cảm biến nhiệt
Sau đây là một số loại cảm biến được sử dụng khá rộng rãi trong đời sống hàng ngày:
– Cấu tạo: Gồm 2 chất liệu kim loại khác nhau, hàn dính một đầu.
– Nguyên lý: Nhiệt độ thay đổi cho ra sức điện động thay đổi ( mV).
– Ưu điểm: Bền, đo nhiệt độ cao.
– Thường dùng: Lò nhiệt, môi trường khắt nghiệt, đo nhiệt nhớt máy nén,… – Tầm đo: -100 D.C