摘要
这个项目是在20年11月初开始的,当时的我很迷茫,本应该去实习的我在线上培训,觉得无聊,便有了自己一人做项目的想法。也没想到这个项目做了将近整整一个月,才差不多做了出来。也是准备做两个项目的,这是第一个而已。

项目所需物料清单
主控板用到了c8t6、小车底盘(这个硬件是这项目于最贵的物料了),可以用大鱼电子、或者平衡小车之家的。由于经费的原因,我买了两个带电机的车轮、加上了亚克力板,勉强搭成了小车底盘。我的电机用的是JGA25-370电机。电机线正负是表示动力线1、2。电机线接反可以实现车轮反转的效果。为了布线方便,我用到了面包板。由于对焊接并不是很熟练,没用到洞洞板,这算是这个项目不大光彩的地方。用到的模块有mpu6050、oled(四针)、稳压模块(12V转5V)、JGA25-370电机、电机驱动模块(tb6612fng)、12v锂电池,目前想到的就这些模块。

项目过程中遇到的问题

这个项目历时一个月,过程的艰辛可想而知,也是本人太菜的原因,基础也很差。当时遇到的第一个问题就是稳压模块不知道怎么用,由于没有加上稳压模块,导致电机不转,这个问题困扰了很久,也问了很多人,最终知道了稳压模块是来将12v的电压降为5v的电压来给单片机供电的,虽然没用稳压模块,电机驱动模块并没有烧坏。用了稳压模块,由于不会焊接,就用了面包板代替了洞洞板。这让我也了解了面板板的强大之处。对于我这个小白来说。焊接的技术太差了,会焊接的同学可以忽略,本人计算机专业的,对电烙铁、焊锡并不是很了解。在校也没进实验室。电子、通信、自动化的同学应该带焊接并不陌生的。第一个问题花了很长一段时间的。
由于用到了洞洞板,接线就方便了许多。接着遇到的问题就是PID调节了。这个PID是真的难调。我们知道,虽说平衡小车是三闭环控制系统。但是仅仅直立环也是可以平衡的,只是不够精确罢了。直立环加速度环是完全可以平衡的,可以不用转向环的。

机械中值的确定
每个物体都有属于自己的机械中值,机械中值是调节PID的第一步,要想小车平衡性能非常好,首先必须得调节机械中值。之前也有人说过,要想小车能平衡,首先要让小车有一个短暂的平衡,不能一落地小车就倒。接着我们来谈谈如何来确定小车的机械中值。将小车的mpu6050测试代码烧录到主控,将小车放置地上顺时针转动,直至倒下,记下小车的角度。接着将小车逆时针转动,直至倒下,记下小车的角度。将两次角度的值相加,除以2,此时这个值就是小车的机械中值。确定好机械中值,就可以来调节速度环、直立环了。

PD(直立环)调节
我目前做的平衡小车v1.0版本,功能还有PID调节并不是很完善,目前小车只用到了直立环,根据我的调节,光直立环是可以平衡的。在调节直立环的时候,速度环PI中的kp、ki是必须置零的。首先判断直立环kp的极性,令kp=+1,kd=0;烧录程序,若小车向前倾,车轮向前加速,则说明极性正确,反之,则说明极性错误,令kp=-1。若小车两轮转动方向不一致,则说明硬件电机正负极接反了,需对调一下。kp极性判断完毕,接下来调节Kp的大小,令kd=0,不断增加kp,直至小车出现高频幅度震荡,调节kp不断消除震荡,持续增加,直至小车出现高频震荡,此时直立环调节完毕,由于kp、kd系数取的都是最大值,需要将系数乘以0.6,则是最平稳的。这是PD(直立环)调节。

PI(速度环)调节
在调节速度环PI的过程中,直立环的kp、kd是不需要置零的,首先也是判断极性,令kp=+1,烧录代码,用手向前转动一侧车轮,若两侧车轮同时向前加速,则kp极性正确,反之,则极性不正确,kp=-1。若kp极性判断正确,则可以通过调节Kp、Ki来让小车达到平衡。

