久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2362|回復: 3
收起左側

單片機步進電機的驅動程序模板可控制精度,有接口的調用方法

[復制鏈接]
ID:412460 發(fā)表于 2021-1-27 11:10 | 顯示全部樓層 |閱讀模式
初始化:
stepper_motor_init(stepper_motor_a_ptr);
stepper_motor_init(stepper_motor_b_ptr);

定時器需要放置的函數(shù): 定時器暫用1ms,可根據(jù)應用修改
stepper_motor_timer(stepper_motor_a_ptr);
stepper_motor_timer(stepper_motor_b_ptr);
旋轉配置:
stepper_motor_mode_set(stepper_motor_a_ptr,STEPPER_MOTOR_F,512,STEPPER_MOTOR_A_SPEED);  //Motor A順時針轉一圈
stepper_motor_mode_set(stepper_motor_b_ptr,STEPPER_MOTOR_R,512,STEPPER_MOTOR_B_SPEED);  //Motor B逆時針轉一圈
stepper_motor_mode_set 參數(shù)說明:
1、結構體指針
2、旋轉方向
   STEPPER_MOTOR_F  順時針
   STEPPER_MOTOR_R  逆時針
   STEPPER_MOTOR_STOP  停止
3、旋轉角度  (實際轉動角度 = angle * 5.625 / 8)
4、旋轉速度  1 最快,數(shù)值越大,速度越慢

單片機源程序如下:
  1. /*
  2. * @Descripttion:
  3. * @version:
  4. * @Author: linsuwei
  5. * @Date: 2020-10-27 10:39:36
  6. * @LastEditors: linsuwei
  7. * @LastEditTime: 2020-10-29 11:43:50
  8. */

  9. #include "stepper_motor.h"

  10. static u8 get_Offset(STEPPER_MOTOR_PTR stepmo_ptr);


  11. u32 a_motor_a_io[] = {
  12.     STEPPER_MOTOR_A_IO_0,
  13.     STEPPER_MOTOR_A_IO_1,
  14.     STEPPER_MOTOR_A_IO_2,
  15.     STEPPER_MOTOR_A_IO_3,
  16. };

  17. u32 a_motor_b_io[] = {
  18.     STEPPER_MOTOR_B_IO_0,
  19.     STEPPER_MOTOR_B_IO_1,
  20.     STEPPER_MOTOR_B_IO_2,
  21.     STEPPER_MOTOR_B_IO_3,
  22. };


  23. #define __IO_L    0
  24. #define __IO_F    1

  25. u8 stepper_timing_tab[] = {
  26.     __IO_L,__IO_F,__IO_F,__IO_F,    //pulse 1
  27.     __IO_L,__IO_L,__IO_F,__IO_F,    //pulse 2
  28.     __IO_F,__IO_L,__IO_F,__IO_F,    //...
  29.     __IO_F,__IO_L,__IO_L,__IO_F,
  30.     __IO_F,__IO_F,__IO_L,__IO_F,
  31.     __IO_F,__IO_F,__IO_L,__IO_L,
  32.     __IO_F,__IO_F,__IO_F,__IO_L,
  33.     __IO_L,__IO_F,__IO_F,__IO_L,
  34. };


  35. STEPPER_MOTOR_S stepper_motor_a = {
  36.     .mode = STEPPER_MOTOR_STOP,
  37.     .pulse = 0,
  38.     .speed = 1,
  39.     .max_step = 0,
  40.     .step = 0,
  41.     .timing_tab_ptr = &stepper_timing_tab[0],
  42.     .io_tab_ptr = &a_motor_a_io[0],
  43. };

  44. STEPPER_MOTOR_S stepper_motor_b = {
  45.     .mode = STEPPER_MOTOR_STOP,
  46.     .pulse = 0,
  47.     .speed = 1,
  48.     .max_step = 0,
  49.     .step = 0,
  50.     .timing_tab_ptr = &stepper_timing_tab[0],
  51.     .io_tab_ptr = &a_motor_b_io[0],
  52. };

  53. STEPPER_MOTOR_PTR stepper_motor_a_ptr = &stepper_motor_a;
  54. STEPPER_MOTOR_PTR stepper_motor_b_ptr = &stepper_motor_b;


  55. static u8 get_Offset(STEPPER_MOTOR_PTR stepmo_ptr)
  56. {
  57.     if(NULL == stepmo_ptr)
  58.         return 0;
  59.     if(STEPPER_MOTOR_F == stepmo_ptr->mode)
  60.         return stepmo_ptr->step;
  61.     else if(STEPPER_MOTOR_R == stepmo_ptr->mode)
  62.         return (7 - stepmo_ptr->step);
  63.     else
  64.         return stepmo_ptr->step;
  65. }


  66. void stepper_motor_stop(STEPPER_MOTOR_PTR stepmo_ptr)
  67. {
  68.     if(NULL == stepmo_ptr)
  69.         return;
  70.     for (u8 i = 0; i < 4; i++)
  71.     {
  72.         gpio_direction_input(stepmo_ptr->io_tab_ptr[i]);
  73.     }
  74.     stepmo_ptr->mode = STEPPER_MOTOR_STOP;
  75. }



  76. void stepper_motor_init(STEPPER_MOTOR_PTR stepmo_ptr)
  77. {
  78.     if(NULL == stepmo_ptr)
  79.         return;
  80.     stepmo_ptr->mode = STEPPER_MOTOR_STOP;
  81.     stepmo_ptr->step = 0;
  82.     stepmo_ptr->max_step = 0;
  83.     stepmo_ptr->pulse = 0;
  84.     stepmo_ptr->speed = 1;
  85.     stepmo_ptr->timing_tab_ptr = &stepper_timing_tab[0],
  86.     stepper_motor_stop(stepmo_ptr);
  87. }

  88. //減速比 64
  89. // Precision = 360 /((360/5.625)*64) = 5.625/64  控制精度
  90. // 實際轉動角度 = (angle *8) * Precision = angle * 5.625 / 8

  91. void stepper_motor_mode_set(STEPPER_MOTOR_PTR stepmo_ptr, u8 mode, u16 angle ,u8 speed)
  92. {
  93.     if(NULL == stepmo_ptr)
  94.         return;
  95.     stepmo_ptr->mode = mode;
  96.     stepmo_ptr->speed = speed;
  97.     stepmo_ptr->max_step = angle * 8;   // 這里將精度放大 8倍,方便計算
  98.     if(STEPPER_MOTOR_STOP == mode)
  99.     {
  100.         stepper_motor_stop(stepmo_ptr);
  101.     }
  102. }



  103. void stepper_motor_timer(STEPPER_MOTOR_PTR stepmo_ptr)
  104. {
  105.     static u8 cnt = 0;
  106.     if(NULL == stepmo_ptr)
  107.         return;
  108.     if (STEPPER_MOTOR_STOP == stepmo_ptr->mode)
  109.     {
  110.         // stepper_motor_stop(stepmo_ptr);
  111.         return;
  112.     }
  113.     else
  114.     {
  115.         if (++cnt >= stepmo_ptr->speed)
  116.         {
  117.             cnt = 0;

  118.             if (stepmo_ptr->max_step > 0)
  119.             {
  120.                 if (++stepmo_ptr->pulse > stepmo_ptr->max_step)
  121.                 {
  122.                     stepmo_ptr->pulse = 0;
  123.                     stepmo_ptr->mode = STEPPER_MOTOR_STOP;
  124.                     stepper_motor_stop(stepmo_ptr);
  125.                     return;
  126.                 }
  127.             }
  128.             for (u8 i = 0; i < 4; i++)
  129.             {
  130.                 if (__IO_L == stepmo_ptr->timing_tab_ptr[get_Offset(stepmo_ptr) * 4 + i])
  131.                 {
  132.                     gpio_direction_output(stepmo_ptr->io_tab_ptr[i], 1);
  133.                 }
  134.                 else
  135.                 {
  136.                     gpio_direction_output(stepmo_ptr->io_tab_ptr[i], 0);
  137.                 }
  138.             }
  139.             stepmo_ptr->step = (++stepmo_ptr->step) & (8 - 1); //+1然后對8取余
  140.         }
  141.     }
  142. }
