定义时钟节拍函数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.\n");

return -1;

}

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

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

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

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

int device_ioctl( struct inode *inode, struct file *file, unsigned int ioctl_num,

unsigned long ioctl_param)

{

struct stepper * s;

/* 根据实际程序中的不同需求更改ioctl函数的调用*/

switch (ioctl_num)

{

case IOCTL_SET_MSG:

s = (struct stepper*) ioctl_param;

switch (s->CmdID)

{

case 0: /*开始*/

status=clockwise;

ttimer.expires=jiffies+1; //开启定时器

add_timer(&ttimer);

break;

case 1: status=off; break; /*停止*/

case 2: /*反转*/

if(status==clockwise){ status=anticlockwise; }

if(status==anticlockwise){ status=clockwise; }

break;

case 3: if(num!=1)num--; break; /*加速*/

case 4: num++; break; /*减速*/

}

}

return 0;

};

通过s指针得到stepper结构中的表示命令类型的参数,根据该参数判断命令类型,0是start起动,1是stop停止,2是reverse反向,3是up电机加速,4是down电机减速,通过改变全局变量num和status来控制电机。电机的起动是通过在start分支中起动一个定时器ttimer,然后在定时器处理函数time_tick中发送步进电机脉冲,并重新添加定时器,从而实现步进电机的转动。

linux步进电机驱动程序,基于Linux的步进电机驱动程序设 - 嵌入式操作系统 - 电子发烧友网...相关推荐

  1. can总线linux程序,CAN通信卡的Linux设备驱动程序 - 嵌入式操作系统 - 电子发烧友网...

    CAN通信卡的Linux设备驱动程序设计实现 目前,许多工业现场如电力系统.化工系统等大量使用控制器局部网(CAN--Controller Area Network)现场总线网络,CAN通信卡作为计算 ...

  2. 智能硬件Linux效能更高,Android软硬件巧妙整合的开发技 - 嵌入式操作系统 - 电子发烧友网...

    1.Linux驱动程序的导入 由于Android是根源于Linux所延伸出来的操作系统,因此各种关键功能的驱动程序也必须要能顺利的写入其中,举凡像是字符设备.存储器的空间配置.中断处理.网路通信.萤幕 ...

  3. linux安全模式改文件,嵌入式Linux的安全模式设计 - 嵌入式操作系统 - 电子发烧友网...

    本系统的架构如下图: 产品所使用的flash总大小为16M. 系统包括三大部分,即Bootloader,config, kernel + rootfs: 另外,/dev/mtdblock/0,在系统中 ...

  4. 嵌入式linux系统电源管理器,嵌入式Linux系统的动态电源管理技 - 嵌入式操作系统 - 电子发烧友网...

    嵌入式Linux系统的动态电源管理技术 通过用户层制定策略与内核提供管理功能交互,实时调整电源参数而同时满足系统实时应用的需求,允许电源管理参数在短时间的空闲或任务运行在低电源需求时,可以被频繁地.低 ...

  5. 基于HMM的连续小词量语音识别 - 模拟技术 - 电子发烧友网

    相关推荐 人工智能在经历了迅速发展之后,AI 领域的人才需求也发生调整.近日,猎聘联合 GMIC 发布了< 2... 发表于 2018-04-12 15:38 • 63次阅读 确定最佳深度可以降 ...

  6. linux红外驱动程序,基于Linux操作系统和红外发射器实现系统模块的设计

    引 言 随着嵌入式系统及集成电路技术的飞速发展,针对移动手持终端的专用芯片获得了长足发展.芯片的RAM和ROM的容量越大,在上面跑操作系统也越来越容易.Linux是当今流行的操作系统之一.由于其内核健 ...

  7. linux电机驱动程序,基于Linux系统的HHARM9电机驱动程序设计

    电子科学知识.电机,arm 第24卷 第4期 2005年12月南昌工程学院学报JournalofNanchangInstituteofTechnologyVol.24No.4Dec.2005文章编号: ...

  8. linux 无线 网桥,基于Linux无线网桥及无线网络设备驱动分析与研究

    摘要: 综合了局域网,无线通信等相关技术的无线局域网(WLAN)是非常方便的数据传输系统,它利用射频技术遵循IEEE 802.11协议,具有传输速率高,成本低廉,兼容和扩展能力强等优点,是近些年来通信 ...

  9. linux设备资源分配,基于Linux 简化 AMP 配置使其更方便更动态地分配资源

    描述 嵌入式系统一般分为两大类:需要硬实时性能的:和不需要硬实时性能的.过去,我们不得不做出艰难抉择: 选择实时操作系统的性能还是我们钟爱的 Linux 系统的丰富特性,然后努力弥补不足之处? 如今, ...

最新文章

  1. APP漏洞自动化扫描专业评测报告
  2. ZOJ3785 What day is that day? 快速幂+找规律
  3. 无线路由器——多路由器无线桥联解决方案
  4. chechbox 的颜色android,Android 之 CheckBox 详解
  5. 用R语言实现深度学习情感分析
  6. 原来 GitHub 网红是这么混出来的 如何以正确的姿势参与开源项目
  7. Mac上word无响应且内容未保存后强制退出后恢复内容方法
  8. 导出IE浏览器配置的注册表信息 IE设置的注册表相关信息以及修改方法
  9. c语言 计算平均分
  10. 【SAS NOTE】substr字符串提取函数
  11. oracle监听生成trace,监听器控制程序lsnrctl跟踪trace file
  12. 工作生活要懂得劳逸结合
  13. 计算机的分区原理,电脑真的需要分区吗?别被“常识”骗了
  14. ffmpeg批量转换m4a为mp3
  15. 集线器,路由器,交换机之间的区别
  16. 现任明教教主CCNP Security SecureV1.0 第一天.3
  17. 关于时间戳和标准时间、国际标准时间的一些方法
  18. Barsetto百胜图BAV02自助咖啡机——星巴克喝多了自助咖啡体验过吗?
  19. 基于STM32,TB6612,TCRT5000的简易红外循迹小车
  20. 服务器电脑u盘装系统怎么启动不了,电脑开不了机怎么用U盘启动盘装win10家庭版...

热门文章

  1. 服装商城 mysql 设计_网上服装商城jsp+mysql源码 + 计划书(作业版)
  2. 蒙特卡洛计算亚式期权以及希腊字母计算
  3. 电子商务策划之商品属性规划
  4. java中把年月日时间(yyyy-MM-dd)或其他时间格式转换成只有年月(yyyy-MM)或其他时间格式的简单方法
  5. 仿FC数学金刚游戏介绍
  6. 基数反馈(Cardinality Feedback)
  7. 挖机的涡轮增压器为什么会窜(漏)机油呢?有什么后果?
  8. 星极制冰机:坚持自主创新 赋能产业发展
  9. x_algor.c 分析
  10. matlab dfp法,DFP算法及Matlab程序(最新整理)