arduino 输出PWM信号抖动
voidRoll_Pitch_Control(){if(Angle_Filtered_Roll>0){val_Roll=Angle_Filtered_Roll;servo...
void Roll_Pitch_Control()
{
if(Angle_Filtered_Roll > 0)
{
val_Roll=Angle_Filtered_Roll;
servo_filter();
val_Roll=map(abs(val_Roll),0,90,90,180);
Serial.println(val_Roll);
myservo.write(val_Roll);
}
else
{
val_Roll=Angle_Filtered_Roll;
servo_filter();
val_Roll=map(abs(val_Roll),0,90,90,0);
Serial.println(val_Roll);
myservo.write(val_Roll);
}
如上控制代码,输出的pwm信号会一直抖动,但是有随数据变化的趋势 求解救 展开
{
if(Angle_Filtered_Roll > 0)
{
val_Roll=Angle_Filtered_Roll;
servo_filter();
val_Roll=map(abs(val_Roll),0,90,90,180);
Serial.println(val_Roll);
myservo.write(val_Roll);
}
else
{
val_Roll=Angle_Filtered_Roll;
servo_filter();
val_Roll=map(abs(val_Roll),0,90,90,0);
Serial.println(val_Roll);
myservo.write(val_Roll);
}
如上控制代码,输出的pwm信号会一直抖动,但是有随数据变化的趋势 求解救 展开
2个回答
展开全部
在Arduino中,servo是一个库,可以简单的操作舵机。但从servo库的底层代码上来看,它使用了定时器中断,如果你调用了servo库,同时还使用串口通信的功能,那么,恭喜你,对于部分Arduino的板卡来说,一定会抖动。原因很简单,因为串口通信和servo都要使用定时器,所以就不正常了。
就像我一直在教学Arduino的过程中所强调的那样,库是别人写好你来用的,核心的东西你不知道,没准什么时候就有问题就冲突了,要想学好学精,还是要自己通过代码来实现各种功能,不仅性能好,而且还锻炼了你自己的综合能力。
提示你一点关于舵机的知识。驱动舵机,需要产生PWM信号,普通模拟舵机能识别50HZ的PWM信号,其中每个信号周期内,高电平的持续时间代表舵机的驱动角度。500uS为最小舵量,1500为中立舵量,2500为最大舵量,你可以使用micros()这个函数来精确控制高电平的持续时间。
就像我一直在教学Arduino的过程中所强调的那样,库是别人写好你来用的,核心的东西你不知道,没准什么时候就有问题就冲突了,要想学好学精,还是要自己通过代码来实现各种功能,不仅性能好,而且还锻炼了你自己的综合能力。
提示你一点关于舵机的知识。驱动舵机,需要产生PWM信号,普通模拟舵机能识别50HZ的PWM信号,其中每个信号周期内,高电平的持续时间代表舵机的驱动角度。500uS为最小舵量,1500为中立舵量,2500为最大舵量,你可以使用micros()这个函数来精确控制高电平的持续时间。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要帮你完成设计吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询