2160|2

613

帖子

2

TA的资源

纯净的硅(初级)

楼主
 

电机第一贴:分享关于电机开发中关于速度方面的代码和经验 [复制链接]

做了2年电机开发,特写一些贴子和大家分享,水平其实很烂,没玩过电机的可以看看,电机老手就算了.我的水平实在不怎么样.

基础的一些电机的知识,我后面再发一些贴子和大家分享,今天我写一点关于限速方面的,我拿到手的第一个代码,是公司的前辈写的,用STM32的芯片的一个二轮车,因为前辈已经离职,所以后续的一些代码我改了一些.最早我改的一个功能就是限速.因为车子分为高中低三档,然后分别是5,10,15公里限速.由于电机不一样,这里的代码需要调整,最早给我的代码,里面没有限速的,就是全速的,大概最高速可以到38公里,由于刚开始接触电机,我也是一头雾水,所以一天到晚在群里,论坛还有认识的朋友那问关于电机的知识和程序.其中有几位给了我很大的帮助.特别是一位电机厂的设计师,和我成了好朋友,对我帮助很大.在些也谢谢他们.刚开始其实我是乱调的,我直接在油门程序这改代码,把油门值改大,改小.这样虽然可以实现限速,但是有一个非常非常严重的问题,带载烧MOS管.当负载加重到5A电流的时候,MOS严重发烫,然后MOS就会出现问题.不加载用测速仪是可以的,显示速度很稳定.后面想这样调不行,那就换思路,然后从别的地方入手改代码.实际上限速,除了油门,就是输出力大小进行限制,同样限制住了速度.也就是控制IQ,VQ的值.目前我做了3档调节,暂时还算可以,后面有机会再改进.要加PI代码.没有PI代码会一直电机速度在10-15公里之间震荡.下面这个是我写的没有PI的代码,实际就是稳不住,就是一直在振荡.

        if((g_u16_torqueTempValue > tend_value)&&(speed_value > 40)&&((speed_value <= 33)))
        {
            tend_value = tend_value + 10;
            if(tend_value >= MAX_IQ) tend_value = MAX_IQ;
        }
        else if((g_u16_torqueTempValue < tend_value)&&(speed_value)&&((speed_value <= 33)))
        {
            if(tend_value >= 10)
            tend_value = tend_value - 10;
        }
        else if((g_u16_torqueTempValue < tend_value)&&(speed_value > 39))
        {
            if(tend_value >= 100)
            tend_value = tend_value - 100;
        }
        else if((g_u16_torqueTempValue > tend_value)&&(speed_value > 39))
        {
            if(tend_value >= 100)
            tend_value = tend_value - 100;
        }
        else
             tend_value = g_u16_torqueTempValue;

后面在网上查了PI的资料,网上PI的程序很多,我随便抄了一个

struct PID { 
    unsigned int SetPoint;   // 设定目标 Desired Value 
    unsigned int Proportion; // 比例常数 Proportional Const 
    unsigned int Integral;   // 积分常数 Integral Const 
    unsigned int Derivative; // 微分常数 Derivative Const 
    unsigned int LastError;  // Error[-1] 
    unsigned int PrevError;  // Error[-2] 
    unsigned int SumError;   // Sums of Errors 
}; 
unsigned int PIDCalc(struct PID *pp, unsigned int NextPoint) 

    unsigned int dError,Error; 
    Error = pp->SetPoint - NextPoint; // 偏差 
    pp->SumError += Error; // 积分 
    dError = pp->LastError - pp->PrevError; //当前微分 
    pp->PrevError = pp->LastError; 
    pp->LastError = Error; 
    return (pp->Proportion * Error  //比例
    + pp->Integral * pp->SumError    //积分项
    + pp->Derivative * dError);      //微分项 

这个是我网上抄的,实际使用还要改的,因为实际的代码,工作中有保密协议,遵守职业规范,我就不从我的程序里抄出来给大家看了,只要稍微修改一下,懂里面的原理,限速还是很容易实现的.首先我们要加入一个实际速度,然后设定速度,设定速度减于实际速度的差值做为积分项,积分项的另一个乘数可以自己根据电机或者转速的情况自己定,这样比例项就有了,再加上积分项,积分项就是累加的差值和做为一个乘积,另一个微分项,我们不要随意加,我是根据转速的情况做了条件判断,再加上微分项.加了PI算法后,再调好输出值,基本上工作就可以了,然后带载测试的话,比如你加上负载,你限速10公里,速度仍旧可以达到10公里,只是电流上升,总之速度保持不变.基本上限速就是这么一个思路.电机这个东西开发上比较依速于实验室,特别是测功机,负载仪这些.今天我先分享限速这块的思路,做为电机方面的新手.我也在慢慢学习电机,后面再写贴和大家分享.如果里面有错的,请大家包涵.

此帖出自stm32/stm8论坛

最新回复

做电动车的话,用ST的电机库不香吗?   详情 回复 发表于 2020-1-15 18:53

赞赏

1

查看全部赞赏

点赞 关注(2)
个人签名我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       
 

回复
举报

368

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
66666,之前还一直装傻。
此帖出自stm32/stm8论坛
 
 

回复

295

帖子

1

TA的资源

版主

板凳
 

做电动车的话,用ST的电机库不香吗?

此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表