硬件就是 步进电机和按键和lcd1602
lcd1602显示档位
按键1 开始或者停止转动
按键2 加档位
按键3 减档位
按键4 正反转切换
仿真和c程序
本项目是基于AVR ATmega16单片机的步进电机控制系统,通过按键控制步进电机的启动、停止、档位调节和转动方向,并在LCD1602显示屏上显示当前系统状态。此系统主要用于学习和演示步进电机的基本控制方法。
步进电机:用于演示电机控制的基本操作。
LCD1602显示屏:用于显示电机状态、转动方向和当前档位。
按键:四个按键分别用于控制电机的启动/停止、增加档位、减少档位和改变转动方向。
AVR ATmega16单片机:控制核心,执行电机控制逻辑和按键处理。
整个系统的软件逻辑由C语言编写,并通过AVR编译器进行编译。主要的功能模块包括电机控制、按键扫描和LCD显示。
主程序如下所示:
c#include <iom16v.h>
#include <macros.h>
#include "lcd1602.h"
void display(void) {
unsigned char buffer[16];
unsigned char cnt = 0;
if (open == 1) {
LCD_write_str(0, 0, "open ");
} else {
LCD_write_str(0, 0, "close");
}
if (dir == 0) {
LCD_write_str(7, 0, "FFW");
} else {
LCD_write_str(7, 0, "REV");
}
LCD_write_str(0, 1, "dangwei:");
cnt = 0;
buffer[cnt++] = '0' + dangwei;
buffer[cnt++] = ' ';
buffer[cnt++] = 0;
LCD_write_str(9, 1, buffer);
}
void main(void) {
delay_nms(100);
LCD_init();
DDRB = 0xFF;
DDRD &= 0xF0;
display();
while (1) {
if (open == 1) {
if (dir == 0) {
j++;
if (j >= 8) j = 0;
PORTB = FFW[j];
delay_nms(yanshi);
} else {
j++;
if (j >= 8) j = 0;
PORTB = REV[j];
delay_nms(yanshi);
}
}
if ((PIND & 0x01) == 0) {
open = !open;
if (open == 0) {
dangwei = 0;
yanshi = map[dangwei];
} else {
yanshi = map[dangwei];
}
display();
while ((PIND & 0x01) == 0);
}
if ((PIND & 0x02) == 0) {
if (dangwei < 7) dangwei++;
yanshi = map[dangwei];
display();
while ((PIND & 0x02) == 0);
}
if ((PIND & 0x04) == 0) {
if (dangwei > 0) dangwei--;
yanshi = map[dangwei];
if (dangwei == 0) open = 0;
display();
while ((PIND & 0x04) == 0);
}
if ((PIND & 0x08) == 0) {
dir = !dir;
display();
while ((PIND & 0x08) == 0);
}
}
}
程序中通过定义两个数组 FFW[]
和 REV[]
,分别存储了正转和反转的步进序列。在 main
循环中,根据电机的开关状态和方向,选择相应的序列输出到 PORTB
,实现步进电机的控制。
按键连接到 PORTD
的低四位,通过读取 PIND
的状态检测按键是否按下。每个按键对应不同的功能:
按键1:开关电机。
按键2:增加档位。
按键3:减少档位。
按键4:切换方向。
显示模块通过 LCD_write_str
函数将电机的状态、档位和方向显示在 LCD1602 屏幕上。
本项目通过简单的硬件连接和基础的C语言编程,实现了步进电机的控制。对于学习单片机和步进电机控制的初学者,是一个很好的入门项目。通过这个项目,可以了解步进电机的工作原理、单片机的I/O控制和LCD1602的使用方法。
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!