繼電器是控制電路的電子元器件,通過感應輸入電流的變化控制電路的通斷,通常用于自動化控制電路中,在電路中起著自動調(diào)節(jié)、隔離、安全保護和轉(zhuǎn)換等作用。直流繼電器通常有5個引腳,其中有兩個引腳是線圈控制引腳,其他3個引腳分別是是常開端、常閉端和公共端。在沒有上電時,線圈沒有通電,常閉端和公共端相連,常開端和公共端斷開;上電后,線圈通電,常開端和公共端相連,常閉端和公共端斷開。所以繼電器就相當于是一個開關(guān),可以使用低壓控制高壓。
一模塊來源
模塊實物展示:
資料鏈接:http://pan.baidu.com/share/link?shareid=3950641169&uk=2302102993
二規(guī)格參數(shù)
工作電壓:5V
可控制的交流電壓范圍:可達250V,10A
可控制的交流電壓范圍:可達30V,10A
控制方式:GPIO
管腳數(shù)量:4 Pin(2.54mm間距排針)
以上信息見廠家資料文件
三移植過程
我們的目標是將例程移植至CW32F030C8T6開發(fā)板上【能夠?qū)崿F(xiàn)控制繼電器的吸合與釋放的功能】。首先要獲取資料,查看數(shù)據(jù)手冊應如何實現(xiàn)讀取數(shù)據(jù),再移植至我們的工程。
3.1查看資料
如果繼電器在低壓電源導通的狀態(tài)下,電磁鐵有了磁力,吸合銜鐵,觸點閉合,高壓電源形成回路處于導通狀態(tài);如果繼電器在低壓電源斷開的狀態(tài)下,電磁鐵沒有磁力,因為彈簧的緣故,彈簧將觸點斷開,高壓電源沒有形成回路處于斷開狀態(tài);
知道了控制原理,再來看原理圖。K1為繼電器,其中的4腳和5腳是繼電器的低壓電源控制引腳,當IN1輸出低電平,U1光耦隔離器的1腳2腳導通使得4腳和3腳導通,VCC通過4腳到3腳經(jīng)過R2給三極管的基極得電,因為三極管的基極得電,使得三極管導通,VCC經(jīng)過繼電器的4腳到5腳到三極管到地。因此繼電器的線圈得電,繼電器的1腳觸點由2腳吸合到3腳,達到了我們控制開關(guān)的目的。其中原理圖中的P1端子的1腳是常閉觸點,2腳是公共觸點,3腳是常開觸點。對應的接線圖見下方右圖。
3.2引腳選擇
該模塊有3個引腳,具體引腳連接見各引腳連接。
模塊接線圖
3.3移植至工程
移植步驟中的導入.c和.h文件與【CW32模塊使用】DHT11溫濕度傳感器相同,只是將.c和.h文件更改為bsp_relay.c與bsp_relay.h。這里不再過多講述,移植完成后面修改相關(guān)代碼。
在文件bsp_relay.c中,編寫如下代碼。
/*
* Change Logs:
* Date Author Notes
* 2024-06-24 LCKFB-LP first version
*/
#include "bsp_relay.h"
#include "stdio.h"
/******************************************************************
* 函 數(shù) 名 稱:relay_GPIO_Init
* 函 數(shù) 說 明:繼電器引腳初始化
* 函 數(shù) 形 參:無
* 函 數(shù) 返 回:無
* 作 者:LC
* 備 注:無
******************************************************************/
void Relay_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化結(jié)構(gòu)體
RCC_RELAY_IN_ENABLE(); // 使能GPIO時鐘
GPIO_InitStruct.Pins = GPIO_RELAY_IN; // GPIO引腳
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽輸出
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; // 輸出速度高
GPIO_Init(PORT_RELAY_IN, &GPIO_InitStruct); // 初始化
}
/******************************************************************
* 函 數(shù) 名 稱:Set_Relay_Switch
* 函 數(shù) 說 明:設置繼電器狀態(tài)
* 函 數(shù) 形 參:0繼電器吸合 1繼電器斷開
* 函 數(shù) 返 回:
* 作 者:LC
* 備 注:
******************************************************************/
void Set_Relay_Switch(unsigned char state)
{
RELAY_OUT(state);
}
在文件bsp_relay.h中,編寫如下代碼。
/*
* Change Logs:
* Date Author Notes
* 2024-06-24 LCKFB-LP first version
*/
#ifndef _BSP_RELAY_H_
#define _BSP_RELAY_H_
#include "board.h"
#define RCC_RELAY_IN_ENABLE() __RCC_GPIOA_CLK_ENABLE()
#define PORT_RELAY_IN CW_GPIOA
#define GPIO_RELAY_IN GPIO_PIN_2
#define RELAY_OUT(x) GPIO_WritePin(PORT_RELAY_IN, GPIO_RELAY_IN, x?GPIO_Pin_SET:GPIO_Pin_RESET)
void Relay_GPIO_Init(void);//繼電器引腳初始化
void Set_Relay_Switch(unsigned char state);//設置繼電器狀態(tài)
#endif
四移植驗證
>>>
在自己工程中的main主函數(shù)中,編寫如下。
/*
* Change Logs:
* Date Author Notes
* 2024-06-24 LCKFB-LP first version
*/
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_relay.h"
int32_t main(void)
{
board_init(); // 開發(fā)板初始化
uart1_init(115200); // 串口1波特率115200
Relay_GPIO_Init(); //繼電器初始化
printf("Demo Start...rn");
while(1)
{
Set_Relay_Switch(0);//控制繼電器吸合
delay_ms(1000);
Set_Relay_Switch(1);//控制繼電器松開
delay_ms(1000);
}
}
移植現(xiàn)象:一上電就會聽到繼電器吸合的聲音
模塊移植成功案例代碼:
鏈接:https://pan.baidu.com/s/1A3N-aVpZ0V6seaxmHz40Ag?pwd=LCKF
提取碼:LCKF