当前位置: 首页 > news >正文

电机驱动开发

最近在搞电机驱动程序,感觉很简单,实际操作却发现里面还有很多猫腻(细节)。

电机在嵌入式设备中非常常见,例如云台的转动,都是靠电机来驱动的。

电机常见分步进电机、直流电机,相对来说步进电机精准度会更高,控制起来也更复杂。直流电机,往往需要接一个反馈,才能比较好的控制电机。

总体来说,电机驱动的目的:

1、电机开关

2、电机转动方向

3、电机转动距离(角度)

4、电机转动速度

把这几项管理好(协调好),就是驱动主要目的。

很多情况下,电机不仅仅是转与不转的关系,还应该有其他要求,因此需要程序或芯片来实现驱动功能。

以下是比较常见的架构:(当然现在驱动芯片很强,可以同时驱动多个电机)

作为程序员而言,其实是关心的,怎么通过MCU “调用” 驱动芯片,实现

开关切换、电机转动方向切换、电机转动速度调节之类的。

还好,本次同时接触了两款不同的驱动芯片,因此可以明确一点:不同驱动芯片驱动方式是不相同的!所以要分析对应的技术手册文档(往往都比较简单,虽然看起来内容很多)!

但不管怎么样,还是存在一些共同特性(后面会记录)。

先看下,其中一款驱动芯片引脚定义:

其实一开始,小白是看不懂的(当然有类似经验就好了)。总的来说,对软件而言,关心的有这几个:VREF1~VREF4、OUTx、Ixx、PHASE1~PHASE4,这几个(后面两组是用来Control input控制输入的,也就是开关)。

再来看看,驱动芯片内部结构:

就好比流程图一样,左边是我们要输入的(通过MCU),右边是控制输出的。逻辑也上很简单。

再来看看另外一款驱动芯片信息的

这款更简单,最多控制两路电机。

与上面那款比起来,共同关注是:VREFx、OUTx,表示的意思也是一样的。

其他常见引脚:

●EN 逻辑输入:它是芯片使能输入。低逻辑电平可切断桥 A 和桥 B 的所有功率 MOSFET。

此引脚还连至过电流和热保护电路的集电极以实现过电流保护。

●CLOCK 逻辑输入:它是步进时钟输入。在每个上升沿,状态机前进一步。例如HALF step模式下,如果输入一个 波形,则Step+1

●CW/CCW 逻辑输入:它选择了旋转的方向,注意这个不是电流控制方向。高逻辑电平设置的是顺时针方向,低逻辑电平设置的是逆时针方向。这个跟上面CLOCK有关系,要确认好,

就好比,现在要去调整开关(电风扇开关,设置风量大小);这个引脚的意思你要顺时针调,还是逆时针调

●HALF/FULL 逻辑输入:它是步进模式选择器。高逻辑电平设置的是半步进模式,低逻辑电平设置的是全步进模式。

●CONTROL 逻辑输入:它是衰变模式选择器。高逻辑电平设置的是慢衰变模式,低逻辑电平设置的是快衰变模式。

●VREFA 和 VREFB 模拟输入:它们分别是桥 A 和桥 B 的源引脚。(PWM输入)如果此处固定输入,则Iout是固定的,这里

核心内容:

控制开关输出:

第一款芯片,我们来看看手册,

大致意思是通过使能I0,I1,PHASE来控制输出方向状态之类;通过VREF来控制速度。这样不是就简单了嘛。但是需要怎么使能呢?还得看一张表:

圈出来的就是我们需要的。

第二款芯片,我们来看看手册,以Half step为例:

大致的意思:当选择half step(独立使能引脚)模式时,通过给不同数量的CLOCK可以实现不同形式切换。

这张图,看右侧波形,举个例子:

当step=4的时候,Iouta=CW,Ioutb=待机

当step=5的时候,Iouta=CW,Ioutb=CW

....

实际turn

A

B

实现效果

step1 

CCW(0)

CCW(0)

A、B反向输出

step2

-(2)

CCW(0)

A不输出,B反向

step3

CW(1)

CCW(0)

A正向,B反向

step4

CW(1)

-(2)

A正向,B不输出

step5

CW(1)

CW(1)

A正向,B正向

step6

-(2)

CW(1)

A不输出,B正向

step7

CCW(0)

CW(1)

A反向,B正向

step8

CCW(0)

-(2)

A方向,B不输出

相关文章:

  • el-date-picker限制选择7天内禁止内框选择
  • 四川云汇优想教育咨询有限公司电商服务靠谱吗
  • 前端技术基建过程
  • Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)
  • 基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI+Vant 电影院订票管理系统 的设计与实现
  • Hive参数操作和运行方式
  • Vue2源码梳理:在 import Vue 时干了啥
  • whisper深入-语者分离
  • 部署智能合约以及 javascript 调用合约函数(Web3项目二实战之三)
  • 每日一题 2828. 判别首字母缩略词(简单)
  • 源码解析8-QSS原理-案例-Qt的qss特殊设置多个子控件的颜色与伪状态
  • 【Python必做100题】之第十九题(海伦公式求三角形面积)
  • 跟我学c++高级篇——C++26反射预览
  • 年终汇报这么写,升值加薪必有你!
  • 一句话分清C/C++声明和定义
  • $translatePartialLoader加载失败及解决方式
  • __proto__ 和 prototype的关系
  • Android交互
  • Flannel解读
  • gf框架之分页模块(五) - 自定义分页
  • Git学习与使用心得(1)—— 初始化
  • java 多线程基础, 我觉得还是有必要看看的
  • MySQL主从复制读写分离及奇怪的问题
  • Node 版本管理
  • PAT A1017 优先队列
  • Yeoman_Bower_Grunt
  • 百度小程序遇到的问题
  • 前端临床手札——文件上传
  • 前端学习笔记之观察者模式
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 一、python与pycharm的安装
  • 交换综合实验一
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #pragma once
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (003)SlickEdit Unity的补全
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (zhuan) 一些RL的文献(及笔记)
  • (力扣)循环队列的实现与详解(C语言)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)EXC_BREAKPOINT僵尸错误
  • (轉貼) UML中文FAQ (OO) (UML)
  • .“空心村”成因分析及解决对策122344
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 依赖注入和配置系统
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • @Pointcut 使用
  • [ IO.File ] FileSystemWatcher
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [Android]Android开发入门之HelloWorld
  • [Angular] 笔记 18:Angular Router