Báo Cáo Thực Tập Vi Xử Lý Tuần 13-15

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH

KHOA CƠ KHÍ CHẾ TẠO MÁY


BỘ MÔN CƠ ĐIỆN TỬ


BÁO CÁO
Thực tập Vi xử lý _ Tuần 13-15

MÔN HỌC: Thực tập Vi Xử Lý


LỚP MÔN HỌC: Thứ 2_Tiết 7-12
GIẢNG VIÊN: Huỳnh Quang Duy

SVTH:
1. Mao Đình Huân 21146463

TP. Hồ Chí Minh, tháng 5 năm 2024


I. ĐIỀU KHIỂN MÔ HÌNH TAY GẮP_KHÍ NÉN
a. Bài toán: Nhấn nút Start (nút màu xanh) mô hình chuyển sang trạng
thái chờ. (Xy-lanh 1 ở vị trí S3, tay kẹp đóng lại, xy-lanh 2 ở vị trí
phía trên) Khi có sản phẩm được đưa vào khay thì:
Tay kẹp mở ra => Xy-lanh 1 tiến ra vị trí S4 => Xy-lanh 2 đi xuống vị
trí dưới => Tay kẹp đóng lại (kẹp vật) => Xy-lanh 2 đi lên => Xy-lanh
1 tiến về vị trí S3 => Xylanh 2 đi xuống => Tay kẹp mở ra (thả vật) =>
Xy-lanh 2 lên => Tay kẹp đóng lại => Tiếp tục chờ khi có sản phẩm
mới.
Khi 1 sản phẩm được vận chuyển xong, vi điều khiển gửi lên Terminal
máy tính số sản phẩm đã vận chuyển được.
Yêu cầu. Không cần phải sử dụng cảm biến hành trình ở đầu và cuối
của mỗi xylanh.
Nhấn nút Stop: Hệ thống dừng lại ngay lập tức và trở về vị trí chờ ban
đầu. (Xy-lanh 1 ở vị trí S3, tay kẹp đóng lại, xy-lanh 2 ở vị trí phía
trên)
b. Vi xử lý: STM32 F103VCT6, STM32F205VCT6
c. Giá trị I/O

d. Chương trình
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/


/* USER CODE BEGIN Includes */
unsigned char Switch_1;
unsigned char Switch_2;

unsigned char Sensor_0;


unsigned char Sensor_1;
unsigned char Sensor_2;
unsigned char Sensor_3;
unsigned char Sensor_4;

unsigned char Button_1;


unsigned char Button_2;
unsigned char Button_3;
unsigned char Button_4;
unsigned char Power;
/* USER CODE END Includes */

/* Private function prototypes -----------------------------------------------


*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/


/* USER CODE BEGIN 0 */
void Read_Button()
{
// Button_1 =
HAL_GPIO_ReadPin(Button_1_GPIO_Port,Button_1_Pin);
// Dang su dung ngat ngoai
// Button_2 =
HAL_GPIO_ReadPin(Button_2_GPIO_Port,Button_2_Pin);
// Dang su dung ngat ngoai
Button_3 =
HAL_GPIO_ReadPin(Button_3_GPIO_Port,Button_3_Pin);
Button_4 =
HAL_GPIO_ReadPin(Button_4_GPIO_Port,Button_4_Pin);
}
void Read_Switch()
{
Switch_1 =
HAL_GPIO_ReadPin(Switch_1_GPIO_Port,Switch_1_Pin);
Switch_2 =
HAL_GPIO_ReadPin(Switch_2_GPIO_Port,Switch_2_Pin);
}
void Read_Sensor()
{
Sensor_0 =
HAL_GPIO_ReadPin(Sensor_0_GPIO_Port,Sensor_0_Pin);
Sensor_1 =
HAL_GPIO_ReadPin(Sensor_1_GPIO_Port,Sensor_1_Pin);
Sensor_2 =
HAL_GPIO_ReadPin(Sensor_2_GPIO_Port,Sensor_2_Pin);
Sensor_3 =
HAL_GPIO_ReadPin(Sensor_3_GPIO_Port,Sensor_3_Pin);
Sensor_4 =
HAL_GPIO_ReadPin(Sensor_4_GPIO_Port,Sensor_4_Pin);
}
/* USER CODE END 0 */

/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------
*/

/* Reset of all peripherals, Initializes the Flash interface and the


Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */


SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */


MX_GPIO_Init();
/* USER CODE BEGIN 2 */

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */


Read_Sensor();
if (Power == 1)
{
if (Sensor_0 == 1)
{

HAL_GPIO_WritePin(Xylanh_2_GPIO_Port,Xylanh_2_Pin,0);
}
else
HAL_GPIO_WritePin(Xylanh_2_GPIO_Port,Xylanh_2_Pin,1);
}
}
/* USER CODE END 3 */
}

/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Initializes the RCC Oscillators according to the specified


parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType =
RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue =
RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}

/** Initializes the CPU, AHB and APB buses clocks


*/
RCC_ClkInitStruct.ClockType =
RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource =
RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct,
FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}

/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */

/* GPIO Ports Clock Enable */


__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(Led_1_GPIO_Port, Led_1_Pin,
GPIO_PIN_SET);

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(Led_2_GPIO_Port, Led_2_Pin,
GPIO_PIN_SET);

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOE,
Xylanh_1_Pin|Xylanh_2_Pin|Xylanh_3_Trai_Pin|Xylanh_3_Phai_Pin,
GPIO_PIN_SET);

/*Configure GPIO pin : Led_1_Pin */


GPIO_InitStruct.Pin = Led_1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(Led_1_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pin : Led_2_Pin */


GPIO_InitStruct.Pin = Led_2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(Led_2_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pins : Xylanh_1_Pin Xylanh_2_Pin


Xylanh_3_Trai_Pin Xylanh_3_Phai_Pin */
GPIO_InitStruct.Pin =
Xylanh_1_Pin|Xylanh_2_Pin|Xylanh_3_Trai_Pin|Xylanh_3_Phai_Pin
;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

/*Configure GPIO pin : Button_4_Pin */


GPIO_InitStruct.Pin = Button_4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(Button_4_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pin : Button_1_Pin */


GPIO_InitStruct.Pin = Button_1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(Button_1_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pin : Sensor_0_Pin */


GPIO_InitStruct.Pin = Sensor_0_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(Sensor_0_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pin : Button_2_Pin */


GPIO_InitStruct.Pin = Button_2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(Button_2_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pins : Button_3_Pin Switch_2_Pin */


GPIO_InitStruct.Pin = Button_3_Pin|Switch_2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

/*Configure GPIO pin : Switch_1_Pin */


GPIO_InitStruct.Pin = Switch_1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(Switch_1_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pin : Sensor_4_Pin */


GPIO_InitStruct.Pin = Sensor_4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(Sensor_4_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pins : Sensor_3_Pin Sensor_1_Pin Sensor_2_Pin


*/
GPIO_InitStruct.Pin = Sensor_3_Pin|Sensor_1_Pin|Sensor_2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/* EXTI interrupt init*/


HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);

HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

/* USER CODE BEGIN MX_GPIO_Init_2 */


/* USER CODE END MX_GPIO_Init_2 */
}

/* USER CODE BEGIN 4 */


void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == Button_1_Pin)
{
Power = 1;
HAL_GPIO_WritePin(Led_1_GPIO_Port,Led_1_Pin,0);

HAL_GPIO_WritePin(Xylanh_1_GPIO_Port,Xylanh_1_Pin,0);

HAL_GPIO_WritePin(Xylanh_2_GPIO_Port,Xylanh_2_Pin,1);

HAL_GPIO_WritePin(Xylanh_3_Trai_GPIO_Port,Xylanh_3_Trai
_Pin,0);

HAL_GPIO_WritePin(Xylanh_3_Phai_GPIO_Port,Xylanh_3_Phai
_Pin,1);
if (Sensor_3 == 0)
{

HAL_GPIO_WritePin(Xylanh_3_Trai_GPIO_Port,Xylanh_3_Trai
_Pin,1);

HAL_GPIO_WritePin(Xylanh_3_Phai_GPIO_Port,Xylanh_3_Phai
_Pin,1);
}
}

if (GPIO_Pin == Button_2_Pin)
{
Power = 0;
HAL_GPIO_WritePin(Led_1_GPIO_Port,Led_1_Pin,1);

HAL_GPIO_WritePin(Xylanh_1_GPIO_Port,Xylanh_1_Pin,1);
}

}
/* USER CODE END 4 */

/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error
return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}

#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line
number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and
line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file,
line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

You might also like