Professional Documents
Culture Documents
Bao Cao VXL
Bao Cao VXL
Nội dung: Khảo sát và lập trình điều khiển trạm băng tải Tuần học: 1
Khối Digital Input được lắp 2 cảm biến loại NPN, 4 nút nhấn điện trở nội (pull-up) và công tắc gạt
3 chân có điện trở nội (pull-up)
Sơ đồ nguyên lý khối Digital Output
Đèn D1 Sáng 1
PA7
Đèn D1 Tắt 0
Đèn D2 Sáng 1
PB2
Đèn D2 Tắt 0
PB0
MOTOR băng tải Ngừng 0
PD11
Nút nhấn B1 (Xanh) Chưa được nhấn 1
PC6
Nút nhấn B2 (Đỏ) Chưa được nhấn 1
PC7
Nút nhấn B3 (Vàng) Chưa được nhấn 0
Dự án lập trình
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chỉnh sửa từ code dự án)
HAL_GPIO_WritePin(D1_GPIO_Port, D1_Pin, D1_OFF);
HAL_Delay(1000);
while (1) {
HAL_GPIO_WritePin(D1_GPIO_Port, D1_Pin, D1_ON);
HAL_Delay(500);
HAL_GPIO_WritePin(D1_GPIO_Port, D1_Pin, D1_OFF);
HAL_Delay(500)
}
Yêu cầu 2:
Khi mới mở điện: đèn D1, D2 tắt; Motor M ngừng.
Khi nhấn nút nhấn B1 làm động cơ M chạy. (Dùng tay nhấn vào một lần rồi thả tay ra)
Khi nhấn nút nhấn B2 làm động cơ M ngừng. (Dùng tay nhấn vào một lần rồi thả tay ra)
MOTOR_START 1 Vi điều khiển xuất ra mức cao thì động cơ hoạt động
MOTOR_STOP 0
Vi điều khiển xuất ra mức thấp thì động cơ ngưng
hoạt động
BUTTON_PRESSED 0
Khi nhấn nút thì ngõ vào nối đất thì vi điều khiển
nhận mức 0
Nút nhấn B1 làm chuyển trạng thái chạy – ngừng của động cơ M: Nếu động cơ đang ngừng thì nhấn
B1 rồi thả tay ra, động cơ chạy. Nếu động cơ đang chạy thì nhấn B1 rồi thả tay ra, động cơ ngừng.
MOTOR_START 1 Vi điều khiển xuất ra mức cao thì động cơ hoạt động
MOTOR_STOP 0
Vi điều khiển xuất ra mức thấp thì động cơ ngưng hoạt
động
BUTTON_PRESSED 0
Khi nhấn nút thì ngõ vào nối đất thì vi điều khiển
nhận mức 0
HAL_GPIO_WritePin(MOTOR_GPIO_Port, MOTOR_Pin,
MOTOR_STOP);
uint8_t BUTTON_1_check = 1;
uint8_t State = 0; uint8_t
MOTOR = 0;
while (1)
{
BUTTON_1_check = HAL_GPIO_ReadPin(BUTTON_1_GPIO_Port,
BUTTON_1_Pin);
if ((State == 0) && (BUTTON_1_check == BUTTON_PRESSED))
State = 1;
if ((State == 1) && (BUTTON_1_check != BUTTON_PRESSED))
State = 2;
if ((State == 2) && (BUTTON_1_check == BUTTON_PRESSED))
State = 3;
if ((State == 3) && (BUTTON_1_check != BUTTON_PRESSED))
State = 0;
if (State == 0)
HAL_GPIO_WritePin(MOTOR_GPIO_Port, MOTOR_Pin,
MOTOR_STOP);
if (State == 1)
HAL_GPIO_WritePin(MOTOR_GPIO_Port, MOTOR_Pin,
MOTOR_START);
if (State == 2)
HAL_GPIO_WritePin(MOTOR_GPIO_Port, MOTOR_Pin,
MOTOR_START);
if (State == 3)
HAL_GPIO_WritePin(MOTOR_GPIO_Port, MOTOR_Pin,
MOTOR_STOP);
}