步进电机是直流无刷电机,可以从 0 0到 360 0步进旋转。步进电机使用电子信号逐步旋转电机,每个信号以固定增量(一步)旋转轴。通过施加一定的信号序列来控制旋转角度。与伺服电机不同,步进电机可以使用微控制器的 gpio 引脚而不是 pwm 引脚来驱动,并且可以在 (+360 0 ) 和 (-360 0 ) 范围内旋转)。信号的顺序决定了步进电机的顺时针和逆时针方向。为了控制电机的速度,我们只需要改变施加的控制信号的速率。步进电机逐步旋转。步进电机有多种步进模式,如全步、半步和微步。
在本教程中,我们将使用 atmel studio 7.0将 28byj-48步进电机与 atmega16 avr 微控制器连接起来。步进电机的额定工作电压为 5v。我们将连接步进电机与电机驱动器,即uln2003 和 l293。两者都将由 5v 电源驱动。为了简化接口,我们使用两个电机驱动器的预构建模块。您还可以使用 uln2003 和 l293d 独立 ic。电线和跳线的数量可以更多,所以在连接所有连接时要小心。
所需组件
步进电机(28byj-48)
uln2003模块/l293d电机驱动器
atmega16微控制器ic
16mhz 晶体振荡器
两个 100nf 电容器
两个 22pf 电容器
按钮
跳线
面包板
usbasp v2.0
led(任何颜色)
步进电机引脚说明
使用 uln2003 模块进行步进电机控制的电路图
使用uln2003时如下图所示连接所有组件。 同样,我们将在下一步中使用 l293d 连接它。我们正在使用 atmega16 的 porta 来连接两个电机驱动器的步进电机。无需连接步进电机的 5v 引脚。仅需要线圈引脚来移动步进电机。引脚顺序对于驱动步进电机非常重要,因为线圈的通电应该是为了获得步进。本项目使用 uln2003 的四个输入和 uln2003 的四个输出。输入将连接到 porta 引脚,输出将连接到步进电机信号引脚。此外,在复位引脚中连接一个按钮,以便在需要时复位 atmega16。将 atmega16 与适当的晶体振荡器电路连接。所有系统将由 5v 电源供电。
下面是uln2003 电机驱动模块的实际图片:
下面我们给出了 atmega16 引脚与 uln2003 和 l293d 的连接,以旋转步进电机。步进电机与 l293d 模块的接口将在后面部分进行说明,请记住,步进电机控制只需要一个模块 uln2003 或 l293d。
input 的引脚连接如下:
output 的引脚连接如下:
使用 l293d 模块控制步进电机的电路图:
用 avr atmega16 控制步进电机
如前所述,与伺服电机不同,步进电机需要外部驱动器,例如 uln2003 或 l293d 电机驱动器。所以只需像上面那样连接电路并上传最后给出的 main.c 程序。
该草图演示了步进电机在两侧旋转,即顺时针和逆时针方向。如果您想沿一个方向旋转步进器,只需在草图中注释掉另一个方向的代码行。
下面给出了用于控制步进电机的完整 avr 代码。代码很简单,很容易理解。下面给出了两个代码,一个用于使用 uln2003 旋转步进电机,第二个用于 l293d 模块。
连接您的 usbasp v2.0 并按照此链接中的说明使用 usbasp 和 atmel studio 7.0 对 atmega16 avr 微控制器进行编程。只需使用外部工具链构建草图并上传即可。
#define f_cpu 16000000ul /* 定义 cpu 频率 1mhz */
#include /* 包括 avr 标准。库文件 */
#include /* 包含延迟头文件 */
诠释主要(无效)
{
//int周期;
ddra = 0x0f;/* 使 porta 低端引脚作为输出 */
整数周期 = 6;/* 设置两个步骤之间的时间段 */
而 (1)
{
/* 以半步序列顺时针旋转步进电机 */
for(int i=0;i<50;i++)
{
端口 = 0x09;
_delay_ms(周期);
端口 = 0x08;
_delay_ms(周期);
端口 = 0x0c;
_delay_ms(周期);
端口 = 0x04;
_delay_ms(周期);
端口 = 0x06;
_delay_ms(周期);
端口 = 0x02;
_delay_ms(周期);
端口 = 0x03;
_delay_ms(周期);
端口 = 0x01;
_delay_ms(周期);
}
端口 = 0x09;/* 最后一步到初始位置 */
_delay_ms(周期);
_delay_ms(1000);
/* 以全步序列逆时针旋转步进电机 */
for(int i=0;i<50;i++)
{
端口 = 0x01;
_delay_ms(周期);
端口 = 0x03;
_delay_ms(周期);
端口 = 0x02;
_delay_ms(周期);
端口 = 0x06;
_delay_ms(周期);
端口 = 0x04;
_delay_ms(周期);
端口 = 0x0c;
_delay_ms(周期);
端口 = 0x08;
_delay_ms(周期);
端口 = 0x09;
_delay_ms(周期);
}
端口 = 0x09;
_delay_ms(周期);
_delay_ms(1000);
}
}
拓扑—让电子与光一起共舞
单片机的内部结构和外部结构分析
MAX1510, MAX17510 低电压、DDR线性稳压器
介绍一下汽车内不太起眼但又非常重要的加密芯片
基于恩智浦MPC5744P的SAE J1939协议栈开发
将步进电机与Atmega16连接起来的方法
zynq和fpga区别快速认识Zynq开发
SinoV-100AI单网口单FXS IAD语音网关详细参数介绍
盘点支撑增材制造应用的六大关键技术
建筑行业如何融入无人机技术
CAN/RS-485总线为什么要隔离
基于单片机实现CAN总线与LIN总线间的传输设计方案
HTC正式面向国内市场发布了升级版VR一体机Vive Focus Plus
双核MCU开发其实也不难!
上海市人民政府出台《上海市促进在线新经济发展行动方案(2020—2022年)》
KT表示2019年底会将5G网络服务覆盖到韩国的85个主要城市
土壤生态环境测试及分析评价系统设备的介绍
单片机最小系统的振荡电路原理分析
微雪电子IC51-0444-400 PLCC44测试座简介
谷歌Pixel4渲染图曝光 赶上浴霸镜头设计潮流