之前的程序条理性不够好,给大家带来的不便深感抱歉。这两天新建了个工程重新写了一遍底层。全部寄存器操作,我一直认为寄存器更容易学,更容易深入,我接触过不少本科生学弟都是直接从寄存器开始学,现在都很熟悉了。
这个程序在平衡的基础上,集成了线性 CCD 底层、超声波避障、无线模块驱动等。因为线性 CCD 和和无线模块对环境或者外设的要求,在程序里面默认是被注释的。但是超声波避障功能是默认开启的,所以一旦使用这个程序, 请先接上超声波模块。 如果不要超声波功能, 请在程序里面的 SYS.H里面把 MODE_BIZHANG 改成 0 即可。在避障时候,蓝牙遥控依然可以使用,但是小车检测到前方 0.5 米有障碍会自动后退。同学们可以接上超声波,下载这个程序试试。
程序使用MDK5.1开发,可以兼容4.7
因为TIM2既接了一路编码器,也作为超声波接口,所以测距时,这一路编码器是没用的。
解决方法有两个:放弃定时器的编码器接口模式(相当于放弃了四倍频),使用单个编码器的两通道分别测量两路编码器,解放出了一路定时器就可以做超声波接口了。
使用超声波的时候小车性能有所影响,要达到更好的性能请同学们优化一下算法结构(主要是单编码器和陀螺仪的速度环和转向环控制问题)和调整一下参数。
程序主要用户文件说明如下:
Source Group1
Startup_stm32f10x_md.s :stm32 的启动文件
User
Minibalance.c: 放置主函数,并把 DMP 读取和人机交互的工作放在死循环里面。
SYSTEM
Delay.c:提供系统延时初始化函数及相关的函数
Sys.c:提供时钟、中断、系统初始化函数
Usart1.c:提供串口 1 初始化函数及相关的函数
HARDWARE
Led.c:提供 LED 初始化函数及相关的函数
Key.c:提供按键初始化函数及相关的函数,如单击双击检测。
Oled.c:提供 OLED 初始化函数及相关的函数
Usart3.c:提供串口 3 初始化函数及相关的函数,其中蓝牙遥控使用的串口 3 接收中断函数在这里面。
adc.c:提供 ADC 初始化函数及相关的函数,如电池电压检测,线性CCD 初始化和驱动程序。
Timer.c:提供各个定时器 1 初始化函数及相关的函数,但是 TIM1 的中断服务函数在control.c 文件里面
Motor.c 提供电机控制初始化函数
Encoder.c 提供编码器采集相关函数
Ioi2c.c:提供模拟 IIC 初始化函数及相关的函数
Balance
Control.c 提供全部的控制函数,并放在 TIM1 的中断服务函数里面执行
Datascope:波形显示上位机相关的库文件
Inv_mpu.c:MPU6050 内置 DMP 的相关库文件
Inv_mpu_dmp_motion_driver.c:MPU6050 内置 DMP 的相关库文件
Fitler.c:提供平衡小车常用的滤波算法,如卡尔曼滤波,互补滤波
Mpu6050.c:提供 MPU6050 初始化函数及相关的函数
Show.c:提供用于数显和上位机使用的相关函数
http://yunpan.cn/cdsAqRrDZxSyi 访问密码 ——回复可见内容——