• 嵌入式控制(2)---电机控制,从脏累繁杂到优雅简洁


    作为一个机械专业的学生,我想从机电一体化开始谈谈我对电机的看法。机电一体化是安川公司在100年前提出,并对后续机械工程发展影响巨大的一个概念。首先,电是一个与电路,电流,电压,频率,相位等等名词相关的概念,翻开《模拟电子技术》能轻松的找到相关内容。机一般情况下是和力、速度、位置、精度、响等一系列名词有关的概念,翻开《机械原理》之类教材也很容易找到相关的内容。基于上述描述,很容易得出的一个直观结论就是把与电相关概念和与机相关概念进行联系。而这二者之间练习的桥梁就是电机----一种将电能-机械运动转换的关键部件。

    电机种类繁多,原理确是相近的,总归离不开法拉第电磁感应定律和安培力。总而言之,电机在电和磁场的共同作用下将电能转换为旋转。旋转只是一种简单而宽泛的运动形式,如果要具体的描述旋转则需要用到一个概念---旋转的角度,也就是转了多少。以及它的一阶导数----转速,转的多快。还有二阶导数----角加速度,一个和转矩息息相关的量。如果要确定电机的某种特定运动,在已知的模型中,利用以上三个量进行描述是最合适的。那么,要控制电机的运动,其性质也可由上述三个物理量决定。

    到此为止,我们就有了一个较为明确的目标,通过电路,电流,电压,来决定电机的转矩,转速,位置。一般直流电机有两根输入线,交流电机会有三根输入线。通过桥式电路,将能源引入电机的输入线,就完成了最基本的 电-->机 转化。可以用于控制的handle就由繁杂的电流电压,变成了桥式电路的开关开闭。通过开闭,可以控制平均电压的大小,之后可以由电机模型:U=IR+E,T=k1I,n=k1E(k1,k2为与电机性质相关的常数)决定转矩T与转速n,显然T又是n的二阶导数,那么电机模型则是一个非齐次二次常微分方程。如果将其转换为两个非齐次一次常微分方程组,则可以在已知初始条件下,解出电机的运动模型。并可分析不同参数下电机运动模型的差异。也就是说,让开关按照一个“正确“的节奏开闭,就可以让电机按照希望的形式输出转角,转速,转矩。而这个开关开闭的频率实际是非常快的。
    从直观感受上而言,这是一个非常“累”的活,这种活可以交给一个MCU来控制。以arm9为例,控制不同频率以及占空比pwm波的输出则可完成使开关开闭的工作。那么,控制量又由开关的开闭,变成了pwm波的频率和占空比。通过这种设计,电机控制中“脏”,“累”的部分被包装了起来,我们只需要掌握如何让MCU产生相应的信号,就能得到我们期望的物理量。这种MCU+桥式电路的形式,实际上就是电机的驱动器。如果我们能用一种驱动器听的懂的语言指挥它,那么电机就完全在我们的掌控下了。
    电机控制实际上就变成了上位机与驱动器之间通信的问题。如果驱动器能听懂一种简洁,高效,可靠(无歧义,不受干扰)的语言,那么电机控制就从一件繁杂的事情变成了一件简单而优雅的事情。我只需要掌握这种语音,甚至都不需要知道电机是如何理解我的这种语言,即可很好的完成电机控制工作。这种语音还有个高大上的名字------通信协议。

    通信是一个常见的名词。当我第一眼看见通信这个词的时候,我想到的是细细长长的电话线。确实,对于传输距离较长,传输要求较高的通信形式,往往这根“电话线”是非常重要的。电机与上位机之间相连的这根电话线成为现场总线(fieldbus)。CAN总线是一种工业应用广泛成熟的现场总线,从物理上讲,它是半双工差分传输的两股双绞线,电机,传感器之类的设备可以挂在CAN总线上,实现上位机与设备之间的互联。从细节上讲,CAN总线中传输的一系列高低电平,当所需要传递的信息按照某种方式转换成高低电平在线上传输时,就实现了信号的发送。
    老师把CAN总线上传输的信号分为了三个层次:物理层,链路层,应用层。
    物理层中要解决的问题包括数据发送的宽度(高电平持续的时间),接受端测量时所采用的采样时间,采样的位置。
    链路层实际上是由一系列高低电平组成的Message,对于这种Message,需要约定起始,终止符号,以让接受端能够理解发送端是从什么时候开始发的,什么时候结束了,这一系列bit中到底哪个数字对应什么。
    应用层解决的是一个对象问题。对于一条Message,其本身只是一系列01010100101,那么接收端(节点)如何理解这一串数字?实际上Message中包含了节点的索引号,节点听见喊自己的名字时,就需要关心后续的是要进行什么操作(调多少速?调多大力?发送自身信息?)。

    显然CAN总线这种消息机制决定了它可以由一条总线挂多个设备,可以在设备间进行通信,可以读取设备状态(传感),可以改变设备状态(执行)。那么,CAN总线实际上就是整套系统的神经中枢。对于我们使用的IMX287嵌入式linux系统而言,只要加上CAN总线芯片,挂载上CAN总线驱动,在利用封装好的库函数,即可实现基于CAN总线的数据收发,设备控制。

    小伙伴门,要不我们做基于CAN总线的电动车去?

  • 相关阅读:
    Redis 设计与实现-内部数据结构
    RuntimeBinderException 异常
    IPv4和IPv6地址库
    -Xms -Xmx -Xmn -Xss -XX:
    倒计时
    列表操作-分片赋值
    20175316毕设准备Day1-2
    20175316毕业设计——基于区块链服务的仓库管理系统
    Python学习笔记:sys.argv入参
    Python学习笔记:bisect模块实现二分搜索
  • 原文地址:https://www.cnblogs.com/ironstark/p/4889547.html
Copyright © 2020-2023  润新知