电机加速时间及距离的算法

#include "stdafx.h"
#include "string.h"

//已知初速度、加速度、目标速度,求加速时间及对应的加速路程最优化(误差最小)的整型算法
void CalcS()
{
    int v0 = 5, vt = 40;//初始速度、目标速度
    int dv = vt - v0;//差值
    int c = 3, b = 10;//加速度参数
    int a = c / b;//定义加速度为分数形式
    int t = dv*b / c;//加速时间计算
    int s = v0 * dv * b / c + dv * dv * b / (2 * c);//根据s=v0t+at^2/2公式推导出
    printf("vt=%dmm/s,连续行程s= %dum\n", vt, s);
}

//使用离散方式计算加速的路程,程序里适用
void CalcRs()
{
    int v0 = 5, vt = 40;//初始速度、目标速度,mm/s或um/ms
    int a = 3;//加速度,每次加速多少mm
    int dt = 10;//10ms//加速时间间隔
    int times = (vt - v0)/a;//达到目标速度的间隔次数,ms
    int S = 0;//路程,um
    for (int i = 0; i < times; i++)//积分求和
    {
        S += (v0 + i * a)*dt;
    }
    printf("vt=%dmm/s,离散行程S=%dum\n",vt,S);
}

int main()
{
    CalcS();
    CalcRs();
    getchar();
    return 0;
}

运行结果:

电机加速时间及距离的算法_第1张图片

分析:离散运算和连续运算差距还是挺大的,单片机进行计算应该尽量采用离散方式来计算能减小误差。

用matlab进行加速时间及行程计算代码如下:v0=5;vt=40;dv=vt-v0;c=3;b=10;a=c/b;t=dv*b/c;s=v0*dv*b/c+dv^2*b/(2*c)

你可能感兴趣的:(嵌入式知识,数据结构和算法,c/c++)