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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3591|回復: 0
打印 上一主題 下一主題
收起左側

Arduino多軸步進電機聯動進行直線圓弧插補 源程序

[復制鏈接]
跳轉到指定樓層
樓主
電機驅動兼容市面上大多數脈沖控制器。

這個程序的初衷是用來學習3d打印機的運動原理,理論上可以實現n軸聯動,通過bresenham實現直線插補再采用直線來逼近圓弧,
更多細節大家可以自行百度科普,程序主要思路如下,通過定時器1來實現步進電機發送脈沖,主程序實現緩沖區寫入,這樣后臺的電機可以不間斷運動,且少量阻塞主程序。速度控制可以通過改變定時器頻率,目前程序中未實現。

實驗結論:

bresenham對于小內存芯片非常友好,但會造成步進脈沖不均勻,還有一個辦法就是求脈沖的最小被公倍數然后進行時間的插補。

向其他芯片移植只需更改io操作命令即可->

  1. #ifndef _BUFFER_HPP_
  2. #define _BUFFER_HPP_

  3. #include <Arduino.h>
  4. #include "motor.hpp"

  5. #define BLOCK_BUFFER_SIZE 18
  6. #define N_ARC_CORRECTION 25
  7. #define MM_PER_ARC_SEGMENT 2

  8. #define N_AXIS 4
  9. #define E_AXIS 1

  10. #define X_AXIS 0
  11. #define Y_AXIS 1
  12. #define Z_AXIS 2
  13. #define E0_AXIS 3

  14. typedef struct
  15. {

  16.     unsigned long step_event_count; //完成這個block所需走的步數,steps_x, steps_y, steps_z, steps_e的最大值

  17.     long accelerate_until; //梯形曲線中的加速距離,單位steps

  18.     long decelerate_after; //加速和勻速的距離,單位steps

  19.     long acceleration_rate; //加速率,用來計算加速度

  20.     long steps[N_AXIS];     //每個坐標軸所需走的步數
  21.     bool motor_dir[N_AXIS]; //這個block的方向位,“1”反向,“0”正向,每一個位代表一個軸的方向

  22.     unsigned char active_extruder; //所用到的有效的擠出頭

  23.     float nominal_speed; //額定速度,即梯形曲線的勻速階段的速度

  24.     float entry_speed; //進入速度,即從上一個block進入到這個block的速度

  25.     float max_entry_speed; //最大進入速度,進入速度不能超過這個值

  26.     float millimeters; //總路程,單位mm

  27.     float acceleration; //加速度,單位mm/sec^2

  28.     unsigned char recalculate_flag; //連接處重新計算梯形速度曲線的標志

  29.     unsigned char nominal_length_flag; //能達到額定速度的標志

  30.     // Settings for the trapezoid generator梯形速度曲線產生器的設置參數

  31.     unsigned long nominal_rate; //這個block的單位為steps/sec的額定速度

  32.     unsigned long initial_rate; //梯形曲線的初始速度/進入速度,單位steps/sec

  33.     unsigned long final_rate; //梯形曲線的退出速度,單位steps/sec

  34.     unsigned long acceleration_st; //單位為steps/sec^2的加速度

  35.     unsigned long fan_speed; //風扇速度

  36.     //volatile char busy;//正在處理這個block的標志位,“1”表示正在執行這個block

  37. } block_t;

  38. uint8_t plan_next_block_index(uint8_t block_index);
  39. uint8_t plan_check_full_buffer();
  40. bool plan_can_read();
  41. void plan_reset();
  42. void plan_write_block(double *target, long fan_speed);
  43. void plan_read_block();

  44. #endif
復制代碼
  1. #include "main.hpp"

  2. void setup()
  3. {
  4.   Serial.begin(115200);
  5.   motor_init_x_pin();
  6.   motor_init_y_pin();
  7.   motor_init_z_pin();
  8.   motor_init_e0_pin();

  9.   MOTOR_X_ENABLE;
  10.   MOTOR_Y_ENABLE;
  11.   MOTOR_Z_ENABLE;
  12.   MOTOR_E0_ENABLE;
  13.   plan_reset();

  14. timer_init();
  15. double step1[4]={ 100.0,  20.0,  50.0,  100.0, };//XYZE絕對坐標
  16. mc_line(step1,200);
  17. double positionc[4]={30, 0,  0,  0};   //圓弧起點坐標
  18. double tragetc[4]=  {0,  30, 0,  400}; //圓弧終點坐標
  19. double offsetc[3]=  {-30, 0, 0};       //圓心距離起點向量

  20. mc_arc(positionc,  tragetc,     offsetc, X_AXIS,Y_AXIS,Z_AXIS, 10, 30,true,E0_AXIS);
  21. //起點對應指針,終點對應指針,約等于半徑,進給速率,半徑,正逆插補,擠出機擠出量



  22. }


  23. void loop()
  24. {
  25.   // put your main code here, to run repeatedly:
  26. }
復制代碼

代碼下載:
2021_6_18 stepmotor_control.zip (677.86 KB, 下載次數: 56)



評分

參與人數 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级毛片视频免费观看 | 日韩三级在线 | 91视频国产精品 | 91正在播放 | 日日干日日射 | 久草新在线 | 日韩在线日韩 | 国产真实精品久久二三区 | 天堂在线www| 国产精品夜间视频香蕉 | 2021天天干夜夜爽 | 久久久久久久国产精品影院 | 国产精品成人在线播放 | 亚洲国产中文在线 | 久久久久91| 一区二区三区精品视频 | 91免费高清视频 | 日韩精品一区二区三区视频播放 | 福利一区视频 | 激情婷婷成人 | 久久日韩精品一区二区三区 | 国产一级免费在线观看 | 亚洲电影一区二区三区 | 国产免费观看视频 | 一二三在线视频 | 在线国产中文字幕 | 日韩免费在线视频 | 亚洲天堂影院 | 久久在线看 | 中文字幕免费在线 | 国产精品亚洲精品 | 亚洲人人 | 久久最新 | 欧美一区二区在线看 | 日本一区二区在线视频 | 丁香久久 | 久久国产精品精品国产色婷婷 | 欧美8一10sex性hd | 国色天香综合网 | 99精品国产一区二区青青牛奶 | 久久九七 |