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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3706|回復: 0
收起左側

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

[復制鏈接]
ID:276685 發表于 2022-4-28 23:45 | 顯示全部樓層 |閱讀模式
電機驅動兼容市面上大多數脈沖控制器。

這個程序的初衷是用來學習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. }
復制代碼
文件結構.JPG
代碼下載:
2021_6_18 stepmotor_control.zip (677.86 KB, 下載次數: 56)



評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品一区二区三区四区 | 欧美精品一区二区三区蜜桃视频 | 亚洲欧美在线观看 | 成人妇女免费播放久久久 | 免费视频一区二区 | 国产成人精品久久二区二区 | 99综合| 国产精品极品美女在线观看免费 | 一区二区播放 | 国产成人福利在线观看 | 欧美激情在线观看一区二区三区 | 91精品国产91久久久久久三级 | 伊伊综合网 | 性视频一区| 在线免费91| 中文字幕在线一区 | 成人欧美一区二区三区黑人孕妇 | 一级黄色在线 | 毛片a级| 五月婷婷视频 | 亚洲国产成人久久综合一区,久久久国产99 | 国产中文字幕在线观看 | 国产精品欧美一区二区三区不卡 | 黄色在线免费观看 | 国产在线观看一区二区三区 | 99精品福利视频 | 国产精品久久久久9999鸭 | 日韩av成人 | 国产一区二区在线91 | 国产精品福利在线 | 久久伊人一区二区 | 欧美精品三区 | 91视频免费视频 | 婷婷中文字幕 | 97视频久久 | 超碰97人人人人人蜜桃 | 日韩免费福利视频 | 成人一级黄色毛片 | 中文字幕亚洲区 | 国产精品视频专区 | 四虎最新视频 |