caihong001 发表于 2012-4-30 22:46:52

数字舵机的制作

现在就把我已解决的一一作答吧
其实设计数字舵机的原理很简单,即检测输入的PWM信号与电位器反馈信号,
两者对比判断转向,之差为转速,且电位器的AD信号为目标点。仅此而已,
不过原理虽简单,但要做好一个性能可靠,稳定,参数达标的舵机就难了,
我在做之前,也是不懂,上论坛问网友,有人说电机直接用电流驱动?我试过,肯定不行,
虽然这样转速很快,扭矩大,但也正因为这样,舵机在指定点根本停不下来,抖的N厉害。
正确的方法应该是用PWM驱动,利用上所说的差值付给OCCRn寄存器,当差值不断减小,转速也就
不断减慢,这样到达指定点就不会那么抖,看到这里是不是觉得确实很简单,要是你那么想那就错了,
一个舵机那么简单那不懂点编程序的人都能做?这只是一个原理,原理虽简单,但这好与不好,成与不成,却决定在细节,就比如说,检测PWM信号时,如果输入的是1500us,测脉宽时,连续测的几次是1498,1501,1503,1497,1499.....,像这样连测输入的信号都测得都不稳,要舵机不抖,那可真就怪了,
同样AD信号也是,电位器一直都在滑动,静止时也测许测一定值很准确,但在这不断的移动时呢?这也是新手们在做时要考虑的,那好如果现在上面两个信号都已解决,测得很准,很稳,那它们之差是不是就可直接付给OCCRn呢?当然不是,数据还得处理,那就是PID,通过PID处理后再给OCCRn,(只要你参数整定得好,嘿嘿,当然没那么容易,得慢慢试,试出最好的效果),一个真真好的舵机就此完成。
上面所说都是软件部分,这里再补充硬件这块,驱动电路肯定用H桥,H桥可以自己做,也可用集成H桥的驱动芯片,此电路中的一个制动(刹车)功能很重要,

这是我的经验之谈,舵机已实现功能,但与市面上一些性能非常好的仍有差距,希望高手多提提意见,继续改进!


NJ8888 发表于 2012-4-30 22:50:49

电机比较关键,要惯量小的

kakarotto 发表于 2012-5-1 00:11:15

最好加上PID

learner123 发表于 2012-5-1 10:39:56

实际上“高端”数字舵机的反馈环不止一个速度环,而且,电位器也有消抖处理,当然算法不同,不同阶段算法也不同。
现在舵机价格很便宜,没有再自制的价值,学习一下还行,除非拼成本,没有什么额外利润空间了,此外费时费力,自己玩还是搞上层算法好点。
或者玩玩模拟舵机,更有学习价值,最好是全离散器件的。

kakarotto 发表于 2012-5-4 00:31:40

本帖最后由 kakarotto 于 2012-5-4 00:33 编辑

德国有一种带反馈的模拟舵机,不过价格非常贵。
数字舵机(我想带总线的485或者TTL的应该是你说的数字舵机吧),需要速度环、电流环、位置环叠加。
在运动过程中,还有梯形/三角形算法,还是很复杂的。这种舵机也很贵的
最便宜的就是MG995之类的模拟舵机了。

电机可以用空心杯电机

bosw83 发表于 2012-5-6 12:42:26

首先模具是最重要的,齿轮与齿轮之间的间隙要非常好,要不然会抖。其次电位器的线性要好。通常是要引入PID控制的。

semonpic 发表于 2012-5-6 13:04:44

舵机还是很好的东西。上次一个国外的色谱仪器上的一个舵机坏了,我直接买了哥国产货代替了。还是蛮不错的

NJ8888 发表于 2012-5-6 13:09:29

semonpic 发表于 2012-5-6 13:04 static/image/common/back.gif
舵机还是很好的东西。上次一个国外的色谱仪器上的一个舵机坏了,我直接买了哥国产货代替了。还是蛮不错的 ...

老总奖励你多少?

not_at_all 发表于 2012-5-6 18:43:04

NJ8888 发表于 2012-5-6 13:09 static/image/common/back.gif
老总奖励你多少?

解决问题是你应该做的,解决不了问题就是你的责任——某位老板名言

caihong001 发表于 2012-5-7 14:38:10

