CH1 led relay

实验原理

LD5

可以看到原理图中的单片机的PC15引脚接的LD5,当输出低电平的时候LD5亮,当输出高电平的时候LD5灭

image-20240314204526974

LED5电路

ULN2803

ULN2803为一个8路反向电器件,内部为达林顿晶体管阵列,当输入口输入高电平的时候,输出为低电平、当输入口输入低电平的时候,输出为高电平。

image-20240314222155068

ULN2803原理图

image-20240314222545542

典型应用图

运行原理

image-20240314222033066

内部原理图

1.当输入端B输入一个低电平的时候1号与2号三极管的Vbe<0.7v,因此两个三极管都不导通,输出端的电路为开路,负载不工作

低电平
输入为低电平时电路图

2.当输入端B输入一个高电平的时候1号与2号三极管的Vbe>0.7v,因此两个三极管都导通,输出端电路电流从VDD出发通过负载器件再通过2号三极管导通到公共端(E),此时负载工作

高电平
输入为高电平时电路图

继电器layer1、layer2

可以看到原理图中单片机的PA11连接到ULN2803的输入1口,PA12连接到ULN2803的输入2口,因此当PA11输出一个高电平的时候,ULN2803的OUT1输出低电平,A_RELAY1口为低电平,于是继电器1导通,将开关向下吸附住,此时闸刀开关1,3连接,灯LD2打开。PA12同理开发板

image-20240314204838873

继电器电路

配置 CubeMX

芯片型号为:STM32L071KBU6

!!!配置下载线(不要忘记)

image-20240314214454382

下载线配置

时钟树配置

使用内部的高速与低速时钟

image-20240314203604018

时钟树配置

IO口配置

image-20240314214656629

IO口配置

输出文件配置

image-20240321202032099

输出文件配置

代码

添加自己封装好的库文件

image-20240314215111209

库文件的添加

layer.c文件的编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "layer.h"
#include "gpio.h"
void LED5_CON(unsigned int flag_led5)//LED5控制
{

if(1 == flag_led5)//灯灭
HAL_GPIO_WritePin(LD5_GPIO_Port, LD5_Pin, GPIO_PIN_SET);
if(2 == flag_led5)//灯亮
HAL_GPIO_WritePin(LD5_GPIO_Port, LD5_Pin, GPIO_PIN_RESET);
}
void RELAY_CON(unsigned int flag_relay_pin,unsigned int flag_relay_mode)//继电器1,2控制
{
if(1 == flag_relay_pin)//继电器1
{
if(1 == flag_relay_mode)//打开继电器1
HAL_GPIO_WritePin(GPIOA, RELAY1_Pin,GPIO_PIN_SET);
if(2 == flag_relay_mode)//关闭继电器1
HAL_GPIO_WritePin(GPIOA, RELAY1_Pin,GPIO_PIN_RESET);
}
if(2 == flag_relay_pin)//继电器2
{
if(1 == flag_relay_mode)//打开继电器2
HAL_GPIO_WritePin(GPIOA, RELAY2_Pin,GPIO_PIN_SET);
if(2 == flag_relay_mode)//关闭继电器2
HAL_GPIO_WritePin(GPIOA, RELAY2_Pin,GPIO_PIN_RESET);
}
}

layer.h文件的编写

1
2
3
4
5
6
7
#ifndef __LAYER_H__
#define __LAYER_H__

void LED5_CON(unsigned int flag_led5);
void RELAY_CON(unsigned int flag_relay_pin,unsigned int flag_relay_mode);

#endif

main.c部分代码编写

1
2
3
4
5
6
7
8
9
10
#include "layer.h"
int main(void)
{
while (1)
{
LED5_CON(2);
RELAY_CON(1,1);
RELAY_CON(2,1);
}
}