383015160 发表于 2024-8-4 19:06:14

梁工求一份按键调速的例程参考哦

梁工 发表于 2024-8-4 19:29:43

本帖最后由 梁工 于 2024-8-4 19:32 编辑

383015160 发表于 2024-8-4 19:06
梁工求一份按键调速的例程参考哦
按键的很简单,,我没加上去,自己加两个按键可以接在P3.0 P.31,去掉电位器改变占空比,换成按键加减操作占空比即可,可以按键一次加减10,加快调整速度。

zhouyubo 发表于 2024-8-4 19:52:18

zhouyubo 发表于 2024-8-4 14:03
今天又用新做的实验板验证了一下,运转正常,就是电位器要拧到很高的位置才开始转动。先做的圆板上QFN的m ...

原来是指数的电位器太水了,换了个电位器调速正常了。驱动22V的250W高速吸尘器暴力电机也可以的。但是电压只能是4S不能上到5S。可能是moa换耐压问题吧。

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滤波。
页: 27 28 29 30 31 32 33 34 35 36 [37] 38 39 40 41 42 43 44 45 46
查看完整版本: BLDC三相无刷直流电机驱动-8H系列/32G系列-无HALL, 12万转, 视频讲解,改进启动算法