2024电赛H,一些思路和源码

一、设备

        主控:MSPM0G3507

        电机驱动:TB6612

        循迹:感为八路

        电机:310电机

二、遇见的一些问题:

2.1 锁芯片

        TI这个就很烦,我同批次买了两块最小系统板,一块被锁一块不会,被锁的那块按网上的步骤也解锁不了,只能按RST和BSL烧录,也没法步进调试,给我们代码编写过程带来了很大的不便。

2.2 串口总是会卡死

        这道题最合理的方式就是得得到角度,然后进行角度PID确保路线,我们赛前买了个正点原子的IMU九轴模块,他是使用串口来通信的,TI这颗芯片不知道为什么总是会串口接收卡死,而且时会时不会,该做的清中断,等待发数据都做了,并且把接收中断优先级提升到最高,还是会出现这些情况,用STM32就不会,我们吭哧吭哧调试了两天,最后还是放弃了,还是吃了资料太少的亏。

        有考虑过用MPU6050模块,他用I2C通信,最后能稳定的读数据了,但是又有零漂,没接触过,一时半会找不到办法解决,最后我们放弃角度PID的方案了,后文讲讲我们的方案。

2.3 编码器

        我这颗芯片64Pin只有一个硬件编码器,所以只能采取中断的办法来获取编码器的值,值得注意的是,这种方法编码器倍频是2,STM32硬件的那种是4,部分代码如下:(在中断服务函数里)

 // 中断服务函数:外部中断模拟编码器信号、按键外部中断
void GROUP1_IRQHandler(void)//Group1的中断服务函数
{
    /* 获取中断信号 */
    gpio_interrup = DL_GPIO_getEnabledInterruptStatus(GPIOA, ENCODERA_E1A_PIN | ENCODERA_E1B_PIN | ENCODERB_E2A_PIN | ENCODERB_E2B_PIN);
    //encoderA
    if((gpio_interrup & ENCODERA_E1A_PIN) == ENCODERA_E1A_PIN)
    {
        if(!DL_GPIO_readPins(GPIOA, ENCODERA_E1B_PIN))
            g_encoder1_count--;
        else
            g_encoder1_count++;
    }
    else if((gpio_interrup & ENCODERA_E1B_PIN) == ENCODERA_E1B_PIN)
    {
        if(!DL_GPIO_readPins(GPIOA, ENCODERA_E1A_PIN))
            g_encoder1_count++;
        else
            g_encoder1_count--;
    }
    //encoderB
    if((gpio_interrup & ENCODERB_E2A_PIN) == ENCODERB_E2A_PIN)
    {
        if(!DL_GPIO_readPins(GPIOA, ENCODERB_E2B_PIN))
            g_encoder2_count--;
        else
            g_encoder2_count++;
    }
    else if((gpio_interrup & ENCODERB_E2B_PIN) == ENCODERB_E2B_PIN)
    {
        if(!DL_GPIO_readPins(GPIOA, ENCODERB_E2A_PIN))
            g_encoder2_count++;
        else
            g_encoder2_count--;
    }
DL_GPIO_clearInterruptStatus(GPIOA,ENCODERA_E1A_PIN|ENCODERA_E1B_PIN|ENCODERB_E2A_PIN|ENCODERB_E2B_PIN;
}

三、方案:

        我们采用速度PID + 红外循迹PID(可看我主页2022电赛C那篇文章)+ 两轮差速PID来控制小车。

        速度PID:控制小车转速是为了能快速稳定的达到你预期的速度

        红外循迹PID:为了控制小车能稳定的在黑线投影上

        两轮差速PID:为了控制小车在空白地图可以直线行驶,因为两个轮子多少有一些转速差异,会导致小车偏移,这是为了弥补没有角度的缺陷。

四、演示视频:

题目1:

1

题目2:

2

题目3:

3

题目4:

4

五、总结

        我们前期花了两天看角度串口,那两天啥也没搞出来,所以实际上这个方案只花了一天半吧,所以速度都没敢提高,而且由于没有角度,走直线还是不太稳定,容易偏移,希望这篇文章能对备战2026年省赛的师弟师妹有帮助!

        需要源码可以留下你的邮箱,电赛时间很赶,代码写的很烂说实话,全局变量满天飞。

        底板原理图有需要也可以发给你,基本上串口屏,OLED屏,舵机,openmv这些电赛常见外设我都有在上面画好了。

        如果有用的话,希望大家帮我点个赞啦,谢谢!

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值