两相步进电机驱动程序

两相步进电机驱动程序,第1张

两相步进电机一般都是有4根控制线,A-A'是一相,B-B'是一相。控制步进电机的程序也不是很难的,首先是要有驱动模块,像L298这一类的,这样驱动电流够大了步进电机才能启动。。。控制步进电机转动是要按 A-B-A'-B'的顺序依次给脉冲(两相信号交叉),每个脉冲之间有一定的延时,延时时间越小电机速度就越快,但会有一个临界值,小于临界值时脉冲变化太快,电机反应不过来,也就不会转动。若前面顺序电机是正转,那反转的顺序就是倒过来 B'-A'-B-A 。。一个脉冲步进电机就会转过一个歩矩角(步进电机能分辨的最小角度),要转多少度角就拿该角度除以歩矩角来得到脉冲数。。重点:驱动模块、电机的线ABA'B'顺序记得要交叉(同相的A与A'是导通的,可用万用表测出来)、脉冲控制(1000->0100->0010->0001->1000..循环变化)、时间间隔(可用延时函数或定时器)。。。。这程序不会很难,自己动手写写会学到更多。。。。

#include <stdio.h>#include <fcntl.h>#include <string.h>#include <sys/ioctl.h>

#define STEPMOTOR_IOCTRL_PHASE 0x13 staticintstep_fd = -1

char *STEP_DEV="/dev/exio/0raw"//定义一个指针指向步进电机的驱动 程序

/********* A, AB, B, BC, C CD, D, DA ***/

char stepdata[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}//各 个相位对应的值

void Delay(int t) //延时函数 { int i

for(t>0t--)

for(i=0i<400i++)}

/***************************************************** ***********/

int main(intargc, char **argv) {

int i = 0

if((step_fd=open(STEP_DEV, O_WRONLY))<0){ printf("Error opening /dev/exio/0raw device\n")return 1} /*

打开设备的驱动程序,由于LINUX把所有的设备都模拟成文件。 step_fd=open(STEP_DEV,0_WRONLY)实际调用的函数为:

staticint s3c2410_exio_open(structinode *inode, struct file *filp) //驱动程序中的设备打开程序 */

for () {

for (i=0i<sizeof(stepdata)/sizeof(stepdata[0])i++) { ioctl(step_fd, STEPMOTOR_IOCTRL_PHASE, stepdata[i])}

/*程序进入一个死循环,这样可以使电机在没有人为停止的状况下,一直的 转动下去。

*第二层for语句循环一次即电机转动一周。函数ioctl()对应函 数*s3c2410_exio_ioctl()

*而这个函数最终将调用函数do_stepmotor_run((char)arg)使步进电 机转动起来。 */

printf("Delay(100)\n")Delay(100)}

close(step_fd)//程序结束时关闭设备 printf("Step motor start running!\n")return 0}本文来自百度文库,你可以搜搜,其中答案更详细的!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11328636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存