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

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

导语

基于MSP430F5529的两路寻迹小车,主要涉及到I/0口的输入输出,以及定时器产生PWM。

主要器件

寻迹小车所需的主要器件:

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

  2. 两个寻迹传感器,TCRT5000红外反射传感器,检测到黑线或者悬空输出高电平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的两路寻迹小车

结束语

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

  • 51
    点赞
  • 437
    收藏
    觉得还不错? 一键收藏
  • 52
    评论
对于MSP430F5529微控制器驱动TB6612电机驱动器,你需要进行以下步骤: 1. 硬件连接:将MSP430F5529的GPIO引脚与TB6612电机驱动器的IN1、IN2、IN3和IN4引脚连接。确保连接正确,可以参考MSP430F5529和TB6612的引脚图和数据手册。 2. 配置GPIO引脚:使用MSP430F5529的开发环境(如Code Composer Studio或MSP430ware)配置GPIO引脚为输出模式。将IN1、IN2引脚配置为控制电机1,将IN3、IN4引脚配置为控制电机2。 3. 控制电机:编写代码来控制GPIO引脚以驱动电机。具体的代码实现会根据你的需求而有所不同,以下是一个简单的示例: ```c #include <msp430.h> #define IN1_PIN BIT0 #define IN2_PIN BIT1 #define IN3_PIN BIT2 #define IN4_PIN BIT3 void delay(int ms) { int i; for (i = 0; i < ms; i++) { __delay_cycles(1000); // 延迟1毫秒 } } void forward() { P1OUT |= IN1_PIN; P1OUT &= ~IN2_PIN; P1OUT |= IN3_PIN; P1OUT &= ~IN4_PIN; } void backward() { P1OUT &= ~IN1_PIN; P1OUT |= IN2_PIN; P1OUT &= ~IN3_PIN; P1OUT |= IN4_PIN; } void stop() { P1OUT &= ~(IN1_PIN | IN2_PIN | IN3_PIN | IN4_PIN); } int main(void) { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器 P1DIR |= (IN1_PIN | IN2_PIN | IN3_PIN | IN4_PIN); // 配置引脚为输出模式 while (1) { forward(); // 前进 delay(1000); // 延迟1秒 stop(); // 停止 delay(1000); // 延迟1秒 backward(); // 后退 delay(1000); // 延迟1秒 stop(); // 停止 delay(1000); // 延迟1秒 } } ``` 这个示例代码使用P1端口的特定引脚(P1.0、P1.1、P1.2和P1.3)来控制电机的转动方向。你可以根据实际情况修改代码以适应你的引脚配置和控制方式。 请注意,这只是一个简单的示例,实际应用中可能需要更复杂的逻辑和控制算法来实现更精细的电机控制。同时,还需要根据具体的电机参数和驱动器的工作电压等信息来进行合适的配置和控制。
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值