直流电动机是使用最广泛的电动机。从小型项目到高级机器人技术,几乎到处都可以找到这些电动机。我们以前将DC Motor与许多其他微控制器(如Arduino,Raspberry pi)连接,并在许多机器人项目中使用了它。今天,我们学习了如何使用AVR微控制器Atmega16控制直流电动机。但是在继续之前,让我们进一步了解直流电动机。
什么是直流电动机?
直流电动机是将电能转换为机械能的设备。具体地,DC电动机使用DC电流将电能转换成机械能。电动机的基本原理是磁场和电流之间的相互作用,以在电动机内产生一个有助于电动机旋转的力。因此,当电流在磁场中通过线圈时,会产生磁力,该磁力产生转矩,从而导致电动机运动。电动机的方向通过反向电流控制。同样,其速度可以通过改变供电电压来改变。由于微控制器具有PWM引脚,因此可以用来控制电动机的速度。
在本教程中,将使用Atmega16演示直流电动机的运行。L293D电机驱动器将用于反转电流方向,从而反转运动方向。L293D电机驱动器使用H桥电路配置,可将所需电流输出到电机。两个按钮用于选择电动机的方向。一个按钮用于选择顺时针旋转,另一个按钮用于选择直流电动机的反时钟操作。
所需组件
- 直流电动机(5V)
- L293D电机驱动器
- Atmega16单片机IC
- 16Mhz晶体振荡器
- 两个100nF电容器
- 两个22pF电容器
- 按钮
- 跳线
- 面包板
- USBASP v2.0
- LED(任何颜色)
电路原理图
编程Atmega16以进行直流电动机控制
此处,Atmega16使用USBASP和Atmel Studio7.0进行编程。如果您不知道如何使用USBASP编程Atmega16,请访问链接。 在项目结束时给出了完整程序, 只需将程序上传到Atmega16中,并使用两个按钮顺时针和逆时针旋转直流电动机即可。使用L293D电动机驱动器连接直流电动机。按下相应按钮时,直流电动机将向两个方向旋转。一个按钮将用于按顺时针方向旋转直流电动机,另一按钮将用于按逆时针方向旋转直流电动机。首先定义微控制器的CPU频率,并包括所有必需的库。
#定义 F_CPU 16000000UL 的#include 的#include
然后,使用一个变量来跟踪按钮的按下状态。该变量将用于定义电动机的方向。
我
使用数据方向寄存器选择GPIO的输入/输出模式。首先,将电机引脚的输出设置为低电平,以避免在不按按钮的情况下启动电机。
DDRA = 03; PORTA&=〜(1 << 1); PORTA&=〜(1 << 0);
检查是否已按下第一个按钮并连接到Atmega16的PORTA4,并将按钮的状态存储在变量中。
if(!bit_is_clear(PINA,4)) { i = 1; PORTA&=〜(1 << 1); _delay_ms (1000); }
同样,检查是否已按下第二个按钮连接到Atmega16的PORTA5,并将按钮的状态存储在变量中。
否则if(!bit_is_clear(PINA,5)) { i = 2; PORTA&=〜(1 << 0); _delay_ms (1000); }
如果第一个按钮的状态为true,则按顺时针方向旋转直流电动机,如果第二个按钮的状态为true,则按逆时针方向旋转直流电动机。
如果(i == 1) { PORTA-=(1 << 0); PORTA&=〜(1 << 1); } 否则,如果(i == 2) { PORTA-=(1 << 1); PORTA&=〜(1 << 0); }
您可以将电动机引脚连接到任何GPIO引脚,具体取决于所使用的GPIO。同样重要的是使用电动机驱动器IC来减轻微控制器上的负载,因为微控制器无法提供运行直流电动机所需的电流。有关更多详细信息和其他基于直流电动机的项目,请访问给定的链接。
完整的代码和演示视频如下。