基于MSP432P401R爬坡小车【2020年电赛C题】

这篇具有很好参考价值的文章主要介绍了基于MSP432P401R爬坡小车【2020年电赛C题】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、任务清单

1. 硬件部分

  • 主控板: MSP432P401R
  • 数据显示: OLED
  • 电机: 霍尔编码器电机
  • 电池: 7.3V航模电池
  • 巡线: OpenMV H7 Plus
  • 警报: 蜂鸣器
  • 电机驱动: TB6612
  • 仪器: 3D打印机
  • 视觉云台: 3D建模打印
  • 转向: 数字舵机
  • 其他: 铜柱、螺丝螺母、开关、面包板等。
    基于MSP432P401R爬坡小车【2020年电赛C题】,MSP430/432,c语言,开发语言,单片机,嵌入式硬件

2. 软件部分

  • 编译器: Keil、OpenMV IDE
  • 建模软件: SketchUp Pro 2022
  • 切片软件: Cura
  • 编程方式: 库函数
  • 编程语言: C、Python

二、OpenMV巡线

这里巡线不用红外探头的原因是考虑到市面上大多红外对该虚线采集的信号并不是很准确,存在偶然因素,故选择摄像头巡线。

这里我通过寻找有效区域内的最大色块,将其x轴坐标返回给单片机,在单片机端进行数据处理,例如摄像头下的分辨率为(w:320,h:240),设感应区域ROI为(0,90,320,60) ,
采集到的有效色块X坐标为162,下图可见,被圈出的大白框矩形为感应区域ROI,中间被圈出的为最大有效色块(图中色块阈值选择为黑色),下方红色圈出的为该色块的X轴坐标。
基于MSP432P401R爬坡小车【2020年电赛C题】,MSP430/432,c语言,开发语言,单片机,嵌入式硬件
获取目标色块:

img = sensor.snapshot()  //截取摄像头的一个图像
blob=img.find_blobs([thresholds[0]], roi=ROI1, x_stride=10, y_stride=5,pixels_threshold=10, area_threshold=10, merge=True)  

筛选出最大色块:

def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob[2]*blob[3] > max_size:
            max_blob=blob
            max_size = blob[2]*blob[3]
    return max_blob

输出最大色块X坐标:

x=max_ID.cx()

将有效色块坐标发送至单片机端后该怎样对数据进行处理呢?

  • 方法一:
    例如采集到的坐标为140,可知中心坐标为160,已速度闭环为例,可先将坐标差值Err=140-160=-20,可拟定为负值为偏左,正值为偏右,假如你的闭环在每10ms单相双边沿产生15个脉冲信号,可设定一个线性系数k,有Err/k=P,Err2=Err_Last-Err=I,则Target_L=15+PI,Target_R=15-PI,Target_L和Target_R则为计算后的目标脉冲,具体公式推导这里不做介绍,仅供参考!

  • 方法二:
    这种方法也是更为简单,更为方便的。
    对色块的X坐标进行区域划分,例如中线为160,则:
    ①中心区域可划分为(150,170)
    ②偏左区域可划分为(120,150)、(90,120)、(60,90)、(30,60)、(0,30)
    ③偏右区域可划分为(170,200)、(200,230)、(230,260)、(260,290)、(290,320)
    即可根据不同位置发送不同指令。单片机段根据不同指令执行不同程度的回正操作。

示例如下:


def Send_X(err):
    if(err>=150 and err<=170):
        uart.write("F")

    elif(err>=120 and err<150):
        uart.write("0")
    elif(err>=90 and err<120):
        uart.write("1")
    elif(err>=60 and err<90):
        uart.write("2")
    elif(err>=30 and err<60):
        uart.write("3")
    elif(err>=0 and err<30):
        uart.write("4")

    elif(err>170 and err<200):
        uart.write("5")
    elif(err>=200 and err<230):
        uart.write("6")
    elif(err>=230 and err<260):
        uart.write("7")
    elif(err>=260 and err<290):
        uart.write("8")
    elif(err>=290 and err<320):
        uart.write("9")

