极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14866|回复: 5

求教 关于控制马达速度的代码

[复制链接]
发表于 2015-6-15 23:40:00 | 显示全部楼层 |阅读模式
假定马达单向转动,减速比大概是50:1,在马达上固定了四个磁铁,这样的话用干簧管的话,200个脉冲就是轮子转一圈。

相关的马达子程序已经写好,就是 void moto(int speed); speed范围0到100,0为停止,100为全速。

但是这是不带反馈的。

(测速程序会写,就用中断的方式,单独有一个子程序 int readCount()可以得到脉冲数, void resetCount()用来清零, void setCountValue(int theValue)可以设置计数值。)

想要做一个控制马达速度的程序比如 void motoSpdCount(int count); 目的是让马达以每秒count个脉冲的速度前进。比如motoSpdCount(80)就是每秒转过80个脉冲,也就是0.4圈。

编这个程序的主要目的是因为如果使用moto(10)有可能马达会堵转因为速度太慢了;而如果motoSpdCount(5)的话,虽然速度慢会堵转,但是这个子程序发现没有达到指定的速度就会提高速度而如果速度快了就会降低速度就形成了一个宏观上的pwm调速。


我想到的办法是在motoSpdCount中用0.1秒左右的时间,看这段时间是不是转过了规定的脉冲,如果多了就减速如果少了就加速。但这样有可能会带来延迟。(马达的速度是需要不断地调整的)

不知道有什么好的解决办法哦。。。。
回复

使用道具 举报

发表于 2015-6-16 09:02:20 | 显示全部楼层
恩,你所使用的反馈环节还是可以使用的。(磁铁是在马达后面的输出轴吗)
但这样你可能需要PID控制(实际PD环就可以)
使用0.1S或者0.01秒的话,你说的延迟是感觉不出来的,所以是可行的。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-16 10:45:40 | 显示全部楼层
164335413 发表于 2015-6-16 09:02
恩,你所使用的反馈环节还是可以使用的。(磁铁是在马达后面的输出轴吗)
但这样你可能需要PID控制(实际P ...

嗯,我这个马达只有单轴,但是轴是方的,齿轮也都是方孔,四级减速,每级是3:7。
我是在马达轴上加了一个齿轮,然后钻孔插入磁铁。

2WD小车,原来只用来做距离测量,比如在高于堵转速度的时候,用单轮测距让车进或退一定距离。

因为两个马达有速度差,现在想在巡线的时候用来精确控制车速调节。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-16 10:47:08 | 显示全部楼层
164335413 发表于 2015-6-16 09:02
恩,你所使用的反馈环节还是可以使用的。(磁铁是在马达后面的输出轴吗)
但这样你可能需要PID控制(实际P ...

关键是PID或PD,我只是大概知道原理,却从来没有实际做过。。。

就算做过,但感觉和我这个需求是不同的。。。
回复 支持 反对

使用道具 举报

发表于 2015-6-16 15:15:19 | 显示全部楼层
假如你想让马达以每秒80个脉冲转的话,你先要moto(int speed) 给个相应的值,但这个值的大小不确定。
假如speed为50时可以达到每秒80脉冲,你要做的不是先给值,而是先判断脉冲是否为80 ,如果差的大,说明你需要给的speed需要增大很多,如果测得脉冲与80 差距较小,你就需要加上比较小的speed值,直到测得的脉冲=80(实际想要的脉冲)
speed_need=(80 - theValue)*P
speed=speed_need+speed

至于D的话可以不用,开始的话speed和speed_need=0,
但你设置的P值不合适的话,有个能一下就过头了,或者很慢才达到稳定,如果合适的话就比较好了。但每次想要的脉冲数不一定是80啊,所以合适的加一个D。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-16 20:27:55 | 显示全部楼层
164335413 发表于 2015-6-16 15:15
假如你想让马达以每秒80个脉冲转的话,你先要moto(int speed) 给个相应的值,但这个值的大小不确定。
假如 ...

我想我还是先从最简单的做起,可能跟我想做到的还差得比较远。

资料上一般都用水位控制或温度控制来讲解pid,那我就做个速度控制吧。
唯一不同的是水位和温度都是即时值,可以用电子元件直接得到结果。温度有lm35,水位的话,想要准确的话,我想用浮球和收音机的多圈绕线电阻器可以实现一个准确的测量。而速度不是一下就能测量出来的。

明天开工。首先测量轮子能达到的最大值。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 20:03 , Processed in 0.048079 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表