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

BLDC, 三相无刷直流电机驱动-STC8/STC32-无HALL, 12万转, 视频讲解

 火.. [复制链接]

该用户从未签到

0

主题

18

回帖

96

积分

注册会员

积分
96
发表于 2023-9-18 19:57:40 | 显示全部楼层
视频讲解,梁工在山东大学的STC8H8K64U教学视频课程,这个视频有没有回放。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

550

主题

9345

回帖

1万

积分

管理员

积分
13918
发表于 2023-9-18 20:15:36 | 显示全部楼层
见顶楼的 链接
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

25

回帖

173

积分

注册会员

积分
173
发表于 2023-10-7 21:59:39 | 显示全部楼层
梁工,

     我在试产发现,这个程序1/10概率不能正常启动, 不得已写了下面重启程序(遇到异常,让马达重启)现在我将正常和非正常启动波形及正常工作波形,都附着附件下面,
我现在不清楚异常启动是什么引起的,有没有办法检测到异常,进行及时修正,避免重启?

                        if(PhaseTime>=4000)overtime_number++;//小于2500RPM 会堵转计数器会计数
                        if((PhaseTime <= PhaseTime_average) || (PhaseTime<= 400 ))short_time_number++;//如果相位小于平均值的1/2,将会相位异常计数。


1,此水泵电机应该不是高速电机,消磁我从40us-200us都取值试过,100us好像正常概率高些,我目前取值100us

   T2H = (u8)((65536UL - 100*2) >> 8);        //装载消磁延时
           T2L = (u8)(65536UL - 100*2);
                 AUXR |=0x10;        //Timer2开始运行, 等于延迟100us再检测,比较中断-21,避免触发误检测。
                 }
                else if(XiaoCiCnt == 2)        XiaoCiCnt = 0;                //1:需要消磁, 2:正在消磁, 0已经消磁
        }

2,马达启动程序,我测试过好多次,目前驱动初始值60,驱动概率高些

          关于初次赋值,我从示波器开始一个周期波形时间大概是18ms,所以赋值,是,5000+7*2000,这个赋值,我从400到2000都试过,好像差异不大
for(i=0; i<8; i++)        PhaseTimeTmp[i] = 2000;
                motor_lockedtime=1;        TH0 = 0;        TL0 = 0;   

