首页

利用ARM7 LPC2148实现直流电机的调速

在之前的项目中,我们已经看到了一个简单的直流电机控制使用LPC2148和按钮,也使用相同的组件控制伺服电机。本课题采用LPC2148单片机和电位器,通过PWM技术实现直流电机的速度控制。

直流电机的速度控制的需要与直流电机的应用有关。例如,考虑一个简单的直流电机被用作冷却风扇的硬件,如电脑,笔记本电脑等。在这种情况下,如果没有速度控制的概念,电机(或风扇,在这种情况下)要么全速运行,要么停止旋转。

但是如果我们引入电机的速度控制,我们就可以在正常情况下以较慢的速度运行电机或风扇,在需要的时候以较高的速度运行。直流电机的速度控制还有许多其他的应用。

本课题的目的是利用LPC2148单片机配合电位器控制直流电机的转速。

线路图

直流电机电路的速度控制

组件的要求

根据您正在使用的MCU板的类型,您可能需要下面提到的一些或所有组件。

  • 基于Lpc2148单片机的开发板或单机板
  • 12v直流电机
  • 2 n2222 NPN型晶体管
  • 1 KΩ电阻器
  • 10 KΩ电位计
  • 电源(MCU和电机分开)
  • 连接电线
  • USB Type A - mini USB电缆

电路设计

我们在这个项目中使用的是LPC2148开发板。电路的设计包括电位器和电机与单片机的连接。

由于电位计的输入是模拟信号,我们需要将电位计的输出连接到其中一个模拟输入引脚,即LPC2148单片机的ADC引脚之一。在我们使用的开发板上,已经有一个电位器,电位器的输出连接到引脚P0.28,即AD0.1通道。

连接电位器后,需要将电机连接到单片机上。由于我们不能将电机直接连接到LPC2148(实际上是连接到任何微控制器),我们需要使用驱动电路。

由于这是一种简单的直流电机的速度控制,我们可以将电机与晶体管连接,只要晶体管可以处理电机的电流要求。因此,我们选择了2N2222晶体管。它是一个NPN晶体管,最大集电极-发射极电压为30V,最大集电极电流为800mA。

请注意简单的12V直流电机需要的电流在400mA到600mA之间(这是一个典型的范围,实际需求可能因电机类型而异)。因此,2N2222晶体管可以处理电机的要求。

项目工作

在这个项目中演示了一个简单的直流电机的速度控制。本课题涉及LPC2148单片机的ADC和PWM模块。这里解释了该项目的工作。

如前所述,电位器的输出是模拟信号。必须使用ARM7单片机LPC2147的片内ADC模块将其转换为数字信号。利用ADC模块对应的寄存器,设置ADC,转换数值,得到结果。关于LPC2148中ADC的更多信息可以在这里找到。

下一个重要的模块是PWM发生器。PWM信号可以确定传输到设备的功率。在这个项目中,PWM信号将控制直流电动机的转速。

这是通过设置PWM输出信号的占空比完成的。ADC的输出将决定PWM信号的占空比。更多关于LPC2148 PWM的信息可以在这里找到。

如果我们分析它的编程部分,可以更好地理解项目的工作。

代码

了解这个项目

如前所述,我们需要使用LPC2148单片机的ADC和PWM模块。除了这些,我们还需要使用锁相环来生成时钟。

正如我们在PLL教程中解释的那样,设置PLL模块来生成系统时钟是一个非常简单的任务。我们需要做的就是用指定的值设置以下寄存器。每条指令都附有简短的注释。更多信息,您可以访问我们的LPC2148 PLL教程。

PLL0CON = 0 x01;//启用PLL0模块

PLL0CFG = 0 x24;// MUL和DIVVAL值被设置为时钟生成

PLL0FEED = 0 xaa;//锁定MUL和DIVVAL的Feed序列

PLL0FEED = 0 x55;

而(!(PLL0STAT & 0 x00000400));//等待PLL0模块被锁定到该值

PLL0CON = 0 x03;//重新启动PLL0模块,连接PLL0模块生成时钟

PLL0FEED = 0 xaa;//锁定PLL0模块状态的进料序列

PLL0FEED = 0 x55;

VPBDIV = 0 x01;//最后,使外围时钟与系统时钟相同

使用上述一组指令,我们将成功地设置系统时钟和外围设备时钟以60 MHz运行。

下一个模块是ADC模块。初始化ADC模块和获得转换输出值的步骤在我们的LPC2148 ADC教程中有明确的解释。

通过遵循这些步骤并参考本程序中的说明,您可以很容易地理解ADC模块在这个项目中是如何使用的。

最后,我们在这个项目中使用的最后一个模块是PWM。首先,通过PINSEL寄存器选择合适的PWM通道。接下来,设置PWM的默认周期为255。

然后将ADC的结果除以4(因为ADC的输出是10位值(1024),而PWM只有8位值(最大的是255))作为所选PWM通道的占空比输入。

在代码(程序)中,为了更好地理解,每条指令都有简短的注释。

3反应

    1. 《Proteus》没有LPC2148的库。但是它有LPC2138。如果您愿意,可以对代码进行必要的更改并尝试一次。

留下一个回复

你的电邮地址不会被公布。

Electronicshub图标
Baidu
map