找回密码
 立即注册
楼主: 梁工

三相无刷直流电机驱动-8H系列-带HALL 梁工例子

  [复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:216
  • 最近打卡:2025-10-31 11:24:48

83

主题

6818

回帖

1万

积分

超级版主

积分
14622
发表于 2025-10-22 16:14:07 | 显示全部楼层
hous*** 发表于 2025-10-22 15:03
梁工,请教一下,我换了个带霍尔的电机,测试如下,霍尔的图哪里看到霍尔的上升下降沿ABC三相是有重叠,这 ...

能不能显示1、2个完整的周期?周期不完整,看不出来。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-29 13:13:55
已绑定手机

1

主题

8

回帖

57

积分

注册会员

积分
57
发表于 2025-10-22 16:45:04 | 显示全部楼层
梁*** 发表于 2025-10-22 16:14
能不能显示1、2个完整的周期?周期不完整,看不出来。

波形是这样的
微信图片_20251022164251_145_2.png
微信图片_20251022164329_147_2.png

点评

你的霍尔信号不对称,应该是安装位置不对造成的。理想的霍尔信号应该如下图: [attachimg]118472[/attachimg]  详情 回复 发表于 2025-10-22 16:58
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-29 13:13:55
已绑定手机

1

主题

8

回帖

57

积分

注册会员

积分
57
发表于 2025-10-22 16:47:35 | 显示全部楼层
从霍尔上来看,好像是一个霍尔还没转完,下一个霍尔就变化了,从UVW来看,就是波形前面短,后面长,不那么对称,这样是不是调整那个换相的延时时间?我试着增加那个延时时间,看波形没什么改变
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:216
  • 最近打卡:2025-10-31 11:24:48

83

主题

6818

回帖

1万

积分

超级版主

积分
14622
发表于 2025-10-22 16:58:26 | 显示全部楼层

你的霍尔信号不对称,应该是安装位置不对造成的。理想的霍尔信号应该如下图:

截图202510221658196144.jpg

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-29 13:13:55
已绑定手机

1

主题

8

回帖

57

积分

注册会员

积分
57
发表于 2025-10-23 09:29:13 | 显示全部楼层
梁*** 发表于 2025-10-22 16:58
你的霍尔信号不对称,应该是安装位置不对造成的。理想的霍尔信号应该如下图:

看霍尔的板子上也是60度电角度的样子,从实际的波形来看,好像是差了一拍,时间上好像变成1-2-1-2这样的间隔了
微信图片_20251023092513_150_2.png
微信图片_20251023092852_151_2.png

点评

将波形周期等分成6份,每一份就是边沿的时刻。  详情 回复 发表于 2025-10-23 10:22
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:216
  • 最近打卡:2025-10-31 11:24:48

83

主题

6818

回帖

1万

积分

超级版主

积分
14622
发表于 2025-10-23 10:22:56 | 显示全部楼层
hous*** 发表于 2025-10-23 09:29
看霍尔的板子上也是60度电角度的样子,从实际的波形来看,好像是差了一拍,时间上好像变成1-2-1-2这样的 ...

将波形周期等分成6份,每一份就是边沿的时刻。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-10-26 10:46:25
已绑定手机

0

主题

5

回帖

28

积分

新手上路

积分
28
发表于 2025-10-23 16:58:46 | 显示全部楼层
梁*** 发表于 2025-10-17 11:10
加角度校正,实际就是延时一下。

......每个电机单独矫正?之前使用的是一个无刷电机专用芯片,那个不知道怎么处理的霍尔信号,就可以直接使用,没有异常,我感觉是霍尔信号那面是不是经过修正处理,但是那个芯片很简单......。能把电机寄给您,您给看一下具体是什么原因码?
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-10-26 10:46:25
已绑定手机

0

主题

5

回帖

28

积分

新手上路

积分
28
发表于 2025-10-23 17:24:10 | 显示全部楼层
梁*** 发表于 2025-10-17 11:10
加角度校正,实际就是延时一下。

您好,延时从默认的500ns加到1ms,效果越来越不好

点评

不是这个延时,这个延时是用于切换IO的,不超过1us,不要更改! 你要延时的是换相时刻,加一个相移时间。  详情 回复 发表于 2025-10-23 18:54
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:216
  • 最近打卡:2025-10-31 11:24:48

83

主题

6818

回帖

1万

积分

超级版主

积分
14622
发表于 2025-10-23 18:54:12 | 显示全部楼层
小*** 发表于 2025-10-23 17:24
您好,延时从默认的500ns加到1ms,效果越来越不好

不是这个延时,这个延时是用于切换IO的,不超过1us,不要更改!
你要延时的是换相时刻,加一个相移时间。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-10-26 10:46:25
已绑定手机

0

主题

5

回帖

28

积分

新手上路

积分
28
发表于 2025-10-23 20:02:39 | 显示全部楼层
梁*** 发表于 2025-10-23 18:54
不是这个延时,这个延时是用于切换IO的,不超过1us,不要更改!
你要延时的是换相时刻,加一个相移时间。 ...

抱歉,没有懂您说的什么意思,能麻烦具体指出在您发布的STC8H1K28例程里的那个位置加吗?大概要加多少延时?

void StepMotor(void) // 换相序列函数
{
        PWMB_IER   = 0;
        PWMB_CCER1 = 0;
        PWMB_CCER2 = 0;

        step = P2 & 0x07;        //P2.0-HALL_A P2.1-HALL_B P2.2-HALL_C

        if(!Motor_Dir)        //顺时针
        {
                switch(step)
                {
                case 2:  // 010, P2.0-HALL_A下降沿  PWM3, PWM2_L=1                //顺时针
                                PWMA_ENO = 0x00;        PWM1_L=0;        PWM3_L=0;
                                Delay_500ns();
                                PWMA_ENO = 0x10;        // 打开C相的高端PWM
                                PWM2_L = 1;                        // 打开B相的低端
                                PWMB_CCER2 = (0x01+0x00);        //P2.2 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
                                PWMB_IER   = 0x08;                        //P2.2 使能中断
                                break;
                case 6:  // 110, P2.2-HALL_C上升沿  PWM3, PWM1_L=1
                                PWMA_ENO = 0x10;        PWM2_L=0;        PWM3_L=0;        // 打开C相的高端PWM
                                Delay_500ns();
                                PWM1_L = 1;                        // 打开A相的低端
                                PWMB_CCER1 = (0x10+0x20);        //P2.1 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
                                PWMB_IER   = 0x04;                        //P2.1 使能中断
                                break;
                case 4:  // 100, P2.1-HALL_B下降沿  PWM2, PWM1_L=1
                                PWMA_ENO = 0x00;        PWM2_L=0;        PWM3_L=0;
                                Delay_500ns();
                                PWMA_ENO = 0x04;        // 打开B相的高端PWM
                                PWM1_L = 1;                        // 打开A相的低端
                                PWMB_CCER1 = (0x01+0x00);        //P2.0 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
                                PWMB_IER   = 0x02;                        //P2.0 使能中断
                                break;
                case 5:  // 101, P2.0-HALL_A上升沿  PWM2, PWM3_L=1
                                PWMA_ENO = 0x04;        PWM1_L=0;        PWM2_L=0;        // 打开B相的高端PWM
                                Delay_500ns();
                                PWM3_L = 1;                        // 打开C相的低端
                                PWMB_CCER2 = (0x01+0x02);        //P2.2 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
                                PWMB_IER   = 0x08;                        //P2.2 使能中断
                                break;
                case 1:  // 001, P2.2-HALL_C下降沿  PWM1, PWM3_L=1
                                PWMA_ENO = 0x00;        PWM1_L=0;        PWM2_L=0;
                                Delay_500ns();
                                PWMA_ENO = 0x01;        // 打开A相的高端PWM
                                PWM3_L = 1;                        // 打开C相的低端
                                PWMB_CCER1 = (0x10+0x00);        //P2.1 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
                                PWMB_IER   = 0x04;                        //P2.1 使能中断
                                break;
                case 3:  // 011, P2.1-HALL_B上升沿  PWM1, PWM2_L=1
                                PWMA_ENO = 0x01;        PWM1_L=0;        PWM3_L=0;        // 打开A相的高端PWM
                                Delay_500ns();
                                PWM2_L = 1;                        // 打开B相的低端
                                PWMB_CCER1 = (0x01+0x02);        //P2.0 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
                                PWMB_IER   = 0x02;                        //P2.0 使能中断
                                break;

                default:
                                break;
                }
        }

        else        //逆时针
        {
                switch(step)
                {
                case 4:  // 100, P2.0-HALL_A下降沿  PWM1, PWM2_L=1                //逆时针
                                PWMA_ENO = 0x00;        PWM1_L=0;        PWM3_L=0;
                                Delay_500ns();
                                PWMA_ENO = 0x01;        // 打开A相的高端PWM
                                PWM2_L = 1;                        // 打开B相的低端
                                PWMB_CCER1 = (0x10+0x00);        //P2.1 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
                                PWMB_IER   = 0x04;                        //P2.1 使能中断
                                break;
                case 6:  // 110, P2.1-HALL_B上升沿  PWM1, PWM3_L=1
                                PWMA_ENO = 0x01;        PWM1_L=0;        PWM2_L=0;        // 打开A相的高端PWM
                                Delay_500ns();
                                PWM3_L = 1;                        // 打开C相的低端
                                PWMB_CCER2 = (0x01+0x02);        //P2.2 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
                                PWMB_IER   = 0x08;                        //P2.2 使能中断
                                break;
                case 2:  // 010, P2.2-HALL_C下降沿  PWM2, PWM3_L=1
                                PWMA_ENO = 0x00;        PWM1_L=0;        PWM2_L=0;
                                Delay_500ns();
                                PWMA_ENO = 0x04;        // 打开B相的高端PWM
                                PWM3_L = 1;                        // 打开C相的低端
                                PWMB_CCER1 = (0x01+0x00);        //P2.0 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
                                PWMB_IER   = 0x02;                        //P2.0 使能中断
                                break;
                case 3:  // 011, P2.0-HALL_A上升沿  PWM2, PWM1_L=1
                                PWMA_ENO = 0x04;        PWM2_L=0;        PWM3_L=0;        // 打开B相的高端PWM
                                Delay_500ns();
                                PWM1_L = 1;                        // 打开A相的低端
                                PWMB_CCER1 = (0x10+0x20);        //P2.1 0x10:允许输入捕获, +0x00:上升沿, +0x20:下降沿
                                PWMB_IER   = 0x04;                        //P2.1 使能中断
                                break;
                case 1:  // 001, P2.1-HALL_B下降沿  PWM3, PWM1_L=1
                                PWMA_ENO = 0x00;        PWM2_L=0;        PWM3_L=0;
                                Delay_500ns();
                                PWMA_ENO = 0x10;        // 打开C相的高端PWM
                                PWM1_L = 1;                        // 打开A相的低端
                                PWMB_CCER2 = (0x01+0x00);        //P2.2 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
                                PWMB_IER   = 0x08;                        //P2.2 使能中断
                                break;
                case 5:  // 101, P2.2-HALL_C上升沿  PWM3, PWM2_L=1
                                PWMA_ENO = 0x10;        PWM1_L=0;        PWM3_L=0;        // 打开C相的高端PWM
                                Delay_500ns();
                                PWM2_L = 1;                        // 打开B相的低端
                                PWMB_CCER1 = (0x01+0x02);        //P2.0 0x01:允许输入捕获, +0x00:上升沿, +0x02:下降沿
                                PWMB_IER   = 0x02;                        //P2.0 使能中断
                                break;
       
                default:
                                break;
                }
        }
}
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-11-1 13:42 , Processed in 0.130206 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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