【转载】adult道具项目开发 - 模式
0赞这个道具需要有几个模式,现在处于demo阶段,暂时想到4个模式:全深度抽插,半深度抽插,九浅一深,三长两短,
模式要如何实现呢。手机APP通过蓝牙来设置控制器的模式,控制器会解析这个模式的具体含义,将其翻译成步进电机的运动模式。
在我们这个道具中,步进电机上套有丝杆,单程全深度是8cm,步进电机转1圈丝杠前进8mm,完成整个单程需要10圈。
步进电机驱动器的细分数设置成2,所选的步进电机每收到1个脉冲转1.8度,360度需要200个脉冲,加上细分数为2,步进电机需要400个脉冲才能转1圈。
所以完成一个单程需要4000个脉冲。如果我们规定0.8s完成一个单程,那就是4000/0.8 = 5KHZ/S,平均频率是5KHZ。
步进电机的平均速度是10r/0.8s = 10*60r/0.8m= 750rpm,也就是750圈每分钟。
但是步进电机不可能在一上电就从平均速度开始转,而是从0开始加速到最高速度v,然后再需要转向或者停止时,从v减速到0。实际当中,步进电机不是从0起步,而是从启动速度开始起步,此处我们设置起步频率为1KHZ,步进电机起步速度为150rpm。
模式一 - 全深度
在此模式下,
- 丝杠先前进8cm,
- 丝杠再后退8cm,
- 循环做3次。
对应的步进电机,先正转10圈,再反转10圈,循环做3次。
我们设定丝杠前进8cm需要0.8s,也就是步进电机转10圈需要0.8s。那么在此模式下,完成一次抽插的动作是需要1.6s。
在上面,我们已经知道步进电机转10圈需要4000个脉冲,如果是0.8s完成,则平均频率是5KHZ,最低频率也就是启动频率是1KHZ,那么最高频率呢。
最高频率和加减速时间有关系。对步进电机采用梯形加速算法,相对S型简单一些。如下图所示。
因为加减速的时间是相等的,把0.8s分成0.3+0.2+0.3,也就是各自0.3的加速和减速时间,最高速度匀速运动的0.2s时间。
所以从梯形的特点我们可以得出,(F-1)K*(0.3+0.2) = 4K, F = 9。也就是最高频率是9KHZ。这就完了?后面会告诉此处计算公式是有误的。
我们先按照这个计算结果继续进行,现在最低频率是1KHZ, 最高频率是9KHZ。
要在0.3s的时间之内控制器输出频率是从1KHZ加速到9KHZ,对应步进电机的转速是从1KHZ/400 = 2.5RPS= 150RPM, 到9KHZ/400 = 22.5RPS = 1350RPM。
因为对于步进电机而言,速度和频率成倍数关系,V=AF。所以我们讨论速度的加减速,其实就是频率的加减速。控制器需要按照以下的计算结果控制脉冲的输出。
在加速过程中,一般的原则是低速可以加速时间短一点,高速需要加速时间长一点,高速的速度间隔尽量小。此处我们设置加速频率间隔为1KHZ,从1K加速到9K需要0.3s的时间。
1KHZ - 0.03s;
2KHZ - 0.03s;
3KHZ - 0.03s;
4KHZ - 0.03s;
5KHZ - 0.04s;
6KHZ - 0.04s;
7KHZ - 0.05s;
8KHZ - 0.05s;
9KHZ - 0.2s。
从1K到8K的加起来的时间是0.3s,也就是0.3s后频率就是9KHZ。
然后再分别计算每个时间间隔内,在对应频率下,需要的脉冲个数:
1KHZ - 30;
2KHZ - 60;
3KHZ - 90;
4KHZ - 120;
5KHZ - 200;
6KHZ - 240;
7KHZ - 350;
8KHZ - 400;
9KHZ - 1800。
那么0.8s内工作输出的脉冲个数是多少呢?(30+60+90+120+200+240+350+400)*2 + 1800 = 4780,乘以2是因为还有加速和减速时间是对等的。
奇怪为什么总共输出了4780个脉冲,我们只需要400个脉冲哎!!!问题在哪里。
仔细看上图,原来1KHZ下面还有空间咯,也就是说上面的公式(F-1)K*(0.3+0.2) = 4K,其实漏掉了这部分空间,(F-1)K*(0.3+0.2) + (1K * 0.6) + (F * 0.2) = 4K。
这样算下来最高频率就不是9K了。
那么我们按照最高频率是9KHZ算呢,总共的脉冲个数4780,丝杠实际上前进了4780/400 * 8mm = 95.6mm = 9.56cm。
我们重新修正公式(F-1)K*(0.3+0.2) + 1K * 0.8= 4K. 计算得到F = 7.4KHZ = 7400HZ。
加速曲线修正如下:
1K - 30 - 0.03S
2K - 80 - 0.04S
3K - 90 - 0.03S
4K - 160 - 0.04S
5K - 250 - 0.05S
6K - 300 - 0.05S
7K - 350 - 0.05S
7.4K - 1480 - 0.2S
总脉冲数 = (30+80+90+160+250+300+350)*2 + 1480 = 4000。
总时间 = 0.78s,这是单程的时间,往返的时间是0.78*2 = 1.56s。
模式二 - 半深度,
在此模式下,
- 丝杠先前进4cm,
- 丝杠再后退4cm,
- 循环做3次。
对应的步进电机,先正转5圈,再反转5圈,循环做3次。
在加速过程中,一般的原则是低速可以加速时间短一点,高速需要加速时间长一点,高速的速度间隔尽量小。
我们设定丝杠前进4cm需要0.6s,也就是步进电机转5圈需要0.6s。那么最低频率也就是启动频率是1KHZ,那么最高频率呢。
我们设定加速为0.2s,匀速为0.2s,减速为0.2s。
还是按照上面的公式:(F-1)K*(0.2+0.2) + 0.6 * 1K = 2K,得出F=4.5K。
1K - 50 - 0.05s;
2K - 100 - 0.05s;
3K - 150 - 0.05s;
4K - 200 - 0.05s;
4.5K - 900 - 0.2s;
在0.6秒内总的脉冲个数是(500)*2+900 = 1900。丝杠实际前进了1900/400*8mm = 38mm = 3.8cm。
模式三 - 九浅一深
模式三可以由模式一和二组合起来生成,
- 丝杠先前进4cm,
- 丝杠再后退4cm,
- 循环做9次;
- 丝杠先前进8cm,
- 丝杠再后退8cm,
- 循环做1次。
- 将1-6的动作循环3次。
模式四 - 三长两短
模式三可以由模式一和二组合起来生成,
- 丝杠先前进8cm,
- 丝杠再后退8cm,
- 循环做3次;
- 丝杠先前进4cm,
- 丝杠再后退4cm,
- 循环做2次。
- 将1-6的动作循环3次。
以上所有模式里面都重复3次的意思是,该模式下的动作至少重复3遍。