找回密码
 立即注册
查看: 435|回复: 5

用编码器电机 驱动小车

[复制链接]

3

主题

11

回帖

57

积分

等待验证会员

积分
57
发表于 2024-7-19 09:18:16 | 显示全部楼层 |阅读模式
利用pwm7 8控制一个编码器电机   pwm5 6再控制一个编码器电机    pwm1 2 3 4 选编码器模式   为什么上电都不转呢  是哪里配置错了吗

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

272.86 KB, 下载次数: 61

为什么上电了不转呢

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-7-19 10:36:42 | 显示全部楼层
看了一下比较复杂,暂时没有带编码器电机之类的实物无法测试,建议先调通底层,先直接写IO口驱动电机,检查硬件有无故障,然后配置好PWM,直接给PWM值让PWM输出信号驱动电机,检查PWM配置是否正常,然后再加入编码器和PID整体调试
DebugLab
回复 支持 2 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-7-19 10:42:54 | 显示全部楼层
要一步步来,先可以控制电机转动、调速,再调试编码器,然后才是PID之类。
回复 支持 反对

使用道具 举报 送花

3

主题

11

回帖

57

积分

等待验证会员

积分
57
发表于 2024-7-19 10:49:23 | 显示全部楼层
Debu*** 发表于 2024-7-19 10:36
看了一下比较复杂,暂时没有带编码器电机之类的实物无法测试,建议先调通底层,先直接写IO口驱动电机,检查 ...

好的 谢谢
回复 支持 反对

使用道具 举报 送花

3

主题

11

回帖

57

积分

等待验证会员

积分
57
发表于 2024-7-19 10:49:48 | 显示全部楼层
梁*** 发表于 2024-7-19 10:42
要一步步来,先可以控制电机转动、调速,再调试编码器,然后才是PID之类。 ...

好的谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2024-12-10 18:14:16

0

主题

29

回帖

156

积分

注册会员

积分
156
发表于 2024-11-4 20:30:32 | 显示全部楼层
本帖最后由 zwf33335 于 2024-11-4 20:32 编辑
梁*** 发表于 2024-7-19 10:42
要一步步来,先可以控制电机转动、调速,再调试编码器,然后才是PID之类。 ..EC11.
EC11编码器函数,很好用
#include <intrins.h>
#include        "STC8Hxxx.h"
#include        "bmq.h"

u16 PWM4_Duty;
sbit Asign=P3^2; // 编码器A脚
sbit Bsign=P3^4; // 编码器B脚
u16 dangwei = 0;
u8 rotate;
u8 disp_xs;

void INT0_init()     //外中断0
{
   IT0 = 1;        //下降沿中断
         EX0 = 1;        //使能中断
         EA = 1;         //开总中断
}

void INT0_Isr()interrupt 0   //外中断服务函数
{
  
        //if(changan_dj_bmq==0)
        {        
                if(Bsign=!Asign)//A和B电平相反时才可计数
                {
                if(Bsign==1)     //B高电平时间  右转
                        {
                                 disp_xs=0;                                                                                         
                                if(rotate<6)        
                                {                                       
                                        rotate++;        
         if(rotate ==1)        
         {         
                                  dangwei = 165;
                                 }
                                 if(rotate ==2)        
         {                                         
                                  dangwei = 330;
                                 }
                                 if(rotate ==3)        
         {                                         
                                  dangwei = 490;
                                 }
                                 if(rotate ==4)        
         {                                         
                                  dangwei = 650;
                                 }
                                  if(rotate ==5)        
         {                                         
                                  dangwei = 800;
                                 }
                                  if(rotate ==6)        
         {                                         
                                  dangwei = 999;
                                 }
                                }
                                if(rotate>6)
                                        rotate=6;
                                if(rotate>0)
                                        {
                                          PWMA_CCER2 = 0x55;   //比较输出使能,见STC8H说明书1161页
            PWMA_ENO |= 0x40;  //使能输出 P26        
            PWMA_BKR = 0x80; // 刹车寄存器,关闭输出  见STC8H说明书1166页
            PWMA_CR1 |= 0x01; //开始计时                                                
                                        }
                        }//检测B引脚电平
                else
                        if(Bsign==0)    //B低电平时间  左转
                                {
                                        disp_xs=0;                                                                        
                                        if(rotate>0)
                                        {
                                          rotate--;
                                                if(rotate ==5)
                                                {
                                                  dangwei = 800;
                                                }
                                                if(rotate ==4)
                                                {
                                                  dangwei = 650;
                                                }        
                                                if(rotate ==3)
                                                {
                                                  dangwei = 490;
                                                }        
                                                if(rotate ==2)
                                                {
                                                  dangwei = 330;
                                                }        
                                                if(rotate ==1)
                                                {
                                                  dangwei = 160;
                                                }        
                                                if(rotate ==0)
                                                {
                                                  dangwei = 0;
                                                }        
                                        }                                                
                                        if(rotate<0)
                                                rotate=0;                                       
                                }
                                while((!Bsign)||(!Asign));//AB若有低电平则进入循环
                                
                                        if(rotate==0)
                                        {
                                          PWMA_CCER2 = 0x00;   //关闭比较输出使能,见STC8H说明书1161页
            PWMA_ENO &= 0x40;  //关闭使能输出 P26        
            PWMA_BKR = 0x00; // 刹车寄存器,关闭输出  见STC8H说明书1166页
            PWMA_CR1 *= 0x01; //禁止计时                                                
                                        }
               
               
                }
  }
}
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:01 , Processed in 0.122731 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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