%% 1.步进电机PWM计算代码
clc
clear
close all
%% 原始值,A,T,UN
%2*A/MBJL必须是UN的倍数
A=25.40;%振幅*2,两倍振幅,即伸缩杆的移动范围
MBJL=0.0254;%每步距离,电机固定参数(与细分数有关)
T=2;%三角函数的周期,秒
T=T*1000*1000;%换算为微秒
SN=A/MBJL;%StepNumber,三角函数一个周期内的脉冲步数,振幅固定后SN即固定
TPSN=T/SN;%TimePerStep,每步的时长的平均值
UN=20;%UnitNumber,一个周期平均分割的单元总数
%函数
x=2*pi/SN:2*pi/SN:2*pi;%自变量
y=func(x,A);%函数
%%
NN=1:SN/UN:SN;%平均分割的脉冲坐标
NN(length(NN)+1)=SN;
x0=zeros(1,length(NN));
for i=1:length(NN)
x0(1,i)=x(NN(1,i));%平均分割的脉冲坐标对应的x坐标
end
y0=func(x0,A);%x坐标对应的位移
y01=y0(1:(length(NN)-1));
y02=y0(2:(length(NN)));
y00=y02-y01;
%求解
MCZS=abs(y00/0.0254);%一个单元内的脉冲总数
% MCZS=round(MCZS);
UnitTime=T/UN/1000/1000;%每个单元的时长/秒
MCPL=MCZS/UnitTime;%脉冲频率,Hz
MCPL=round(MCPL);
PJBC=(T/UN)./MCZS;%每单元的平均步长,微秒,脉冲总数需要四舍五入
PJBC=round(PJBC);
%结果
Result_UT=UnitTime;%每个单元的时长/秒
Result_PL=MCPL;%脉冲频率,Hz
%% 还原函数图
MCZS000=UnitTime*MCPL;%一个单元内的脉冲总数
MCZS000=round(MCZS000);
x1=MCZS000*MBJL;
x1(1:length(x1)/2)=-x1(1:length(x1)/2);
JLJL=zeros(1,UN);%积累距离,mm
for i=1:UN
JLJL(i)=sum(x1(1:i));
end
x2=MCZS.*PJBC;
JLSJ=zeros(1,UN);%积累时间,微秒
for i=1:UN
JLSJ(i)=sum(x2(1:i));
end
figure(3)
plot((1:SN)*TPSN,y,'b.-','markersize',5,'LineWidth',5)
hold on
plot(JLSJ,JLJL+abs(min(JLJL)),'r*-','markersize',10,'LineWidth',2)
xlabel('时间/微秒')
ylabel('位移/mm')
legend('理想时间位移函数','还原时间位移关系')
ZT=30;%字体30号
set(gca,'FontSize',ZT);
aaa=2;
set(gcf,'unit','centimeters','position',[2 2 16*aaa 9*aaa]);
set(gca,"FontName","宋体","FontSize",ZT,"LineWidth",2);
RaspberryCode_def(Result_PL,Result_UT);
【树莓派步进电机】5多线程篇(笔记)插值控制法资料
需积分: 5 111 浏览量
2023-09-07
10:47:20
上传
评论
收藏 5KB ZIP 举报
RickyWasYoung
- 粉丝: 2150
- 资源: 14
最新资源
- 基于SHT25温湿度传感器、FREERTOS、STM32F103C8T6、LCD1602温湿度采集显示系统proteus仿真设计
- C# 屏幕放大取色器 随时随地获取屏幕像素颜色
- 下载安装这个软件.apk
- 【数据集详细解释及案例分析】数据集详细解释及案例分析
- 基于SHT71温湿度传感器、STM32F103C8T6、LCD1602温湿度采集显示系统proteus仿真设计
- 基于TH02温湿度传感器、STM32F103C8T6、LCD1602、FREERTOS的温湿度采集系统proteus仿真设计
- 【TCP-IP协议详细解释及案例分析】TCP-IP协议详细解释及案例分析
- 一文搞懂 LSTM(长短期记忆网络).rar
- 【autosar简介及基本案例解析】autosar简介及基本案例解析
- java模拟斗地主洗牌发牌
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