myqiang1990 发表于 2011-9-13 10:33:14

细分如何计算正余弦表

最近在弄步进电机细分,这东西没弄过,不太懂。。我现在用的是8位DAC。。还请弄过的朋友,帮我弄两张128点正半周期的正弦和余弦表。。。。或者告诉我公式如何计算即可。。。我知道用excel很容易做。。但是本人不会用excel。。。囧RZ

20061002838 发表于 2011-9-13 10:35:32

C语言写个小程序,参数设置好,直接输出到txt文本里面就行了

myqiang1990 发表于 2011-9-13 10:51:11

回复【1楼】20061002838
-----------------------------------------------------------------------

关键是。。公式不懂。。这位大大,懂么?

20061002838 发表于 2011-9-13 10:59:00

直接用C库的sin函数啊,需要什么公式?

zhangshuxin 发表于 2011-9-13 10:59:03

C 语言中sin(float 弧度) 软件打印生成一个文件。 如果不会写上位机 自己就用计算器敲吧。总比这样省时间

jiaowoxiaolu 发表于 2011-9-13 11:07:16

上位机不会可以用单片机串口输出结果呀

myqiang1990 发表于 2011-9-13 11:23:07

搞定谢谢。。

/*HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
#include"math.h"
#define PI 3.1415926
main()
{
    int x;
    int y;
    for(x=0;x<=90;x++) /*这是角度*/
   {
      y=255*sin(x*PI /180);/*余弦改为cos即可*/
      if(x % 9==0)
         printf("\n");
      printf("%d,",y);
   }
   getch();
}

20061002838 发表于 2011-9-13 11:31:08

呵呵,好简洁啊,我是直接输出到文件里面的

NJ8888 发表于 2011-9-13 11:32:38

128位直接EXCEL再拷到H文件中

myqiang1990 发表于 2011-9-13 11:35:29

/*HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
#include"math.h"

#define PI   3.1415926
#define DOT128 /* 点数*/
#define ZQ   90 /* 1/4周期*/
main()
{
    int x;
    int y;
    for(x=0;x<DOT;x++) /*这是点数*/
   {
      y=256*sin(x*ZQ/DOT*PI /180);/*余弦改为cos即可*/
      if(x % 9==0)
         printf("\n");
      printf("%d,",y);
   }
   getch();
}

改进版。。哈哈

ITOP 发表于 2011-9-13 11:36:22

这个占用多大ROM

myqiang1990 发表于 2011-9-13 11:45:18

不知道对不对。。还请各位大大。。看看。。

20061002838 发表于 2011-9-13 12:20:08

#include "stdio.h"
#include "math.h"

#define CNT    180          //点数
#define MUL    1024         //倍数
#define SFT    520          //偏移      
#define PI   3.1415926535898          //圆周率


void main(void)
{
FILE *fp;
char str[] = {'0','x','0','0','0','0',',',0x20};

unsigned char i = 0;
unsigned char n;
unsigned short int m;
unsigned long ss = 0;

float j,k;

fp = fopen("sin.txt","r+");

for(i = 0; i < CNT; i++)
{
    j = sin(2*i*PI/CNT);
    k = j*MUL/2 + SFT;
    m = (unsigned int)k;
   
    str = (unsigned char)((m & 0xF000) >> 12);
    str = (unsigned char)((m & 0x0F00) >> 8);
    str = (unsigned char)((m & 0x00F0) >> 4);
    str = (unsigned char)((m & 0x000F) );
   
    printf("%d",str);
   
    for(n=2; n<6; n++)
      if(str<10)
      str += '0';
      else
      str += ('A'-10);
      fseek(fp, ss, SEEK_SET);       
      fwrite(str, 8, 1, fp);
      ss += 8;
      
}

fclose(fp);

}

刚刚下载了一个编译器运行了一下,没问题
注意要自己新建一个sin.txt的空文件,还有就是输出没有换行

huhandong 发表于 2011-9-13 15:29:45

我这里有个小软件,挺好用的,试试看
正弦波计算器ourdev_676233CYIJ1T.rar(文件大小:5K) (原文件名:正弦波计算器.rar)

gnail092 发表于 2011-9-15 20:44:43

回复【9楼】myqiang1990小松鼠
-----------------------------------------------------------------------

y=256*sin(x*ZQ/DOT*PI /180),这个公式怎么得出来的

aladiu 发表于 2012-1-13 09:38:14

我最近也在研究电机细分啊,看了一个礼拜,看不懂,

qinhya 发表于 2012-1-13 11:49:23

mark

yeksw206 发表于 2014-2-18 23:06:54

细分学习

zengan007 发表于 2016-5-26 13:58:14

大神,细分怎么弄哦?给点建议呗

weichao4808335 发表于 2016-5-26 15:58:31

用excel不就可以?
页: [1]
查看完整版本: 细分如何计算正余弦表