文章目录
步进电机原理
步进电机是一种将电脉冲信号转换为角位移或线位移的执行机构。
它的工作原理是通过控制接线线圈的电流变化来实现转动的。
四相八拍步进电机
四相:指步进电机中有四组线圈。
八拍:指的是四组线圈的通电时序。
四相八拍:也叫做半步:
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
代码工作流程:
- 初始化
- 注册driver
- 启动jz_timer_interrupt 定时器中断
- 用户空间通过ioctl设置motors变量
- jz_timer_interrupt 定时器中断 实现控制gpio逻辑
初始化
module_init
调用platform_driver_register
注册motor_driver
motor_probe
主要作用
- 申请资源
- 赋值mdev->tcu,tcu为g_tcu_chn2 在kernel\kernel\drivers\mfd\jz_tcu.c 中声明 【tcu模块可以用来产生一个固定频率的中断】
- 初始化同步机制资源
- 注册GPIO
- 注册jz_timer_interrupt 中断, 中断号为:IRQ_TCU2 定义在kernel\arch\mips\xburst\soc-t31\include\soc\irq.h中
- 注册stop_completion信号
- 注册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调用接口