2024-09-01
售卖作品
00

目录

基于AVR单片机的步进电机控制系统
项目简介
硬件部分
软件部分
主程序
功能实现
电机控制
按键扫描
显示模块
总结
资源
  • 硬件就是 步进电机和按键和lcd1602

  • lcd1602显示档位

  • 按键1 开始或者停止转动

  • 按键2 加档位

  • 按键3 减档位

  • 按键4 正反转切换

在这里插入图片描述

在这里插入图片描述

仿真和c程序

在这里插入图片描述

基于AVR单片机的步进电机控制系统

项目简介

本项目是基于AVR ATmega16单片机的步进电机控制系统,通过按键控制步进电机的启动、停止、档位调节和转动方向,并在LCD1602显示屏上显示当前系统状态。此系统主要用于学习和演示步进电机的基本控制方法。

硬件部分

  1. 步进电机:用于演示电机控制的基本操作。

  2. LCD1602显示屏:用于显示电机状态、转动方向和当前档位。

  3. 按键:四个按键分别用于控制电机的启动/停止、增加档位、减少档位和改变转动方向。

  4. 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
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!