找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3007|回复: 2
打印 上一主题 下一主题
收起左侧

stm32步进电机驱动代码

[复制链接]
跳转到指定楼层
楼主
ID:424881 发表于 2018-11-14 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
步进电机驱动

单片机源程序如下:
  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, 下载次数: 74)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:143692 发表于 2020-1-8 10:04 | 只看该作者
顶一个,感谢分享
回复

使用道具 举报

板凳
ID:53978 发表于 2020-4-14 18:16 来自手机 | 只看该作者
感谢分享!下载看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表