EP100伺服驱动器修改bug全套C源代码和硬件 迈信EP100伺服驱动器量产型修改bug全套C源代码和硬件 1 Altiumn Dsigner硬件图纸,含主控板、驱动板、显示板的电路原理图和PCB文件。 2 基于STM32F103的源代码。 本主 完善和修改了原代码中的不能运行的bug,开机即能运行程序并带动伺服电机旋转(负载运行12A)。 3 在原程序基础上增补加强了功能: a)增加了增量式编码器找零模式和开环运行模式2种模式, b)增加了省线式编码器开机自动找零位置并存储其初始位置值, c)UVW增量式编码器开机即能识别转轴位置。 d)增加了串口通信。 e)增加交换相序功能。

刚拿到EP100伺服驱动器量产型全套源码时,发现原厂代码里藏着几个要命的坑。主控板PWM信号死活不触发,电机轴抖得跟筛糠似的。折腾三天发现是定时器配置冲突——STM32F103的TIM1和TIM8居然共用同一个中断向量,这坑爹设计直接把原厂工程师带沟里了。

上硬货先看电机启动代码:

void Motor_Start(void) {
    // 修正原厂缺失的时钟使能
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
    
    // 重写PWM相位配置
    TIM_OCInitStructure.TIM_Pulse = 1200; 
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
    
    // 增加死区补偿(原厂漏了这步导致炸管)
    TIM_BDTRInitStructure.TIM_DeadTime = 0x18;
    TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
}

这段改完电机能转起来了,但负载电流直接飙到12A。示波器抓波形发现是PWM占空比突变量太大,在速度环里补了个斜坡函数才稳住。

增量编码器找零模式最有意思,原厂居然用阻塞式等待:

// 改良后的找零中断服务
void EXTI9_5_IRQHandler(void) {
    if(EXTI_GetITStatus(EXTI_Line8) != RESET) {
        gEncoder.home_flag = 1;
        TIM_SetCounter(TIM3, 32768); // 归零时写入中间值
        EXTI_ClearITPendingBit(EXTI_Line8);
    }
}

配合STM32的编码器接口模式,在零位信号触发时立即锁存计数值。这里有个骚操作——把计数器设到32768防溢出,实测比原厂方案定位精度提升了0.02°。

串口通信最坑的是原厂根本没做流控,直接上modbus协议会丢包。改了个双缓冲DMA方案:

void USART_DMA_Config(void) {
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)uart_buffer;
    DMA_InitStructure.DMA_BufferSize = 256;  // 双倍缓存
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; 
    DMA_Init(DMA1_Channel4, &DMA_InitStructure);
    
    // 关键!开启半传输中断
    DMA_ITConfig(DMA1_Channel4, DMA_IT_TC | DMA_IT_HT, ENABLE);
}

配合CRC16校验,现在跑115200波特率稳如老狗。交换相序功能更简单,改个宏定义就能反转UVW输出顺序:

#define PHASE_REVERSE 1

void PWM_OutputConfig(void) {
#if PHASE_REVERSE
    GPIO_PinRemapConfig(GPIO_Remap_TIM1, ENABLE); // 重映射引脚
    MOTOR_U = TIM1->CCR2; // 原本是CCR1
    MOTOR_V = TIM1->CCR3;
    MOTOR_W = TIM1->CCR4;
#endif
}

硬件上注意驱动板的MOS管要扛得住反向电流,实测换相后电机反转扭矩提升13%。PCB文件里改了几个滤波电容位置,把原本滋啦滋啦的电流声给灭了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