骑马看驴跑 发表于 2013-10-12 20:11

回复 20楼huo_hu 的帖子

那么版主,变速最好是改变细分的脉冲宽度,还是通过快走细分表改变单步时间呢?
看网上别的大牛说pmw脉冲频率最好17.57KHZ。

huo_hu 发表于 2013-10-12 21:03

回复 21楼骑马看驴跑 的帖子

不太清楚你的工作模式.
1:你说的脉冲宽度就是pwm周期吧,细分值和pwm频率乘积就是时钟频率,细分值定了周期就定了如何快走呢?
2:pwm频率是有一个最佳范围这个和你的H桥的驱动参数有关系,不可一概而论.

huo_hu 发表于 2013-10-12 21:23

回复 21楼骑马看驴跑 的帖子

3:细分的脉冲宽度又指的是什么?

骑马看驴跑 发表于 2013-10-12 21:53

回复 23楼huo_hu 的帖子

细分的脉冲宽度就是指pwm的周期,我们细分不是把1分成很多份,版主图里分了16份。
细分表定了,但是我们可以从第1个细分直接走到第1+x个细分,不过这样占空比得相应的乘个积数把。
另外细分值是通过积分得到的,还是直接去中间值去SIN呢(我想细分足够的话和积分算出来的应该区别不大把),电脑没装matlab,打不开版主附件查看:Sweat:

huo_hu 发表于 2013-10-12 22:12

回复 24楼骑马看驴跑 的帖子

从第1个细分直接走到第1+x个细分,占空比得相应的乘个积数....
这个算法是没有依据的,你乘不出来也加不出来.

积分得到?怎么积分啊?中间值?

我晕...

骑马看驴跑 发表于 2013-10-12 22:24

回复 25楼huo_hu 的帖子

可能是我思路错误,对细分表的数值怎么来的还是模糊的很啊。。。:Sweat:

骑马看驴跑 发表于 2013-10-13 23:02

想一天没想明白,占空比为什么要用平行的直线和sin曲线相交得到。
我的想法:2相电机力矩是两个成直角的力合成,让力矩不变那必定一个sin,一个cos,把一个象限细分,那两个力的变化曲线也是sin和cos,电流和力正比关系,占空比和电流正比,那占空比也是sin曲线。。。取细分表相当于等间距取sin值:funk:
忘解惑。

huo_hu 发表于 2013-10-14 09:25

回复 27楼骑马看驴跑 的帖子

我Q:476995086

ethan0ly 发表于 2013-10-26 11:07

好给力的资料 感谢版主分享,

larry.wong 发表于 2013-11-4 13:03

真正懂了,才能说明白。支持!

GZSAM 发表于 2013-11-20 13:52

kankan

冬_天 发表于 2013-11-20 17:20

必须学习,可以去面试了

ison 发表于 2013-11-21 20:34

太贵了,没钱啊

huo_hu 发表于 2013-11-22 10:31

回复 33楼ison 的帖子

clear
syms s_M s_N s_Mov s_Num s_Saw_Ampl
s_M=32768/65536 %正弦波幅值比0~1
s_N=16   %半周期三角波个数
s_Mov=pi/s_N/2   %正弦波形后移
s_Num=34   %多计算n个周期总共的周期
s_Saw_Ampl   %三角波幅值,此数值影响画图质量
global g_K          %计算常量
global g_spwm
format long
g_spwm=1:(s_Num)*2      %
g_K=s_N/pi%斜率
s_Saw_Ampl=10000

for tmp=1:(s_Num)
      g_spwm(2*tmp-1)=(tmp-1)*pi/s_N;
      g_spwm(2*tmp)=Cal_Intersection(); %参数:M值,K,斜线与y交点,正弦平移
end
tmp=pi/s_N;
TimerSet=Width();


%求关点的t值,参数1:n (n=1,2,3,.....N)
%公式:M sin(t)=K*t-(2n-1)
%参数:M值,K,斜线与y交点,正弦平移
function [ output_args ] = Cal_Intersection( input_args )
    cmp=0;
    t=1;   
    while (abs(t-cmp)>0.0000000000001)
      cmp=t;
      t=(input_args(1)*abs(sin(cmp-input_args(4)))+input_args(3))/input_args(2);
    end
    output_args=t;
end



function [ output_args ] = Width( input_args )
global g_spwm;
    output_args=1:input_args(3)
    for i=1:input_args(3)
       sub=g_spwm(2*i)-g_spwm(2*i-1);
       output_args(i)=(sub*input_args(1)*input_args(2)/pi);
       %output_args(i)=round(output_args(i)*10)/10;
       output_args(i)=fix(output_args(i));
       %output_args(i)=vpa(output_args(i),6);
    end
end

图可以不画

diwanglebron 发表于 2013-12-3 14:27

y这是必须得顶的

cools1860 发表于 2013-12-3 22:34

回复 楼主huo_hu 的帖子

mark

bhuigoo 发表于 2013-12-5 09:36

记号

慢慢消化

hfutoyz 发表于 2013-12-23 12:39

学习了哈哈谢谢啦

书生也风流 发表于 2013-12-24 17:57

这个太难了!没学过电子专业!!!只能直接买一个步进电机驱动了!

cdzhangfan 发表于 2013-12-29 17:08

没看仔细就下了
页: 1 [2] 3 4 5 6 7 8 9 10 11
查看完整版本: spwm超级无敌stm32步进电机控制教程