利用LM629和PIC单片机构建一个精密电机控制器
扫描二维码
随时随地手机看文章
背景与理论
这个项目的目的是创建一个系统,给速度,加速度和运动的电机精确控制。虽然步进电机可以提供高扭矩,并且与输入高度同步(因此控制它的微控制器可以跟踪它们的当前位置),但它们在运行时效率不高,这将严重影响电池的使用时间。此外,如果由于某种原因,步进电机熄火了,控制器无法知道它没有移动,但它会记录下来,就好像它已经移动了,这将使整个系统陷入混乱(想象一下,一台3D打印机因为卡住而跳过了一步,整个打印过程将从发生的事件开始变得混乱)。出于这个原因,我实现了一个系统,可以用反馈控制直流电机,以跟踪电机所做的事情,而不管PWM周期的数量,失速等。这要求电机具有正交编码器(对于此模拟/电源板,电机必须为12V-24V), LM629精密电机控制器和用于设置LM629 ic的微控制器。例如,有了这个系统,移动机器人就可以享受马达的对称速度。
LM629内部是如何工作的
LM629是一款微控制器外设,在单个设备中集成了采样数据运动控制系统的所有功能。使用LM629使设计快速精确的运动控制系统的复杂任务变得更加容易。LM629实现了一个位置解码器、一个求和结、一个数字PID环路补偿滤波器和一个轨迹轮廓发生器。LM629提供一个7位PWM信号和一个符号位,提供一个符号幅度输出端口。在运行时,主机微控制器将加速度、速度和目标位置值下载到轨迹生成器中。在每个样本间隔,这些值被用来计算新的需求或“设定点”位置,这些位置被馈送到求和结。电机的实际位置由光增量编码器的输出信号确定。内部解码器将实际位置发送到求和结的另一个输入,并从“需求”位置中减去,形成控制回路补偿器的误差信号输入,该补偿器是一个PID滤波器。
由主微控制器发送到LM629的轨迹曲线以速度与时间的关系绘制。这些被认为是速度剖面的原因是每个样本间隔都计算所需的位置。对于匀速,这些期望的位置增量将是相同的每个样本间隔,对于加速和减速,期望的位置增量将分别增加和减少每个样本间隔。目标位置是速度剖面的积分。
主微控制器通过并行通信与LM629通信。LM629有三个内部寄存器:状态、高位和低位字节。这些由RD, WR和PS线(活动低)和使用状态字节的忙位控制。通过将RD和PS调低来读取状态字节,第0位是忙位。通过将WR和PS调低来编写命令。PS高时,WR低,将数据写入LM629, RD低,从LM629读取数据。数据传输是一个按最高到最低有效字节顺序写入的双字节操作。以上描述假设CS很低。
用户命令类型:初始化、过滤控制命令、轨迹控制命令、中断控制命令和数据报告命令。
LM629与其主机之间的通信流通过使用状态字节中的忙位0位来控制。在发出命令和数据或读取数据之前,主机必须检查忙位是否为逻辑0。这包括具有多个数据字的命令的数据字节对之间。
准备
为了实现一个基于LM629电机控制器的系统,我创建了两个pcb。一个PCB容纳数字元件,如PIC18F46K22和lm629。所有的数字和钻文件都包括在内,以便通过JLCPCB订购pcb。我还包括了材料清单和示意图,可以用来把这些放在一起。数字端可以很容易地构建在面包板和前置板上,但模拟/电源板存在一些挑战,因为H-Bridge的封装与前面提到的介质上的2.54mm间距不一致。此外,数字隔离器采用表面安装形式。
如果您决定在没有隔离器和不同的h桥的情况下重新创建此项目,则可以在前置板和面包板上进行一些修改。
该板上的微控制器分别向每个LM629发送命令,系数和轨迹。这里只显示了两个,因为目前使用它们的项目只包含两个电机,可以再增加两个来控制总共4个电机LM629。LM629发送PWM和信号通过h桥的2x10引脚连接器发送到模拟板(第二板)。通过相同的连接器,正交编码器信号被lm629接收。
在模拟/功率电源板上,来自数字板的信号通过数字隔离器连接到h桥。使用数字隔离器可以实现两个系统之间的通信,而不需要有一个共同点。电动机产生大量的电气噪声,这些电压的下降和尖峰会导致数字元件(如微控制器、微处理器或其他具有低电气噪声阈值的数字系统)发生故障,这就是为什么该电动机控制器方案设计使用数字隔离器。
模拟/电源板通过上面提到的2x10连接器接收信号幅度信号,以及5V和数字地为正交编码器和隔离器的数字端供电。
为了实现完全隔离,必须使用两种不同的电源,在我的项目中,我使用了两个单独的电池。
编译微控制器的代码
要为MCU编译代码,请遵循以下步骤:
•下载上面提到的存储库
•将ZIP文件的内容解压缩到路径名不包含太多字符的地方,例如C:驱动器的根目录
•打开MPLABX(如果必须安装,请确保也安装了XC8编译器)
•在工具栏上,单击File-> Open Project
•导航到解压zip文件内容的位置
•打开文件夹,点击项目,点击“打开项目”
•一旦项目打开,您可以浏览源代码并根据您的需要修改它。
•在工具栏上转到Production->Clean and Build Project
编译器应该生成一个"。十六进制”文件。可以用来对单片机进行编程。
单片机编程
要对微控制器进行编程,请确保微控制器以5V通电,并且Pickit 3编程器连接到“编程器”头引脚。
•在工具栏中,转到生产->制作和程序设备
•将弹出一个MPLABX警告窗口,提醒您确保连接的芯片与项目中选择的芯片相同,并且电压为推荐的电压。单击OK。
结论
这个项目可以适应任何需要高精度电机控制的项目,步进电机不是一个选择。它还使用现成的部件来完成此目的,因此已经完成了大部分测试和调试。如果解决方案是在另一个MCU的软件中实现PID或在FPGA的硬件中实现PID,则仍然需要进行大量的测试和调试。
我编写的库很容易移植到其他体系结构中。
本文编译自hackster.io





