51单片机小项目--红外巡线小车

本文介绍了使用51单片机实现红外循迹和超声波避障的项目经验。首先,通过L298N驱动电机,然后逐步添加红外对管和超声波传感器功能。由于缺乏基础,作者从零开始学习,通过CSDN和同行帮助,最终完成项目。文章详细解析了L298N驱动原理和两种控制方法,并提供了51单片机的代码示例。此外,还提及了在STM32上使用PWM模式进行更高效控制的方法。
摘要由CSDN通过智能技术生成

        这次项目要求我们使用51单片机,实现红外循迹超声波避障的功能。

        我将这个几个实现的任务一步步分解开来,首先要然小车动起来,需要模块是需要电机和定时器,我们那时候用到小黄电机,驱动是用的L298N。然后就是将其他实现的功能加进去,比如先使用红外对管,可以让小车寻黑线,使用超声波躲避障碍,然后和队友一起焊遥控器,控制小车穿越规定障碍路线。当时我们51单片机的基础很差(其实就没有学),而且C语言都没有学,什么都不会,CSDN也是第一次用,搜索效率是真低啊,还好隔壁组有大佬,请教了好几次,把程序要来直接用,虽然效果不是很好,但是渐渐的我也摸索到了方法,那时候我负责红外循迹,也是三个任务里面比较难的,因为基础差,我们都没将三个任务的程序在一个main函数里面。后面的博客我会将三个程序合起来,算是弥补当时的小遗憾吧。

L298N驱动

        先了解L298N驱动的工作原理,现在看它的驱动原理,有了不同的感觉,因为我也是最近学习一些数字电路的内容,回顾它还是蛮简单的,使用之前一定要看对口再接线,尤其是正负极,还有5V和12V的接口(有一个板载5V使能跳线帽:供电电压为5V时套上,12V时摘下),其次弄懂它的逻辑原理,L298N是一个两路的驱动,它可以驱动两个电机,每一路驱动都有一个使能口,两个逻辑输入口,不同情况对应电机不同的状态。

方法1:

        这个方法是三个口控制一个电机,其实也可以使用两个口直接控制的,但是我先说一下前面这种吧,而且最开始我也是使用三个口的,这是基础的控制方法了。

IN1IN2ENA电机状态
XX0停止
101顺时针
011逆时针
000停止
110停止

(1:表示高电平,0:表示低电平)

        主要是还是使能口的确定,确定使能口的高低电平,然后给逻辑口1或0,就可以控制电机了。软件程序是需要使用定时器的,设置PWM值控制电机的转速。


//以定时器0和定时器1为例
#define uint unsigned int
uint PWM=0;  //定义PWM值,控制电机转速
uint pwm1=0;

sbit IN11 = P1^0; //定义逻辑口
sbit IN21 = P1^1;    

sbit IN31 = P1^2;                                      
sbit IN41 = P1^3;

sbit a1=P2^1; //定义驱动使能口a1
sbit b1=P2^2; //定义驱动使能口b1
uint i=0,j=0;

void Time() //定时器0和1初始函数
{ 
    TMOD |= 0x11;  //设置定时器0方式为1 定时器1为方式1
//  TMOD |= Ox01;  //设置定时器0方式为1
    EA=1;          //打开总中断
    TH0 = 0xfc;    //设置定时器处置为高四位,定时1ms
    TL0 = 0x18;    //设置定时器设置为低四位
    ET0 = 1;	  //打开定时器0中断允许
    TR0 = 1;   	  //打开定时器0
    
    TH1 = 0xfc;    //设置定时器处置为高四位,定时1ms
    TL1 = 0x18;    //设置定时器设置为低四位
    ET1 = 1;	  //打开定时器1中断允许
    TR1 = 1;   	  //打开定时器1
    
}

void Timer0() interrupt 1
{
    TH0=0xfc; 
	TL0=0x18;		
	if(i>PWM)a1=1;else a1=0;			
	i++;
	if(i>=100)i=0;
}
void Timer1() interrupt 3
{
    TH1=0xfc; 
	TL1=0x18;		
	if(j>pwm1)b1=1;else b1=0;		
	j++;
	if(j>=100)j=0;
}

