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

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

ULN2803原理图

典型应用图
运行原理

内部原理图
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同理开发板

继电器电路
配置 CubeMX
芯片型号为:STM32L071KBU6
!!!配置下载线(不要忘记)

下载线配置
时钟树配置
使用内部的高速与低速时钟

时钟树配置
IO口配置

IO口配置
输出文件配置

输出文件配置
代码
添加自己封装好的库文件

库文件的添加
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) {
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) { if(1 == flag_relay_pin) { if(1 == flag_relay_mode) HAL_GPIO_WritePin(GPIOA, RELAY1_Pin,GPIO_PIN_SET); if(2 == flag_relay_mode) HAL_GPIO_WritePin(GPIOA, RELAY1_Pin,GPIO_PIN_RESET); } if(2 == flag_relay_pin) { if(1 == flag_relay_mode) HAL_GPIO_WritePin(GPIOA, RELAY2_Pin,GPIO_PIN_SET); if(2 == flag_relay_mode) 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); } }
|