基于MSP430F5529的两路寻迹小车附OLED显示代码

导语

基于MSP430的寻迹小车,寻迹小车主要涉及到I/0口的输入输出,以及定时器产生PWM,个人认为,基本上不管是玩Arduino、C51、STM32或者MSP430单片机都应该必须会的。

主要器件

在这里笔者分享一下自己做的寻迹小车:

  1. 主控使用Ti官方的MSP430F5529,相比G2553,F5529引脚功能比较多些,其他型号的单片机都可以参考

2.两个寻迹传感器,TCRT5000红外反射传感器,检测到黑线或者悬空输出高电平

3.一个TB6612电机驱动,驱动两路4个130小电机足够了

4.0.96寸OLED显示,I2c通信协议,显示内容可以自行设置

电路接线放在程序注释里了

主函数

main函数代码如下

/************接线******************/
//OLED:
//     SCL--P3.5,SDA--P3.6
//
//L298N:
//      左电机:IN1--P1.4,IN2--P1.5,PWMA--P1.2
//      右电机:IN3--P3.3,IN4--P3.4,PWMB--P1.3
//
//双路寻迹传感器: 左:---P4.1
//           右:---P4.0

#include <msp430.h>
#include <motor.h>
#include "oled.h"
#include "type.h"
#include "bmp.h"

void OLED_Display();
void Delay()
{
	volatile unsigned int i;
	for(i=50000;i>0;i--);   // Delay
}

int main(void)
{
  WDTCTL = WDTPW+WDTHOLD;               // 关闭看门狗
  motor_IO_int();
  OLED_Init();    //初始化
  OLED_Clear();   //清屏

  while(1)
  {
	       OLED_Display();
	       switch(P4IN&0x03)
	         {
	        case 0x00: ftont();break;  //0000 ,全白,前进

	        case 0x01:turn_R();break;  //0001,右边传感器碰到黑线,右转

	        case 0x02:turn_L();break;   //0010 ,左边传感器碰到黑线,左转

	        case 0x03: stop();break;  // 0011  全黑,停止

	         }

  }
}

void OLED_Display()
{
	OLED_ShowString(50,0,"Car",5);
    __delay_cycles(1000000);
	OLED_DrawBMP(0,0,127,7,BMP);
	}

电机PWM控制

#include <motor.h>

void motor_IO_int()
{
	    P1DIR |=(BIT2+BIT3+BIT4+BIT5);	//PWM1,PWM2,IN1,IN2
	    P3DIR |=(BIT3+BIT4);  
		P1SEL |=(BIT2+BIT3);

	    TA0CCR0 = 50;  //定时器装载值,周期50us,即频率1*10^6/50=20kHz
	    TA0CCTL1 = OUTMOD_7;
	    TA0CCTL2 = OUTMOD_7;
	    TA0CTL= TASSEL_2 +MC_1;

	  P4DIR = 0x00; //左右寻迹传感器.
	  P4SEL = 0x00;
	}
void ftont()                       //前进
{
	 PWM(32,32);   //PWM占空比:32*100/50= 64%,即2倍关系
	 P1OUT |= BIT5;                        
	 P1OUT &= ~BIT4;
	 P3OUT |= BIT4;                      
	 P3OUT &= ~BIT3;
}
void stop()                       //停止
{
	 PWM(0,0);

}
void turn_L()                         //左拐
{
	 PWM(15,20);                           
	 P1OUT |= BIT4;                       
	 P1OUT &= ~BIT5;
	 P3OUT |= BIT4;                       
	 P3OUT &= ~BIT3;
}
void turn_R()                //右拐
{
	PWM(20,15);
	P1OUT |= BIT5;                       
	P1OUT &= ~BIT4;
	P3OUT |= BIT3;                        
	P3OUT &= ~BIT4;
}

void PWM(int pwm1,int pwm2)        //左,右电机PWM
{
	TA0CCR1 = pwm1;   // CCR2 PWM 占空比定义
	TA0CCR2 = pwm2;   // CCR2 PWM 占空比定义
	}



详细代码工程

百度网盘下载:链接:https://pan.baidu.com/s/1dZIDLm8976wuyfgrsHjk7Q
提取码:8888

效果展示

直接上视频。寻线轨迹用的是2019年电赛无线充电小车铺设的图

基于MSP430F5529的两路寻迹小车

结束语

能力有限,难免有不足之处,对上述内容有疑问欢迎下方留言评论~