0xAA55 发表于 2018-11-24 22:15:54

【步进电机】一次失败的尝试:我想让步进电机在转动的时候不发出声音,不产生振动

步进电机,顾名思义,就是一步一步前进的电机。因为你可以控制它的步数,你的系统可以通过让它走特定的步数来预计它转动的位置。3D打印机里面有很多步进电机,它们可以较为准确地控制喷头的位置和底座的高度,或者底座的位置和喷头的高度等。

然而这种控制系统依然是一种开环系统。你用手掰一下喷头让它稍微偏离一下它正在打印的东西,你就看着它像模像样地吐屎了。因为控制器只知道自己控制了步进电机转几圈,却不知道步进电机是不是真的转了那么多圈,或者是不是处在正确的角度上。

不过这些都与我现在要说的主题无关。我要做的尝试是:我想通过PWM调制,来让步进电机能够较为平缓地从一步走到下一步。这样我可以以此实现振动抑制,或者降低噪声等。

我用的步进电机有两个,一个是我在AKIBA买到的PM050、2相6线的“大铁块”,另一个是28BYJ-48





其中这个28BYJ-48是带了一个附赠的ULN2003步进电机驱动板(其实这个ULN2003就是一个有8个基极和8个发射极的“8联三极管”)。而我买的PM050步进电机则没有送步进电机驱动板。于是我自己用4个S8050三极管,焊了一个。



其中5线的步进电机它是这样的:


(没错。红色是接地。你有意见吗?)

而6线的步进电机则是这样的:


(把两个接地接起来后,它们之间的差异也就是颜色不同罢了)

我的这两个电机都是2相电机,用一个最直观的图来描述就是这样的:



也就是只要按照顺序依次给它的4个电磁铁通电(实际不是这样的设计,但逻辑是这样的)转子就能转起来了。这也是步进电机名字的由来——它是一步步前进的。



然而每次你让它前进一步,整个步进电机都会抖动一下,咯噔一声。不管步进电机的静音设计怎么样,这个声音是少不了的。

尽管如此,依然存在一个叫“Microstepping”的黑科技。也就是微调每个“电磁铁”的电流大小,从而让步进电机能平缓前进。

用图像来描述的话,就是要想办法让它像下图的曲线一样进行。让转子平缓地从一个“电磁铁”转向另一个“电磁铁”。



然后这有两种方式实现。一种是DAC方式,平缓增加电流强度,弄出个这样的波形。另一种则是PWM方式——我控制的不是电流的强弱,而是电流的有无,以及持续的长短——如下图。



我可以把每个PWM周期的长度弄得很短,把频率弄得很高,然后再调整每个周期内的高电平长度。我用这种方式控制LED灯的时候,只要频率足够高,这LED灯看起来的明暗度就是可以被控制的。所以相同的道理是否可以被用到步进电机里面去呢?

其实经过我的尝试,并不成功。一方面,过短的脉冲其实并不能让转子稍微动一下——而脉冲到达一定阈值后转子就直接跳到了下一格,不会回来了——步进电机依然还是一步步走的。另一方面,我发现这样弄的话,步进电机的扭矩会变得更低,除非达到足够高的转速。

也就是说,最终的试验结果是——除了让步进电机转速更慢、力更弱以外,没有别的影响——噪音依然该有还得有,不仅如此,而且如果你的PWM频率不够高的话,你是能听到你的PWM发出的噪声的。等同于多加了个噪声。

不过这次尝试也并不完全失败——至少软件层面我做出了一个整数查表法的128个单位是一个周期的sin波形函数。源码可以放出来以后备用。const int sin_max = 65536;
const int sin_period = 128;

int sin_128(int x)
{
        const int quarter_sin =
        {
                0, 3215, 6423, 9616, 12785, 15923, 19024, 22078,
                25079, 28020, 30893, 33692, 36409, 39039, 41575, 44011,
                46340, 48558, 50660, 52639, 54491, 56212, 57797, 59243,
                60547, 61705, 62714, 63571, 64276, 64826, 65220, 65457,
                65536
        };
        x %= 128;
        if(x < 33) return quarter_sin;
        if(x < 64) return quarter_sin;
        return -sin_128(x - 64);
}

int cos_128(int x)
{
        return sin_128(x + 32);
}
页: [1]
查看完整版本: 【步进电机】一次失败的尝试:我想让步进电机在转动的时候不发出声音,不产生振动