单片机控制步进电机-AVR详细程序

单片机控制步进电机-单片机程序(avr)

硬件线路连接图见上一篇文章:https://blog.csdn.net/LuDanTongXue/article/details/87869557

软件
ICCV7 FOR AVR-写程序
Progisp-烧程序
速度S曲线生成器(后续后单独讲解)-生成S曲线数组代码
硬件
Atmega16
ASP下载线
杜邦线

控制原理:
利用单片机定时器控制IO口高低电平产生脉冲,通过定时器控制每个脉冲的时间,以及脉冲的个数,从而控制步进电机速度以及转动角度,实现步进电机开环控制能力。步进电机常用的运动控制过程是:【静止】-【S曲线加速】-【匀速】-【S曲线减速】-【停止】,优点是速度平缓上升与下降,能够输出较大的扭矩,不容易失步、堵转。
以下会以【静止】-【正转180°】-【反转180°】-【停止】该运动控制过程进行演示,其中加减速过程均采用S曲线控制。
速度曲线具体控制过程是:
第一段S曲线加速30°:1转/秒启动,5转/秒结束
第二段匀速运动120°:5转/秒匀速
第三段S曲线减速30°:5转/秒启动,0.5转/秒结束
第四段S曲线反转加速30°:0.5转/秒启动,5转/秒结束
第五段匀速反转运动120°:5转/秒匀速
第六段S曲线反转减速30°:5转/秒启动,1转/秒结束

V-T图:
单片机控制步进电机-AVR详细程序_第1张图片
S-T图:
单片机控制步进电机-AVR详细程序_第2张图片

代码如下:(适用于Atmega16芯片,如用51芯片需要稍作改动)

//头文件
#include
#include//SEI()函数_NOP()BIT();
#define uint unsigned int
#define uchar unsigned char

//步进电机接口定义
#define ENA0 (PORTA &=~BIT(0))//电机由脉冲控制
#define ENA1 (PORTA |=BIT(0))//电机掉电、自由状态
#define DIR0 (PORTA &=~BIT(1))//电机正方向转动
#define DIR1 (PORTA |=BIT(1))//电机反方向转动
#define PUL0 (PORTA &=~BIT(2))//低电位
#define PUL1 (PORTA |=BIT(2))//高电位


unsigned int n0;//脉冲计数,用来控制电机转角
uchar duan;//步进电机曲线分段控制参数
uchar kaiguanflag;//该参数为0时,步进电机的启动开关才有效


//定义MEGA16接口输入输出
void port_init(void)
{
 PORTA = 0xFF; //BIT(4)为电机启动开关  BIT(5)电机释放开关
 DDRA  = 0x0F; 
 PORTB = 0xFF; 
 DDRB  = 0xFF; 
 PORTC = 0xFF; 
 DDRC  = 0xFF; 
 PORTD = 0xFF; 
 DDRD  = 0x02;
}


//ms延时函数
void delay_1ms(void) 
{  
unsigned int i;  
for(i=1;i<(unsigned int)(11.059*143-2);i++);//定义晶振频率
}  
void delay(unsigned int n)//延时微妙级 
{  
unsigned int i; 
for(i=0;i

演示动画:
将单片机PA4口与GND口连通(时间有限没有接开关),步进电机按照上述设计的曲线进行运动,实现正转180°后反转180°回到原点。
(视频不好传,GIF质量不怎么好,将就看看)。(微信ID:saskingku)

你可能感兴趣的:(步进电机控制方法)