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

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

 火.. [复制链接]
  • TA的每日心情
    慵懒
    2024-5-7 21:31
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    7

    回帖

    62

    积分

    注册会员

    积分
    62
    发表于 2024-4-16 15:56:09 | 显示全部楼层
    梁工 发表于 2024-4-15 00:57
    一般来说,电机都有多对磁极,磁极对越多,转一圈换相次数就越多,转速就越慢,但力矩也越大。
    定子电流 ...

    谢谢!!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    8

    积分

    新手上路

    积分
    8
    发表于 2024-4-16 17:12:28 | 显示全部楼层
    梁工,我想问一下这块板子适用于3S电池吗,会不会烧

    点评

    12~24V,3S~6S,均可,我都用了,没烧过板。 建议使用STC32G的版本的电路,使用EG2106做驱动,效果非常好。  详情 回复 发表于 2024-4-16 23:30
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3042

    回帖

    6857

    积分

    超级版主

    积分
    6857
     楼主| 发表于 2024-4-16 23:30:38 | 显示全部楼层
    CJ129 发表于 2024-4-16 17:12
    梁工,我想问一下这块板子适用于3S电池吗,会不会烧

    12~24V,3S~6S,均可,我都用了,没烧过板。
    建议使用STC32G的版本的电路,使用EG2106做驱动,效果非常好。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    8

    积分

    新手上路

    积分
    8
    发表于 2024-4-17 20:34:14 | 显示全部楼层
    梁工 发表于 2024-4-16 23:30
    12~24V,3S~6S,均可,我都用了,没烧过板。
    建议使用STC32G的版本的电路,使用EG2106做驱动,效果非常好 ...

    谢谢,我们之前使用过STC32G的逐飞开源方案,在占空比低的时候能够稳步转动,但是当电流大的时候,会出现卡顿的情况,重新启转。

    点评

    我的例子,我实测电流10A(15V)都没有问题,更大电流没测试,因为没有更高功率的电机。其实电流大小、驱动电压高低是没有太大关系的,因为MCU只是给PWM信号,电压、电流是由驱动电路和MOSFET完成的,只要你的驱动芯  详情 回复 发表于 2024-4-17 22:51
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3042

    回帖

    6857

    积分

    超级版主

    积分
    6857
     楼主| 发表于 2024-4-17 22:51:00 | 显示全部楼层
    CJ129 发表于 2024-4-17 20:34
    谢谢,我们之前使用过STC32G的逐飞开源方案,在占空比低的时候能够稳步转动,但是当电流大的时候,会出现 ...

    我的例子,我实测电流10A(15V)都没有问题,更大电流没测试,因为没有更高功率的电机。其实电流大小、驱动电压高低是没有太大关系的,因为MCU只是给PWM信号,电压、电流是由驱动电路和MOSFET完成的,只要你的驱动芯片能耐压高,MOSFET耐压高、电流大,则都可以工作。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-23 17:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    10

    回帖

    64

    积分

    注册会员

    积分
    64
    发表于 2024-4-18 09:50:32 | 显示全部楼层
    梁工您好,关于无刷电机工作频率该如何选择呢?比如您这个“PWMA_PSCR = 3;”“PWMA_ARR    = 255;”用的是24M  频率=24000000/((3+1)*(255+1))=23437.5HZ; 我的问题是对于电机频率应该遵循什么范围和标准来确定频率参数合适呢?

    点评

    PWM频率太低,高转速时可能不到一个PWM周期就要换相,这样电机就会不稳定。并且在音频范围的话,其PWM噪声会令人烦。 PWM频率太高,则驱动管的开关损耗会增大,对于线圈电感比较大的电机,可能会变得转矩小。 所以,  详情 回复 发表于 2024-4-18 10:08
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3042

    回帖

    6857

    积分

    超级版主

    积分
    6857
     楼主| 发表于 2024-4-18 10:08:35 | 显示全部楼层
    顾红军 发表于 2024-4-18 09:50
    梁工您好,关于无刷电机工作频率该如何选择呢?比如您这个“PWMA_PSCR = 3;”“PWMA_ARR    = 255;”用的是 ...

    PWM频率太低,高转速时可能不到一个PWM周期就要换相,这样电机就会不稳定。并且在音频范围的话,其PWM噪声会令人烦。
    PWM频率太高,则驱动管的开关损耗会增大,对于线圈电感比较大的电机,可能会变得转矩小。
    所以,要均衡这些开率,一般20KHz~50KHz是比较好的,我一般用24MHz主频,8位PWM就先4分频,得到PWM频率 = 24000000 / 4 /256 = 23437.5Hz,这个频率在音频之外,不会听到刺耳的PWM驱动声音,又不是太高,开关损耗也小。
    我另外的用STC32G12K128做驱动、PID调速的例子,因为要比较精细的PWM占空比,所以使用的是10位PWM,则PWM时钟不分频,PWM频率 = 24000000 / 1024 = 23437.5Hz。
    PWMA_PSCRH = 0;
    PWMA_PSCRL = 0;
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-23 17:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    10

    回帖

    64

    积分

    注册会员

    积分
    64
    发表于 2024-4-18 10:34:39 | 显示全部楼层
    感谢梁工的解释。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-23 17:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    10

    回帖

    64

    积分

    注册会员

    积分
    64
    发表于 2024-4-22 13:21:39 | 显示全部楼层
    梁工你好!
    “/******************* 强制电机启动函数 ***************************/
    void StartMotor(void)
    {
            u16 timer,i;
            CMPCR1 = 0x8C;        //关比较器中断
            PWM_Value  = D_START_PWM;        // 初始占空比, 根据电机特性设置
            PWMA_CCR1L = PWM_Value;//UA
            PWMA_CCR2L = PWM_Value;//VB
            PWMA_CCR3L = PWM_Value;//WC
            step = 0;        StepMotor();        Delay_n_ms(50);        //Delay_n_ms(250);// 初始位置
            timer = 200;        //风扇电机启动
            while(1)
            {
                    for(i=0; i<timer; i++)        delay_us(100);  //根据电机加速特性, 最高转速等等调整启动加速速度
                    timer -= timer /16;
                    if(++step >= 6)        step = 0;
                    StepMotor();
                    if(timer < 40)        return;
            }
    }”
    这里“if(timer < 40)        return;”是不是有问题啊,这个强制启动一直在这里循环出不去啊?

    点评

    你怎么觉得会有问题?你为什么觉得会一直循环出不去?无数的用户验证过,都没说有问题。 这一句,只要timer小于40就会返回。如果条件不满足,你用break不是一样出不去,永远循环? timer -= timer /16; 这一句,time  详情 回复 发表于 2024-4-22 14:50
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-23 17:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    10

    回帖

    64

    积分

    注册会员

    积分
    64
    发表于 2024-4-22 13:24:08 | 显示全部楼层
    顾红军 发表于 2024-4-22 13:21
    梁工你好!
    “/******************* 强制电机启动函数 ***************************/
    void StartMotor(void ...

    是不是用break语句比较合适啊
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-18 20:15 , Processed in 0.069408 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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