u8 StartMotor(void)
{
        u16 timer,k;
        PWM_Value=60;

        Step = 0;
        StepXL();
        DISABLE_CMP_INT;
        Delay5ms();Delay5ms();Delay5ms();Delay5ms();
        Delay5ms();Delay5ms();Delay5ms();Delay5ms();//40ms,delay_ms(5);
        timer = 300;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
        while(1)
        {
                for(k=0; k<timer; k++)Delay70us();  //
                timer -= timer /14+1;
                if(timer < 25)        return(1);                                                                          
                        if(Step<5)        Step++;
                    else                Step = 0;
                   StepXL();
               
        }

        if(motor_start_flag==1)        //马达启动
      {
          motor_start_flag=0;
           B_start=1;
        StartMotor();
                          for(i=0; i<8; i++)        PhaseTimeTmp[i] = 2000;
                motor_lockedtime=1;        TH0 = 0;        TL0 = 0;                    
                                 motor_RUN=1;         XiaoCiCnt = 0;                //初始进入时
                                CMPCR1 &= ~0x40; B_start=0;          // 清除中断标志位
                                if(Step%2==0)        CMPCR1 =0x9C;                //下降沿中断
                                else                        CMPCR1 =0xAC;                //上升沿中断
       }
3,比较器中断程序, 我将,PhaseTime=0; 从for语句移到外面,不知道是否有影响?

PhaseTime=0;
                for(i=0; i<8; i++)        PhaseTime += PhaseTimeTmp[i];        //求8次换相时间累加和


void CMP_INT(void) interrupt 21
{
                u8        i;
        CMPCR1 &= ~0x40;        // 需软件清除中断标志位
         Red_LED=~Red_LED;
if(XiaoCiCnt == 0)
    {
                TR0=0;        // Timer0停止运行
                if( motor_lockedtime==1 )        //切换时间间隔(Timer0)有溢出,中断间隔:32ms
                {
                        motor_lockedtime = 0;
                        PhaseTime =5000;
                }
                else
                {
                        PhaseTime = (((u16)TH0 << 8) + TL0) >> 1;        // Time0 12T的一个时钟为0.5us, 定时器时间换算单位为us,定时器时间/2  
                        if(PhaseTime >= 5000)PhaseTime=5000;// 一圈360度所用时间= 500us*6 (相数)*2 (2对极/四级转子)=6ms, rpm=1000ms/6ms*60(分钟)=10000,超过转速会保护  
                }
               
                        if(PhaseTime>=4000)overtime_number++;//小于2500RPM 会堵转计数器会计数
                        if((PhaseTime <= PhaseTime_average) || (PhaseTime<= 400 ))short_time_number++;//如果相位小于平均值的1/2,将会相位异常计数。

                       
                TH0 = 0;        TL0 = 0;
                TR0=1;        // Timer0运行                                                                                                  
                PhaseTimeTmp[TimeIndex] = PhaseTime;        //保存一次换相时间
                if(++TimeIndex >= 8)        TimeIndex = 0;        //累加8次
                  PhaseTime=0;
                for(i=0; i<8; i++)        PhaseTime += PhaseTimeTmp[i];        //求8次换相时间累加和
                PhaseTime = PhaseTime >> 4;                // >>4 = 值/16 ,求8次换相时间的平均值的一半, 即30度电角度
                PhaseTime_average=PhaseTime;// 求8次换相时间的平均值1/2
                if( PhaseTime<=312 )over_speed_number++; // 超过8000PRM,计数200次进行保护
                if( PhaseTime >= 150)        PhaseTime -= 50;        //修正由于滤波电容引起的滞后时间,50us的滤波电容滞后时间
                else
                        PhaseTime  = 150;
                AUXR &=~0x10;        //Timer2停止运行
                PhaseTime  = PhaseTime  << 1;        // 2个12T 时钟为计数1us
                PhaseTime = 0 - PhaseTime;
                T2H = (u8)(PhaseTime >> 8);                //装载30度角延时
                T2L = (u8)PhaseTime;
                AUXR |=0x10;        //Timer2开始运行,
                XiaoCiCnt = 1;                //1:需要消磁, 2:正在消磁, 0已经消磁
               
        }
  }       

正常工作波形

正常工作波形

非正常启动波形

非正常启动波形

正常启动波形

正常启动波形

点评

第一个图的消磁时间是100us左右,你用100%占空比看看消磁时间,可能会更长,按最长的时间+20%来设定消磁时间。 水泵电机转速慢,启动时要慢一些。  详情 回复 发表于 2023-10-8 00:00
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

2966

回帖

6685

积分

超级版主

积分
6685
 楼主| 发表于 2023-10-8 00:00:01 | 显示全部楼层
fisholive 发表于 2023-10-7 21:59
梁工,

     我在试产发现,这个程序1/10概率不能正常启动, 不得已写了下面重启程序(遇到异常,让马达重 ...

第一个图的消磁时间是100us左右,你用100%占空比看看消磁时间,可能会更长,按最长的时间+20%来设定消磁时间。
水泵电机转速慢,启动时要慢一些。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

25

回帖

173

积分

注册会员

积分
173
发表于 2023-10-8 10:01:09 | 显示全部楼层
梁工,
我以前波形杂波很多,从开关电源出来直接接控制板,PWM取值245以上就波形变形,失真,并容易重启。
现在给控制板前端并联22uf贴片电容,波型有很大改善,也干净不少,这次测试占空比250,255也能运行。

我刚看了满占空比255,怎么没有反向电动势波形了尼?

占空比赋值220

占空比赋值220

占空比赋值250

占空比赋值250

占空比赋值255

占空比赋值255

点评

主电源一定要良好退耦,一般建议使用2个或2个以上470uF低ESR的电容并联使用,否则由于退耦不良会有各种问题出现。 图上看退磁时间达到200us了,你得有超过250us的延时避开退磁再开始过0检测。 占空比255时没看到图,  详情 回复 发表于 2023-10-8 14:49
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

2966

回帖

6685

积分

超级版主

积分
6685
 楼主| 发表于 2023-10-8 14:49:32 | 显示全部楼层
fisholive 发表于 2023-10-8 10:01
梁工,
我以前波形杂波很多,从开关电源出来直接接控制板,PWM取值245以上就波形变形,失真,并容易重启。
...

主电源一定要良好退耦,一般建议使用2个或2个以上470uF低ESR的电容并联使用,否则由于退耦不良会有各种问题出现。
图上看退磁时间达到200us了,你得有超过250us的延时避开退磁再开始过0检测。
占空比255时没看到图,正常的话,会有明显的、最长的退磁时间,有明显的线性上升或下降的反电动势(梯形波)。
下图为我的2212电机最高速时电枢的电压波形,窄脉冲就是退磁时间(航模2212电机非常短,一般并不超过50us),有斜率的就是反电动势。


好盈20A-2000us全速波形.JPG


回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

25

回帖

173

积分

注册会员

积分
173
发表于 2023-10-8 17:43:24 | 显示全部楼层
梁工,

我将消磁时间改为250us,不启动概率比以前还高,如果能正常启动没有什么区别。
我把正常启动及不正常启动做了对比图,特别是第一次换相时间,正常波形明显比非正常启动波形要宽,会不会换相时机不对,或相位错乱了?

启动波形对比.jpg
波形对比图2.jpg
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    2023-12-30 08:47
  • 签到天数: 2 天

    [LV.1]初来乍到

    2

    主题

    18

    回帖

    76

    积分

    注册会员

    积分
    76
    发表于 2023-10-19 22:10:38 | 显示全部楼层
    这个还是不错的
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    30

    积分

    新手上路

    积分
    30
    发表于 2023-10-20 16:38:31 | 显示全部楼层
    我下载官方的程序,如果采用无感就不能启动电机。如果采用霍尔电机可以启动,在低速度(电流250mA以下)时大概每几十秒电机会卡一下,然后继续运转,如果调高转速可能几秒就卡死,电流很大用手不能转动电机。最低运转电流70mA。我使用的电压是24V。我的板是可以插上别的芯片,我换别的单片机就相当正常低速电流只有30mA,高速电流650mA,120W的电机。我是用EG2132替换了官方的三极管驱动电路,不改程序。请问师傅们,我现在要检查那部分?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    30

    积分

    新手上路

    积分
    30
    发表于 2023-10-20 16:54:22 | 显示全部楼层
    我的电机是60度霍尔
    截图202310201654179614.jpg

    点评

    示波器看一下霍尔信号的相序看是否跟程序的要求一样。按理,有霍尔的是非常容易高效驱动的。  详情 回复 发表于 2023-10-20 20:40
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-8 19:58 , Processed in 0.070419 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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