当前位置: 技术问答>linux和unix
求linux上用c语言控制步进电机程序思路
来源: 互联网 发布时间:2015-03-13
本文导语: c语言控制步进电机程序,发脉冲,总是受到干扰,实际的波形与程序给的不太一样,是不是存在什么中断优先级的问题,请各位高手指点一二,非常感谢! | 一般来说,如果你写的是用户空...
c语言控制步进电机程序,发脉冲,总是受到干扰,实际的波形与程序给的不太一样,是不是存在什么中断优先级的问题,请各位高手指点一二,非常感谢!
|
一般来说,如果你写的是用户空间的程序,问题多半出在实时性上。
比如usleep(10)可能在10us后的某一个时刻被唤醒,而不是刚刚好在10us之后。
可以去参考
info libc文档
Resource Usage And Limitation::Priority::Basic Scheduling Functions
里的函数,改变当前进程的调度策略和优先级。
另外就是看接口的驱动的缓冲设置,要设置成无缓冲的,降低平均潜伏期。
比如usleep(10)可能在10us后的某一个时刻被唤醒,而不是刚刚好在10us之后。
可以去参考
info libc文档
Resource Usage And Limitation::Priority::Basic Scheduling Functions
里的函数,改变当前进程的调度策略和优先级。
另外就是看接口的驱动的缓冲设置,要设置成无缓冲的,降低平均潜伏期。
|
/* 设置消息函数 */
if(signal(SIGTERM,SIG_IGN) != SIG_IGN){
signal(SIGTERM,signal_dealwith);
}
if(signal(SIGINT,SIG_IGN) != SIG_IGN){
signal(SIGINT,signal_dealwith);
}
/*写一个信号处理函数,程序遇到消息回去调用signal_dealwith函数*/
if(signal(SIGTERM,SIG_IGN) != SIG_IGN){
signal(SIGTERM,signal_dealwith);
}
if(signal(SIGINT,SIG_IGN) != SIG_IGN){
signal(SIGINT,signal_dealwith);
}
/*写一个信号处理函数,程序遇到消息回去调用signal_dealwith函数*/
|
用的是串口吗?你们是用什么函数定时的呢?
|
如果是在内核层处理,应该不会有什么问题,挂一个中断处理程序应该就能获得不错的实时性。
|
你测试出来的波型是带载测试吗? 如果是测试末极的感性负载上的波型是会有不同的.
如果是空载测试功能的话, 要看你的脉冲的宽度的要求, 你用的linux的实时性是不是满足这个要求.
步进电机的动作有没有反馈形成闭环?
...
如果是空载测试功能的话, 要看你的脉冲的宽度的要求, 你用的linux的实时性是不是满足这个要求.
步进电机的动作有没有反馈形成闭环?
...