linux步进电机驱动程序,基于Linux的步进电机驱动程序设 - 嵌入式操作系统 - 电子发烧友网...
定义时钟节拍函数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的步进电机驱动程序设 - 嵌入式操作系统 - 电子发烧友网...相关推荐
- can总线linux程序,CAN通信卡的Linux设备驱动程序 - 嵌入式操作系统 - 电子发烧友网...
CAN通信卡的Linux设备驱动程序设计实现 目前,许多工业现场如电力系统.化工系统等大量使用控制器局部网(CAN--Controller Area Network)现场总线网络,CAN通信卡作为计算 ...
- 智能硬件Linux效能更高,Android软硬件巧妙整合的开发技 - 嵌入式操作系统 - 电子发烧友网...
1.Linux驱动程序的导入 由于Android是根源于Linux所延伸出来的操作系统,因此各种关键功能的驱动程序也必须要能顺利的写入其中,举凡像是字符设备.存储器的空间配置.中断处理.网路通信.萤幕 ...
- linux安全模式改文件,嵌入式Linux的安全模式设计 - 嵌入式操作系统 - 电子发烧友网...
本系统的架构如下图: 产品所使用的flash总大小为16M. 系统包括三大部分,即Bootloader,config, kernel + rootfs: 另外,/dev/mtdblock/0,在系统中 ...
- 嵌入式linux系统电源管理器,嵌入式Linux系统的动态电源管理技 - 嵌入式操作系统 - 电子发烧友网...
嵌入式Linux系统的动态电源管理技术 通过用户层制定策略与内核提供管理功能交互,实时调整电源参数而同时满足系统实时应用的需求,允许电源管理参数在短时间的空闲或任务运行在低电源需求时,可以被频繁地.低 ...
- 基于HMM的连续小词量语音识别 - 模拟技术 - 电子发烧友网
相关推荐 人工智能在经历了迅速发展之后,AI 领域的人才需求也发生调整.近日,猎聘联合 GMIC 发布了< 2... 发表于 2018-04-12 15:38 • 63次阅读 确定最佳深度可以降 ...
- linux红外驱动程序,基于Linux操作系统和红外发射器实现系统模块的设计
引 言 随着嵌入式系统及集成电路技术的飞速发展,针对移动手持终端的专用芯片获得了长足发展.芯片的RAM和ROM的容量越大,在上面跑操作系统也越来越容易.Linux是当今流行的操作系统之一.由于其内核健 ...
- linux电机驱动程序,基于Linux系统的HHARM9电机驱动程序设计
电子科学知识.电机,arm 第24卷 第4期 2005年12月南昌工程学院学报JournalofNanchangInstituteofTechnologyVol.24No.4Dec.2005文章编号: ...
- linux 无线 网桥,基于Linux无线网桥及无线网络设备驱动分析与研究
摘要: 综合了局域网,无线通信等相关技术的无线局域网(WLAN)是非常方便的数据传输系统,它利用射频技术遵循IEEE 802.11协议,具有传输速率高,成本低廉,兼容和扩展能力强等优点,是近些年来通信 ...
- linux设备资源分配,基于Linux 简化 AMP 配置使其更方便更动态地分配资源
描述 嵌入式系统一般分为两大类:需要硬实时性能的:和不需要硬实时性能的.过去,我们不得不做出艰难抉择: 选择实时操作系统的性能还是我们钟爱的 Linux 系统的丰富特性,然后努力弥补不足之处? 如今, ...
最新文章
- APP漏洞自动化扫描专业评测报告
- ZOJ3785 What day is that day? 快速幂+找规律
- 无线路由器——多路由器无线桥联解决方案
- chechbox 的颜色android,Android 之 CheckBox 详解
- 用R语言实现深度学习情感分析
- 原来 GitHub 网红是这么混出来的 如何以正确的姿势参与开源项目
- Mac上word无响应且内容未保存后强制退出后恢复内容方法
- 导出IE浏览器配置的注册表信息 IE设置的注册表相关信息以及修改方法
- c语言 计算平均分
- 【SAS NOTE】substr字符串提取函数
- oracle监听生成trace,监听器控制程序lsnrctl跟踪trace file
- 工作生活要懂得劳逸结合
- 计算机的分区原理,电脑真的需要分区吗?别被“常识”骗了
- ffmpeg批量转换m4a为mp3
- 集线器,路由器,交换机之间的区别
- 现任明教教主CCNP Security SecureV1.0 第一天.3
- 关于时间戳和标准时间、国际标准时间的一些方法
- Barsetto百胜图BAV02自助咖啡机——星巴克喝多了自助咖啡体验过吗?
- 基于STM32,TB6612,TCRT5000的简易红外循迹小车
- 服务器电脑u盘装系统怎么启动不了,电脑开不了机怎么用U盘启动盘装win10家庭版...
热门文章
- 服装商城 mysql 设计_网上服装商城jsp+mysql源码 + 计划书(作业版)
- 蒙特卡洛计算亚式期权以及希腊字母计算
- 电子商务策划之商品属性规划
- java中把年月日时间(yyyy-MM-dd)或其他时间格式转换成只有年月(yyyy-MM)或其他时间格式的简单方法
- 仿FC数学金刚游戏介绍
- 基数反馈(Cardinality Feedback)
- 挖机的涡轮增压器为什么会窜(漏)机油呢?有什么后果?
- 星极制冰机:坚持自主创新 赋能产业发展
- x_algor.c 分析
- matlab dfp法,DFP算法及Matlab程序(最新整理)