其中Err表示踩到的X坐标,根据不同坐标区域发送不同指令,在单片机端接收操作如下:

	if( openmv_rx=='F' )
	{

	}	

	//偏向左边
	else if( openmv_rx=='0' )
	{
		
	}
	else if( openmv_rx=='1' )
	{
	
	}
	else if( openmv_rx=='2' )
	{
			
	}
	......
	
	//偏向右边
	else if( openmv_rx=='5' )
	{
	
	}
	else if( openmv_rx=='6' )
	{
		
	}
	......

三、舵机转向

舵机转向问题,在学习较为常用的为180°舵机,这里我以180°数字舵机进行简单介绍

常用的舵机大多都分为3根线,其中俩根为VCC和GND,也就是电源线,剩下一根为信号线,也就是控制舵机的线

  • 舵机控制
    关于舵机的控制说的通俗易懂点就是控制信号线的脉宽,通过控制不同脉冲舵机转动不同角度,如下所示:
                20ms为例
        0.5ms ------------ 0度;
        1.0ms ------------ 45度;
        1.5ms ------------ 90度;
        2.0ms ------------ 135度;
        2.5ms ------------ 180度;

设一个PWM周期为20ms,则控制有效电平为0.5ms,也就是一百分之一的时候,舵机保持0°,依次类推。

  • 实时转向
    可根据上面巡线返回的信号进行转向,如当接收到信号F时,表示在中心区域,则舵机保持直线行驶状态,也就是90°,若接收到1-4信号,则舵机向左偏向,120°、150°、180°等,如接收到5-9信号,则舵机向右偏向,60°、30°、0°等。

  • 舵机初始化
    这里以定时器A0的通道三为例,如下代码:

	    /*初始化引脚*/
	MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN6, GPIO_PRIMARY_MODULE_FUNCTION);
	
    Timer_A_PWMConfig TimA0_PWMConfig;
    /*定时器PWM初始化*/
    TimA0_PWMConfig.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;             //时钟源
    TimA0_PWMConfig.clockSourceDivider = psc;                            //时钟分频 范围1-64
    TimA0_PWMConfig.timerPeriod = ccr0;                                  //自动重装载值(ARR)
    TimA0_PWMConfig.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_3; //通道三
    TimA0_PWMConfig.compareOutputMode = TIMER_A_OUTPUTMODE_TOGGLE_SET;   //输出模式                              

    MAP_Timer_A_generatePWM(TIMER_A0_BASE, &TimA0_PWMConfig); /* 初始化比较寄存器以产生 PWM1 */	
  • 角度控制
void SG90_angle(int a)
{
    int pwm=500+2000/180*a;
    MAP_Timer_A_setCompareValue(TIMER_A0_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_3, pwm);
} 

四、停止线识别

  • 方法一
    通过判断有效色块的面积或者宽度,因为在巡线中都是1cm1cm的虚线组成,而停止线为5cm1cm,所以可通过色块的面积或者宽度等其他因素进行识别,返回停止信号。
w=max_ID.w()
if w>=80:
    uart.write("S")
  • 方法二
    因为整个赛图小车走的路程是固定的,则也可用通过小车走的路程进行停止。
if(sum>=1)
{
	Stop();
	PID_SetPoint(&L_pid,0);
	PID_SetPoint(&R_pid,0);			
}

五、技术交流

疑难解答或技术交流联系下方wx即可👇👇👇文章来源地址https://www.toymoban.com/news/detail-612541.html

