1 Star 0 Fork 4

王建华 / STM32电机控制项目

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

基于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对电机的控制,实现了基础的电机控制的全部任务要求。在此基础上可以继续发掘诸如:平衡小车,倒立摆等多种电机控制的系统模型。

空文件

简介

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

发行版

暂无发行版

贡献者

全部

近期动态

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

搜索帮助

53164aa7 5694891 3bd8fe86 5694891