void forward_move()  //电机正转函数,速度50,最大速度100
{
    PWM = 50;
    pwm1 = 50;

    IN11 = 0; 
    IN21 = 1;    

    IN31 = 0;                                      
    IN41 = 1;					
}

void xunji() //定义循迹函数
{
    forward_move();
    //这里需要用户自己写了,我们但是使用了红外对管循黑线,它很简单,使用的对管多了,逻辑就复杂一点,但是谨慎一点就好
}
void main()
{
    Timer();
    while(1)
    {
        xunji();
    }
}

​

方法2 :

        第二种方法是使用在性能更高的芯片上,比如STM32F1或F4系列的。首先要将使能口跳线帽拔掉,开启PWM调速。由于STM32的定时器有PWM模式,有模式1和模式2,这样就可以将普通口拉高或拉低,通过定时器的PWM模式(我使用的PWM模式2),赋值两个通道,直接给驱动的逻辑口输入需要的速度值即可。(这里需要对STM32定时器PWM模式有一定的理解,不然还是有点费力的,当时我就没弄明白只是会用,现在回过头才恍然大悟)

电机状态IN1IN2
正转1/PWM0
反转01/PWM
待机00
刹车11

(1:表示高电平;0:表示低电平;PWM:表示脉宽调制波,调节占空比改变调速)

        第二种方法因为要使用到STM32系里开发板,这里我就不提供代码了,等我后面写我们校内赛的总结的时候,可以加上这方面的代码。

        我的能力有限,但是希望可以帮助一些刚学习51单片机的朋友,最后呢,如有错误,还望指正,一起进步,一起努力,加油,我们不可以停止脚步哦!

        

循迹小车,随着电力电子器件的发展,PWM电压型逆变器在交流变频调速、UPS、电能质量控制器、轻型直流输电换流器等电力电子装置中得到了越来越广泛的应用。PWM电压型逆变器直流侧所需的理想无脉动直流电压源通常通过整流加上大直流电容滤波获得。大直流滤波电容的使用,给装置带来占用空间大、成本高及严重影响电能质量方面的问题。因此,研究如何减小甚至去除逆变器直流侧电容,以及解决因其产生的低次谐波和相关问题,具有十分重要的理论意义和实用价值。本文在综述了国内外在PWM电压型逆变器及各种抑谐波PWM技术的基础上,对目前工程中应用最广泛的SPWM电压型逆变器的主电路及谐波消除调技术和相关问题进行了深入研究。50年代末晶闸管标志着电力电子半导体期间的开端。电力电子器件经历了40多年的发展历程[1-2],特别是近30多年内更是得到了迅猛的发展[3,4]。以Th(SCR)为代表的半控型器件是第一代电力电子器件[5],其主要用于可控整流装置,若用于可控的逆变器,因其无法自行关断,须配置强迫换流电路,致使装置复杂化。CR)为代表的半控型器件是第一代电力电子器件[5],其主要用于可控整流装置,若用于可控的逆变器,因其无法自行关断,须配置强迫换流电路,致使装置复杂化。CR)为代表的半控型器件是第一代电力电子器件[5],其主要用于可控整流装置,若用于可控的逆变器,因其无法自行关断,须配置强迫换流电路,致使装置复杂化。CR)为代表的半控型器件是第一代电力电子器件[5],其主要用于可控整流装置,若用于可控的逆变器,因其无法自行关断,须配置强迫换流电路,致使装置复杂化。CR)为代表的半控型器件是第一代电力电子器件[5],其主要用于可控整流装置,若用于可控的逆变器,因其无法自行关断,须配置强迫换流电路,致使装置复杂化。CR)为代表的半控型器件是第一代电力电子器件[5],其主要用于可控整流装置,若用于可控的逆变器,因其无法自行关断,须配置强迫换流电路,致使装置复杂化。CR)为代表的半控型器件是第一代电力电子器件[5],其主要用于可控整流装置,若用于可控的逆变器,因其无法自行关断,须配置强迫换流电路,致使装置复杂化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值