同步操作将从 Hlilmbbo/STM32电机控制项目 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
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蓝牙模块实现蓝牙通讯,实现实时获取当前电机理论转速和实际转速,以及可以通过串口助手实现对电机转速的调控(蓝牙模块同理)。
另外对于电机速度的控制,采用增量式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对电机的控制,实现了基础的电机控制的全部任务要求。在此基础上可以继续发掘诸如:平衡小车,倒立摆等多种电机控制的系统模型。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。