21日写文章习惯养成之每日一篇学习心得(第一天:光电传感器)

        昨天,作为大二和工作室骨干的的我,执裁了我们工作室的全国大学生智能汽车竞赛选拔赛,我打一的时候智能车玩的是室外模块,很多室内模块都没尝试过,所以当知道今年大一队员的选拔赛是通过光电寻迹完赛的,为了更好的帮助他们运行代码和完赛,我也特意去学习了光电传感器的原理和使用,虽然很基础,但是我谈谈我的学习心得吧

        一、原理:

        这部分我不是专业的,我只能按照个人的理解和网上查找的资料讲解一下了。

         红外光电传感器是通过对外不断发射红外光线,如果未收到了回来的光线,灯亮,模块会将信号传输给光电控制的芯片输出高电平,芯片处理后将主控芯片传输高电平信号。如果收到了回来的光线,灯就不亮。

        主控芯片在收到信号之后,按原本写好的代码进行计算,给对应的电机输出引脚pwm。

        转向:小车是没有伺服电机的,所以我们使用左右轮的差速旋转进行转弯,在大弯道的时候通过正转和反转进行转弯。

        二、代码实现:

        我们使用的是stm32作为寻迹小车的主控芯片,使用了我们工作室学长自主编写的库文件,方便大一的新生学习,从学会调库开始,学长熬夜许久才写出来的标准库文件,有兴趣的可以看非凡智联:基于STM32F103C8T6标准库的二级库-CSDN博客

        首先我们main函数中对判断光电管数据的gpio引脚进行初始化

//本次使用的电机驱动芯片是使用两个引脚控制电机的正反转
    FF_PWM_Init(TIM2_MAP0_CH1_A0, 1000, 0);
	FF_PWM_Init(TIM2_MAP0_CH2_A1, 1000, 0);
	FF_PWM_Init(TIM2_MAP0_CH3_A2, 1000, 0);
	FF_PWM_Init(TIM2_MAP0_CH4_A3, 1000, 0);
//本次我们使用的是四路光电管寻迹
	FF_GPIO_Init(A4,GPIO_Input_Up,High);
	FF_GPIO_Init(A5,GPIO_Input_Up,High);
	FF_GPIO_Init(A6,GPIO_Input_Up,High);
    FF_GPIO_Init(A7,GPIO_Input_Up,High);

        其次我们就是在main函数中的while(1)循环中去书写执行代码

  while(1)
  {
        //将四个光电管信号获取赋值给一个变量,方便后期代码书写
		int right_1=FF_GPIO_Get_Level(A6);
		int right_2=FF_GPIO_Get_Level(A7);
		int left_1=FF_GPIO_Get_Level(A5);
		int left_2=FF_GPIO_Get_Level(A4);
        //直线寻迹
		if(right_1==0&&right_2==0&&left_1==0&&left_2==0)
		{
			FF_PWM_Set_Duty(TIM2_MAP0_CH1_A0, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH2_A1, 9500);//700//1000/3500
			FF_PWM_Set_Duty(TIM2_MAP0_CH3_A2, 9500);
			FF_PWM_Set_Duty(TIM2_MAP0_CH4_A3, 0);
			continue;
		}
        //走直线时,向左边微调
		if(right_1==0&&right_2==1&&left_1==0&&left_2==0)
		{	
			FF_PWM_Set_Duty(TIM2_MAP0_CH1_A0, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH2_A1, 9500);
			FF_PWM_Set_Duty(TIM2_MAP0_CH3_A2, 9200);
			FF_PWM_Set_Duty(TIM2_MAP0_CH4_A3, 0);
			continue;
		}
        //转弯时,向左进行大幅度转弯
		if(right_1==1&&right_2==1&&left_1==0&&left_2==0)
		{
			FF_PWM_Set_Duty(TIM2_MAP0_CH1_A0, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH2_A1, 9500);
			FF_PWM_Set_Duty(TIM2_MAP0_CH3_A2, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH4_A3, 4000);
			continue;
		}
        //转弯时,向左进行大幅度转弯
		if(right_1==1&&right_2==0&&left_1==0&&left_2==0)
		{
			FF_PWM_Set_Duty(TIM2_MAP0_CH1_A0, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH2_A1, 9500);
			FF_PWM_Set_Duty(TIM2_MAP0_CH3_A2, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH4_A3, 4000);
			continue;
		}
        //走直线时,向右边微调
		if(right_1==0&&right_2==0&&left_1==1&&left_2==0)
		{
			FF_PWM_Set_Duty(TIM2_MAP0_CH1_A0, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH2_A1, 9200);
			FF_PWM_Set_Duty(TIM2_MAP0_CH3_A2, 9500);
			FF_PWM_Set_Duty(TIM2_MAP0_CH4_A3, 0);
			continue;
		}
        //转弯时,向右进行大幅度转弯
		if(right_1==0&&right_2==0&left_1==1&&left_2==1)
		{
			FF_PWM_Set_Duty(TIM2_MAP0_CH1_A0, 4000);
			FF_PWM_Set_Duty(TIM2_MAP0_CH2_A1, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH3_A2, 9500);
			FF_PWM_Set_Duty(TIM2_MAP0_CH4_A3, 0);
			continue;
		}
        //转弯时,向右进行大幅度转弯
		if(right_1==0&&right_2==0&left_1==0&&left_2==1)
		{
			FF_PWM_Set_Duty(TIM2_MAP0_CH1_A0, 4000);
			FF_PWM_Set_Duty(TIM2_MAP0_CH2_A1, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH3_A2, 9500);
			FF_PWM_Set_Duty(TIM2_MAP0_CH4_A3, 0);
			continue;
		}
        //四路触发后停转
		if(right_1==1&&right_2==1&left_1==1&&left_2==1)
		{
			FF_PWM_Set_Duty(TIM2_MAP0_CH1_A0, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH2_A1, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH3_A2, 0);
			FF_PWM_Set_Duty(TIM2_MAP0_CH4_A3, 0);
			continue;
		}
	}

这是我对本次光电传感器的了解,写的不好勿喷哦

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思成毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值