51单片机通过伺服驱动器控制伺服电机?

我直接用单片机的4个引脚分别接伺服驱动器PUL+,PUL-,DIR+,DIR-,然后用单片机发送2个高电平的电压去控制伺服驱动的PUL+,DIR+,伺服电机不转动,测得单... 我直接用单片机的4个引脚分别接伺服驱动器PUL+,PUL-,DIR+,DIR-,然后用单片机发送2个高电平的电压去控制伺服驱动的PUL+,DIR+,伺服电机不转动,测得单片机的这两个引脚的电压为4.7v左右,如果我想控制反向转动是不是把PUL-,DIR-设为低电平输入就行了呢?请问各位大神我该怎么才能完成控制,我还差那些条件呢,谢谢你们了,我是新手多多指点!谢谢了 展开
 我来答
顶顶好在路上
2019-09-30
知道答主
回答量:16
采纳率:0%
帮助的人:1.1万
展开全部
当然是写程序了,给段参考程序
void main(void)
{
initial();
init_uart();
// ES = 1;
// EA = 1;

P_SW2 = 0x80;
XOSCCR = 0xc0; //启动外部晶振
while (!(XOSCCR & 1)); //等待时钟稳定
CKDIV = 0x00; //时钟不分频
CKSEL = 0x01; //选择外部晶振
P_SW2 = 0x00;

led=0;
delay_nms(10) ;

/*独立运行轴1,2,3轴回原点,更多方式回原点可自由组合。mpc013运动控制模块专用
set_inp_speed(1 ,200,300,100); //设加速度50000Hz/s2, 运行速度30000Hz
pmove(1,1,-1000000,1); // 1轴多脉冲负方向运动,碰到原点限位自动停止
pmove(1,2,-1000000,1); // 2轴多脉冲负方向运动 ,碰到原点限位自动停止
pmove(1,3,-1000000,1); // 2轴多脉冲负方向运动,碰到原点限位自动停止

do
{
get_inp_state( 1, 2,inbuf); //只需读出2个字节来判断轴状态
}
while(inbuf[1]); //inbuf[1]数据为0表示所有轴都停
set_command_pos(1 ,1,0); //设1轴坐标
set_command_pos(1 ,2,0); //设2轴坐标
set_command_pos(1 ,3,0); //设3轴坐标

*/

/*插补运行轴1,2,3,4轴回原点,更多方式回原点可自由组合。mpc014串口SPI运动控制模块专用
set_inp_speed(1 ,200,300,100); //设加速度50000Hz/s2, 运行速度30000Hz
inp_move4(1,1,2,3,4 ,-1000000,-1000000,-1000000,-1000000 ,1); // 4轴多脉冲插补负方向运动,碰到原点限位自动停止
do
{
get_inp_state( 1, 2,inbuf); //只需读出2个字节来判断轴状态
}
while(inbuf[1]); //inbuf[1]数据为0表示所有轴都停
set_command_pos(1 ,1,0); //设1轴坐标
set_command_pos(1 ,2,0); //设2轴坐标
set_command_pos(1 ,3,0); //设3轴坐标
set_command_pos(1 ,4,0); //设3轴坐标
*/

while(1)
{
if((!b1)&&(!b1_state))
{
delay_nms(10);
if((!b1)&&(!b1_state))
{
led=0;
b1_state=1;
set_inp_speed(1 ,300,300,100);

/*下面的指令会直接发到缓存区自动排队运行。mpc014串口SPI运动控制模块专用*/
inp_move2(1,2 ,1 ,6400 ,32000 ,1);
wait_delay(1 ,3000); //模块内部指令间延时3S
write_bit(1 , 0, 1);
inp_move2(1,2 ,1 ,6400 ,32000 ,1);
wait_delay(1 ,3000);
inp_move2(1,2 ,1 ,6400 ,32000 ,1); //2轴直线插补
inp_move1(1,3 ,10 ,1) ;
inp_move2(1,2 ,1 ,6400 ,32000 ,1);
inp_move2(1,2 ,1 ,6400 ,32000 ,1);

inp_move3(1,2,3,1 ,3000000,3000000 ,3000000 ,1); // 3轴直线插补
wait_delay(1 ,1000);
inp_move2(1,1 ,2 ,1000 ,1000 ,1);
write_bit(1 , 0, 1); // 0输出口为高
inp_move1(1,1 ,1000 ,1) ; // 1轴运行
inp_arc(1 ,2,3, -200, 200, -200, 0,0,1) ; // 2轴圆弧插补
/*上面的指令会直接发到缓存区自动排队运行。mpc014串口SPI运动控制模块专用*/

// set_inp_speed(1 ,5000,5000,100);
// pmove(1,1,1000, 1); // pmove只有mpc013能用
// wait_stop(1 ,1);
// pmove(1,2,-100, 1);
while(!b1);
}

}
else
led=1;

if((!b1)&&(b1_state))
{
delay_nms(10) ;
if((!b1)&&(b1_state))
{

led=0;

//sudden_stop(1,1); // 立即停止独立轴1轴 ,只适用于mpc013
//sudden_stop(1,6); // 立即停止所有插补轴

get_inp_state( 1, 20,inbuf); //读出20个字节数据放入数组
USRAT_transmit(inbuf,20); // 串口将数组数据发送出去查看
// if(inbuf[1]==0) //inbuf[1]数据为0表示所有轴都停
//set_special(1,0xfd);
// else
// set_special(1,0xfc);

//b1_state=0;

while(!b1);

}
}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式