打印
[STM32F1]

自平衡小车

[复制链接]
1027|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doit888|  楼主 | 2018-3-8 13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开源 MPU6050 STM32 方案 自平衡小车!
沙发
doit888|  楼主 | 2018-3-8 13:20 | 只看该作者
机加工图1

3mm铝合金底板.JPG (177.51 KB )

3mm铝合金底板.JPG

使用特权

评论回复
板凳
doit888|  楼主 | 2018-3-8 13:21 | 只看该作者
机加工图2

轮子连接器.JPG (207.42 KB )

轮子连接器.JPG

使用特权

评论回复
地板
doit888|  楼主 | 2018-3-8 13:21 | 只看该作者
机加工图3

前挡板.JPG (182.31 KB )

前挡板.JPG

使用特权

评论回复
5
doit888|  楼主 | 2018-3-8 13:23 | 只看该作者
机械加工的截图

机械加工的截图.png (34.83 KB )

机械加工的截图.png

使用特权

评论回复
6
doit888|  楼主 | 2018-3-8 13:23 | 只看该作者
机加工压缩资料

机械设计图纸打包.zip

1.58 MB

使用特权

评论回复
7
doit888|  楼主 | 2018-3-8 13:25 | 只看该作者
原理图

原理图.PDF

240.93 KB

使用特权

评论回复
8
doit888|  楼主 | 2018-3-8 13:27 | 只看该作者
PCB资料

PCB.PDF

485.26 KB

使用特权

评论回复
9
doit888|  楼主 | 2018-3-8 13:27 | 只看该作者
原理图 压缩文件

原理图.zip

74.57 KB

使用特权

评论回复
10
doit888|  楼主 | 2018-3-8 13:28 | 只看该作者
PCB压缩文件

PCB1.~(1).zip

99.83 KB

使用特权

评论回复
11
doit888|  楼主 | 2018-3-8 13:31 | 只看该作者
以下是程序部分 贴出来 希望大家 一起探讨!

使用特权

评论回复
12
doit888|  楼主 | 2018-3-8 13:31 | 只看该作者
1:配置采集方向信号——操作硬件ADC
2:配置定时器配置——tim1,tim8
3:差速算法,速度合成
4:PWM输出

单片机型号:STM32F103RCT6 32KB 256KB

需要用到的资源
PB13 34 TIM1_CH1N           PB14 35 TIM1_CH2N
PA8  41 TIM1_CH1           PA9  42 TIM1_CH2

PA7 23 TIM8_CH1N           PB0 26 TIM8_CH1N
PC6 37 TIM8_CH1                   PC7 38 TIM8_CH2

使用特权

评论回复
13
doit888|  楼主 | 2018-3-8 13:32 | 只看该作者
主程序 很简单 如下:

#include "stm32f10x.h"
#include "SysTick.h"
#include "assignment1.h"
#include "assignment2.h"
#include "assignment3.h"

extern float Angle;//角度

int main(void)
{

    SysTick_Init();//①系统滴答时钟初始化

    I2C_MPU6050_Init();//②重力传感器接口初始化

    InitMPU6050();//③初始化MPU6050

//        LED_Config();//④显示LED初始化

    TIM1_Init();//⑤定时器tim1,tim8初始化

    ADC1_Init();//⑥ADC初始化

    USART2_Config();//⑦初始化串口2

    Direction_Init();//⑧初始化转向

    while(1)
    {
    }
}

使用特权

评论回复
14
doit888|  楼主 | 2018-3-8 13:34 | 只看该作者
比较关键 的 systick 函数:

如下:

/******************** (C) COPYRIGHT 2012 WildFire Team ***************************
* 文件名  :SysTick.c
* 描述    :SysTick 系统滴答时钟10us中断函数库,中断时间可自由配置,
*           常用的有 1us 10us 1ms 中断。

* 库版本  :ST3.5.0
*/

#include "SysTick.h"
#include "assignment1.h"
#include "assignment2.h"
#include "assignment3.h"

extern float Angle;//角度
extern float Gyro_y;//陀螺仪

extern float Accel_x;//X轴加速度值暂存
extern float Accel_y;//Y轴加速度值暂存
extern float Accel_z;//加速度计值暂存

extern float Angle_az;//加速度计算输出角度
extern float Angle_gy;//陀螺仪计算的倾角

extern float PWM;//浮点型PEM值

extern int PWM_R;//右轮PWM值计算
extern int PWM_L; //左轮PWM值计算

extern int ADC_Direction;
extern int Direction_Difference;

extern float x;
extern float y;
extern float z;

extern int int_PWM;//整形PWM值

extern float integral;//速度积分百分比

/*启动系统滴答定时器 SysTick */
void SysTick_Init(void)
{
    /* SystemFrequency / 1000    1ms中断一次
     * SystemFrequency / 100000         10us中断一次
     * SystemFrequency / 1000000 1us中断一次
     */
    SysTick_Config(SystemCoreClock /200);//200hz系统频率

}

/*定时器中断服务函数,构建系统运行周期*/
float a;
float Kp;

void SysTick_Handler()
{

    a++;
    Kp=a/40;
    if(Kp>12)
    {
        Kp=12;
    }//调试kp的参数,这个算法用于缓慢加载pid参数


    Angle_Calcu();//角度计算
    PWM_Calcu();//pwm计算输出
    Direction_Dispose();//差速算法,pwm输出
//        printf("%f\n",Kp);

}




使用特权

评论回复
15
doit888|  楼主 | 2018-3-8 13:35 | 只看该作者
void SysTick_Handler()
{

    a++;
    Kp=a/40;
    if(Kp>12)
    {
        Kp=12;
    }//调试kp的参数,这个算法用于缓慢加载pid参数


    Angle_Calcu();//角度计算
    PWM_Calcu();//pwm计算输出
    Direction_Dispose();//差速算法,pwm输出
//        printf("%f\n",Kp);

}

其中 这里的 系统中断的 算法

涉及到了 PID自动控制方面的 运算

使用特权

评论回复
16
doit888|  楼主 | 2018-3-8 13:41 | 只看该作者
a++;
    Kp=a/40;
    if(Kp>12)
    {
        Kp=12;
    }//调试kp的参数,这个算法用于缓慢加载pid参数

这个比较关键 不是 一下子就把 Kp值 赋值给一个 很突变的数据

使用特权

评论回复
17
mmuuss586| | 2018-3-8 14:55 | 只看该作者
没有源代码啊

使用特权

评论回复
18
iamaiqiyi| | 2018-3-8 17:14 | 只看该作者
来个完整的工程文件代码。

使用特权

评论回复
19
珍藏版| | 2018-4-2 16:58 | 只看该作者
感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

173

帖子

0

粉丝