STM32之继电器驱动无人船电机

无人船的电机驱动:

1、由于无人船的电机功率比较大,无法使用驱动模块通过PWM来驱动。所以考虑使用继电器来驱动电机。使用继电器的缺点就是不能调速。

2、下面问题来了,无人船电源电压是12V,然而单片机一般都是5V来驱动,所以我将考虑使用一个降压模块,将12V降到5V左右,给STM32单片机供电。

3、单片机是如何与继电器进行结合工作呢是我们考虑的一个问题。我们要弄明白继电器的工作原理。继电器(英文名称:relay)是一种电控制器件,当输入量的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。


附上继电器的接线图:123为一路继电器,456为1路继电器


附上代码:选用PB1、PB2、PE11、PE12分别对应继电器的CH1、CH2、CH3、CH4引脚

relay.c

#include "stm32f10x.h"
#include "relay.h"

void RELAY_Init(void)     //初始化函数
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE);	 
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;				 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
 GPIO_Init(GPIOB, &GPIO_InitStructure);					
 GPIO_SetBits(GPIOB,GPIO_Pin_1);						 

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;	    		 
 GPIO_Init(GPIOB, &GPIO_InitStructure);	  				 
 GPIO_SetBits(GPIOB,GPIO_Pin_2); 


 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;	    		 
 GPIO_Init(GPIOF, &GPIO_InitStructure);	  				 
 GPIO_SetBits(GPIOF,GPIO_Pin_11); 
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;	    		 
 GPIO_Init(GPIOF, &GPIO_InitStructure);	  				 
 GPIO_SetBits(GPIOF,GPIO_Pin_12); 

}


//控制螺旋桨转向
void go_relay_on(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_1);     //无人船前进
        GPIO_SetBits(GPIOF,GPIO_Pin_11); 
}

void back_relay_on(void)
{
  
	 GPIO_SetBits(GPIOB,GPIO_Pin_2);     //无人船倒退
         GPIO_SetBits(GPIOF,GPIO_Pin_12); 
 
}

void  go_left(void)                        //无人船左转
{
         GPIO_SetBits(GPIOB,GPIO_Pin_2);
	 GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}

void  go_right(void)                      //无人船右转
{
        GPIO_SetBits(GPIOB,GPIO_Pin_1);
	GPIO_ResetBits(GPIOB,GPIO_Pin_2); 
}	


void go_relay_stop(void)
{ 
       GPIO_ResetBits(GPIOB,GPIO_Pin_1); 
       GPIO_ResetBits(GPIOF,GPIO_Pin_11);  //无人船前进停止
}

void back_relay_stop(void)
{ 
       GPIO_ResetBits(GPIOB,GPIO_Pin_2); 
       GPIO_ResetBits(GPIOF,GPIO_Pin_12);  //无人船后退停止
}

 

猜你喜欢

转载自blog.csdn.net/weixin_45651122/article/details/107584723