君正电机驱动代码解析

本文详细介绍了步进电机的工作原理,特别是四相八拍控制方式,探讨了Linux内核中的电机驱动模块(如MX2802LL)及其驱动代码位置。重点讲解了初始化、中断处理(jz_timer_interrupt)和用户空间通信(ioctl)的实现,以及stop_completion信号的应用。
摘要由CSDN通过智能技术生成

步进电机原理

步进电机是一种将电脉冲信号转换为角位移或线位移的执行机构。
它的工作原理是通过控制接线线圈的电流变化来实现转动的。

四相八拍步进电机

四相:指步进电机中有四组线圈。
八拍:指的是四组线圈的通电时序。

四相八拍:也叫做半步:
A—AB—B–BC—C—CD—D—DA,再次从头循环
换成代码假设1000 代表A
则step_table为:
在这里插入图片描述

驱动模块

使用电机驱动器:MX2802LL
规格:
驱动 5V/500mA 继电器
驱动 5V/500mA 电磁阀
驱动步进电机
低导通内阻低边 NMOS 功率开关管
采用 MOS 工艺设计功率管
500 毫安通道功率管内阻 0.55 欧姆
内部集成续流二极管
无需外接续流二极管
支持高频率 PWM
输入频率 100KHZ

电机驱动代码位置

drivers\misc\sample_motor\motor.c

代码工作流程:

  1. 初始化
  2. 注册driver
  3. 启动jz_timer_interrupt 定时器中断
  4. 用户空间通过ioctl设置motors变量
  5. jz_timer_interrupt 定时器中断 实现控制gpio逻辑

初始化

module_init

调用platform_driver_register
注册motor_driver
在这里插入图片描述

motor_probe

主要作用

  1. 申请资源
  2. 赋值mdev->tcu,tcu为g_tcu_chn2 在kernel\kernel\drivers\mfd\jz_tcu.c 中声明 【tcu模块可以用来产生一个固定频率的中断】
  3. 初始化同步机制资源
  4. 注册GPIO
  5. 注册jz_timer_interrupt 中断, 中断号为:IRQ_TCU2 定义在kernel\arch\mips\xburst\soc-t31\include\soc\irq.h中
  6. 注册stop_completion信号
  7. 注册proc调试接口
    在这里插入图片描述在这里插入图片描述

jz_timer_interrupt 实现

主要实现:
解析dev_state 和 cur_steps
设定motor_dir
调用motor_move_step
输出控制gpio_direction_output
step_8为节拍表,A-AB-B-BC-C-CD-D-DA-A
在这里插入图片描述

stop_completion信号使用

主要用途:用户空间调用stop时进入休眠,等待定时器唤醒

在jz_timer_interrupt中检测到state为 stop下 调用
complete(&mdev->stop_completion);
发送信号给调用motor_ops_stop的进程,唤醒,表示已经停止转动
在这里插入图片描述

ioctl 实现

实现函数:motor_ioctl
主要作用:提供给用户空间调用
SPEED, STOP, MOVE, GET_STATUS, GO_BACK, CRUISE调用接口
在这里插入图片描述

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值