ULN2003 làm trình điều khiển chuyển tiếp
Cấu hình cặp darlington riêng lẻ trong ic ULN2003 được đưa ra ở phía bên phải. 3,3 volt từ các chân đầu ra của vi điều khiển stm32 đi đến chân của bóng bán dẫn đầu tiên. Bộ phát bóng bán dẫn đầu tiên được đưa vào đế bóng bán dẫn thứ hai. Vì vậy, khi bóng bán dẫn đầu tiên được bật ngay lập tức bóng bán dẫn thứ hai cũng sẽ được bật. Dòng điện sẽ bắt đầu chạy từ ‘Ra’ xuống đất. Diode ở chân ‘COM’ đang hoạt động như một diode quay lại. Nó ngăn mạch khỏi bất kỳ emf trở lại nào được tạo ra bởi các cuộn dây rơle. ULN2003 có thể xử lý tải yêu cầu 50 volt và dòng điện 500 mA.
|
|
Tôi sẽ bật và tắt bốn rơ le với vi điều khiển stm32. Bốn nút được sử dụng làm đầu vào cho vi điều khiển stm32. Bốn nút này tương ứng với bốn rơ le đầu ra. Nhấn từng nút sẽ thay đổi trạng thái của rơ le tương ứng. Ví dụ, nếu rơle đang bật, nhấn nút tương ứng của nó sẽ chuyển trạng thái thành tắt. Chúng ta có thể nói rằng các nút đang chuyển đổi trạng thái của rơ le trên mỗi lần nhấn.
Vi điều khiển được sử dụng trong dự án là stm32f103c8t6. Cấu tạo của nó trên lõi m3 vỏ não. Các chân Port-A 0,1,2,3 của vi điều khiển stm32 được dùng làm chân đầu ra. Chân số 0 của cổng-a được kết nối với đầu vào 1 của trình điều khiển rơle ULN2003. Pin # 1 trong tổng số port-a được kết nối với đầu vào 3, pin # 2 được kết nối với đầu vào 5 và pin # 3 được kết nối với pin # 7 của tài xế ULN2003 relay. Nút Input được kết nối với cổng-b ghim 6, 7, 8, 9. Vi điều khiển Stm32 tích hợp các điện trở kéo lên và kéo xuống trên mỗi chân gpio riêng lẻ. Chúng tôi có thể bật và tắt chúng trong mã. Đối với đầu vào nút của chúng tôi, tôi đã bật các điện trở kéo lên được liên kết với mỗi gpio (Cổng-B Pin # 6,7,8,9). Một mặt của các nút đầu vào được kết nối với các chân vi điều khiển và mặt còn lại thường được nối đất.
Rơ le mà tôi đang sử dụng trong dự án kích hoạt trên +9 volt. Tôi kết nối cuộn dây rơle một đầu với đầu ra ULN2003 và đầu kia +12 volt. Chân Com của rơ le được nối đất với nguồn tải. Chân Nc của rơ le được nối với tải và đầu kia của tải được nối với dây dẫn dương của nguồn tải. Không có chân nào của rơ le được để nguyên. Chân nối đất của ULN2003 được nối đất với nguồn điện 12 volt relay và với tiếp đất stm32. Lưu ý ULN2003 GND phải được nối đất thường với nguồn cấp điện stm32 và nguồn cấp điện rơ le ULN2003.
Mã số dự án
if (HAL_GPIO_ReadPin (GPIOB, B6_Pin) == GPIO_PIN_RESET) // Kiểm tra nhấn nút đầu vào
HAL_GPIO_TogglePin (GPIOA, A0_Pin);
/*
***********************************************
Written by : Usman Ali Butt *
Property of : www.microcontroller-project.com *
Dated : 17 july 2018 *
***********************************************
*/
#include “main.h”
#include “stm32f1xx_hal.h”
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/* USER CODE BEGIN WHILE */
while (1)
{
if(HAL_GPIO_ReadPin(GPIOB,B6_Pin)==GPIO_PIN_RESET) //Check for input button press
HAL_GPIO_TogglePin(GPIOA,A0_Pin); //If button pressed toggle relay state
if(HAL_GPIO_ReadPin(GPIOB,B7_Pin)==GPIO_PIN_RESET) //Check for input button press
HAL_GPIO_TogglePin(GPIOA,A1_Pin); //If button pressed toggle relay state
if(HAL_GPIO_ReadPin(GPIOB,B8_Pin)==GPIO_PIN_RESET) //Check for input button press
HAL_GPIO_TogglePin(GPIOA,A2_Pin); //If button pressed toggle relay state
if(HAL_GPIO_ReadPin(GPIOB,B9_Pin)==GPIO_PIN_RESET) //Check for input button press
HAL_GPIO_TogglePin(GPIOA,A3_Pin); //If button pressed toggle relay state
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
/**Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Initializes the CPU, AHB and APB busses 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(__FILE__, __LINE__);
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, A0_Pin|A1_Pin|A2_Pin|A3_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : A0_Pin A1_Pin A2_Pin A3_Pin */
GPIO_InitStruct.Pin = A0_Pin|A1_Pin|A2_Pin|A3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : B6_Pin B7_Pin B8_Pin B9_Pin */
GPIO_InitStruct.Pin = B6_Pin|B7_Pin|B8_Pin|B9_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void _Error_Handler(char *file, int line)
{
while(1)
{
}
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
}
#endif /* USE_FULL_ASSERT */
Đoạn mã trên có thể được sử dụng với bảng chuyển tiếp. Các kết nối giống nhau. Chỉ bạn phải làm cho nguồn điện rơle và nguồn điện stm32 chung.