标题: stm32步进电机驱动代码 [打印本页]

作者: stm32_learn    时间: 2018-11-14 11:33
标题: stm32步进电机驱动代码
步进电机驱动

单片机源程序如下:
  1. #include "motor.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "math.h"

  5. #define PI 3.1415926

  6. double angle(double x,double y);
  7. double angle(double x,double y)
  8. {
  9.         double z,b;
  10.         int a,speed;
  11.         int i=0,n;
  12.         if(y<=40)
  13.                 z=asin(40/sqrt(40*40+150*150))-(40-y)/sqrt(((40-y)*(40-y))+150*150);
  14.         else
  15.                 z=asin(40/sqrt(40*40+150*150))+(y-40)/sqrt(((y-40)*(y-40))+150*150);
  16.                 b=z*180/PI;
  17.                 a=(int)(b/0.9);
  18.                 for(n=0;n<a;n++)
  19.                 {
  20.                         
  21.                         i=n%8;
  22.                         switch(i)
  23.                         {
  24.                                 case 0:  
  25.                                         AIN2_1=1;AIN2_2=0;BIN2_1=0;BIN2_2=0;//delay_us(6000);
  26.                                 break;
  27.                           case 1:   
  28.                                         AIN2_1=1;AIN2_2=0;BIN2_1=1;BIN2_2=0;//delay_us(6000);
  29.                                 break;
  30.                           case 2:
  31.                                         AIN2_1=0;AIN2_2=0;BIN2_1=1;BIN2_2=0;//delay_us(6000);
  32.                                 break;
  33.                           case 3:
  34.                                         AIN2_1=0;AIN2_2=1;BIN2_1=1;BIN2_2=0;//delay_us(6000);
  35.                                 break;
  36.                           case 4:
  37.                                         AIN2_1=0;AIN2_2=1;BIN2_1=0;BIN2_2=0;//delay_us(6000);
  38.                                 break;
  39.                           case 5:
  40.                             AIN2_1=0;AIN2_2=1;BIN2_1=0;BIN2_2=1;//delay_us(6000);
  41.                                 break;
  42.         case 6:
  43.                                         AIN2_1=0;AIN2_2=0;BIN2_1=0;BIN2_2=1;//delay_us(6000);
  44.                                 break;
  45.                           case 7:
  46.                                         AIN2_1=1;AIN2_2=0;BIN2_1=0;BIN2_2=1;//delay_us(6000);
  47.                                 break;
  48.                 }               
  49.         }
  50.         
  51.         //AIN2_1=1;AIN2_2=0;BIN2_1=1;BIN2_2=0;
  52.         return 0;
  53.                
  54. }
  55. void turny(double angley)
  56. {
  57.                 int a;//拍数
  58.           int n,i;
  59.           //b=z*180/PI;
  60.                 a=(int)(angley/0.9);
  61.                 for(n=0;n<a;n++)
  62.                 {
  63.                         //AIN2_1=1;AIN2_2=0;BIN2_1=0;BIN2_2=0;delay_us(9000);
  64.                         i=n%8;
  65.                         switch(i)
  66.                         {
  67.                                 case 0:  
  68.                                         AIN2_1=1;AIN2_2=0;BIN2_1=0;BIN2_2=0;delay_us(3000);break;
  69.                           case 1:   
  70.                                         AIN2_1=1;AIN2_2=0;BIN2_1=1;BIN2_2=0;delay_us(5000);break;
  71.                           case 2:
  72.                                         AIN2_1=0;AIN2_2=0;BIN2_1=1;BIN2_2=0;delay_us(3000); break;
  73.                           case 3:
  74.                                         AIN2_1=0;AIN2_2=1;BIN2_1=1;BIN2_2=0;delay_us(5000); break;
  75.                           case 4:
  76.                                         AIN2_1=0;AIN2_2=1;BIN2_1=0;BIN2_2=0;delay_us(3000);break;
  77.                           case 5:
  78.                             AIN2_1=0;AIN2_2=1;BIN2_1=0;BIN2_2=1;delay_us(5000);break;
  79.         case 6:
  80.                                         AIN2_1=0;AIN2_2=0;BIN2_1=0;BIN2_2=1;delay_us(3000);break;
  81.                           case 7:
  82.                                         AIN2_1=1;AIN2_2=0;BIN2_1=0;BIN2_2=1;delay_us(5000);break;
  83.                 }               
  84.         }
  85.                 //AIN2_1=1;AIN2_2=0;BIN2_1=1;BIN2_2=0;
  86. }        
  87. int main(void)
  88. {
  89.         //AIN2_1=1;AIN2_2=0;BIN2_1=1;BIN2_2=0;
  90.   Stm32_Clock_Init(9);
  91.   delay_init(72);
  92.         
  93.   TIM3_Init(24,7199);
  94. //        EXTI_Init();
  95.         //MOTOR_Init();
  96.         
  97.         //angle(40,10);
  98.         //AIN2_1=1;AIN2_2=0;BIN2_1=1;BIN2_2=0;
  99.         //RCC->APB2ENR |= 0x00000010;
  100.         /* 设置GPIOC的低8位为通用推挽输出 */
  101. // GPIOC->CRL |= 0x33333333;
  102.   /* 初始化为Io口 */
  103. // GPIOC->ODR |= 0xFF00;
  104.         //turny(90);
  105.         while(1)
  106.         {
  107.                
  108.                 /*if(TIM3->SR&0X0001)
  109.                 {
  110.                         ting();
  111.                         delay_ms(1000);
  112.                         GPIOC->BSRR=(u16)0XFFFD;
  113.                         GPIOC->BRR=(u16)0X0002;
  114.                         
  115.                
  116.                 }
  117.                 TIM3->SR&=~(1<<0);
  118.                 //GPIOC->BSRR=(u16)0XFFFe;
  119.                         //GPIOC->BRR=(u16)0X0001;*/
  120.         }

  121. }
复制代码

所有资料51hei提供下载:
步进电机.rar (116.46 KB, 下载次数: 75)



作者: zs5194613    时间: 2020-1-8 10:04
顶一个,感谢分享
作者: smartphone    时间: 2020-4-14 18:16
感谢分享!下载看看




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1