bosw83 发表于 2012-5-6 12:42 static/image/common/back.gif
首先模具是最重要的,齿轮与齿轮之间的间隙要非常好,要不然会抖。其次电位器的线性要好。通常是要引入PID ...

哦,你以前做过吗?说说你的思路?据我所知测输入的PWM信号脉宽和电位器位置AD信号要稳,但这个你们是通过什么方法做的呢?相互交流下,
我做的在测PWM脉宽时还不是特别稳,而AD采样我是通过平均值法

caihong001 发表于 2012-5-7 14:39:46

not_at_all 发表于 2012-5-6 18:43 static/image/common/back.gif
解决问题是你应该做的,解决不了问题就是你的责任——某位老板名言

没错,老板永远是对的,做得好是应该的,做不好是你没才?{:smile:}

dory_m 发表于 2012-5-8 13:21:30

有才!!!

ln08136207 发表于 2012-5-29 12:32:12

我也在做舵机控制,但是一直有点抖,能不能指教一下。

caihong001 发表于 2012-5-29 16:15:18

ln08136207 发表于 2012-5-29 12:32 static/image/common/back.gif
我也在做舵机控制,但是一直有点抖,能不能指教一下。

原理都是一样的,不过不同的方案间仍然存在一定的差异,代码保密吗?可以帮你参考参考。

ln08136207 发表于 2012-5-29 16:40:14

caihong001 发表于 2012-5-29 16:15 static/image/common/back.gif
原理都是一样的,不过不同的方案间仍然存在一定的差异,代码保密吗?可以帮你参考参考。 ...

说实话,对于你们来说这都是十分简单的东西,但是因为单位性质特殊,有机密数据保护系统,我就是想贴出来也,没法弄出来,总是会被拦截。
我大致说一下思路:
是这样的,采样周期是2MS,10位AD,PWM周期是800us.
程序结构是这样的:
外部中断捕获脉宽pwidth;
定时器启动AD:得到采样值adc_data;
同时在AD中断中做 :error = pwidth - adc_data;
                                  pid(error);
                                  PWM(pid_data);
调了三天了,毫无进展。请指教一下。现在得到如下两个图
图1:到达期望值后,PWM 仍然有输出,使舵机不停的在调。我试过把PWM周期改小,但是没有效果。
图2:舵机的阶跃响应波形。

fwluck 发表于 2012-5-29 16:43:54

电位器的稳定不用程序,硬件容易就可解决。

NJ8888 发表于 2012-5-29 16:48:00

同样程序,电机惯量 齿轮松紧有差异的.所以要配合机械来调整

caihong001 发表于 2012-5-29 19:09:22

ln08136207 发表于 2012-5-29 16:40 static/image/common/back.gif
说实话,对于你们来说这都是十分简单的东西,但是因为单位性质特殊,有机密数据保护系统,我就是想贴出来 ...

这样你可就为难我了,再厉害的人也不能单靠看个波形帮你解决问题啊,PID参数整定得好很重要哦!

caihong001 发表于 2012-5-29 19:12:23

ln08136207 发表于 2012-5-29 16:40 static/image/common/back.gif
说实话,对于你们来说这都是十分简单的东西,但是因为单位性质特殊,有机密数据保护系统,我就是想贴出来 ...

从你的波形上只能看出该停的时侯,舵机仍在抖,所以就会有些毛刺样的脉冲

deepsky_0826 发表于 2012-7-9 14:29:08

楼主你好,我也在调试舵机,信号采集部分还算比较稳定,但是输出状态有比较大的抖动,初步推测为算法处理不正确,能不能请你指导下PID算法的处理,不胜感激。

caihong001 发表于 2012-7-15 22:51:30

deepsky_0826 发表于 2012-7-9 14:29 static/image/common/back.gif
楼主你好,我也在调试舵机,信号采集部分还算比较稳定,但是输出状态有比较大的抖动,初步推测为算法处理不 ...

其实舵机也没想象的那么难,我个人认为信号采集是最重要的,如果信号采集很稳定的话直接用P控制就已经有很好的效果了,加上D控制增加扭矩。
你所说的信号采集部分比较稳定,有多稳定??就比如给个1500US信号,连续测出的值偏差多少呢??

deepsky_0826 发表于 2012-7-16 12:50:46

