# 电赛小车
## 介绍
这里是各模块基于 MSPM0G3507 的驱动例子。
## 编码器例程说明
编码器例程工程名为 `encoder`。
### 硬件连接
该例程中包含 `编码器` + `电机驱动`。其硬件连接表如下:
| 编码器 | 开发板 |
| -- | -- |
| E1A | A25 |
| E1B | A26 |
| E2A | A27 |
| E2B | A24 |
| 电机驱动 | 开发板 |
| -- | -- |
| AIN1 | A07 |
| AIN2 | A30 |
| BIN1 | B00 |
| BIN2 | B01 |
> 在使用编码器时,需要把开发板的 3V3 引脚接到电源板上的3V3引脚处。不然编码器没有电源。
### 使用说明
例程中对编码器的 `E1A` 和 `E2A` 引脚开启了最高中断优先级的外部中断,用于检测编码器的脉冲变化。并开启了 `10ms` 定时器中断,在定时器中断里更新编码器的数据。
通过函数 `int get_left_encoder(void);` 和 `int get_right_encoder(void);` 获取编码器的数据。
```c
//返回值为编码器测量到的左电机编码器值
//正数是正转,负数是反转,0 是不转
//小于0,值越小越反转速度越快
//大于0,值越大越正转速度越快
int get_left_encoder(void);
//返回值为编码器测量到的右电机编码器值
//正数是正转,负数是反转,0 是不转
//小于0,值越小越反转速度越快
//大于0,值越大越正转速度越快
int get_right_encoder(void);
```
电机 PWM 频率统一设置为 `8000HZ` 。 PWM 的最大值为 4999。通过函数 `void set_all_motor(int left_speed, int right_speed);` 控制两边的电机速度。
```c
// 设置左右电机速度
// left_speed=左电机速度,范围-4999~4999
// right_speed=右电机速度,范围-4999~4999
// 备注: 负数反转 正数正转 0停止
void set_all_motor(int left_speed, int right_speed);
```
目前测试电机最快速度下,编码器的最大值为 ±36 左右。

> 图中使用到了 CCS 的 CIO 功能,该功能需要使用XDS110下载器,其打开方式:
> 1. 导入 <stdio.h> 文件
> 2. 设置堆栈大小 Stack Size 至少 400 字节
> 3. 设置堆大小 Heap Size 至少 0X400 字节
> 4. 打开 CIO 视图(CCS顶部导航栏查看 -> Console -> CIO),在代码中直接使用printf,即可输入内容到 CIO 视图中。
## JY901S-九轴陀螺仪例程说明
JY901S-九轴陀螺仪例程工程名为 `jy901s`。
### 硬件连接
其硬件连接表如下:
| 九轴陀螺仪 | 开发板 |
| -- | -- |
| VCC | A25 |
| SDA | A09 |
| SCL | B05 |
| GND | GND |
实物接线:插到主控板上。

### 驱动代码位置
关于 jy901s 的代码在例程中的 hardware 文件夹下的 hw_jy901s.c 和 hw_jy901s.h 文件。
### 使用方法
1. 使用时,必须先在 main 中调用 **`jy901s_init();`** 对模块进行初始化。
2. 初始化完成之后,调用 **`get_angle();`** ,其返回的值就是获取Z轴的角度。
### 例程说明
例程中在main中获取角度后,通过CCS本身自带CIO功能,将printf输出的数据发送的CIO窗口上显示。
```c
int main(void)
{
float angle;
SYSCFG_DL_init();
jy901s_init();
while (1)
{
//获取z轴角度
angle = get_angle();
//CCS的CIO功能输出当前角度
printf("angle_Z= %.2f\r\n",angle);
//主频为32MHz时,延时10ms
delay_cycles(320000);
}
}
```
效果:

> 图中使用到了 CCS 的 CIO 功能,该功能需要使用XDS110下载器,其打开方式:
> 1. 导入 <stdio.h> 文件
> 2. 设置堆栈大小 Stack Size 至少 400 字节
> 3. 设置堆大小 Heap Size 至少 0X400 字节
> 4. 打开 CIO 视图(CCS顶部导航栏查看 -> Console -> CIO),在代码中直接使用printf,即可输入内容到 CIO 视图中。
> 
## tracing-感为八路灰度传感器例程说明
tracing-感为八路灰度传感器例程工程名为 `tracing`。
### 硬件连接
其硬件连接表如下:
| 灰度传感器 | 开发板 |
| -- | -- |
| VCC | A25 |
| SDA | PA0 |
| SCL | B05 |
| GND | PA1 |
说明:由于该灰度传感器需要在开漏模式下使用,开发板上PA0和PA1是3507的开漏引脚,同时在开发板上为它们接了3.3V的上拉电阻,所以将PA0和PA1用于灰度传感器的I2C通信。
实物接线:插到主控板上。

### 驱动代码位置
关于 tracing 的代码在例程中的 hardware 文件夹下的 hw_tracing.c 和 hw_tracing.h 文件。
### 使用方法
直接调用get_tracing_data()函数,就能在gracing_data[]数组中获得八路灰度传感器的数据。
### 例程说明
例程中在main中获取角度后,通过CCS本身自带CIO功能,将printf输出的数据发送的CIO窗口上显示。
```c
int main(void)
{
// char buff[100] = {0};
// unsigned int system_time = 0;
// float angle = 0.0;
SYSCFG_DL_init();
while(1)
{
get_tracing_data(TRACING_ADDRESS);
printf("status = %d %d %d %d %d %d %d %d\r\n", tracing_data[0], tracing_data[1], tracing_data[2], tracing_data[3], tracing_data[4], tracing_data[5], tracing_data[6], tracing_data[7]);
delay_ms(50);
}
}
```
效果:

> 图中使用到了 CCS 的 CIO 功能,该功能需要使用XDS110下载器,其打开方式:
> 1. 导入 <stdio.h> 文件
> 2. 设置堆栈大小 Stack Size 至少 400 字节
> 3. 设置堆大小 Heap Size 至少 0X400 字节
> 4. 打开 CIO 视图(CCS顶部导航栏查看 -> Console -> CIO),在代码中直接使用printf,即可输入内容到 CIO 视图中。
> 