qgll 发表于 2024-4-16 15:56:09

梁工 发表于 2024-4-15 00:57
一般来说,电机都有多对磁极,磁极对越多,转一圈换相次数就越多,转速就越慢,但力矩也越大。
定子电流 ...

谢谢!!

CJ129 发表于 2024-4-16 17:12:28

梁工,我想问一下这块板子适用于3S电池吗,会不会烧

梁工 发表于 2024-4-16 23:30:38

CJ129 发表于 2024-4-16 17:12
梁工,我想问一下这块板子适用于3S电池吗,会不会烧

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

CJ129 发表于 2024-4-17 20:34:14

梁工 发表于 2024-4-16 23:30
12~24V,3S~6S,均可,我都用了,没烧过板。
建议使用STC32G的版本的电路,使用EG2106做驱动,效果非常好 ...

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

梁工 发表于 2024-4-17 22:51:00

CJ129 发表于 2024-4-17 20:34
谢谢,我们之前使用过STC32G的逐飞开源方案,在占空比低的时候能够稳步转动,但是当电流大的时候,会出现 ...

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

顾红军 发表于 2024-4-18 09:50:32

梁工您好,关于无刷电机工作频率该如何选择呢?比如您这个“PWMA_PSCR = 3;”“PWMA_ARR    = 255;”用的是24M频率=24000000/((3+1)*(255+1))=23437.5HZ; 我的问题是对于电机频率应该遵循什么范围和标准来确定频率参数合适呢?

梁工 发表于 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;

顾红军 发表于 2024-4-18 10:34:39

感谢梁工的解释。

顾红军 发表于 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;”是不是有问题啊,这个强制启动一直在这里循环出不去啊?

顾红军 发表于 2024-4-22 13:24:08

顾红军 发表于 2024-4-22 13:21
梁工你好!
“/******************* 强制电机启动函数 ***************************/
void StartMotor(void ...

是不是用break语句比较合适啊
页: 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29 30 31 32 33
查看完整版本: BLDC三相无刷直流电机驱动-8H系列/32G系列-无HALL, 12万转, 视频讲解,改进启动算法