| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> [实践编] 直流电机的单片机控制与编码器信号处理 -> 正文阅读 |
|
[嵌入式][实践编] 直流电机的单片机控制与编码器信号处理 |
小时候玩过四驱车的都知道,玩具里面的小马达长什么样。这次BLOG就是说小马达的事。现在小马达都升级了,安装了减速器和编码器。我在网上找到这个图片。见图1 图1 直流电机 这种小直流电机 ,6V电压就能正常驱动,3V也能动,就是慢,12V就很猛了。总之转速与扭力与电压成正比。 前面带齿轮部分就是减速器,它有一个固定的减速比值。 后面转盘与两个传感器组成编码器。 这次要谈的是电器部分。 一、编码器 编码器不是什么神奇的东西,它不能返回速度值,也不能返回转动角,也不返回正转反转的信号。我们要从它能够返回的信号中,设法解析得到我们需要的值。 编码器有光电的,有磁感的。我这个是磁感的。 这电机上的编码器与手摇编码器不同。 手遥的比较灵敏,这是因为两个传感器比较靠近,即它们到圆心的夹角比较小。例如30度。 本文的这个电机,两个传感器到图心的夹角是90度。见图2 图2?电机的编码器分析 C1和C2是传感器(霍尔元件的集成电路)。它输出的是一个开关量,假设感应到磁极时会输出高电平,否则输出低电平。(就像我们假设从正电到负电流向就是电流方向,实际上电子是从负电出发流向正电,但不影响我们研究。)单个的电路图见图3,PCB见图4。 ? ?图3 单个霍尔传感器的电路原理图 ?图4 电机的编码器的PCB ? ? 我没有磁极检测仪器,我就用万用表测其中一个输出的电压,手动转动磁盘。磁盘就是那黑色个圆盘。转到一周,得到7个高电位的点。那么,我认为有7个磁极,而且磁极对应高电压。具体,磁极是N还是S,实际哪个位置点,这些我就不管了。 下面进行分析: 主轴(先不管减速器,主轴指电机本身的轴)转一周,单个传感器出现N=7次脉冲,而正转到反转的两个输出脉冲波有相位差,如图5 ? 图5 正转与反转的相位图 ?可以买一个“逻辑分析仪”(很便宜)接上ch1和ch2,电机通电5V,编码器也通电5V,就可以看到类似图5的脉冲波。(你可以在逻辑分析仪应用软件上测得波的时间,用作验证。这就不多说。) 我们还是从几何和数学角度分析。如图2。C1和C2是传感器,它们成90度夹角。k1,k2,k3...是磁极点。我们定义从减速器正面看顺时针为正转。那么编码器后面看逆时针就是正转。 我们认为磁极的夹角是A角=360/N=360/7。(约等于51度,记N=7)当k1正对着C1时,k3与C2的夹角是B角。 注意,C1与C2夹角=90,那就是4等分圆(记M=4)。除本文以外的电机编码器,必定存在N与M,而且N与M互质。所以角B不等于0。两个传感器电位不可能同时上升(沿)或下降(沿)。 相位差,这种原理我就不谈了,不拿微积分来说事。只要知道,两个波会有时间差。 (1)当C1对上k1,正向转动 t1 时间后,k3就对上C2。那么记角速度v,那么t1 = B/v (2)当C1对上k1,反向转动 t2 时间后,k2就对上C2。那么记角速度v,那么t2 =(A-B)/v ; A=360/N 通过C1与C2夹角,当360/M>A>(360/M-A)也得到 t1 = (A-(360/M-A))/v t2 = (360/M-A)/v 噢,{N,M}={7,4}则可以按上述公式,如果是别的值,需要画出几何图形,再作分析。 那就是说: 1.1 正反转的检测: 正转时,我得到一个常数A/(t1*v) = A/B = (360/N)/(360/N-(360/M-360/N))?= 1/(2 - N/M) = 4 ; 反转时也得到一个常数 A/(t2*v)?= A/(A-B)?=?(360/N)/(360/M-360/N) = 1/(N/M - 1) = 4/3 =1.3333 ; 上述这两个值,测量时是同一个变量。下面用算法说明。 我们设一个1us的定时器,当C1得到上升沿(外部中断)清零累加变量a,以后每1us让a++,当C2得到上升沿(外部中断),保存Cu=a,当第二次C1得到上升沿(外部中断),记下Au=a,然后重复。一段时候后,停下来。 取Au/Cu的值,如果Au/Cu>3 ,则为正转,否则为反转。 1.2 主轴转速检测: 我们让电机转到s秒,记转速V(单位,圈/分钟),转速与电压成正比。 C1每得到一次上升沿中断,代表主轴转过了360/N度,Au是时间(单位:1us)。1us=0.000001s,则转过360/N度所用时间0.000001*Au 我们得到方程 :(V*360)/60 = (360/N)/(0.000001*Au) V = 60000000/(N*Au) =?8571428.5714f/Au 后面结合减速比,得到输出的转速。 1.3 主轴的行程: 我们让电机转到s秒,记行程C(单位,圈), C1每得到一次上升沿中断,Ints++,得到C=Ints/N=Ints/7 二、直流电机 网上的Blog都在说要注意死区,那是因为他们都在用2003,而ULN2003就是达林顿放大器。现在都是用电机驱动芯片,例如我现在用的MX1616H,它有两点转入,一个正向PWM,一个反向PWM,需要正转时,给正向PWM,反向接地;需要反转时,正向接地,给反向PWM。不用管死区,芯片里面自己处理。 三、减速器 商家会给出减速比的值;也有的商家只给减速后的转速,没有减速比。 我们可以限制每次的行程,并观察减速后的转动角,反复试验,可得到比例 W=主轴圈数/输出圈数 3.1 转动角 记R = (int)(C/W*360) % 360 为什么要写这个?因为网上写的都是理论。但就差实际的东西。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:36:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |