基于STM32F103的物流电滚筒驱动器
唯助航电动滚筒控制器主要功能和使用说明如下:
1. 功能:
- 基本控制功能:
- 启动和停止控制:能够控制电动滚筒的开启与关闭操作,确保设备可以根据生产或输送需求随时启动或停止。 例如,在物料输送系统中,当需要开始输送物料时,可启动电动滚筒;当输送任务完成或出现异常情况时,可及时停止电动滚筒。
- 正反转控制:可以切换电动滚筒的旋转方向,满足不同的工作场景需求。比如在皮带输送机的卸料过程中,可能需要电动滚筒反转来将物料卸出。
- 速度调节功能:
- 多档调速或无级调速:部分控制器支持多档速度调节,有多个预设的速度档位可供选择,以适应不同的物料输送速度要求; 有些较为先进的控制器还具备无级调速功能,能够实现对电动滚筒速度的连续、精确调节,使设备运行更加灵活高效。
- 速度反馈与稳定:通过接收来自电动滚筒的速度反馈信号,实时监测滚筒的实际运行速度,并与设定速度进行比较,自动调整输出信号, 确保电动滚筒的速度保持稳定,避免因负载变化等因素导致速度波动。
- 保护功能:
- 过流保护:当电动滚筒的工作电流超过设定的安全阈值时,控制器会自动切断电源,防止电机因电流过大而损坏。 例如,在电动滚筒遇到卡滞或过载情况时,过流保护功能可以有效保护电机。
- 过热保护:内置温度传感器,实时监测电动滚筒的温度。当温度过高时, 控制器会采取相应的保护措施,如降低输出功率或停止运行,以防止电机因过热而烧毁。
- 短路保护:当电路出现短路故障时,控制器能够迅速切断电路,避免因短路引发的安全事故和设备损坏。
- 通信与监控功能:
- 通信接口:具备通信接口,可与其他设备或控制系统进行通信,实现远程监控和集中管理。 例如,通过与上位机系统连接,操作人员可以在控制室远程监控电动滚筒的运行状态,并进行远程控制操作。
- 状态显示:配备显示屏或指示灯等显示装置,能够实时显示电动滚筒的运行参数, 如速度、电流、温度等,以及控制器的工作状态,方便操作人员随时了解设备的运行情况。
2.主要通讯模式和接口: 驱动器 48V 直流输入,额定输出功率 400W,间歇工作制 25%,RS485通讯控制运行速度和方向并反馈控制器状态。 另外,通过端子辅助控制电机启停和旋转方向。
3.测试用例和待测内容: (1)电滚筒运行噪音测试 (2)电滚筒转速精度测试 (3)电滚筒长时间运行测试 (4)电滚筒驱动器组网稳定性测试 (5)电滚筒精度测试 (6)电滚筒交叉带环形安装测试 (7)电滚筒交叉带环形安装飘格测试
1.硬件原理图
主芯片采用STM32F103,主频96M,两路单独的AD模块。
2.主代码函数框架
主函数:
/*********************************************************************************************************
** Function name: main
** Descriptions: 主程序
** input parameters: none
** output parameters: none
** Returned value: none
*********************************************************************************************************/
int main (void)
{
App_Handle_Init();
BLDC_System_Init();
MT_Struct.ulSpeedTarRpm = 0;
MT_Struct.ucDir = MT_DIR_N;
master_status = LOOP_INIT;
for(;;)
{
while(mainpuls){
mainpuls=0;
mainloop();
}
if(MT_Struct.ucSpeedUpdateFlag == 1){
Uart1_Send();
MT_Struct.ucSpeedUpdateFlag = 0;
}
if(MT_Struct.uc485BackFlag != 0){
Uart0_Send485();
MT_Struct.uc485BackFlag = 0;
}
#ifdef EN_MULTI
if(flash_ctl.en_write==1){
Flash_Write(CHIP_ADDR,CHIP_SIZE,&chip_ini);
flash_ctl.en_write = 0;
delay1ms(1);
}
#endif
}
}
电机状态机,包括电机的空闲,运行,故障等各部分状态的转换,部分程序如下:
/*********************************************************************************************************
** Function name: MT_Run
** Descriptions: 状态机.无感方波驱动的运行函数
** input parameters: none
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**
*********************************************************************************************************/
void MT_Run (void)
{
static INT32U __GulRunOpenPwmDuty = 0;
static unsigned int Stall_time=0;
static unsigned int TimeDelay=0;
static unsigned int Time_3000ms = 0;
switch (MT_Struct.ucRunState)
{
case MT_STANDBY: /* 空闲状态 */
if(run_same!=0){
}
if(MT_Struct.ulSpeedTarRpm > ZMC_BLDC_MIN_SPEED){ /* 设定好了目标速度后开始运行 */
MT_Struct.ucRunState = MT_CHARGE; /* 进入预充电状态 */
}
break;
case MT_CHARGE: /* 预充电状态 */
if(--TimeDelay == 0){
MT_Struct.ucRunState = MT_DRAG_1;
TimeDelay = 0;
}
break;
case MT_DRAG_1: /* 开环第一次拖动状态 */
if(Gnow_duty < BLDC_PARK_PWM_DUTY){
Gnow_duty += 100;
}
BldcPwmDuty(Gnow_duty); /* 占空比输出 */
if(MT_Struct.ulSpeedTarRpm == 0){
MT_Struct.ucRunEn = 0;
MT_Struct.ulSpeedActRpm = 0;
GtPid.qRef = 0;
MT_Struct.ucRunState = MT_STANDBY;
}
if(++Time_3000ms > 3000){
MT_Struct.ucRunEn = 0;
MT_Struct.ulSpeedActRpm = 0;
GtPid.qRef = 0;
MT_Struct.ucRunState = MT_STANDBY;
}
break;
case MT_START: /* 正常运行状态 */
if(run_same!=0){
if(MT_Struct.ucRunEn == 0){
MT_Struct.ucRunEn = 1;
}
Time_200ms = 0;
}
if(MT_Struct.ulSpeedTarRpm == 0){
MT_Struct.ucRunEn = 0;
MT_Struct.ulSpeedActRpm = 0;
GtPid.qRef = 0;
MT_Struct.ucRunState = MT_STANDBY;
}
break;
case MT_STALL:
if(run_same!=0){
BldcPwmOff(); /* PWM禁止输出 */
}
if(++Stall_time > 30000){
MT_Struct.ucRunEn = 0;
MT_Struct.ulSpeedActRpm = 0;
GtPid.qRef = 0;
MT_Struct.ucRunState = MT_STANDBY;
Stall_time = 0;
}
break;
case MT_FAULT: /* 异常状态:过流、堵转等 */
if(run_same!=0){
BldcPwmOff(); /* PWM禁止输出 */
}
case MT_BRAKE: /* 异常状态:过流、堵转等 */
if(run_same!=0){
MT_Struct.ucRunEn = 0; /* 运行禁能 */
BldcPwmOff(); /* PWM禁止输出 */
}
break;
case MT_STOP: /* 停机 */
if(run_same!=0){
MT_Struct.ucRunEn = 0; /* 运行禁能 */
BldcPwmOff(); /* PWM禁止输出 */
}
break;
default :
MT_Struct.ucRunState = MT_STOP;
break;
}
MT_STANDBY是电机的空闲状态,每次的电机故障或停止后均转入空闲状态。 MT_CHARGE是电机的预充电状态,是开始运行前的前期准备状态。 MT_START是电机的开始运行状态。 MT_STALL是电机堵转状态。 MT_FAULT是电机的故障状态。 MT_STOP是电机的停止状态。
欢迎邮件沟通。