找回密码
 立即注册
查看: 156|回复: 4

梁工,例程众多非常关键的参数是如何定下来的??

[复制链接]
已绑定手机

6

主题

17

回帖

80

积分

注册会员

积分
80
发表于 2026-10-8 09:56:03 | 显示全部楼层 |阅读模式
/*
        //四轴飞行器2212电机
        #define STARTUP_INTERVAL            20000UL         // 启动时两次换向的最大间隔时间 us为单位
        #define        STARTUP_PWM                            80                         // 启动时的占空比        2212电机
        #define        STOP_PWM                                (STARTUP_PWM-20)        // 停止PWM,小于此PWM就停机, 根据电机特性适当改变
        #define        STARTUP_END_PhaseTime        2400                // 判断启动结束的换相时间us,2212电机
*/


        //8元风扇电机
        #define STARTUP_INTERVAL            60000UL         // 启动时两次换向的最大间隔时间 us为单位
        #define        STARTUP_PWM                            200                 // 启动时的占空比        8元风扇电机, 12V-->300, 18V-->240, 24V-->200
        #define        STOP_PWM                                100                        // 停止PWM,小于此PWM就停机, 根据电机特性适当改变
        #define        STARTUP_END_PhaseTime        8000                // 判断启动结束的换相时间us,8元风扇电机


看别人的程序倒是很简单,真正自己调试的时候这一连串的参数 无从下手,估计没方法的话折腾一两天也搞不出来的。
  请梁工讲解下调试过程,每个参数是如何通过调试确定的。 你写本书或者视频 讲解,我都会买的。



回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17930
发表于 2026-10-8 10:54:51 | 显示全部楼层
根据电机额定转速初步设置启动时的起始转速=2%~5%额定转速,结束转速=10%~20%额定转速,并计算启动时的最大换相时间和启动结束的换相时间。
启动PWM一般10%~25%,从10%开始实测,启动无力再慢慢增加。
回复

使用道具 举报 送花

已绑定手机

6

主题

17

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2026-10-8 14:46:04 | 显示全部楼层
梁*** 发表于 2026-10-8 10:54
根据电机额定转速初步设置启动时的起始转速=2%~5%额定转速,结束转速=10%~20%额定转速,并计算启动时的最大 ...

谢谢 梁工。
回复

使用道具 举报 送花

已绑定手机

6

主题

17

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2026-10-8 14:47:44 | 显示全部楼层
梁*** 发表于 2026-10-8 10:54
根据电机额定转速初步设置启动时的起始转速=2%~5%额定转速,结束转速=10%~20%额定转速,并计算启动时的最大 ...

                        else if(++StartTime >= (STARTUP_INTERVAL/43))        //预定位时间到,准备启动电机,预定位时间为最大换相时间, 43是PWM周期为43us
                        {                                                                            //  1359
                                for(i=0; i<8; i++)        PhaseTimeTmp = STARTUP_INTERVAL/43;        //初始默认最大换相时间
                                TimeIndex = 0;
                                commutation_num = 0;        //启动换相次数累加
                                Degree30_time   = 0;
                                StartTime = STARTUP_INTERVAL/43/4;//  348
                                run_mode = MOTOR_STARTING;
                                StepMotor();        //换相一次

STARTUP_INTERVAL/43/4;这个更加 难搞  如何确定?
                        }

点评

STARTUP_INTERVAL/43: 这是STARTUP_INTERVAL(US)对应的PWM周期数,PWM周期为43us。 StartTime = STARTUP_INTERVAL/43/4:这个是第一个检测超时周期为3/4,即从1/4 PWM周期数开始,原来是考虑30度角,其实第一个脉  详情 回复 发表于 2026-10-8 15:24
回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17930
发表于 2026-10-8 15:24:36 | 显示全部楼层
123luo*** 发表于 2026-10-8 14:47
else if(++StartTime >= (STARTUP_INTERVAL/43))        //预定位时间到,准备启动电机,预定位时间为 ...

STARTUP_INTERVAL/43: 这是STARTUP_INTERVAL(US)对应的PWM周期数,PWM周期为43us。
StartTime = STARTUP_INTERVAL/43/4:这个是第一个检测超时周期为3/4,即从1/4 PWM周期数开始,原来是考虑30度角,其实第一个脉冲不用考虑30度角,所以后来都改为从0开始了:
StartTime = 0;    //STARTUP_INTERVAL/43/4;//  348
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-7 10:38 , Processed in 0.088246 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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