久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
Arduino多軸步進電機聯動進行直線圓弧插補 源程序
[打印本頁]
作者:
fbn20050523
時間:
2022-4-28 23:45
標題:
Arduino多軸步進電機聯動進行直線圓弧插補 源程序
電機驅動兼容市面上大多數脈沖控制器。
這個程序的初衷是用來學習3d打印機的運動原理,理論上可以實現n軸聯動,通過bresenham實現直線插補再采用直線來逼近圓弧,
更多細節大家可以自行百度科普,程序主要思路如下,通過定時器1來實現步進電機發送脈沖,主程序實現緩沖區寫入,這樣后臺的電機可以不間斷運動,且少量阻塞主程序。速度控制可以通過改變定時器頻率,目前程序中未實現。
實驗結論:
bresenham對于小內存芯片非常友好,但會造成步進脈沖不均勻,還有一個辦法就是求脈沖的最小被公倍數然后進行時間的插補。
向其他芯片移植只需更改io操作命令即可->
#ifndef _BUFFER_HPP_
#define _BUFFER_HPP_
#include <Arduino.h>
#include "motor.hpp"
#define BLOCK_BUFFER_SIZE 18
#define N_ARC_CORRECTION 25
#define MM_PER_ARC_SEGMENT 2
#define N_AXIS 4
#define E_AXIS 1
#define X_AXIS 0
#define Y_AXIS 1
#define Z_AXIS 2
#define E0_AXIS 3
typedef struct
{
unsigned long step_event_count; //完成這個block所需走的步數,steps_x, steps_y, steps_z, steps_e的最大值
long accelerate_until; //梯形曲線中的加速距離,單位steps
long decelerate_after; //加速和勻速的距離,單位steps
long acceleration_rate; //加速率,用來計算加速度
long steps[N_AXIS]; //每個坐標軸所需走的步數
bool motor_dir[N_AXIS]; //這個block的方向位,“1”反向,“0”正向,每一個位代表一個軸的方向
unsigned char active_extruder; //所用到的有效的擠出頭
float nominal_speed; //額定速度,即梯形曲線的勻速階段的速度
float entry_speed; //進入速度,即從上一個block進入到這個block的速度
float max_entry_speed; //最大進入速度,進入速度不能超過這個值
float millimeters; //總路程,單位mm
float acceleration; //加速度,單位mm/sec^2
unsigned char recalculate_flag; //連接處重新計算梯形速度曲線的標志
unsigned char nominal_length_flag; //能達到額定速度的標志
// Settings for the trapezoid generator梯形速度曲線產生器的設置參數
unsigned long nominal_rate; //這個block的單位為steps/sec的額定速度
unsigned long initial_rate; //梯形曲線的初始速度/進入速度,單位steps/sec
unsigned long final_rate; //梯形曲線的退出速度,單位steps/sec
unsigned long acceleration_st; //單位為steps/sec^2的加速度
unsigned long fan_speed; //風扇速度
//volatile char busy;//正在處理這個block的標志位,“1”表示正在執行這個block
} block_t;
uint8_t plan_next_block_index(uint8_t block_index);
uint8_t plan_check_full_buffer();
bool plan_can_read();
void plan_reset();
void plan_write_block(double *target, long fan_speed);
void plan_read_block();
#endif
復制代碼
#include "main.hpp"
void setup()
{
Serial.begin(115200);
motor_init_x_pin();
motor_init_y_pin();
motor_init_z_pin();
motor_init_e0_pin();
MOTOR_X_ENABLE;
MOTOR_Y_ENABLE;
MOTOR_Z_ENABLE;
MOTOR_E0_ENABLE;
plan_reset();
timer_init();
double step1[4]={ 100.0, 20.0, 50.0, 100.0, };//XYZE絕對坐標
mc_line(step1,200);
double positionc[4]={30, 0, 0, 0}; //圓弧起點坐標
double tragetc[4]= {0, 30, 0, 400}; //圓弧終點坐標
double offsetc[3]= {-30, 0, 0}; //圓心距離起點向量
mc_arc(positionc, tragetc, offsetc, X_AXIS,Y_AXIS,Z_AXIS, 10, 30,true,E0_AXIS);
//起點對應指針,終點對應指針,約等于半徑,進給速率,半徑,正逆插補,擠出機擠出量
}
void loop()
{
// put your main code here, to run repeatedly:
}
復制代碼
文件結構.JPG
(38.24 KB, 下載次數: 66)
下載附件
2022-4-29 00:04 上傳
代碼下載:
2021_6_18 stepmotor_control.zip
(677.86 KB, 下載次數: 56)
2022-4-28 23:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品综合视频
|
久久无毛
|
日韩精品 电影一区 亚洲
|
国产这里只有精品
|
精品视频在线观看
|
日本精品一区二区三区视频
|
国产成人久久av免费高清密臂
|
一本色道精品久久一区二区三区
|
中文字幕一级
|
中文字幕 亚洲一区
|
狠狠操婷婷
|
成人精品鲁一区一区二区
|
久久艹免费视频
|
国产精品视频一二三区
|
国产乱一区二区三区视频
|
亚洲欧美日本在线
|
91精品在线播放
|
国产精品久久久久国产a级 欧美日韩国产免费
|
7777奇米影视
|
一区二区三区国产好
|
亚洲精品一区久久久久久
|
亚洲成人一级
|
欧美成人一区二免费视频软件
|
亚洲综合在线播放
|
亚洲一区不卡在线
|
国产精品美女久久久久aⅴ国产馆
|
五月天婷婷综合
|
午夜精品一区二区三区在线视频
|
国产色网
|
日本a视频
|
国产91视频播放
|
一区二区视屏
|
欧美日韩三级在线观看
|
羞羞视频在线观看
|
国产激情一区二区三区
|
亚洲视频一区在线播放
|
欧美黄色精品
|
久久亚洲一区
|
日韩在线观看
|
免费v片在线观看
|
日韩电影一区
|