程序讲解
mpu6050模块只用了五个引脚,分别是VCC、GND、SCL、SDA、INT,用到了IIC,引脚INT有相应的电平输出,依次可以触发外部中断作为控制周期,周期性反馈数据,保持mpu6050 数据的实时性。

/**************************************************************************
函数功能:外部中断初始化
入口参数:无
返回  值:无
作    用:是用来配置MPU6050引脚INT的,每当MPU6050有数据输出时,引脚INT有相应的电平输出。依次来触发外部中断作为控制周期。保持MPU6050数据的实时性。
**************************************************************************/
void MPU6050_EXTI_Init(void)
{  GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部中断,需要使能AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;             //端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         //上拉输入GPIO_Init(GPIOB, &GPIO_InitStructure);                          //根据设定参数初始化GPIOB GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);EXTI_InitStructure.EXTI_Line=EXTI_Line5;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);      //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
}

编码器通过定时器输入捕获脉冲数,来测速的。定时器中断和外部中断一直不是很理解,今天经过别人指导,豁然开朗。定时器中断是通过定时器的重转载值,分频系数以及计数模式等设置,然后定义它的中断触发方式而产生的中断,一般溢出中断比较多。编码器encode采用的就是定时器中断。外部中断则是通过定义管脚的电平状态,通过外部的电平来触发它产生的中断。mpu6050 INT引脚触发就是外部中断。

**************************************************************************
函数功能:单位时间读取编码器计数
入口参数:定时器
返回  值:速度值
**************************************************************************/
int Read_Encoder(u8 TIMX)
{int Encoder_TIM;    switch(TIMX){case 2:  Encoder_TIM= (short)TIM2 -> CNT;  TIM2 -> CNT=0;break;case 3:  Encoder_TIM= (short)TIM3 -> CNT;  TIM3 -> CNT=0;break;    case 4:  Encoder_TIM= (short)TIM4 -> CNT;  TIM4 -> CNT=0;break;   default: Encoder_TIM=0;}return Encoder_TIM;
}

控制代码如下:直立环PD控制、速度环PI控制

KP、KD、KP、KI系数、机械中值

int Balance_Pwm,Velocity_Pwm,Turn_Pwm;float Mechanical_angle=0; // 无超声波、电池平躺着的小车机械中值float balance_UP_KP=1000;     // 小车直立环KP(第一次kp调1000 、参数乘以0.6       1000    //600
float balance_UP_KD=-1.2;              //-1.2                                    -1.2                          //-1.08
float velocity_KP=0;      // 1.0
float velocity_KI=0;    //0.005

PD控制


/**************************************************************************
函数功能:直立PD控制
入口参数:角度、机械平衡角度(机械中值)、角速度
返回  值:直立控制PWM
**************************************************************************/
int balance_UP(float Angle,float Mechanical_balance,float Gyro)
{  float Bias;int balance;Bias=Angle-Mechanical_balance;                                 //===求出平衡的角度中值和机械相关balance=balance_UP_KP*Bias+balance_UP_KD*Gyro;  //===计算平衡控制的电机PWM  PD控制   kp是P系数 kd是D系数 return balance;
}

附平衡小车图、资料及代码:

链接:https://pan.baidu.com/s/1VlaNkVwey1i6BrMO0dQ-tw
提取码:s7k1

stm32平衡小车演示视频