復制代碼
51hei.png
所有資料51hei提供下載:
步進電機驅動程序.zip (2.41 KB, 下載次數(shù): 23)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:328014 發(fā)表于 2021-1-27 18:18 | 顯示全部樓層
這個程序真牛,能分享一下電路圖嗎?幾相的電機,貌似還有位置反饋?
回復

使用道具 舉報

ID:412460 發(fā)表于 2021-1-28 17:00 | 顯示全部樓層
是5線的步進電機,沒有位置反饋的,應用比較簡單,只需要知道大概轉動的角度!

11.pdf

136.04 KB, 下載次數(shù): 12, 下載積分: 黑幣 -5

補充一個原理圖

回復

使用道具 舉報

ID:869417 發(fā)表于 2021-1-29 08:59 | 顯示全部樓層
正想做個分角器,正在考慮角度細分和精確度的問題,學習了。
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄视频网址 | 欧美性高潮 | 国精日本亚洲欧州国产中文久久 | 激情一区二区三区 | 亚洲国产精品激情在线观看 | 国产日韩精品一区二区三区 | 久久久999国产精品 中文字幕在线精品 | 四虎影 | 欧美日韩亚洲三区 | 国产美女自拍视频 | 久久人体 | 国产999精品久久久久久绿帽 | 久久久蜜桃| 国产一区二区精品在线观看 | 中文字幕不卡在线观看 | 在线成人一区 | 国产一区二区三区免费观看视频 | 亚洲精品国产a久久久久久 午夜影院网站 | 久久久久国产一区二区三区四区 | 亚洲人成人一区二区在线观看 | 99国产视频 | 国产精品美女久久久久久免费 | 久久精品亚洲精品国产欧美 | 午夜精品 | 久热免费在线 | 久久久蜜臀国产一区二区 | 日韩最新网站 | 日韩精品区 | 欧美精品网站 | 欧美精品乱码久久久久久按摩 | 精品成人一区 | 国产美女视频 | 欧美大片一区二区 | 男女在线网站 | 久久久国产一区二区三区 | 欧美国产一区二区 | 在线观看国产三级 | 欧美午夜一区 | 国产9 9在线 | 中文 | 黄色av免费 | 日韩欧美一区二区三区 |