美文网首页我爱编程
文件名:_BruGi 第一部分(头文件引用、初始化)

文件名:_BruGi 第一部分(头文件引用、初始化)

作者: 无刷云台你快弄死我吧 | 来源:发表于2017-10-06 23:06 被阅读0次

    这个文件是这个项目的主文件,它包含了setup()、loop()这两个arduino的核心函数。下面逐行分析:

    头文件引用:


    首先是头文件的引用,通过这里能看到这个程序中各个文件在项目中起到的作用。

    #include <EEPROM.h> //用来处理Arduino的EEPROM的写入和读取,这是Arduino的官方库

    #include <Wire.h>//用来处理I2C通信,这是Arduino的官方库

    #include#<arv/pgmspace.h>//用来处理往FLASH(应该也是指的EEPROM吧?)中写入数据的

    #include "definitions.h"//该文件里定义了对这个项目一些可设置参数。例如:驱动电机的PWM频率,PID的相关参数,远程遥控的数据格式,I2C的通讯频率,PWM生成端口选用等等。

    #include "MPU6050.h"//不用说了,肯定是用来操作陀螺仪和加速度计MPU6050数据的,第三方库。

    #include "SerialCommand.h"//这个是用来处理Arduino IDE的串口通讯实时发送的命令的,应该可以用来通过电脑的串口来对BruGI进行调试和设置,第三方库

    #include "EEPROMAnything.h"//同样是用来处理EEPROM的读写的,里面定义了两个函数,里面调用了之前引用的EEPROM.H中的定义的函数,EEPROM.write()和EEPROM.read(),这两个函数只能读取一个地址,而这个头文件中重新定义两个新函数,可以读写任意长度的EEPROM内容。

    #include "PinChangeInt.h"//用来快速响应处理外部中断的第三方库文件,这是库文件的介绍:点这里

    #include "Timer1.h"//跟计时和延时功能相关函数

    #include "Trace.h"//用来通过串口实时显示各种跟踪数据的各个函数

    #include "variables.h"//定义配置参数的结构体,定义了默认参数设置,还有用于电机驱动和MPU6050数据处理、远程控制等各种变量

    #include "fastMathRoutines.h"    // orientationRoutines.h中用到的一些快速计算函数

    #include "orientationRoutines.h"  // 从加速度计中计算姿态

    #include "RCdecode.h"            // 遥控器信号解码,实现通过输入伺服信号来移动摄像机

    #include "BLcontroller.h"        // 电机的驱动功能和计时器的设置

    #include "SerialCom.h"            // 利用串口进行配置和通讯的通讯协议


    MPU6050 mpu;            // 创建一个MPU6050对象

    SerialCommand sCmd;    // 创建一个SerialCommand对象

    初始化函数


    void setup()

    {

    // just for debugging

    #ifdef STACKHEAPCHECK_ENABLE

    stackCheck();

    heapCheck();

    #endif//堆栈检查?具体的功能不太清楚,应该是检查堆栈的大小和首尾地址。但是哪里用到堆栈?还不清楚,uint32_t stackTop = 0xffffffff;uint32_t stackBottom = 0;uint32_t heapTop = 0;uint32_t heapBottom = 0xffffffff;用到的时候继续分析,原注释是用来debug的。

    initControlPanelPins();//用来初始化控制面板针脚,初始化了ST_LED0(4引脚),ST_LED1(7引脚)的引脚模式为输出模式,PB_PIN(12引脚)的引脚模式为上拉输入

    LEDPIN_PINMODE//把8号引脚设置为输出模式

    CH2_PINMODE//把4号引脚设置为输出模式,条件是未使用控制面板,否则什么都执行

    CH3_PINMODE//把7号引脚设置为输出模式,条件是为使用控制面板,否则是什么都执行

    // Start Serial Port

    Serial.begin(115200);//设定串口通讯速率为115200

    // send Version Number and welcome message

    printMessage(MSG_INFO, F("BruGi ready"));//这个函数是一个消息打印函数,第一个参数代表消息类型(除了通知类型之外还有警告、错误、版本等类型),后面代表要继续打印的字符串

    printMessage(MSG_VERSION, F(""));//打印当前版本号

    // Set Serial Protocol Commands

    setSerialProtocol();//这是用来设置串口命令,一共设置了sd、we、re、par、gc、ac、sbv、ver、he等这个命令,具体的使用方法还要参考SerialCommand库文件的说明

    // Init BL Controller

    initBlController();//设置用来控制电机的3、5、6、9、10、11引脚为OUTPUT模式,根据配置文件中配置pwm的频率来对计时器进行配置,分别是8KHz、32KHz、4KHz三种。开启timer1的中断,关闭arduino标准的计时器中断,并开启timer1的中断用来电机控制

    // Init Sinus Arrays

    initMotorStuff();//关闭中断,计算正弦曲线数组,开启中断

    // switch off PWM Power

    motorPowerOff();//关闭0号电机和1号电机的PWM输出的波形

    // Read Config, initialize if version does not match or CRC fails

    config.configSet = readConfigSetNumberFromEEPROM(); // get set number from EEPROM

    readEEPROM();

    if (config.versEEPROM != VERSION_EEPROM)

    {

    printMessage(MSG_WARNING, F("EEPROM version mismatch, initialized to default"));

    setDefaultParameters();

    writeEEPROM();

    }//这几行是从EEPROM中读取EEPROM版本号,如果不对则按照程序中定义的默认配置来进行参数设置,并将默认配置写回EEPROM中

    // Start I2C and Configure Frequency

    Wire.begin();

    TWSR = 0;                                  // no prescaler => prescaler = 1

    TWBR = ((16000000L / I2C_SPEED) - 16) / 2; // change the I2C clock rate

    TWCR = 1<<TWEN;//这几行是开启I2C通讯,设置I2C的通讯时钟频率

    // Initialize MPU

    initResolutionDevider();//设定MPU的单位量程

    // init I2C and MPU6050

    if (initI2C()) {

    // Init IMU variables

    initIMU();//如果I2C初始化成功,初始化IMU

    // Gyro Offset calibration

    if (config.gyroCal) {

    gyroCalibrateCmd();//陀螺仪校准

    }

    } else {

    gimState = GIM_ERROR;

    }

    // set sensor orientation

    initSensorOrientation();//初始化传感器方位

    // Init PIDs parameters

    initPIDs();//初始化PID参数

    // init RC variables

    initRC();//初始化遥控参数

    // Init RC-Input

    initRCPins();//初始化遥控输入

    LEDPIN_OFF//熄灭8号引脚的LED

    CH2_OFF//4号引脚输出设置为low

    CH3_OFF//7号引脚输出设置为low

    }


    水平有限,欢迎大家找出错误一同完善。

    相关文章

      网友评论

        本文标题:文件名:_BruGi 第一部分(头文件引用、初始化)

        本文链接:https://www.haomeiwen.com/subject/zxpryxtx.html