找回密码
 立即注册
楼主: wskhsm

STC32G有刷光栅编码器电机PID闭环控制

[复制链接]

3

主题

11

回帖

57

积分

等待验证会员

积分
57
发表于 2024-7-19 09:02:20 | 显示全部楼层
那个 哥  我在您的基础上去添加另一个电机  为啥都不转了呢

STC32G 编码器电机PID控制 - 副本 (3).zip

272.86 KB, 下载次数: 78

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-02-28 16:59:12

5

主题

26

回帖

293

积分

中级会员

积分
293
发表于 2024-7-19 20:42:17 | 显示全部楼层
ls*** 发表于 2024-7-19 09:02
那个 哥  我在您的基础上去添加另一个电机  为啥都不转了呢

void Parameter_adjustment(void)
{
        if(MT_STARTL)                                                                //启动状态
        {
                PWM_DUTY_0 = PID_Choice(1,TargetL,speedL,PWM_DUTY_0,PID_P,1,1);//调用PID计算公式  第一次加五
                MotorL_PWM_Config(MT_STARTL,MT_DIR);
        }
       
        if(MT_STARTR)                                                                //启动状态
        {
                PWM_DUTY_1 = PID_Choice(1,TargetR,speedR,PWM_DUTY_1,PID_P,1,1);//调用PID计算公式  第一次加五
                MotorR_PWM_Config(MT_STARTR,MT_DIR);
        }
}

PWM_DUTY_1  把这个值放OLED屏上观察数值,用示波器观察PWM5和6有没有输出波型,这个程序要用编码器电机,接普通电机是不能正常工作的,PWMA已接了一路编码器,另一路我没看到有程序。
回复 支持 反对

使用道具 举报 送花

3

主题

11

回帖

57

积分

等待验证会员

积分
57
发表于 2024-7-20 16:33:44 | 显示全部楼层
现在我把值直接给了寄存器PWMB_CCR7H    PWMB_CCR7L   PWMB_CCR5H  PWMB_CCR5L   pwm波形 能正常输出是想要的值     但是 赋给变量  PWM_DUTY_0的值存到寄存器里会变化   占空比一直是百分之一
截图202407201631115008.jpg
回复 支持 反对

使用道具 举报 送花

3

主题

11

回帖

57

积分

等待验证会员

积分
57
发表于 2024-7-20 17:43:01 | 显示全部楼层
PID_Choice 调节后把值给PWM_DUTY_0   PWM_DUTY_0在存到寄存器  会出错
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-02-28 16:59:12

5

主题

26

回帖

293

积分

中级会员

积分
293
发表于 2024-7-21 00:04:53 | 显示全部楼层
你转动电机时侯检查Lspeed_number和Rspeed_number这两个值有没有娈化?我没记错的话STC一路PWM只能支持一路编码器,两路PWM同时接PWMA应该是不行的,这个手册里没有说,我之前做调试时好像碰到过这个问题,或者你可以直接咨询一下STC,PWMA能不能同时支持两路编码器
回复 支持 反对

使用道具 举报 送花

3

主题

11

回帖

57

积分

等待验证会员

积分
57
发表于 2024-7-25 23:11:02 | 显示全部楼层
这个speed_number代表什么   是脉冲个数吗   如果是脉冲个数 除以 二之后 speed那就是脉冲数啊
回复 支持 反对

使用道具 举报 送花

3

主题

11

回帖

57

积分

等待验证会员

积分
57
发表于 2024-7-26 15:36:59 | 显示全部楼层
还有就是speed那里 的除2  是因为上升沿和下降沿都检测吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-02-28 16:59:12

5

主题

26

回帖

293

积分

中级会员

积分
293
发表于 2024-7-30 16:13:05 | 显示全部楼层
ls*** 发表于 2024-7-26 15:36
还有就是speed那里 的除2  是因为上升沿和下降沿都检测吗

void ENCODER_Config()
{
        PWMA_ENO = 0x00;                                          // 配置成 TRGI 的 pin 需关掉 ENO 对应 bit 并配成 input
        PWMA_PS |= 0x08;                                                // 切换PWM管脚 P1.0 P6.2
       
        PWMA_CCER1 = 0x00;                                        // 清零CCER,关闭通道
        PWMA_CCER2 = 0x00;       
        PWMA_CCMR1 = 0x21;                                         // 通道模式配置为输入,接编码器 , 滤波器 4 时钟
        PWMA_CCMR2 = 0x21;                                         // 通道模式配置为输入,接编码器 , 滤波器 4 时钟
       
        PWMA_CCER1 = 0x55;                                         // 配置通道使能和极性
        PWMA_CCER2 = 0x55;                                         // 配置通道使能和极性
       
//        PWMA_SMCR = 0x01;                                         // 编码器模式 1
//        PWMA_SMCR = 0x02;                                         // 编码器模式 2       
        PWMA_SMCR = 0x03;                                         // 编码器模式 3
       
        PWMA_IER = 0x0A;                                                 // 使能中断
        PWMA_CR1 |= 0x01;                                         // 使能PWM计数器
}

看手册,里面有说明

截图20240730161051.png
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 00:09 , Processed in 0.207159 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表