caihong001 发表于 2012-7-15 22:51 static/image/common/back.gif
其实舵机也没想象的那么难,我个人认为信号采集是最重要的,如果信号采集很稳定的话直接用P控制就已经有 ...

哦是这样的我的采样偏差基本处在±1之内也就是1499 1500 1501 所以我做了一个在此范围里的判断 只要偏差处在±1以内 基本不更改设定值 所以还算是较稳定   我比较疑惑的是在进行数据处理时是不是算法上要采用分段处理   现在舵机能够快速稳定的停止在设定值附近但是参数却不是很理想   

caihong001 发表于 2012-7-16 23:08:21

deepsky_0826 发表于 2012-7-16 12:50 static/image/common/back.gif
哦是这样的我的采样偏差基本处在±1之内也就是1499 1500 1501 所以我做了一个在此范围里的判断 只 ...

不太清楚你的电路设计和程序设计,不过你加电制动了没?

i3water 发表于 2012-7-17 00:19:17

我也在做舵机0 0

caihong001 发表于 2012-7-17 09:38:59

i3water 发表于 2012-7-17 00:19 static/image/common/back.gif
我也在做舵机0 0

恩,可以交流交流.希望可以不断改进做出速度更快,扭矩更大,性能更稳定的数字舵机,国内一般灵敏度都说是2,3us,但人家日本,美国的都有1us的,
现实技术落后,还得不断向人家学习呢?

NJ8888 发表于 2012-7-17 10:03:51

数字舵机难再电机上,我曾经做过用霍尔磁传感器的反馈方式,试过两种电机,程序一样,一个反复摆动(惯量大)另一个很好.数字的程序主要相对模拟的是跟踪快,能刹车.模拟是用脉冲展宽方式,如果偏差位置小,得到的驱动脉冲窄,有时不能驱动,数字的有偏差立即全速驱动然后根据反馈减速或刹车

praiseslow 发表于 2012-8-21 15:57:39

ln08136207 发表于 2012-5-29 16:40 static/image/common/back.gif
说实话,对于你们来说这都是十分简单的东西,但是因为单位性质特殊,有机密数据保护系统,我就是想贴出来 ...

请问你能不能透露一下你的单位名称?

ln08136207 发表于 2012-9-21 10:44:17

         之前调了一个PID控制舵机,费了九牛二虎之力,勉强完成任务。现在又要调。
       本次因为对速度要求较高,用了空心杯电机。
       根据前一次的经验,先调Kp,然后加微分和饱和积分。
       但是此次在调Kp却发现比例系数必须要很小,最大只能为0.05,否则会严重超调以致等幅震荡,但是如果比例系数小于0.5时,扭矩和速度又达不到要求。
       不知您有没有时间指教一下,指一下方向。

vjcmain 发表于 2012-9-21 11:05:31

数字舵机确实好使用,不知道大家用过 韩国ROBOTIS 没有。他们的舵机做得很有水平,性能刚刚的。我只用过他们的AX-12数字舵机,扭矩是16KG。datasheet我已经上传,然后他们舵机电机用的是MAXON。国内有公司仿的。但是成本没优势,索性不做了

caihong001 发表于 2012-10-6 09:27:38

ln08136207 发表于 2012-9-21 10:44 static/image/common/back.gif
之前调了一个PID控制舵机,费了九牛二虎之力,勉强完成任务。现在又要调。
       本次因为对速 ...

不同方案的PID其实也是千差万别,现在很多人做的其实只用PD调节,P调节速度,D调节扭矩,加上I反而会造成更不好调,不稳定,你也可试试看。
      V=KP*(PWM-AD)+KD*(AD‘-AD)(PWM表示输入的控制信号,此次电位器反馈信号,AD’表示上一次电位器反馈信号)
还有一个就是要特别注意刹车功能的运用,之前我的速度也是不够快,太快了总是出现回弹现象,那因为当时我看驱动芯片资料A与B同时为0时为刹车,所以我在处理刹车时是直接这样的,OCR0A=0;OCR0B=0;但是发现这样刹车效果不太好,后来直接将管脚输出低电平便好了(P1。0=0,P1。1=0,假设OCR0A,OCR0B对应的引脚是P1。0,P1。1)

edwinqq 发表于 2012-10-6 18:23:56

