找回密码
 立即注册

QQ登录

只需一步,快速开始

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

三轴步进电机驱动程序(51单片机与STM32例程)供大家参考学习

[复制链接]
跳转到指定楼层
楼主
ID:279752 发表于 2018-5-2 21:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
三个步进电机同步运行 直接可用

单片机源程序如下:
  1. #include <REGX51.H>


  2. #define motor1                         1
  3. #define motor2                         2
  4. #define motor3                         3

  5. #define motor1_up         0
  6. #define motor1_down 1
  7. #define motor2_up          0
  8. #define motor2_down        1
  9. #define motor3_up                0
  10. #define motor3_down        1

  11. #define sub                                 16

  12. sbit pwm1 = P0^0;
  13. sbit pwm2 = P0^1;
  14. sbit pwm3 = P0^2;
  15. sbit dir1 = P0^3;
  16. sbit dir2 = P0^4;
  17. sbit dir3 = P0^5;
  18. sbit exti1 = P1^0;
  19. sbit exti2 = P1^1;
  20. sbit exti3 = P1^2;

  21. int motor1_pulse = 0;
  22. int motor2_pulse = 0;
  23. int motor3_pulse = 0;

  24. char motor1_cons = 0;
  25. char motor2_cons = 0;
  26. char motor3_cons = 0;

  27. void delay_ms(int i)  
  28. {
  29.   unsigned char a,b;
  30.         for(;i>0;i--)
  31.     for(b=102;b>0;b--)
  32.         for(a=3;a>0;a--);
  33. }

  34. void InitTimer0(void)
  35. {
  36.     TMOD = 0x01;
  37.     TH0 = 0x0FF;
  38.     TL0 = 0x48;
  39.     EA = 1;
  40.     ET0 = 1;
  41.     TR0 = 1;
  42. }

  43. void motor_control(char motor,char dir,int pulse)
  44. {
  45.         if(motor == motor1)
  46.         {
  47.                 if(dir == motor1_up)
  48.                 {
  49.                         dir1 = motor1_up;
  50.                 }
  51.                 else
  52.                 {
  53.                         dir1 = motor1_down;
  54.                 }
  55.                 motor1_cons = 0;
  56.                 motor1_pulse += (pulse * sub *2);
  57.         }
  58.         if(motor ==motor2)
  59.         {
  60.                 if(dir == motor2_up)
  61.                 {
  62.                         dir2 = motor2_up;
  63.                 }
  64.                 else
  65.                 {
  66.                         dir2 = motor2_down;
  67.                 }
  68.                 motor2_cons = 0;
  69.                 motor2_pulse += (pulse * sub * 2);       
  70.         }
  71.         if(motor ==motor3)
  72.         {
  73.                 if(dir == motor3_up)
  74.                 {
  75.                         dir3 = motor3_up;
  76.                 }
  77.                 else
  78.                 {
  79.                         dir3 = motor3_down;
  80.                 }
  81.                 motor3_cons = 0;
  82.                 motor3_pulse += (pulse * sub *2);       
  83.         }
  84. }

  85. void motor_init(void)
  86. {
  87.         while((!exti1) | (!exti2)| (!exti3))
  88.         {
  89.                 if(!exti1)
  90.                 {
  91.                         motor_control(motor1,motor1_down,5);
  92.                 }
  93.                 if(!exti2)
  94.                 {
  95.                         motor_control(motor2,motor2_down,5);
  96.                 }
  97.                 if(!exti3)
  98.                 {
  99.                         motor_control(motor3,motor3_down,5);
  100.                 }
  101.                 while((!motor1_cons) | (!motor2_cons)| (!motor3_cons));
  102.         }
  103. }
  104. void main(void)
  105. {
  106.         InitTimer0();
  107.         motor_init();
  108.        
  109.         motor_control(motor1,motor1_up,200);
  110.         motor_control(motor2,motor2_up,200);
  111.         motor_control(motor3,motor3_up,200);
  112.        
  113.         while((!motor1_cons) | (!motor2_cons)| (!motor3_cons));
  114.         delay_ms(1000);
  115.        
  116.         while(1);
  117. }
  118. void Timer1_isr(void) interrupt 1 using 1
  119. {
  120.         if(motor1_pulse > 0)
  121.         {
  122.                 motor1_pulse--;
  123.                 pwm1 = !pwm1;
  124.         }
  125.         else
  126.         {
  127.                 motor1_cons = 1;
  128.         }
  129.         if(motor2_pulse > 0)
  130.         {
  131. ……………………

  132. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
程序.rar (5.33 MB, 下载次数: 74)


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

使用道具 举报

沙发
ID:304456 发表于 2018-5-4 09:29 | 只看该作者
能告诉一下STM32例程的电机接线吗?
回复

使用道具 举报

板凳
ID:53978 发表于 2020-4-16 21:22 | 只看该作者
万分感谢!一直在找这种资料学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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