4 Star 18 Fork 4

Hlilmbbo / STM32电机控制项目

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

基于STM32的电机控制

科研训练任务作品简介

一、科研训练任务要求:

  1. 通过STM32单片机与pc串口之间的数据传输
  2. 通过STM32单片机读取MPU6050的陀螺仪和加速度计数据,并通过串口助手显示
  3. 通过STM32的PWM输出实现电机的开环控制
  4. 通过STM32的输入捕获功能实现电机编码器值的解算
  5. 通过串口将电机实际转速输出到电脑的串口助手
  6. 能通过串口发送期望的速度给单片机
  7. 基于STM32单片机实现电机转速的kPID控制
  8. 实现stm32双机CAN模块、485模块之间的通信
  9. 在stm32系统上调通modobus通信协议,实现多机通信

二、作品实现介绍:

  1. 硬件设计 项目硬件结构主要由STM32F103ZET6作为主控板,GY-86(6轴陀螺仪),L298N直流电机驱动器,12V电源,I2C型OLED显示屏,HC-05主从机型蓝牙模块,25GA370直流电机减速电机构成。 图1 总体结构示意图

1.1电机控制部分 项目整体使用定时器功能(引脚PA8、引脚PB13)输出PWM信号到L298N直流电机驱动器,使其驱动25GA370直流电机转动。使用另一个定时器功能(引脚PB0)接收编码器关于电机的测速值。在电机转动一圈时编码器可以输出固定的脉冲数,通过读取编码器脉冲可以获取当前电机转动状态。

1.2陀螺仪数据采集部分 项目整体使用I2C1通讯接口(引脚PB6(SCL)、引脚PB7(SDL))获取GY-86六轴陀螺仪的原始数据,在主控板中通过四元数转换,由三轴角速度和三轴加速度数据转换得到俯仰角和翻滚角数据,同时设定角度临界值±3°,当角度大于或小于水平方向的角度时,将输出PWM信号控制电机发生换向。

1.3OLED显示部分 项目整体使用I2C2通讯接口(引脚PG14(SDL)、引脚PG15(SCL))与OLED显示屏通讯,将实时的电机转速和电机的转向(顺时针和逆时针)发送到OLED屏幕上显示。

1.4UART通讯部分 项目整体使用USART通讯方式,利用(引脚PA9(TX)、引脚PA10(RX))与电脑上位机串口助手实现通讯,或者经由HC-05蓝牙模块实现蓝牙通讯,实现实时获取当前电机理论转速和实际转速,以及可以通过串口助手实现对电机转速的调控(蓝牙模块同理)。

  1. 软件设计 2.1电机控制部分 主函数部分为按键检测,如果有按键按下,将执行电机的速度增加或者减少,通过系统滴答定时器实现的中断回调函数,采集编码器的数据并计算电机的当前转速:

另外对于电机速度的控制,采用增量式PID控制:

int IncPIDCalc(int NextPoint) 
{
int iError,iIncpid;                                 //当前误差
iError=sptr->SetPoint-NextPoint;                    //增量计算
iIncpid=(sptr->Proportion * iError)                  //E[k]项
-(sptr->Integral * sptr->LastError)                   //E[k-1]项
+(sptr->Derivative * sptr->PrevError);               //E[k-2]项
sptr->PrevError=sptr->LastError;                //存储误差,用于下次计算sptr->LastError=iError;
return(iIncpid);                                  //返回增量值
}

2.2陀螺仪数据采集部分 利用I2C1通讯模式,获取GY-86六轴陀螺仪的原始数据(三轴角速度和三轴加速度),同时对数据进行校核误差:

注:完整代码另附

三、小结

科研训练任务按预期要求完成,在结合多个任务的情况下,实现对电机的开环控制,闭环控制,利用陀螺仪的数据,并做四元数转换,得到角度信息,再通过PID对电机的控制,实现了基础的电机控制的全部任务要求。在此基础上可以继续发掘诸如:平衡小车,倒立摆等多种电机控制的系统模型。

BSD 3-Clause License Copyright (c) 2023, Hlilmbbo All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

基于STM32的直流电机控制 展开 收起
C
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/Hlilmbbo/STM32.git
git@gitee.com:Hlilmbbo/STM32.git
Hlilmbbo
STM32
STM32电机控制项目
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891