用avr控制舵机,需要光耦之类的隔离吗?
前两天买了2个舵机,用M16控制(马老师的试验板),用了本站的范例程序,也试了试bascom控制,总是有些不流畅,有时候舵机会抖动但是没有明显的转动(可能是角度比较小的来回转动吧),感觉是不是有什么干扰,手头没有示波器。觉得应该在单片机的控制信号和舵机的信号线之间应该用光耦隔离一下好些,手头没有光耦,就接了个104电容,确实要流畅些,但仍不满意。可能还是要个光耦之类的吧?
曾用电池作为试验板的供电电源,舵机似乎转不动,不知道是不是电流不够,觉得可以加个驱动芯片,既可以隔离,又可以增加驱动力,如l293。不知道uln2003行不行。
望大家指点,谢谢! 舵机的控制线不需要功率。只是一个信号。
自然不需要驱动。
抖动可能是控制的方波要使舵机停在它两个分度位置的中间或占空比不稳定,自然就抖动了。 谢谢,太有道理了,本人愚钝,只是控制信号,当然不用驱动,呵呵。
不知道是不是占空比不稳定,发现玩AVR到一定时候好像非得要个示波器才行。 最初看见主坛上有帖子讨论舵机的,本来这个帖子想发在主坛的,但是觉得发在这里可以活跃一下机器人论坛。希望大家踊跃一些。帖子发了几天,看的人都不多,确实比较冷清。
下面是我用avrlib中的舵机驱动程序的demo代码,希望有前辈提供一些改进意见,可以让舵机转动更流畅。
占空比不稳定有没有可能是跟内部RC不准有关呢?
#include <avr/io.h> // include I/O definitions (port names, pin names, etc)
#include <avr/signal.h> // include "signal" names (interrupt names)
#include <avr/interrupt.h> // include interrupt support
#include "global.h" // include our global settings
#include "servo.h" // include RC servo driver library
void servoTest(void);
//----- Begin Code ------------------------------------------------------------
int main(void)
{
timerInit();
// begin servo test
servoTest();
return 0;
}
void servoTest(void)
{
u08 pos;
u08 channel;
// do some examples
// initialize RC servo system
servoInit();
// setup servo output channel-to-I/Opin mapping
// format is servoSetChannelIO( CHANNEL#, PORT, PIN );
servoSetChannelIO(0, _SFR_IO_ADDR(PORTD), PD0);
servoSetChannelIO(1, _SFR_IO_ADDR(PORTD), PD1);
servoSetChannelIO(2, _SFR_IO_ADDR(PORTD), PD2);
servoSetChannelIO(3, _SFR_IO_ADDR(PORTD), PD3);
// set port pins to output
outb(DDRD, 0x0F);
pos = 0;
#define SPEED_SERVO 1
// spin servos sequentially back and forth between their limits
while(1)
{
for(channel=0; channel<SERVO_NUM_CHANNELS; channel++)
{
for(pos=0; pos<100; pos++)
{
servoSetPosition(channel,pos);
timerPause(SPEED_SERVO);
}
}
for(channel=0; channel<SERVO_NUM_CHANNELS; channel++)
{
for(pos=100; pos>=1; pos--)
{
servoSetPosition(channel,pos);
timerPause(SPEED_SERVO);
}
}
}
} ...我穷...不过还是搞了台古董示波器。 看来还是的弄个二手的示波器玩玩,呵呵。
唉,现在的桌子已经放不下更多的东西了,而且买个这样的“古怪”仪器一定又会被老婆骂的,呵呵。
最近正在忙自己专业上的事,过一段时间才有空研究舵机了,到时候有了进展再与大家分享。 被老婆骂 是一定的,如果你能做个让她开心的东西,又不一样了,哈哈 AVR的舵机驱动实验
2007-07-28 22:07
mode15模式,系统时钟8Mhz,分频8,频率100Hz,脉宽1.5ms,改变OCR1B即可改变舵机角度
TCCR1A=0x23;
TCCR1B=0x9a;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x28;
OCR1AL=0x00;
OCR1BH=0x06;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00; 如果受力了抖动不受力不抖,那就是舵机问题。力气小的一般都会抖 个人觉得是舵机的供电电压低了点 加点电压试试<8V都没事
干扰的可能性不是很大 如果只是控制舵机
不需要
如果还有其他传感器
就要,不然串扰就麻烦了
我们的机器人上就用光电隔离 我们这里用的电机控制小车子的,用的ATMEGA8就没有出问题啊,
速度大了,或者负载多了,就容易抖动!! 普通航模舵机不用光耦,AVR管脚输出信号电流足够驱动
产生抖动一个可能原因是程序输出量(PWM脉宽)变化速度太快
舵机执行速度跟不上,根据具体舵机的速度加入延时逻辑即可消除 数字舵机可以超压吗?里面单片机不知道受不受得了…… 舵机大多数使用的是PPM信号,也就是只利用了20ms(假定一个周期为20ms)的前1~2ms。与PWM信号还是有区别的。
页:
[1]