383015160 发表于 2024-8-4 22:09:46

梁工 发表于 2024-8-4 19:29
按键的很简单,,我没加上去,自己加两个按键可以接在P3.0 P.31,去掉电位器改变占空比,换成按键加减操作 ...

好的谢谢

dbq406 发表于 2024-8-8 21:38:20

梁工,你好,根据中功率图纸参数,单片机STC32G12K128 ,12V电机正常启动,24V 启动抖动很大电流,是不是哪里要改变参数

梁工 发表于 2024-8-8 22:03:13

dbq406 发表于 2024-8-8 21:38
梁工,你好,根据中功率图纸参数,单片机STC32G12K128 ,12V电机正常启动,24V 启动抖动很大电流,是不是哪 ...

那个电路不能超过18V,否则MOSFET的栅压过高会烧MOSFET的。
要工作到24V,栅压要分压一下,其中一相如下:


dbq406 发表于 2024-8-8 22:09:16

梁工 发表于 2024-8-8 22:03
那个电路不能超过18V,否则MOSFET的栅压过高会烧MOSFET的。
要工作到24V,栅压要分压一下,其中一相如下 ...

我用2个560R电阻分压,但也一样,我的MOS管用永源微AP30G04GD管

梁工 发表于 2024-8-9 10:52:39

dbq406 发表于 2024-8-8 22:09
我用2个560R电阻分压,但也一样,我的MOS管用永源微AP30G04GD管

先用12V启动,慢慢调高电压,观察其正常否。

垂柳工作室 发表于 2024-8-10 22:55:21

请大佬详解一下红线这一句,不理解哦。电位器调到中间不动,程序开始运行时adc11 =0,进入主循环后,adc11 是不是一直增加?
void main(void)
{
        WTST= 0; //CPU读取程序存储器的等待时间控制等于0即不等待。
        CKCON = 0; //外部数据总线时钟控制寄存器(上电复位值为7,强烈建议上电初始化为0)
        EAXFR = 1;        //访问XFR区域的扩展SFR,需要先将EAXFR(PSW2.7)置1,

        P_LED = 0;        //LED指示灯亮
        P2n_standard(0x08);        //LED\P2M1 &= ~(0x08),        P2M0 &= ~(0x08)
        P3n_standard(0x0f);        //串口,P3.2 P3.3,本例未用
        P5n_standard(0x0c);        //P5.2 P5.3用于测试指示

        adc11 = 0;

        PWMA_config();
        PWMB_config();
        ADC_config();
        Timer0_config();        //Timer0初始化函数
        PWW_Set = 0;

        EA= 1; // 打开总中断

        while (1)
        {
                if(B_4ms)                // 4ms时隙
                {
                        B_4ms = 0;

                        adc11 = (adc11 *3)/4 + Get_ADC12bitResult(11);        //低通滤波结果为14位
                        YouMen= adc11 >> 5;        //油门是9位的, P0.3 ADC11-->控制电位器输入
                        if(YouMen >= 256)        PWW_Set = YouMen - 256, B_direct = 0;        //顺时针, PWM设置值0~255
                        else                                PWW_Set = 255 - YouMen, B_direct = 1;        //逆时针, PWM设置值0~255

                        if(!B_RUN && (PWW_Set >= 30))                // PWM_Set >= 30, 并且电机未运行, 则启动电机
                        {
                                P_LED = 0;        //LED指示灯亮
                                PWM_Value= 30;                        //启动电机的最低PWM, 根据具体电机而定
                                PWMA_CCR1L = PWM_Value;        //输出PWM
                                PWMA_CCR2L = PWM_Value;
                                PWMA_CCR3L = PWM_Value;
                                B_RUN = 1;                //标注运行
                                StepMotor();        //启动换相
                        }

                        if(B_RUN)        //正在运行中
                        {
                                P_LED = 0;        //LED指示灯亮

                                if(PWM_Value < PWW_Set)        PWM_Value++;        //油门跟随电位器, 调速柔和
                                if(PWM_Value > PWW_Set)        PWM_Value--;
                                if(PWM_Value < 20)        // 停转
                                {
                                        B_RUN = 0;
                                        PWMB_IER   = 0;
                                        PWMB_CCER1 = 0;
                                        PWMB_CCER2 = 0;
                                        PWM_Value= 0;
                                        PWMA_ENO   = 0;
                                        PWMA_CCR1L = 0;
                                        PWMA_CCR2L = 0;
                                        PWMA_CCR3L = 0;
                                        PWM1_L=0;
                                        PWM2_L=0;
                                        PWM3_L=0;
                                }
                                else
                                {
                                        PWMA_CCR1L = PWM_Value;
                                        PWMA_CCR2L = PWM_Value;
                                        PWMA_CCR3L = PWM_Value;
                                }
                        }
                        else
                        {
                                if(++cnt500ms == 125)        //500ms
                                {
                                        cnt500ms = 0;
                                        P_LED = ~P_LED;        //LED指示灯闪烁, 待机
                                }
                        }
                }
        }
}

梁工 发表于 2024-8-11 17:12:26

垂柳工作室 发表于 2024-8-10 22:55
请大佬详解一下红线这一句,不理解哦。电位器调到中间不动,程序开始运行时adc11 =0,进入主循环后,adc11...

那是数字一阶低通滤波程序,a=0.25,fc/fs = a/2pi = 0.04。
数字一阶低通滤波对应的是模拟电路的一节RC滤波。

lookuper 发表于 2024-8-11 21:14:52

本帖最后由 lookuper 于 2024-8-11 21:19 编辑

梁工你好,按照你的原理图,画了板子,可以正常工作,试了两种电机都可以工作!UWV的波形也不错,用模拟示波器看的。
但是,发现了一个问题,就是用钳子夹住电机轴,模拟堵转,驱动器还有输出,通过串口输出PhaseTime的数值,发现堵转时PhaseTime是有数值的,在500-600左右跳动,所以程序认为不是堵转,会继续换相,这大概应该是什么原因呢?是堵转时还有反电动势?

梁工 发表于 2024-8-12 09:24:49

lookuper 发表于 2024-8-11 21:14
梁工你好,按照你的原理图,画了板子,可以正常工作,试了两种电机都可以工作!UWV的波形也不错,用模拟示 ...

PWM干扰到反电动势检测了,误以为有反电动势,这个要软件处理了。我的例子用于提供入门学习,比较简单,没有过多的检测处理。

lookuper 发表于 2024-8-12 10:16:30

梁工 发表于 2024-8-12 09:24
PWM干扰到反电动势检测了,误以为有反电动势,这个要软件处理了。我的例子用于提供入门学习,比较简单, ...

你自己做的板子有这种现象吗?
页: 29 30 31 32 33 34 35 36 37 38 [39] 40 41 42 43 44 45 46 47 48
查看完整版本: BLDC三相无刷直流电机驱动-8H系列/32G系列-无HALL, 12万转, 视频讲解,改进启动算法