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

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

  [复制链接]

3

主题

27

回帖

201

积分

中级会员

积分
201
发表于 2023-8-2 11:31:58 | 显示全部楼层
梁工,

试产发现一个严重问题,经常启动时候会烧掉三极管,烧掉后三极管B极有12V电压,应该市C极和B极击穿了,
以前一直测试没有遇到这样问题,这次买的三极管S8050应该不是正品,应该换成其他三极管(比如3904)或者电路要稍微改下吗?不胜感激!
1.png

点评

12V条件下(自举到24V)8050小电流能击穿烧坏,这个还真没遇到。你可以换耐压更高一点的看看,比如1N5551,耐压150V。  详情 回复 发表于 2023-8-2 17:22
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-8-2 17:22:25 | 显示全部楼层
fisho*** 发表于 2023-8-2 11:31
梁工,

试产发现一个严重问题,经常启动时候会烧掉三极管,烧掉后三极管B极有12V电压,应该市C极和B极击穿 ...

12V条件下(自举到24V)8050小电流能击穿烧坏,这个还真没遇到。你可以换耐压更高一点的看看,比如1N5551,耐压150V。
回复 支持 反对

使用道具 举报 送花

3

主题

27

回帖

201

积分

中级会员

积分
201
发表于 2023-8-2 20:34:25 | 显示全部楼层


梁工,
mos管和三极管基本同时坏的,我估计是打开相高端PWM没有加500ns延迟,以前一直没有问题 ,这次批量买的MOS型号不同,
应该是MOS管S2和G2先击穿,三极管C极相当于直接12V没有经过限流电阻,所以随后三极管也击穿了, 但是好奇怪,CE之间并未被击穿
1.png


点评

之前你并没说MOSFET损坏。 MOSFET的S、G击穿短路,则三极管由于过流也烧毁。 要保证MOSFET的质量,驱动都是先关闭。一个,再开通另一个  详情 回复 发表于 2023-8-2 23:03
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-8-2 23:03:48 | 显示全部楼层
fisho*** 发表于 2023-8-2 20:34
梁工,
mos管和三极管基本同时坏的,我估计是打开相高端PWM没有加500ns延迟,以前一直没有问题 ,这次批 ...

之前你并没说MOSFET损坏。
MOSFET的S、G击穿短路,则三极管由于过流也烧毁。
要保证MOSFET的质量,驱动都是先关闭。一个,再开通另一个
回复 支持 反对

使用道具 举报 送花

3

主题

27

回帖

201

积分

中级会员

