第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > linux步进电机实验程序 基于嵌入式Linux的步进电机驱动程序设计

linux步进电机实验程序 基于嵌入式Linux的步进电机驱动程序设计

时间:2021-06-20 03:00:34

相关推荐

linux步进电机实验程序 基于嵌入式Linux的步进电机驱动程序设计

定义全局变量num和status用来控制步进电机的速度和方向:

static int num=1;

static enum{off,clockwise,anticlockwise} status=off;

定义步进电机的整步模式正转脉冲表:

unsigned char pulse_table[] =

{

0x05, 0x09, 0x0a, 0x06,

};

定义时钟节拍函数time_tick()

static void time_tick(unsigned long data)

{

static int i=0;

switch(status)

{

case off: break;

case clockwise:

if(++i==num){

i=0;

if( row == 4 ) row = 0;

(*(char *)0xd3000006)=pulse_table[row++];

}

ttimer.expires=jiffies+1;

add_timer(&ttimer);

break;

case anticlockwise:

if(++i==num){

i=0;

if( row == -1 ) row = 3;

(*(char *)0xd3000006)=pulse_table[row--];

}

ttimer.expires=jiffies+1;

add_timer(&ttimer);

break;

case default: break;

}

}

在time_tick()函数中判断步进电机的状态,是停止、正转还是反转。若是正转,则按正向顺序发送脉冲,并添加定时器ttimer;若是反转,则按反向顺序发送脉冲,并添加定时器ttimer;若是停止则不再发送脉冲,也不再添加定时器。

在stepper_module_init()函数中申请I/O端口,并初始化定时器ttimer:

if(check_region(0x28000006, 1)) //看该I/O端口是否已经被占用

{

printk("The stepper port is used by another module.

");

return -1;

}

request_region(0x28000006, 1, DEVICE_NAME); //申请该I/O端口

init_timer(&ttimer); //初始化定时器ttimer

ttimer.function=time_tick; //填写定时器处理函数为time_tick()

编写ioctl函数用来接收应用程序对于步进电机的控制。

[1] [2] [3]

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。