基于 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 接口;

 

霍尔接口及增量编码器接口;

 

SPI 接口绝对值编码器接口;

 

剩余 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 接线说明

 

 

板子:

 

电源输入:

 

VIN:接直流可调电源或开关电源+

 

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

 

正常运行界面如下图所示: