资源描述:
《步进电机_插补算法stm32》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include"stm32f10x.h"#include"delay.h"#include"misc.h"#include#include"stm32f10x_tim.h"#include"stm32f10x_rcc.h"#include"stm32f10x_usart.h"#includevoidRCC_Configuration(void);voidGPIO_Configuration(void);voidNVIC_Configuration(void);voidTIM_Configuration(void);v
2、oidUSART_Configuration(void);intfputc(intch,FILE*f);intfgetc(FILE*f);floatMx=1.44f,My=2.88f;//起点floatNx=10.0f,Ny=7.61f;//终点floatX1,Y1;floatX2,Y2;floatX3,Y3;//三种方法走后的坐标floatk;//斜率floatb;//y=kx+bfloatX,Y;//实际运行的坐标floatDelta1,Delta2,Delta3,Delta4;//三种方法的误差,4为不走最后一步的误差floatDelta;//实
3、际误差//floatDeltaMax;//最大误差charway;//选择的走法inta;//TIM6中断次数intnum=0;//总步数inttx=1,ty=1;//用来判断中断是否发生intnumx,numy;//计XY的步数intcounter=0;//计数值floattime;//时间floatnxd,nyd;//开始减速坐标floatnx,ny;//nx=Nx-0.0144f;floatfenmu;//公式中分母//intfrex[20]={2,10,30,60,100,150,220,300,390,500};//intfrey[20]={
4、2,10,30,60,100,150,220,300,390,500};intfrex[20]={1098,2931,7585,18242,37754,62245,81757,92414,97068,98901};intfrey[20]={1098,2931,7585,18242,37754,62245,81757,92414,97068,98901};intprex[20]={0};intprey[20]={0};intmain(void){inti,j;intnpwm=10;//加减速每段脉冲数//算出预分频值for(i=0;i<10;i++){p
5、rex[i]=72000000/(frex[i]*200);prey[i]=72000000/(frey[i]*200);}//配置,初始化RCC_Configuration();GPIO_Configuration();USART_Configuration();TIM_Configuration();NVIC_Configuration();Delay_Init();TIM_Cmd(TIM2,ENABLE);//catchXYTIM_Cmd(TIM6,ENABLE);//计时//TIM_SetCounter(TIM6,0);//开始运行{//计算相
6、关量X=Mx;Y=My;k=(Ny-My)/(Nx-Mx);b=My-k*Mx;//y=kx+bnxd=Nx-90*0.0144f;nyd=Ny-90*0.0144f;nx=Nx-0.0144f;ny=Ny-0.0144f;fenmu=sqrt(k*k+1);for(i=1;i<10;i++)//加速阶段,分10段{while(j7、2-Y2+b)/fenmu;Delta3=fabs(k*X3-Y3+b)/fenmu;//三种走法的误差//选择最小误差走法if(Delta18、+0.0144f;TIM_Cmd(TIM4,ENABLE);while(ty);ty=1;br