积分
201
发表于 2023-8-8 13:26:40 | 显示全部楼层
梁工,我换相增加500ns延迟还是有概率会烧掉,我增加到800ns还是有概率会烧掉了,三极管从是是S8050换成3904问题仍然存在,三极管和mos同时坏。
会不会三极管没有及时关掉,工作在饱和区间或其他原因?
void StepXL(void) // 换相序列函数
{
  switch(Step)
  {
case 0:  // AB
                        PWM0_L=0;        PWM2_L=0; CCAP1H=0;        CCAP2H=0;
                        Delay_800ns();
                        CCAP0H = PWM_Value;                // 打开A相的高端
                        PWM1_L = 1;                 // 打开B相的低端
                        ADC_CONTR = 0XED;        // 选择P1.5作为ADC输入 即c相电压
                        CMPCR1 = 0x9C;                //bit7=1 允许比较器, bit4=1 比较结果由1变0, 产生下降沿中断 (不能响应下降沿中断?)
                        break;
   case 1:  // AC
                        PWM0_L=0;        PWM1_L=0;  CCAP1H=0;        CCAP2H=0;
                        Delay_800ns();
                        CCAP0H = PWM_Value;                // 打开A相的高端
                        PWM2_L = 1;                        // 打开C相的低端
                        ADC_CONTR = 0XEC;        // 选择P1.4作为ADC输入 即B相电压
                        CMPCR1 = 0xAC;                //上升沿中断
                   
      break;
   case 2:  // BC
                        PWM0_L=0;        PWM1_L=0; CCAP0H=0;        CCAP2H=0;
                                Delay_800ns();
                                CCAP1H = PWM_Value; // 打开B相的高端
                        PWM2_L = 1;                        // 打开C相的低端
                        ADC_CONTR = 0XEB;        // 选择P1.3作为ADC输入 即a相电压
                        CMPCR1 = 0x9C;                //下降沿中断
               
      break;
   case 3:  // BA
                        PWM1_L=0;        PWM2_L=0; CCAP0H=0;        CCAP2H=0;
                                Delay_800ns();
                                CCAP1H = PWM_Value; // 打开B相的高端
                        PWM0_L = 1;                        // 打开A相的低端
                        ADC_CONTR = 0XED;        // 选择P1.5作为ADC输入 即c相电压
                        CMPCR1 = 0xAC;                //上升沿中断
               
      break;
   case 4: // CA
                        PWM1_L=0;        PWM2_L=0; CCAP0H=0;        CCAP1H=0;
                                        Delay_800ns();
                                CCAP2H = PWM_Value; // 打开C相的高端
                        PWM0_L = 1;                        // 打开A相的低端
                        ADC_CONTR = 0XEC;        // 选择P1.4作为ADC输入 即B相电压
                        CMPCR1 = 0x9C;                //下降沿中断
               
      break;
   case 5: // CB
                      PWM0_L=0;PWM2_L=0;CCAP0H=0;        CCAP1H=0;
                                Delay_800ns();
                                CCAP2H = PWM_Value;// 打开C相的高端
                      PWM1_L = 1;                        // 打开B相的低端
                        ADC_CONTR = 0XEB;        // 选择P1.3作为ADC输入 即a相电压
                        CMPCR1 = 0xAC;                //上升沿中
         default:       
                break;          
  }       

点评

双踪示波器看一下驱动波形。  详情 回复 发表于 2023-8-8 14:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-8-8 14:13:46 | 显示全部楼层
fisho*** 发表于 2023-8-8 13:26
梁工,我换相增加500ns延迟还是有概率会烧掉,我增加到800ns还是有概率会烧掉了,三极管从是是S8050换成390 ...

双踪示波器看一下驱动波形。
回复 支持 反对

使用道具 举报 送花

0

主题

1

回帖

14

积分

新手上路

积分
14
发表于 2023-8-9 16:05:25 | 显示全部楼层
梁*** 发表于 2023-8-8 14:13
双踪示波器看一下驱动波形。

会有 FOC 的DEMO ?

点评

目前还没有。  详情 回复 发表于 2023-8-9 21:16
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-8-9 21:16:02 | 显示全部楼层

目前还没有。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:412
  • 最近打卡:2025-04-30 07:57:12

4

主题

80

回帖

1885

积分

金牌会员

积分
1885
发表于 2023-9-13 14:40:23 | 显示全部楼层
梁工,您好!网上买了一个无刷电机,请问您图上标的HA,HB,HC与HW,HV,HU是怎么对应的呀!按图画了一块PCB,用DC24V,带HALL的程序,上电就烧PWM3,PWM3L输出的功率管。请梁工有空不吝指教一下,先谢谢梁工!

无刷电机

无刷电机

点评

就算接错霍尔信号,也不应该烧MOSFET,最多转不起来。开启启动用表小的油门(电位器)。 U、V、W是电枢(线圈)引脚,接驱动输出,随便确定一个接线顺序。 HU、HV、HW是霍尔信号,连电源一起接到电路中,相序随便先  详情 回复 发表于 2023-9-13 16:05
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-9-13 16:05:21 | 显示全部楼层
well*** 发表于 2023-9-13 14:40
梁工,您好!网上买了一个无刷电机,请问您图上标的HA,HB,HC与HW,HV,HU是怎么对应的呀!按图画了一块PCB, ...

就算接错霍尔信号,也不应该烧MOSFET,最多转不起来。开启启动用表小的油门(电位器)。
U、V、W是电枢(线圈)引脚,接驱动输出,随便确定一个接线顺序。
HU、HV、HW是霍尔信号,连电源一起接到电路中,相序随便先定一个顺序,如果转不起来,就换线,换几次一般都正常了。我通常先用无霍尔方式驱动起来,示波器看霍尔信号跟电枢信号的相位,就可以确定正确的连接。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 04:13 , Processed in 0.153560 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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