• 调试平衡小车过程中间遇到的问题


    目录

    定时器函数执行周期跟定时时间不一致?

    drv8833这款驱动器可以制作平衡小车用吗?


    定时器函数执行周期跟定时时间不一致?

    定时器中断给的是5ms的中断时间,如下图: 

    结果在每个中断函数执行开始的程序里加上打印时间戳的语句,发现中断函数执行两次之间的时间差在50ms左右,这很明显使得平衡小车无法工作,但是是 什么原因呢?

     是因为算力比较弱,所以进行计算的时候占用了时间吗?把源程序也上传上去(计算量一样),看看源程序是不是也是这样?

    可以看到,源程序一样的计算量,但是人家中断函数是严格5ms执行一次的,也就是说不是算力的原因。 

     接着做实验,在源程序里面,中断函数的起始和结束都打印时间,然后发现周期就不正常了。

    中断函数两次执行之间隔了9秒左右,程序头和末尾之间隔了2-4ms不等。这是什么情况呢?

    难道串口输出对中断函数有影响吗?

     然后,再把中断函数末尾的时间打印给删掉,又一切正常了。

     怀疑:要么是串口打印函数影响了中断函数执行周期,要么是原本中断函数执行周期虽然是5ms,但是中断函数可能没执行到底,这个假设应该不成立,因为如果没执行到底,那么电机驱动函数就不会执行,小车就会跌倒?是这样吗?也不一定,因为这次的没执行到底,那么上次的pwm也可以用。先做实验看看吧。

    然后,我又这样做了个实验,发现没有中断函数的时候,只是在loop函数里面打印时间戳,也是非常耗时的,周期在25ms左右。不知道时间都用在了哪里?

     少打印一个时间戳,多打印一个字符,这样再看一下,周期是25ms左右,周期基本没变化。

    怀疑是串口波特率太低,所以影响程序比较慢,所以我把波特率从9600调整到115200,然后再看这个程序,周期变成了2ms,就非常快了。那么也就证明了,如果波特率太低,就会严重影响程序运行速度,那么具体是如何影响的呢?

    drv8833这款驱动器可以制作平衡小车用吗?

    我买的平衡小车是用的tb6612fng这款直流电机驱动器,但是我自己做的小车驱动器是drv8833.

    他们之间价格相差有十倍之多,TB6612fng这款驱动器售价现在在三十多块钱,而drv8833只有3块钱就能买到。

    我买的平衡小车,我是想把他的驱动器从TB6612fng换成drv8833,然后看平衡小车是否还能正常工作,如果是依然可以正常工作,那么就说明这个驱动器是没问题的,可以用于制作平衡小车。如果不行的话,可能就是说drv8833这个驱动器的性能不行,制作平衡小车可能有些问题。

    原先的引脚表

     现在的引脚表

  • 相关阅读:
    Rust 语法
    【自用笔记】nginx 配置多 context 及简单负载均衡
    Vue2+Vue3
    5种排序算法
    【fbtft】如何添加fbtft驱动
    【js奇妙说】如何跟非计算机从业者解释,为什么浮点数计算0.1+0.2不等于0.3?
    1. ASM概述
    如何使用“Search quesries“报表数据
    【蓝桥杯选拔赛真题03】C++输出字母Y 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析
    linux 内核协助的探测
  • 原文地址:https://blog.csdn.net/qqliuzhitong/article/details/125455906