红外循迹TCRT5000 舵机SG90

TCRT5000红外反射传感器:

引脚定义

D0:TTL开关信号输出

A0:模拟信号输出(不同距离输出不同的电压,此引脚可以不接)

工作原理:

TCRT5000传感器的红外发射二极管不断发射红外线,黑色是不反射红外线的,也就是说循迹模块遇到黑线,模块D0输出高电平,输出指示灯熄灭;

反之D0输出低电平

应用范围场景

黑白线检测,(循迹小车)

障碍检测,(手扫开关)

实现代码

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(GPIO_PIN_RESET==HAL_GPIO_ReadPin(D0_GPIO_Port,D0_Pin))
		{
			printf("black\r\n");
		}
		if(GPIO_PIN_SET==HAL_GPIO_ReadPin(D0_GPIO_Port,D0_Pin))
		{
			printf("white\r\n");
		}
		HAL_Delay(200);
  }

SG90舵机:

引脚定义

在这里插入图片描述

工作原理:

通过定时器PWM控制,给相应的占空比旋转相应角度

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:

0.5ms--------------0度;

1.0ms------------45度;

1.5ms------------90度;

2.0ms-----------135度;

2.5ms-----------180度;

在这里插入图片描述

CUBEMX配置

在这里插入图片描述
在这里插入图片描述

实现代码

//		/*舵机参数:f=50hz,t=20ms
//		--------------------------
//		|0   |45 |90 |135|180|   度|
//		-------------------------
//		|0.5 |1.0|1.5|2.0|2.5| 毫秒|
//		--------------------------

// angle:角度值,0~180
void Servo_Control(uint8_t angle)
{
   float temp;
	
		//占空比值 = 1/9 * 角度 + 5
   temp =(1.0 / 9.0) * angle + 5.0;
	
	//200脉宽 0.1ms一单位
	
	//修改占空比
   __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, (uint16_t )temp);
}

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(ststus==0)
		{
			i++;
			if(i==180)
			{
				ststus=1;
			}
		}
		
		else if(ststus==1)
		{
			i--;
			if(i==0)
			{
				ststus=0;
			}
		}
		
		Servo_Control(i);
		HAL_Delay(1);
			
  }
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值