网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: TI德州中文网 >> 电机控制 >> 步进电机 >> 开发软件 >> 资源信息
专 题 栏 目
热 门 软 件
推 荐 软 件
步进电机细分计算程序和EXCEL_SIN表
运行环境: Win9x/NT/2000/XP/2003 文件大小: 22 K
软件等级: ★★★ 软件类别: 
开 发 商: Free 软件语言: 
相关链接: 资源演示地址  资源注册地址 软件属性:         
下载次数: 本日:   本周:  
       本月:   总计:
授权方式: 
解压密码: 
软件添加: 审核:admin 录入:admin 添加时间: 2010-1-4 22:05:26
::下载地址::
下载地址1  
::软件简介::

/*************************************************************************
   适用于:步进电机细分驱动SIN值计算 MOTOR_SIN   7226+6219  39610+3771 等
   设计制作:DJ.y
   编译环境:C-FREE 3.5
*************************************************************************/

#include <stdio.h>


 int count_n=0,count_ph=0;
//**************R的N次方***************************************************************
float RN(float r,long n)     //去掉R的0和1次方 需要见另一个完整功能函数
 { long i;
   float j=r;
 for(i=1;i<n;i++)       j=j*r;
 return  j;
 }
//***********N的阶乘******************************************************************
long fact(long n)            //浮点运算见另外一个函数
 { long i,j=1;
 for(i=1;i<=n;i++)
        {
         j=j*i;
        }
return  j;
 }
/***********************SIN()*******************************************************/
float sin(float x)   //设x== 0-180
{float y;    //y为弧度  增大为10000倍  double y ;//双精度64位 单精度float 32位
 float goal,PI=3.1415926;
 y    = x*PI/180;
 //printf("%f",y);    printf("\n");      ?test OK
 //6=3的阶乘     120=5的阶乘     750=7的阶乘 ---根据SINX 幂级数公式得 取前3级
//goal =(y-y*y*y/6+y*y*y*y*y/120);//-y*y*y*y*y*y*y/720+y*y*y*y*y*y*y*y*y/5040
 goal =y-RN(y,3)/fact(3)+RN(y,5)/fact(5)-RN(y,7)/fact(7)+RN(y,9)/fact(9)-RN(y,11)/fact(11);
 return goal;
}
//**************步进电机A相电流取样值******************************
int data_vref1(int step,int max_value_current)
{
//char step=8;  //默认为8个细分每步
int value_current;
float angle;   //每个细分步的角度
int DATA_PH1[step*4],DATA_PH2[step*4];
int DATA_VREF1[step*4],DATA_VREF2[step*4];   //最大128细分*4拍==512
int i_bat_1,i_bat_2,i_bat_3,i_bat_4,j=0;
FILE *fp;
int  *ptr1,*ptr2,*ptr3,*ptr4;


ptr1 =& DATA_VREF1[step*0];         //指针地址
ptr2 =& DATA_VREF1[step*1];         //指针地址
ptr3 =& DATA_VREF1[step*2];         //指针地址
ptr4 =& DATA_VREF1[step*3];         //指针地址

angle=90.000000/step;           //每步角度计算
for (i_bat_1=0;i_bat_1<step;i_bat_1++)
     {
     //value_current=max_value_current*sin(angle*i_bat_1)+128;  //适用于NJU39610  max_value_current=120
     value_current=max_value_current*sin(angle*i_bat_1);          //适用于TCL7226 max_value_current=256

      DATA_PH1[i_bat_1]=1; DATA_PH1[step+i_bat_1]=1; DATA_PH1[step*2+i_bat_1]=0;DATA_PH1[step*3+i_bat_1]=0;
      DATA_PH2[i_bat_1]=0; DATA_PH2[step+i_bat_1]=1; DATA_PH2[step*2+i_bat_1]=1;DATA_PH2[step*3+i_bat_1]=0;
     
     DATA_VREF1[i_bat_1]         =value_current;
     DATA_VREF1[step*2-1-i_bat_1]=value_current;
     DATA_VREF1[step*2+i_bat_1]  =value_current;
     DATA_VREF1[step*4-1-i_bat_1]=value_current;
     
     DATA_VREF2[step-1-i_bat_1]  =value_current;
     DATA_VREF2[step+i_bat_1]    =value_current;
     DATA_VREF2[step*3+i_bat_1]  =value_current;
     DATA_VREF2[step*3-1-i_bat_1]=value_current;
     
     *ptr1   =     value_current;
//-----------------------------------------------------
 ptr1++;
     }
//*******************TO TXT**********************************************
 for (i_bat_2=0;i_bat_2<step*4;i_bat_2++)
     {
            //------------to txt------------------------------------
       // fp=fopen("C:\\data.txt","a");    //程序指针指向文件地址  w表示清0或新建
        fprintf(fp,"%d,",DATA_VREF1[i_bat_2]);
        if(count_n>=20-1){ count_n=0;    fprintf(fp,"\n");} else count_n++;   //回车换行

     }
    fprintf(fp,"\n");
 for (i_bat_2=0;i_bat_2<step*4;i_bat_2++)
     {
            //------------to txt------------------------------------
       // fp=fopen("C:\\data.txt","a");    //程序指针指向文件地址  w表示清0或新建
        fprintf(fp,"%d,",DATA_VREF2[i_bat_2]);
        if(count_n>=20-1){ count_n=0;    fprintf(fp,"\n");} else count_n++;   //回车换行

     }
     fprintf(fp,"\n");

     
     
}

//******************************************************************************
int main()
{  FILE *fp;
    //n! N的阶乘
  int i,j=1;

  int step,max_value_current;
  //int data[n] ;
   //ptr  =&  data[0];
    //-------------输入细分步数----------------------------------------------
     printf("INT STEP为整型数据0-65536,细分电流最大值为M,步进电机细分微步数N.");    printf("\n");
     printf("生成文件目录==>C:\\data.txt (0<M<255)(0<N<255)请输入M的值和N的值:(M,N)");     printf("\n");
     printf("注意:先输入M的值,再回车后输入N的值,不能输入带小数的值");     printf("\n");
     printf("M:  N:");
     scanf("%d",&max_value_current);      //输入函数
     scanf("%d",&step);

       fp=fopen("C:\\data.txt","a");    //程序指针指向文件地址  w表示清0或新建
       fprintf(fp,"步进电机微步细分最大电流值为:%d。   ",max_value_current);
       fprintf(fp,"步进电机%d微步细分电流值为:",step);
       fprintf(fp,"\n");
       data_vref1(step,max_value_current);
       fclose(fp);
   /*
    for(i=1;i<n;i++)
     {
         j=j*i;
      data[i]=j;       //将值存入数据表中

    printf("%d",j);
    printf("\n");
      }  */
}

/*********************TEST*************************************
float x=9,y,goal;
 y    = x*3.1416/180;
 goal =(y-y*y*y/6+y*y*y*y*y/120);
 printf("\n");
 printf("%f",goal);   //ok
//**************************************************************/
/*************************************************************************

::相关软件::
无刷直流电机在近红外光谱仪中的应用
基于EasyFPGA030的直流电机控制电路设计
脉冲检测方法的霍尔传感器在里程表中的应用
基于光电传感和路径记忆的车辆导航系统
DSP在无位置传感器无刷直流电机控制中的应用
::下载说明::
为了达到最快的下载速度,推荐使用网际快车下载本站软件。
如果您发现该软件不能下载,请通知管理员或点击【此处报错】,谢谢!
未经本站明确许可,任何网站不得非法盗链及抄袭本站资源;如引用页面,请注明来自本站,谢谢您的支持!
      网友评论:(评论内容只代表网友观点,与本站立场无关!) 发表评论
湘ICP备06016957号 站长:TIchinese