找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3254|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

三軸步進(jìn)電機(jī)驅(qū)動程序(51單片機(jī)與STM32例程)供大家參考學(xué)習(xí)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:279752 發(fā)表于 2018-5-2 21:37 | 只看該作者 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
三個(gè)步進(jìn)電機(jī)同步運(yùn)行 直接可用

單片機(jī)源程序如下:
  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黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
程序.rar (5.33 MB, 下載次數(shù): 76)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:304456 發(fā)表于 2018-5-4 09:29 | 只看該作者
能告訴一下STM32例程的電機(jī)接線嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:53978 發(fā)表于 2020-4-16 21:22 | 只看該作者
萬分感謝!一直在找這種資料學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表