900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > HAL库版STM32双轮自平衡车(二) ——— CubeMX的配置 原理图接线 物料准备

HAL库版STM32双轮自平衡车(二) ——— CubeMX的配置 原理图接线 物料准备

时间:2021-02-09 20:52:44

相关推荐

HAL库版STM32双轮自平衡车(二) ——— CubeMX的配置 原理图接线 物料准备

系列文章目录

编码电机测速

HAL库版 0.96'OLED的使用

HAL库版STM32双轮自平衡车(一) ———代码思路和PID的简单介绍

HAL库版STM32双轮自平衡车(二) ——— CubeMX的配置、原理图接线、物料准备

HAL库版STM32双轮自平衡车(三) ———代码精讲

HAL库版STM32双轮自平衡车(四) ———— 原理图以及PCB绘制

HAL库版STM32双轮自平衡车(五) ———— 调参

完整工程——> 闲鱼搜店铺“黄金独角兽的小店”

目录

系列文章目录

前言

一、物料准备

二、原理图(接线)

三、CubeMX的配置

3.1. 时钟树的配置

3.2. SYS配置

3.3. PWM配置

3.4. 定时器编码器模式配置

3.5. MPU6050配置(I2C 1)

3.6. OLED配置(I2C 2)

3.7. MPU6050引脚中断 配置

3.8. GPIO配置(AIN,BIN)

3.9. NVIC配置(最为关键的一步)

3.10. 最终引脚配置图

总结

视频展示:

STM32自平衡小车

前言

上一篇文章介绍了一些PID的基础知识以及阐明了代码编写的思路,看明白了其实就会觉得平衡小车的制作并没有想象中那么难。那么接下来本文将逐个介绍小车的物料准备、原理图、CubeMX的配置,以及在制作时遇到的一些“大坑”。下一篇文章继续代码分析,PID调参过程的阐述。

一、物料准备

stm32f103c8t6最小系统板12V锂电池DC-DC可调降压模块LM2596S(想要不麻烦可以凑活着用,想要更好的可以去B站看看“工科男孙老师”)0.96寸OLED(IIC接口)两路直流电机驱动(用的是DRV8848而不是TB6612,因为TB6612已经停产,价格飞升性价比不高,两者代码相通)带霍尔编码器的直流减速电机(GM25-370,其他型号亦可)mpu6050小车车架,轮子等

二、原理图(接线)

这里仅展示小车最核心的接线,DC-DC降压稳压部分详见我在立创上的开源,但如果是用LM2596S模块就是12V输入,输出3.3V给stm32以及各模块供电。

电机驱动以及编码器

OLED

MPU6050

三、CubeMX的配置

3.1. 时钟树的配置

(1)点击RCC,开启HSE,并选择RC或晶体作为时钟源

(2)配置时钟树,最终为右侧显示

3.2. SYS配置

点击SYS,选择Debug为SW模式,这个主要是烧录调试需要

3.3. PWM配置

(1)在TIM2模式选项中配置的通道1,2为PWM模式,其中通道1为PWMA,通道2为PWMB

(2)要设置PWM频率为10KHz,通过,可以得到预分频系数为0,计时周期为7199,并开启自动重装载值

(3) 点击GPIO Settings ,将其设置为复用推挽模式,高速输出

3.4. 定时器编码器模式配置

将TIM3和TIM4都配置成编码器模式,这里仅展示TIM3的相关配置

(1)在TIM3模式选项中将其配置为编码器模式

(2)设置编码器模式为上升沿下降沿都计数,即四分频。其他设置按默认就好。

(3) 点击GPIO Settings ,将其设置为引脚上拉,大多数编码器都是自带上拉电阻的,这一步只是以防万一。

3.5. MPU6050配置(I2C 1)

选择I2C1模式为I2C,并配置为高速模式

3.6. OLED配置(I2C 2)

选择I2C2模式为I2C,并配置为标准模式

3.7. MPU6050引脚中断 配置

(1)将PB12配置为外部引脚中断模式

(2)点击System Core中的GPIO,配置PB12的外部中断为下降沿触发,并设置为上拉模式(因为在mpu6050.c中对mpu进行了初始化设置,具体设置是->使能了INT中断以及设置中断信号低电平有效,设置上拉模式即可以防止外部干扰,还可以在mpu6050采集完数据后产生下降沿脉冲)

这里也给出mpu6050.c中对mpu进行的初始化设置

3.8. GPIO配置(AIN,BIN)

这里要对驱动模块中的AIN1,AIN2,BIN1,BIN2进行配置,AIN,BIN是控制电机正反转的。

其中stm32的PA2, PA3, PA4, PA5分别对应AIN1,AIN2,BIN1,BIN2。它们的设置一致,这里也只给出AIN1(PA2)的相关配置,其他的不再赘述。

(1)将PA2配置为引脚输出模式

(2)点击System Core中的GPIO,配置为:初始为高电平(也可以设置为低电平),推挽输出,无上下拉,高速传输

3.9. NVIC配置(最为关键的一步)

(1) 点击System Core中的NVIC,将优先级分组设置为:2 bit 分给抢占优先级,2 bit 分给响应优先级(子优先级)

(2) 使能外部中断(EXTI12)并设置系统滴答定时器(systick)的抢占优先级高于外部中断的优先级,这里便是我所说的“大坑”之一,如果不这样设置,程序就会卡死在外部中断 下面探究一下具体原因:

首先在结合生成的工程,来看看Systick的时钟配置以及工作流程,systick首先在HAL_Init()函数中被提到,接下来跟进去看看。在HAL_Init()中调用了 HAL_InitTick,之后再到 HAL_InitTick 中查看说明,下图红框框起部分极为重要.

这段英文解释是说,外设中断进程调用HAL_Delay的时候,要特别注意中断的优先级问题,如果systick的中断优先级低于外设中断优先级,会导致一直在外设中断中阻塞,如果外设中调用了HAL_Delay(),一定要保证Systick的中断优先级高于外设中断优先级。

然而我们的EXTI外部中断程序中哪里用到了HAL_Delay()?在读取mpu6050采集的数据中就有用到。

其实查看mpu6050的驱动程序(dmp)不难发现有很多地方用到了HAL_Delay(),例如在mpu_init()函数中就有用到

3.10. 最终引脚配置图

完整工程——> 小黄鱼搜店铺“黄金独角兽的小店”

总结

以上就是系列文章第二篇要讲的内容,本文介绍了CubeMX的相关配置,物料,接线以及其中要注意的“大坑”,之后也就是下一篇文章重点介绍HAL库版代码的编写以及实现。

码字不易,希望喜欢的小伙伴别忘了点赞+收藏+关注,你们的肯定就是我创作的动力

欢迎大家积极交流,本文未经允许谢绝转载!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。