stm32两轮平衡小车项目详解相关推荐

  1. 平衡小车c语言程序,【全部开源】两轮平衡小车(原理图、PCB、程序源码、BOM等)...

    同网上一般网友制作的平衡小车不一样,这个平衡小车最大的特点就是它的整体很小,PCB面积只有2.5cm*5.0cm,这个可能还没有网友制作的平衡小车的一个电机驱动板大,但是却已经实现了相同的功能.我在器 ...

  2. ps2摇杆模块控制小车_八个超赞的两轮平衡小车设计,小白最爱

    智能车种类众多,其中两轮平衡车特别受到了工程师的喜爱,整理了8个两轮平衡车的资料,一起看看这个小可爱吧. 1.基于ARM-STM32的两轮自平衡小车 小车直立和方向控制任务都是直接通过控制小车两个电机 ...

  3. 八个超赞的两轮平衡小车设计,小白最爱

    智能车种类众多,其中两轮平衡车特别受到了工程师的喜爱,整理了8个两轮平衡车的资料,一起看看这个小可爱吧. 1.基于ARM-STM32的两轮自平衡小车 小车直立和方向控制任务都是直接通过控制小车两个电机 ...

  4. stm32两轮平衡车资料

    [MCU实战经验]+基于stm32两轮平衡车制作:http://www.stmcu.org/module/forum/thread-582883-1-1.html 转载于:https://www.cn ...

  5. stm32两轮平衡车项目资料 两轮平衡车原理图

    stm32两轮平衡车项目资料 两轮平衡车原理图+PCB+程序 现有:693651816272834lin昵称好难设置

  6. stm32两轮平衡车项目资料 两轮平衡车原理图+PCB+程序

    stm32两轮平衡车项目资料 两轮平衡车原理图+PCB+程序 YID:943651816272834lin昵称好难设置

  7. stm32两轮平衡车项目资料 ,两轮平衡车原理图+PCB+程序

    stm32两轮平衡车项目资料 ,两轮平衡车原理图+PCB+程序 15697661859tb

  8. 基于stm32c8t6的两轮平衡小车 第二篇——原理图及CubeMx配置

    目录 1.原理图 2.CubeMx配置 (1)创建工程 (2)配置时钟树 (3)仿真模式选择 (4)TIM2配置为PWM输出模式 (5)定时器TIM3,TIM4设置为编码器模式 (6)蓝牙串口配置 ( ...

  9. 基于32单片机两轮平衡小车控制系统设计

    主控MCU采用STM32F103C8T6单片机,电机驱动模块采用TB6612FNG模块,姿态监测传感器采用MPU6050芯片,蓝牙模块采用HC-05蓝牙模块. 小车的运动分为直立环.速度环和转向环分别 ...

最新文章

  1. 磨刀不误砍柴工!vs2010快捷键大全
  2. SSH-Auditor:一款SSH弱密码探测工具
  3. Autorun.inf文件(2):改变硬盘分区图标
  4. # 睡眠3秒_小儿睡眠呼吸暂停综合征
  5. 机器人学习--有参考意义的视频
  6. AI入门:不用任何公式把主成分分析讲清楚
  7. java找出一组数据缺少最小数组_Java获取一维数组的最小值实现方法
  8. BootstrapTable静态刷新表格
  9. 写了一段VBA代码后, Excel每次保存时都弹出警告:”此文档中包含宏、Activex控件、XML扩展包信息“(office 2007)
  10. RedHat 7配置bonding双网卡绑定
  11. mysql md5全库比较_关于mysql搭建亿级cmd5数据库,毫秒级查询(完整过程)
  12. 空号检测平台使用说明
  13. 在html中加入中文字体,css设置中文字体
  14. 计算机傅里叶什么知识美颜,傅里叶变换是用来做什么的,具体举例一下应用?...
  15. truetype字体怎么转换成普通字体_TrueType字体作用|如何在文档嵌入 TrueType 字体中...
  16. pytorch实现批量resize图片尺寸
  17. MyBatis源码简单分析
  18. Java实验报告(四)
  19. CA DC SUL区别
  20. 零基础怎么学习网站建设? ?

热门文章

  1. 让人费解的统计(股票、幸福指数等)
  2. 汽车I-O连接器-市场现状及未来发展趋势
  3. nsi的检测和使用驱动
  4. 【c++项目】信息学奥赛数据生成器
  5. 2021-07-08 javascript 上
  6. IP协议安全:泪滴攻击与碎片攻击
  7. 发布房源(三)03——配置ImagePicker-图片上传 请求图片路径-headers请求头的写法
  8. 使用 python 实现 Logistic 回归
  9. ytuoj_Catch That Cow
  10. 副业分为哪几类?学会副业赚钱思维,不愁没有项目