到了这里,关于基于MSP432P401R爬坡小车【2020年电赛C题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MSP432P401R LaunchPad教程(二)keil环境配置

    专栏目录 MSP432P401R LaunchPad教程 基于keil的开发环境 MSP432P401R LaunchPad教程(一)时钟配置 MSP432P401R LaunchPad教程(二)keil环境配置 MSP432P401R LaunchPad教程(三)滴答定时器 在keil中下载msp432的支持包 也可以去官方下载 我这里是在ide里下载的 也挺快 到 TI 官网下载芯片的相关驱动

    2024年02月08日
    浏览(50)
  • 基于PID算法下STM32控制的坡道行驶电动小车(2020年电赛)

    本题源于2020年TI杯大学生电子设计竞赛C题-----坡道行驶电动小车 由于手上没有MSP430/MSP432 板子,所以本篇采用stm32实现 任务 利用 TI 的 MSP430/MSP432 平台,设计制作一个四轮电动小车。要求小车能沿着指定路线在坡道上自动循迹骑线行驶。小车必须独立运行,车外不能使用任何

    2024年02月16日
    浏览(49)
  • MSP432E401Y学习笔记1

    因为去年电赛强制使用TI芯片,所以最近在闲鱼上淘了一块MSP432E401Y准备学习。吃了没文化的亏,这款MSP432的资料实在太少了,网上仅有的一些资料也是P系列的,实在是很头疼。所以在次记录一下自己的学习过程,为想学这款板子的伙伴避一些坑。 芯片:MSP432E401Y 开发环境:

    2024年02月15日
    浏览(48)
  • 配置msp432e401y的ADC采样达到2M

    配置msp432e401y的ADC采样达到2M 电赛期间收到了TI公司提供的msp432e401y开发板。手册上标明ADC采样率可以达到2M,但在TIDriver里好像最大开到500k的采样率。在网上找了半天,没有找到相关代码的帖子,索性自己研究手册,配置出2M采样率。 在msp432e4的sdk文件中里找到.examplesnortos

    2024年02月16日
    浏览(69)
  • 关于MSP432E401Y入门指南(1 环境搭建&点亮一个led灯)

    可以使用keil5和ccs开发,这里ccs使用不惯,因此采用keil5开发 一个工程模板test,已经将启动文件、头文件和源文件添加进入 工程示例:链接:https://pan.baidu.com/s/1707PoqR2LP44s1vLjzPH4w 提取码:fghj 文档资料:链接:https://pan.baidu.com/s/1-GMRFdwazVyhh0X0NFi09A 提取码:utsx Pack:链接:htt

    2024年02月14日
    浏览(43)
  • 基于STM32-F401的平衡小车

    目录 一、控制系统设计 1.1机械结构设计 1.2传感系统设计 1.3执行器设计 1.4控制算法设计 二、控制系统的制作与调试 2.1机械结构的制作与调试 2.2电路系统的制作与调试 2.3控制程序的编写与调试 三、控制系统的测试与分析 3.1测试方法 3.2测试数据与现象 3.3结果分析 一个系统

    2024年02月06日
    浏览(50)
  • 基于MSP430 红外避障-遥控小车(电赛必备 附项目代码)

    项目环境: 1. MSP430F5529 2. Code Composer Studio 3. 蓝牙调试助手 项目简介: 小车可分为3种工作模式,每种工作模式都会打印在OLED显示屏上,通过按键转换工作模式。 模式1: 小车红外循迹,通过超声波实时监测障碍物距离,若超出规定路线,距离障碍物相对较近时,原地停止,

    2023年04月08日
    浏览(43)
  • 【MSP430F5529基于库函数的学习】电赛速学及小车实战

    为电赛准备学习的MSP430笔记 提示:主要跟着这个大佬学的 一张经常要看的图 时钟配置和闪烁的LED 时钟系统结构 (1)5个时钟来源 时钟系统模块具有5个时钟来源。 ① XT1CLK:低频/高频振荡器,可以使用32768Hz的手表晶振、标准晶体、谐振器或4~32MHz的外部时钟源; ② VLOCLK:

    2024年02月12日
    浏览(48)
  • 小车跟随行驶系统(基于MSP-EXP430F5529LP系统板)

    选用材料:主控板MSP-EXP430F5529LP、陀螺仪、直流减速电机(可以选用光电编码器,霍尔电机不好调节PID)、TB6612电机驱动、超声波测距模块、灰度传感器、无线透传/蓝牙模块(便于两辆小车相互发送信息)、OLED屏等。 总体思路:使用灰度传感器巡线,超声波检测前后车距,

    2024年02月12日
    浏览(43)
  • openmv与msp432串口通信

    根据 OpenMV与stm32,msp432等单片机的串口通讯(已经写好一个识别色块的例程,可直接使用)keil(MDK)改进。 一、首先有一个大思想的问题,举个例子就是假如msp432充当“大脑”,openmv就相当于“眼睛”,那么链接所写的就是“眼睛”一直在向“大脑”发送数据,中断会一直

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包