中国电子技术网

设为首页 网站地图 加入收藏

 
 

用于构建更高效电机控制设计的软件技术

关键词:电机控制 软件技术

时间:2023-03-20 11:06:58      来源:网络

本文将提供使用C8051F3xx MCU的电机控制设计的软件示例 ,以说明它们在控制各种类型的电机中的用途。虽然示例相对简单,但它们展示了适用于各种电机类型的有效解决方案。虽然典型的电机控制系统通常需要额外的特性和更高的功能,但这些软件示例可用作开发更复杂的电机驱动系统的起点。

运行功率低于 300 W 的小型电机用于各种应用,包括汽车系统、打印机、复印机、纸张处理机、玩具、工厂自动化、测试设备、机器人、航空航天和军事等。的小型电机类型是直流电机、无刷直流电机和步进电机。电机的生产数量与功率水平大致成反比。小型电机的产量远高于大型电机。

电机控制专用 DSP 主要设计用于满足大型离线电机的要求。离线电机通常是交流感应电机或无刷直流电机,工作电压为 110 至 480 VAC,功率范围为 1/4 至 100 HP。电机控制专用 DSP 对于小型电机控制系统来说通常成本太高。

本文将提供使用C8051F3xx MCU的电机控制设计的软件示例 ,以说明它们在控制各种类型的电机中的用途。虽然示例相对简单,但它们展示了适用于各种电机类型的有效解决方案。虽然典型的电机控制系统通常需要额外的特性和更高的功能,但这些软件示例可用作开发更复杂的电机驱动系统的起点。

直流电机控制 

直流电机是所有小型电机中常见和的。在本文中,术语“直流电机”特指有刷换向的永磁电机。直流电机广泛应用于汽车、消费和工业市场领域。无刷直流 (BLDC) 电机有望提高可靠性、降低噪音并可能降低成本。然而,BLDC 电机仅在少数专门的大批量应用(磁盘驱动器和计算机风扇)中取代了传统的直流电机。

直流电机的特性使其成为变速系统中容易使用的电机。转矩速度特性如图 1 所示。直流电机的空载速度与施加在电机两端的电压成正比。驱动恒转矩负载、线性负载或指数负载的直流电机的电压-速度特性也是连续的、正斜率的和可预测的。因此,在大多数情况下,使用开环控制是可行的。

通过简单地改变电机两端的电压,可以控制电机的速度。脉宽调制 (PWM) 可用于改变施加到电机的电压。施加到电机的平均电压与 PWM 占空比成正比(忽略电机电感和不连续运行的二阶效应)。


图 1:直流电机特性

一个基本示例提供了使用 F3xx MCU 的直流电机的简单速度控制。此示例使用 ADC 读取电位器的位置,并使用 PCA 8 位 PWM 模式输出相应的 PWM 信号。硬件配置如图 2所示。

单个 N 沟道功率 MOSFET Q1 用于驱动直流电机。应根据特定的电机电压和电流要求选择功率 MOSFET。续流二极管 D1 连接在直流电机两端。当 MOSFET 关断时,通过电机电感的电流将继续流动。MOSFET 漏极电压将上升到比电机电源电压高一个二极管压降。然后电流将流过续流二极管。

大多数低压电机驱动电路的续流二极管都采用肖特基功率整流器。肖特基整流器具有低正向电压和非常快的反向恢复时间。两者都是电机驱动应用中的重要因素。


图2:直流电机驱动电路

功率 MOSFET 由反相栅极驱动器驱动。F300 的端口引脚默认配置为启用弱 100 kW 上拉的输入。端口引脚将保持高电平,直到配置端口并启用交叉开关和外设。当复位引脚保持低电平时,端口引脚也将配置为启用弱上拉的输入。通过使用反相驱动器,功率晶体管将在默认状态下关闭。如果使用同相驱动器,则应在端口引脚和地之间连接一个 10 kW 的下拉电阻。

栅极驱动器应具有 3 V 兼容输入电平阈值,以便与 3 V 微控制器一起使用。如果电机电压介于 5 V 和 15 V 之间,栅极驱动器可以直接由电机电源电压供电。如果电机电压高于 15 V,则需要单独的栅极驱动电源电压,通常为 5 V 或 12 V。当栅极驱动电源电压低于 10 V 时,应使用逻辑电平功率 MOSFET。

该软件非常简单。main () 函数初始化时钟、端口和外围设备并进入while(1) 循环。while(1) 循环使用avgADC()函数读取电位器电压值 ,并将该值输出到 8 位 PWM。

PORT_Init () 函数配置端口 I/O、外设并启用数字交叉开关。此处,8 位 PWM 的输出已启用,栅极驱动器的推挽输出已启用。

系统时钟 SYSCLK 配置为以 24.5 MHz 的速度运行,这允许 8 位 PWM 的时钟周期为 160 ns,频率为 24 kHz。

ADC0_Init () 函数将 ADC 配置为轮询模式。ADC 增益设置为 1,并为 ADC 时钟选择 1 MHz 的保守频率。重要的是要记住还要初始化电压参考并将 ADC 配置为使用 VDD 进行满量程。

函数readADC() 使用轮询模式读取电压并返回 ADC 值。函数avgADC() 调用readADC()函数并将返回 64 个样本的平均值。平均 ADC 读数可限度地减少噪声的影响并减少 PWM 输出中的抖动。

使用 PCA 8 位 PWM 模式时,值 0x00 对应于 100% 的占空比,值 0xFF 对应于 CEX0 输出端的 0.39% 占空比。通过清除 PCA0CPM0 SFR 中的 ECOM0 位可以实现 0% 的占空比。

使用反相驱动器时,关系相反。0x00 值对应 0% 占空比,0xFF 值对应 MOSFET 栅极上 99.6% 的占空比。为简单起见,本白皮书中所有使用 8 位 PWM 的软件示例都限制为 99.6% PWM。

在某些情况下,需要 100% 的占空比。100% 的占空比将有效消除开关损耗。由于 MOSFET 永远不会关闭,因此 MOSFET 中没有开关损耗,二极管中也没有损耗。的功率损耗是功率 MOSFET 中的传导损耗。如果预计电机大部分时间都以全速运行,则使用 100% 的占空比。通过清除 PCA0CPM0 SFR 中的 ECOM0 位可以实现 100% 的占空比。


图 3:直流电机全桥电路

带换向的直流电机

永磁直流电机通常用于需要能够反转电机方向的应用。要反转旋转方向,需要反转电机电压的极性。这需要使用 H 桥。H 桥有四个晶体管,如图3所示。当正向驱动电机时,Q4 导通,PWM 信号施加到晶体管 Q1。要反向驱动电机,Q3 开启,PWM 信号施加到 Q2。在此示例中,下方晶体管用于 PWM 速度控制,上方晶体管用于转向。使用这种拓扑结构,可以在两个方向上提供变速控制。

在图 3 中,N 沟道功率 MOSFET 用于低侧晶体管,P 沟道功率 MOSFET 用于高侧晶体管。对于低于 20 V 的直流电机驱动,使用互补功率 MOSFET 是非常经济高效的解决方案。如图 3 所示,低侧栅极驱动器是反相的,而高侧栅极驱动器是同相的。选择栅极驱动器极性以确保功率晶体管关闭,同时端口引脚处于复位配置并启用弱上拉。

这个例子的软件建立在初始例子的代码之上。主循环现在包括一个检查反向开关 SW1 状态的 if 语句。当按下反向按钮时,PWM 被禁用,所有 P0 输出被禁用。松开按钮后,电机将反转方向。

初始化函数与示例 1 类似,只是将额外的引脚配置为推挽输出。

调用reverse () 函数来反转电机的方向。标志位Fwd 用于保存电机的状态。Fwd位 被切换,然后用于确定要激活的输出。

电机反转可能存在问题。当反向开关 SW1 被按住时,由于电机的惯性,电机可能会继续旋转一段时间。电机转动时,会产生与电机速度成正比的反电动势。如果在电机停止旋转之前松开反向按钮,电机反电动势将被上方的晶体管短路,如下所述。

参考图 4,假设 Q4 初导通,电机正转。假设电机正在转动,反电动势约为 6 V。现在按下开关,所有四个晶体管都关闭。电机右侧将比电机左侧高 6 V。然后松开开关,Q3导通。电机的左侧被上拉至电源电压,电机的反电动势被 Q4 的内部二极管短路。

终结果是电机停止,存储在电机机械惯性中的所有能量都被倾倒到 Q4 中。这很容易在反转过程中损坏上方的晶体管。在某些具有较大摩擦负载的应用中,固定延迟可能足以确保电机有时间停止。在其他应用中,电机可能需要几秒钟才能完全停止。这个问题的通用解决方案如图 4所示。


图 4:直流电机反转危险


图 5:带电压感应的直流电机驱动

带软反转功能的直流电机 

这个直流电机软件示例建立在第二个示例的基础上,并提供软反转功能。要安全地反转直流电机,有必要确定电机是否仍在运动。

确定电机是否仍在旋转的一种简单有效的方法是测量电机端子两端的差分电压。ADC 可以配置为测量模拟多路复用器的任意两个输入之间的差分电压。可编程窗口检测器也可用于确定差分电压是否落在预设限制内。在此示例中,电机将在差分电机电压保持低于满量程的 3% 100 毫秒后反转。

具有电压感应功能的直流电机驱动器的硬件类似于添加连接到电机端子的两个电阻分压器,如图5所示。

