STM32小项目01-红外模块控制电磁推杆伸缩
项目要求:
通过红外模块识别传送带中移动的物体是否靠近目标位置,当物体到达目标位置则立即控制电磁推杆下压并在较短时间内复位,完成一次下压动作后则进入下一次的等待与识别过程。
所用材料:
-
控制芯片-STM32C8T6
-
红外传感器模块(物体靠近输出低电平)
-
两路继电器
-
24V电磁推杆
-
220V转24V直流变压器
-
24V直流转5V直流降压模块
控制方案:
主控芯片为STM32C8T6,其与红外传感器模块相连,并将传感器信号作为输入信号,分配IO口为PA1;其与继电器相连,并输出信号控制继电器的通断以控制电磁推杆的伸缩,分配IO口为PA2;
一、器件接线
红外模块 | STM32 | 继电器 | 电推杆 | 直流电源 |
---|---|---|---|---|
红外_OUT | STM_PA1 | |||
STM_PA2 | 继电器_IN2 | |||
继电器_NO2 | 电推杆_A线 | |||
红外_VCC | +5V | |||
红外_GND | GND | |||
STM_5V | +5V | |||
STM_GND | GND | |||
继电器_DC+ | +5V | |||
继电器_DC- | GND | |||
继电器_COM2 | 24V_GND | |||
电推杆_B线 | +24V |
二、STM32CubeMX配置
- 新建工程-选择F103C8芯片
- SYS配置
将DEBUG选项设置为Serial Wire
- RCC配置
选择高速外部时钟
- GPIO配置
- 时钟配置
- 文件设置
三、MDK5程序编写
在main.c的main函数中添加如下代码:
while (1)
{
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)==0)
{
HAL_Delay(20);
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)==0)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)==0);
}
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
四、程序附录
main.c
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
// __HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
// HAL_TIM_Base_Start_IT(&htim3); //内部定时器TIM3中断使能
/* USER CODE END 2 */
while (1)
{
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)==0)
{
HAL_Delay(20);
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)==0)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)==0);
}
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}