kakarotto 发表于 2012-5-4 00:31 static/image/common/back.gif
德国有一种带反馈的模拟舵机,不过价格非常贵。
数字舵机(我想带总线的485或者TTL的应该是你说的数字舵机 ...

同意,现在一般是3闭环

edwinqq 发表于 2012-10-6 18:27:35

ln08136207 发表于 2012-9-21 10:44 static/image/common/back.gif
之前调了一个PID控制舵机,费了九牛二虎之力,勉强完成任务。现在又要调。
       本次因为对速 ...

你的这个P参数这么小,基本可以肯定,调的不对。

lianghuok 发表于 2012-10-27 09:17:41

本帖最后由 lianghuok 于 2012-10-27 09:21 编辑

楼主在吗?
我也是刚入门,现在空载可以,但加装拉杆后力度很小。现在是接收机收到PWM的脉宽转成0-255 与电位器ADC做对比,可以得出需要的转向,但输出电机的PWM不知道怎么算,{:sad:}
下面是我控制输出电机的代码,不是很懂调PID 求教!!
void Aile_sevro(void)
{
static INT16 state ;
UINT8 pwm ;

//电位器限幅
if(adc_buf>254) adc_buf=254 ;   
else if(adc_buf<4) adc_buf=4 ;

//Pluse 限幅
if(aile_stor>220) aile_stor=220 ;
else if(aile_stor<30) aile_stor=30 ;
   
state= aile_stor-(adc_buf-29) ;   //-29得到中位点
if(state>1)
{
    Set_Aile_B1PWM(state);
}
else if(state<-1)
{
    Set_Aile_B2PWM(-state);
}
else Aile_OFF();
}

caihong001 发表于 2012-10-27 12:32:15

lianghuok 发表于 2012-10-27 09:17 static/image/common/back.gif
楼主在吗?
我也是刚入门,现在空载可以,但加装拉杆后力度很小。现在是接收机收到PWM的脉宽转成0-255 与 ...

多了解了解PID吧,本人建意用PD!

lianghuok 发表于 2012-10-27 14:52:59

{:smile:},参考下资料在改下 ,谢啦

yuanbo19870216 发表于 2012-12-30 22:46:41

不晓得楼主是不是专业做舵机的,专业的舵机引入的参数一般有死区,boost,增益,电机驱动的最大占空比,还需要做到输入信号的范围可调,角度可调,角度偏移可调。牵扯的东西比较多的

cyxavr 发表于 2013-1-2 12:38:29

楼上兄弟,请教BOOST 与增益这两个参数是干什么用的呢?大概是什么意思呢?

ln08136207 发表于 2013-4-2 10:19:48

caihong001 发表于 2012-10-6 09:27 static/image/common/back.gif
不同方案的PID其实也是千差万别,现在很多人做的其实只用PD调节,P调节速度,D调节扭矩,加上I反而会造成 ...

我也用的是PD控制,有一个疑惑:比如:我的Kp = 1,用PWM调速,当V=KP*(PWM-AD)+KD*(AD‘-AD)= 256是满幅输出,电机全速运行;当舵机带负载,而公式中Kp*(PWM-AD)不足以启动大负载的电机,那么怎么能保证舵机在小误差(PWM-AD)时,能有足够的扭力呢?

mmy168 发表于 2013-6-19 10:35:49

在做,头大!不好弄!

feilee 发表于 2014-2-8 16:06:36

数字舵机控制,做个记号!

rocfly 发表于 2014-2-11 23:01:31

一群高人

feilee 发表于 2014-2-16 18:17:59

ln08136207 发表于 2013-4-2 10:19
我也用的是PD控制,有一个疑惑:比如:我的Kp = 1,用PWM调速,当V=KP*(PWM-AD)+KD*(AD‘-AD)= 256是 ...

搞定数字舵机了吗?

高鼻子 发表于 2014-2-16 18:19:04

网上有个开源的,好多年了

ln08136207 发表于 2014-2-16 20:49:07

feilee 发表于 2014-2-16 18:17
搞定数字舵机了吗?

搞定了,你也在搞?

feilee 发表于 2014-2-23 20:29:53

ln08136207 发表于 2014-2-16 20:49
搞定了,你也在搞?

业余研究一下,好像挺难搞

feilee 发表于 2014-2-23 20:30:24

高鼻子 发表于 2014-2-16 18:19
网上有个开源的,好多年了

请问这个开源网址在哪里啊?

hongyue0912 发表于 2014-3-30 14:26:14

请问下舵机上用到哪几个型号的MOS管?

feilongdz 发表于 2014-12-12 19:33:59

有才!!!

mazhenyu 发表于 2015-1-2 10:35:35

舵机带宽多少

txw 发表于 2015-1-4 23:37:11

{:sad:} 有点不懂

jcyao 发表于 2015-3-7 22:10:01

mazhenyu 发表于 2015-1-2 10:35
舵机带宽多少

1000~2000us

learner123 发表于 2015-3-7 22:40:34

楼主对舵机的理解还处在玩具阶段,距离模型还有不少差距

NJ8888 发表于 2015-3-7 22:49:27

learner123 发表于 2015-3-7 22:40
楼主对舵机的理解还处在玩具阶段,距离模型还有不少差距

高人透露下葵花宝典

mazhenyu 发表于 2015-3-8 12:46:41

jcyao 发表于 2015-3-7 22:10
1000~2000us

带宽?有没有学过信号系统之类的课

xiangbin099 发表于 2016-3-3 22:39:27

这么多大神在呢,学习学习{:lol:}

andy_huang 发表于 2016-7-4 11:09:17

我正在开发一款数字舵机,请教楼主说的转速是如何用PID是实现的,我已实现的目前位置的控制,但是速度不够!

weichao4808335 发表于 2016-7-4 11:34:09

caihong001 发表于 2012-5-7 14:38
哦,你以前做过吗?说说你的思路?据我所知测输入的PWM信号脉宽和电位器位置AD信号要稳,但这个你们是通 ...

用平均法肯定不行吧,应该用平滑滤波算法,
电机控制的实质就是电流控制,伺服的三环:位置环 速度环电流环
电流环是最内环!

andy_huang 发表于 2016-7-12 14:13:06

厉害啊,想请教下你

shortking 发表于 2016-8-3 11:28:48

正在搞总线舵机设计 get一波 少走弯路

dearterry30 发表于 2016-8-3 12:12:22

不错,学习一下{:victory:}

KevinDeng 发表于 2016-12-8 10:40:10

原来多年以后,还有人在搞,突然觉得我不孤单了。{:lol:}

pxkbrsy 发表于 2017-12-7 23:29:37

feilee 发表于 2014-2-23 20:30
请问这个开源网址在哪里啊?

同求开源网址,现在在做舵机,也是解决不了带载时候的小误差无法解决,以及抖动;空载时很容易实现。

starsun 发表于 2017-12-8 11:44:10

shortking 发表于 2016-8-3 11:28
正在搞总线舵机设计 get一波 少走弯路

已经有了,机器人上用的

njhying 发表于 2017-12-8 20:55:38

我觉得带磁编的空心杯比较简单,而传统的电位器配铁心电机比较有难度,这方面日本人做的很好,网上开源的就算了。

njhying 发表于 2017-12-8 21:01:12

总线舵机这个总线其实很简单,不要想的太高深,只是上位机要做的漂亮比较靠美工。用20KHZ PWM驱动垃圾国产铁心电机要做到好的低速线性要求还是蛮高,这个比较需要设计功力。

njhying 发表于 2017-12-8 21:03:31

为了防止抖动,可以引入反电势反馈,这个效果会很好,日本的舵机很早就有了。

hzpyl 发表于 2019-2-16 10:32:44

寻找, 工业用, 磁编码 无刷 总线通讯 舵机

joezeng 发表于 2020-11-1 11:39:26

caihong001 发表于 2012-5-7 14:39
没错,老板永远是对的,做得好是应该的,做不好是你没才?

方便加QQ吗?

joezeng 发表于 2020-11-1 11:40:01

本帖最后由 joezeng 于 2020-11-1 11:44 编辑

牛,牛 ,牛

joezeng 发表于 2020-11-1 11:45:14

hzpyl 发表于 2019-2-16 10:32
寻找, 工业用, 磁编码 无刷 总线通讯 舵机

可支持,看你具体的规格要求
页: [1]
查看完整版本: 数字舵机的制作