修改了主循环以检测电机停止。detectStop ()函数首先配置 ADC 以测量差分电压。ADC 和窗口检测器均以轮询模式使用。如果 ADC 值在预设窗口内,则计数器递增。使用定时器 T0 的 10 毫秒延迟设置采样时间。窗口外的任何样本都会重置计数器。在退出 while 循环之前,它将在窗口内进行 10 次连续采样。detectStop () 函数将重新配置 ADC 以在返回主循环之前测量速度电位器。

无刷直流电机控制 

无刷直流 (BLDC) 电机与传统的有刷换向直流电机相比具有一些优势。电子设备和传感器有效地取代了电刷的作用,使用寿命长,维护减少,并且没有电刷噪音。正确换向的 BLDC 电机的扭矩-速度特性与图 1 中所示的直流电机相同。

因此,无刷直流电机表现出相同的理想品质,使直流电机非常适合变速控制。此示例提供了使用霍尔效应传感器控制电机换向的 BLDC 电机的简单开环控制。BLDC 电机的速度使用一个简单的电位器进行控制。以这种方式控制的 BLDC 电机的特性类似于原始直流电机控制示例。

此示例所需的硬件如图 6所示。由于 BLDC 电机需要额外的输出,因此选择了 C8051F330。电机由采用三相桥式配置的六个功率晶体管驱动。下面的晶体管 Q1–3 是 N 沟道功率 MOSFET。上面的三个晶体管是 P 沟道功率 MOSFET。这简化了栅极驱动装置。同样,使用互补栅极驱动器,以便功率晶体管在默认状态下关闭。


图 6:无刷直流电机驱动

霍尔效应传感器具有集电极开路输出,需要上拉电阻。检查电机规格以确保正确配置霍尔效应传感器。集电极开路输出通常与 3 V 兼容。然而,霍尔效应传感器还需要偏置电源,通常需要 3.0 V 以上的电压。在大多数系统中,霍尔效应传感器可以由电机电源电压或栅极驱动电源电压供电。

带断点的调试软件可以将电机和 MOSFET 置于不希望的状态。当 MCU 遇到断点时,引脚会及时有效冻结,并可能使 PWM 输出处于活动状态。推荐的程序是在单步执行代码或使用断点之前始终断开电机引线。BLDC 电机将在单绕组上满电压时失速。BLDC 电机失速电流仅受绕组内阻的限制。这很可能会损坏 powerMOSFET。

BLDC 电机示例的软件包含许多新元素,如下所述。

PORT_Init ()函数配置交叉开关和输出引脚分配。额外的控制引脚配置为三相控制的推挽输出和读取霍尔传感器的输入

可编程计数器阵列时基配置为使用 160 ns 时基,计数器启动。但是,模块 0 模式 SFR 未针对 8 位 PWM 进行初始化。在确定霍尔效应位置之前,不会启用任何电机驱动器。

main ()函数首先初始化所有内容并设置起始标志位。主循环首先使用hallPosition()函数检查霍尔效应传感器的位置。如果启动标志位已设置或霍尔位置已更改,则通过调用commutate()函数对电机进行换向 。接下来读取速度输入并将速度设置写入 PWM 输出。

hallPosition ()函数在错误情况下返回零。如果霍尔效应输入全高或全低,就会发生这种情况。如果发生错误,主循环将通过调用coast()函数禁用所有输出。起始位也在错误条件下设置,以强制对下一个有效霍尔位置读数进行换向。

readHalls ()函数读取和去抖霍尔效应输入端口引脚上的霍尔效应代码。此函数等待三个连续的相同读数。这减少了在霍尔效应代码发生变化时出现错误读数的可能性。

hallPosition ()首先通过调用 上述readHalls()函数 读取霍尔效应代码。霍尔代码模式存储在常量数组hallPattern[]中。带有后递减的单行for循环用于查找匹配霍尔效应代码的相应索引。如果找到匹配模式, hallPosition () 函数将返回 1 到 6 之间的值。如果未找到匹配项,则hallPosition() 函数返回零值。

commutate ()函数用于在启动时初始化输出,在霍尔位置发生变化时更改输出状态,并在纠正霍尔错误后重新启动电机。commutate () 函数首先禁用 PWM 和上部晶体管。然后它使用从大厅Position()函数获得的索引 。

霍尔效应模式或换向模式没有通用标准。请查阅电机制造商的数据表,了解您正在使用的特定电机。根据制造商的数据表仔细检查这两种模式。此外,检查霍尔效应模式和换向模式之间的对应关系。可能需要更改两个模式之间的偏移量。

  • 分享到:

 

猜你喜欢

  • 主 题:自主移动机器人(AMR)平台方案介绍
  • 时 间:2024.11.19
  • 公 司:安森美

  • 主 题:PIC®和AVR®单片机如何在常见应用中尽展所长
  • 时 间:2024.11.26
  • 公 司:DigiKey & Microchip

  • 主 题:盛思锐新型传感器发布:引领环境监测新纪元
  • 时 间:2024.12.12
  • 公 司:sensirion