基于 STM32F303(内置运放 PGA 比较器):位置控制
使用 EVAL-SERVOM1(基于 303CCT6 内置运放 PGA 比较器)三电阻 FOC 低压伺服板
公众号:游名科技
ST 最新电机库已支持位置控制(电机要带增量编码器,目前最大支持 14 位编码器):
位置控制函数:
void MC_ProgramPositionCommandMotor1( float fTargetPosition, float fDuration );
其中:
fTargetPosition:控制角度,单位为弧度,转一圈需要 2PI=2*3.1415926;
fDuration:时间,单位 mS,从当前位置到达目标位置所需时间;
参考测试程序如下:
if(RunFlag)
{
//High Speed
// MC_ProgramPositionCommandMotor1(MotorPiAi*3.14,0.1);
// HAL_Delay(1000);
//
// MC_ProgramPositionCommandMotor1(-MotorPiAi*3.14,0.1);
// HAL_Delay(1000);
MC_ProgramPositionCommandMotor1(MotorPiAi*4,1);
//MotorPiAi=3.1415926,2*3.14 为 1 圈,转半圈*4,1S
MC_AcknowledgeFaultMotor1(); // 清除电机错误
MC_StartMotor1(); // 电机启动
HAL_Delay(1500); // 延时 1.5S
MC_ProgramPositionCommandMotor1(-MotorPiAi*2,1);
//MotorPiAi=3.1415926,2*3.14 为 1 圈,,反转半圈*2,1S
HAL_Delay(1500); // 延时 1.5S
MC_AcknowledgeFaultMotor1(); // 清除电机错误
MC_StartMotor1(); // 电机启动
}
else
{
MC_StopMotor1(); // 电机停止
}
用默认生成的程序,假设每次控制转 3.14 角度,会发些无法一直转(而正反转 3.14 角度可以),那是因为默认程序控制的是绝对角度,需要自己修改;
函数原型如下:
__weak void MCI_ExecPositionCommand( MCI_Handle_t * pHandle, float FinalPosition, float Duration )
{
pHandle->pFOCVars->bDriveInput = INTERNAL;
float currentPositionRad = (float)(SPD_GetMecAngle(STC_GetSpeedSensor(pHandle->pSTC))) / RADTOS16;
if (Duration > 0)
{
TC_MoveCommand(pHandle->pPosCtrl, currentPositionRad, FinalPosition - currentPositionRad, Duration);
}
else
{
TC_FollowCommand(pHandle->pPosCtrl, FinalPosition);
}
pHandle->LastModalitySetByUser = STC_TORQUE_MODE;
}
将
TC_MoveCommand(pHandle->pPosCtrl,currentPositionRad, FinalPosition - currentPositionRad, Duration);
修改为:
TC_MoveCommand(pHandle->pPosCtrl,currentPositionRad, FinalPosition , Duration);即可
工作电压:10 到 30V;
电流:0 到 10A;
支持电机:BLDC 电机,PMSM 电机,有刷电机等;
主芯片:STM32F303(采用内置运放、PGA、比较器);
板载接口:
按键接口;
仿真调试接口;
TTL 电平串口接口;
CAN 接口;
DA 接口;
霍尔接口及增量编码器接口;
剩余 IO 接口基本引出;
提供资料截图:
三:用 STMStudio 软件通过 ST LINK 看变量波形篇
1、首先安装 STMStudio 软件(略);
2、打开 STMStudio 软件如下图:
3、在 Display Variables 界面区域点击鼠标右键选择“Import”,打卡后如下图:
4、点击上图省略号选择 axf 文件(导入 MDK 或 IAR 项目工程目录下 axf 文件)
5、选中 axf 文件并点击 Select,点击后出现错误,点 OK 即可
6、导入后如下图所示:
7、找到或输入相关变量:这里输入 IA
8、选择 IA 和 IB 变量,并点击 Import 导入,然后点击 close 关闭
导入变量后如下图所示:
9、点击 Run 并选择 Start S 按钮
10、选中变量点击右键 send to 到显示菜单
11、显示后数据波形如下图所示(数据波形不好需要调整):
12、退出、关闭软件等(略)
二、磁编码器安装篇
一、教程基础篇
EVAL-SERVOM1(基于 303CCT6 内置运放 PGA 比较器)三电阻 FOC
低压伺服板:
工作电压:10 到 30V;
电流:0 到 10A;
支持电机:BLDC 电机,PMSM 电机,有刷电机等;
主芯片:STM32F303CCT6(采用内置运放、PGA、比较器);
板载接口:
按键接口;
仿真调试接口;
TTL 电平串口接口;
CAN 接口;
DA 接口;
霍尔接口及增量编码器接口;
SPI 接口绝对值编码器接口;
剩余 IO 接口基本引出;
实物如下图所示:
1.1 图纸说明
1.2 硬件布线
EVAL-SERVOM1 伺服电机板:采用 4 层板;
PWM 输出线和电流采样线尽量不要交叉;
电源功率地、数字地、模拟地等都分开,最好是单点接地。
1.3 安全说明
仿真器或调试器:可以用我们的隔离仿真器或加 USB 隔离器,当然低压用非隔离仿真器也可以。
板子及带电端口:不要用手触摸,以免被电到。
1.4 接线说明
板子:
电源输入:
GND:接直流可调电源或开关电源负 -
电机线:
U:接电机 U 或 A
V:接电机 V 或 B
W:接电机 W 或 C
霍尔或编码器接线
HA:接电机霍尔传感器 U 或编码器 A(对应 200W 伺服电机编码器:6 脚)
HB:接电机霍尔传感器 V 或编码器 B(对应 200W 伺服电机编码器:7 脚)
HC:接电机霍尔传感器 W(对应 200W 伺服电机编码器:8 脚)
GND 或 0V:接电机传感器接口 GND(对应 200W 伺服电机编码器:1 脚)
+5:接电机传感器接口 5V(对应 200W 伺服电机编码器:2 脚)
仿真调试接口及串口接线说明:
CLK:接隔离 DAP 仿真器 CLK 或 ST LINK 仿真器 CLK(SWD 信号时钟脚)
DIO:接隔离 DAP 仿真器 DIO 或 ST LINK 仿真器 DIO(SWD 信号数据脚)
GND:接隔离 DAP 仿真器 GND 或 ST LINK 仿真器 GND
TX(TX 接 RX 需交叉):接隔离 DAP 仿真器 RX 或 ST LINK 仿真器 RX
RX(RX 接 TX 需交叉):接隔离 DAP 仿真器 TX 或 ST LINK 仿真器 TX
正常运行界面如下图所示: