选择特殊符号
选择搜索类型
请输入搜索
此程序可驱动五引线步进电机,通过按键可控制步进电机的转速、方向、三种驱动方式,三种驱动方式分别为:单四拍驱动、双四拍驱动、单双八拍驱动,其中以单双八拍驱动转速最慢。具体联接方式在程序中有说明。
/************************************
* 步进电机的M16驱动程序 *
* 功 能:用M16驱动步进电机 *
* 实现三种驱动方式 *
* 单四拍驱动、双四拍驱动 *
* 单双八拍驱动 *
* 联接方式:PC0-3分别通过2803接A-D *
* 步进电机公共端接 5V电源 *
* 建立日期:2008年04月05日 *
* 修改日期:2008年04月06日 *
* 主控芯片:M16 *
* 时钟频率:外部晶体 7.3728MHZ *
* 编 译 器:ICCAVR 6.31A *
************************************/
#include
#include
#include "delay.h"
#define RD_KEY() ((~(PINC|0x0F))>>4)//四按键接于PC4-PC7
unsigned char i=0; //转动计数
unsigned char m=1; //驱动方式参数
unsigned char n=0; //转动方向参数
unsigned int zhuansu=61500; //转速数据
/****************************
* 端口配置函数 *
****************************/
void port_init(void)
{
PORTA = 0x40;
DDRA = 0x40;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0xF0;
DDRC = 0x0F;
PORTD = 0x00;
DDRD = 0x00;
}
/****************************
* 正转操作函数 *
* 入 口:a 三种工作方式 *
****************************/
void bj_fs(unsigned char a)
{
switch(a)
{
case 1: //单四拍方式驱动
PORTC |= 1<
if(i>=4)i=0;
break;
case 2: //双四拍方式驱动
if(i!=4) //AB、BC、CD、DA驱动
PORTC |= (1<
PORTC |= (1<<(i-1))|1;
i ;
if(i>=5)i=1;
break;
case 3: //单双八拍方式驱动
if(i%2) //A、AB、B、BC、C、CD、D、DA驱动
{
if(i!=7)
PORTC |= (1<<(i/2))|(1<<(i/2 1));
else
PORTC |= (1<<(i/2))|1;
}
else
{
PORTC |= 1<<(i/2);
}
i ;
if(i>=8)i=0;
break;
default:break;
}
}
/****************************
* 反转操作函数 *
* 入 口:a 三种工作方式 *
****************************/
void bj_fsf(unsigned char a)
{
switch(a)
{
case 1: //单四拍方式驱动
PORTC |= 1<<(3-i); //D、C、B、A驱动
i ;
if(i>=4)i=0;
break;
case 2: //双四拍方式驱动
if(i!=4) //AD、CD、BC、AB驱动
PORTC |= (1<<(3-i))|(1<<(4-i));
else
PORTC |= (1<<(i-1))|1;
i ;
if(i>=5)i=1;
break;
case 3: //单双八拍方式驱动
if(i%2) //DA、D、CD、C、BC、B、AB、A驱动
{
PORTC |= 1<<(3-i/2);
}
else
{
if(i)
PORTC |= (1<<(3-i/2))|(1<<(4-i/2));
else
PORTC |= (1<<(3-i/2))|1;
}
i ;
if(i>=8)i=0;
break;
case 4:
default:break;
}
}
/****************************
* 定时器1配置函数 *
* 工作模式:普通模式 *
* 工作方式:溢出中断 *
* 预 分 频:64 *
* 时钟频率:外部7.3728MHZ *
****************************/
void timer1_init(void)
{
TCCR1B = 0x00;
TCNT1H = zhuansu>>8;
TCNT1L = zhuansu&0xFF;
TCCR1A = 0x00;
TCCR1B = 0x02;
}
/****************************
* 定时器1中断函数 *
****************************/
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
TCNT1H = zhuansu>>8;
TCNT1L = zhuansu&0xFF;
PORTC &= 0xF0;
if(n)
bj_fsf(m); //反转
else
bj_fs(m); //正转
}
/****************************
* 器件初始化函数 *
****************************/
void init_devices(void)
{
CLI();
port_init();
timer1_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x04;
SEI();
}
/****************************
* 主函数 *
****************************/
void main(void)
{
unsigned char key,key1;
init_devices();
while(1)
{
key=RD_KEY(); //按键扫描
if(key)
{
delay_ms(20);
key1=RD_KEY();
if(key==key1)
{
switch(key) //按键有效,相应处理
{
case 0x01: //S1键处理:转速增加
zhuansu = 100;
if(zhuansu>62000)zhuansu=62000;
break;
case 0x02: //S2键处理:转速降低
zhuansu -= 100;
if(zhuansu<5000)zhuansu=5000;
break;
case 0x04: //S3键处理:转换驱动方式
m ;
if(m>=4)m=1;
break;
case 0x08: //S4键处理:正反转控制
if(n)
n=0;
else
n=1;
break;
default:break;
}
}
while(key) //等待按键释放
{
delay_ms(10);
key=RD_KEY();
}
}
}
}
完整的工程项目文件如下,此工程已通过验证。2100433B
步进电机驱动器主要结构主要有以下部分 根据输入信号的要求产生电机在不同状态下的开关波形信号处理对环行分配器产生的开关信号波形进行PWM调制以及对相关的波形进行滤波整形处理3:推动级:对开关信号的电压,...
步进电机四相八拍驱动程序
/*---------------------------------------------------------------------------------------------------- 名称: 步进电机四相八拍驱动程序 文件名: steper.c 作者: eastboy E-mail: eastboy_007@163.com 日期: 2008年 7 月 16 日 版本: 1.0 申明: 按键部分程序参考了 raosibin的 4×4按键状态机思想程序 说明: 1.可通过按键选择正转或反转,碰到限位开关后自动微调上一次微调值后停止; 2.可通过按键微调,即低速转动,以便精确调整位置; 3.仿真时通过两个按钮模拟前后限位开关,以模拟实际生活当中步进电机带轴运动时部 件的前后电限位, 程序并可自动记住以前后限位开关为基点的微调步数; 4.本程序只是通过了软件功能仿真
三相步进电机驱动
三相步进电机驱动 三相步进电机的三相六拍工作方式,正转的绕组通电顺序: A、AB、B、BC、C、CA、A,反转的通电顺序: A、AC、C、CB、B、BA、B、A。 由于步进电机转子有一定的惯性以及所带负载的惯性,故步进电机的工作过 程中不能及时的启动和停止,在启动时应慢慢的加速到预定速度,在停止前应 逐渐减速到停止,否则,将产生失步现象。 步进电机的控制问题可总结为两点: 1、产生工作方式需要的时序脉冲; 2、控制步进电机的速度,使它始终遵循加速、匀速、减速的规律工作。 系统: 接口: 程序: #includeio8515v.h #includemacros.h const char zhzhuan[7]={0x06,0x04,0x05,0x01,0x03,0x02,0x00}; const char fanzhuan[7]={0x06,0x02,0x03,0x01,0x05,0x0
为了对步进电机的相电流进行控制,从而达到细分步进电机步距角的目的,人们曾设计了很多种步进电机的细分驱动电路。最初,对电机相电流的控制是由硬件来实现的,每一相绕组的相电流用n个晶体管构成n个并联回路来控制,靠晶体管导通数的组合来控制相电流。这种细分驱动电路线路复杂,体积大,成本高,而且电路一旦制造出来就难以改变其细分数,缺乏柔性,因此在的实际应用中已很少采用这种方法。
随着微型计算机的发展,特别是单片计算机的出现,为步进电机的细分驱动带来了便利。步进电机细分驱动电路大多数都采用单片微机控制,它们的构成框图如图2所示。单片机根据要求的步距角计算出各项绕组中通过的电流值,并输出到数模转换器(D/A)中,由D/A把数字量转换为相应的模拟电压,经过环形分配器加到各相的功放电路上,控制功放电路给各相绕组通以相应的电流,来实现步进电机的细分。
单片机控制的步进电机细分驱动电路根据末级功放管的工作状态可分为放大型和开关型两种。放大型步进电机细分驱动电路中末级功放管的输出电流直接受单片机输出的控制电压控制,电路较简单,电流的控制精度也较高,但是由于末级功放管工作在放大状态,使功放管上的功耗较大,发热严重,容易引起晶体管的温漂,影响驱动电路的性能。甚至还可能由于晶体管的热击穿,使电路不能正常工作。因此该驱动电路一般应用于驱动电流较小、控制精度较高、散热情况较好的场合。
开关型步进电机细分驱动电路中的末级功放管工作在开关状态,从而使得晶体管上的功耗大大降低,克服了放大型细分电路中晶体管发热严重的问题。但电路较复杂,输出的电流有一定的波纹。因此该驱动电路一般用于输出力矩较大的步进电机的驱动。随着大输出力矩步进电机的发展,开关型细分驱动电路近年来得到长足的发展。
最常用的开关型步进电机细分驱动电路有斩波式和脉宽调制(PWM)式两种。斩波式细分驱动电路的基本工作原理是对电机绕组中的电流进行检测,和D/A输出的控制电压进行比较,若检测出的电流值大于控制电压,电路将使功放管截止,反之,使功放管导通。这样,D/A输出不同的控制电压,绕组中将流过不同的电流值。脉宽调制式细分驱动电路是把D/A输出的控制电压加在脉宽调制电路的输入端,脉宽调制电路将输入的控制电压转换成相应脉冲宽度的矩形波,通过对功放管通断时间的控制,改变输出到电机绕组上的平均电流。由于电机绕组是一个感性负载,对电流有一定的滤波作用,而且脉宽调制电路的调制频率较高,一般大于20 kHz,因此,虽然是断续通电,但电机绕组中的电流还是较平稳的。和斩波式细分驱动电路相比,脉宽调制式细分驱动电路的控制精度高、工作频率稳定,但线路较复杂。因此,脉宽调制式细分驱动电路多用于综合驱动性能要求较高的场合。脉宽调制式细分驱动电路的关键是脉宽调制,它的作用是将给定的电压信号调制成具有相应脉冲宽度的矩形波。2100433B
步进电机的驱动是靠给步进电机的各相励磁绕组轮流通以电流,实现步进电机内部磁场合成方向的变化来使步进电机转动的。图1是三相反应式步进电机的磁场矢量图。图1的矢量T-A,T-B,T-C为步进电机A,B,C三相励磁绕组分别通电时产生的磁场矢量,T-AB,T-BC,T-CA为步进电机中AB,BC,CA两相同时通电产生的合成磁场矢量。从图1a中可以看出,当给步进电机的A,B,C三相轮流通电时,步进电机的内部磁场从T-A变化到T-B再变化到T-C,即磁场产生了旋转。一般情况下,当步进电机的内部磁场变化一周(360°角)时,电机的转子转过一个齿距,因此,步进电机的步距角θB可表示为: θB=θM/Nr
式中,Nr为步进电机的转子齿数;θM为步进电机运行时两相邻稳定磁场之间的夹角。
一般小法兰尺寸的步进电机因为大部分驱动电压都是DC24V,稍高一点的驱动电压偶尔也会使用DC36V或者DC48V,所以驱动器的选型相对比较简单,主要是驱动器电压,电流和细分数是不是匹配,另外就是选择什么品牌什么档次的驱动器,也有一些带自发脉冲或者带失步报警功能,带总线控制功能等,但总体来说对于通常情况下的驱动器的选择会比较简单,驱动器也很通用。但86步进电机选择会考虑更多一些的因素,深圳步进电机驱动器厂家专家“斯凯得”机电小编推荐按照以下方式考虑86步进驱动器的选型流程:
1.根据86步进电机的工作转速和力矩选合适的步进电机型号和驱动电压
对于86步进电机这种机身比较大的步进电机,驱动电压对于高速的力矩的影响很大,一般最低都要考虑用DC48V驱动。例如,SKD机身长132的86步进电机SST86D5605在DC24V驱动下在150rpm转速下工作力矩不到2.5NM,力矩还不如68机身长的86电机,而在300rpm转速情况下的工作力矩应该还不如一些57步进电机的力矩,而同样是SST86D5605电机,在AC70V电压驱动1500rpm转速下力矩可以达到3NM以上,在AC220V驱动电压下扭矩达到6NM。除了力矩之外,要考虑电机发热的情况,电机本身发热不影响电机的安全使用,主要看对于周围物件的影响。在低速,空载,放在绝缘物上这种比较差的散热条件下,SKD86步进电机在AC70V驱动电压下表面温度51°左右,在AC220V驱动电压下表面温度75°左右,如果电机周围没有对于温度很敏感的人或者物品,电机都完全没有问题。
2.根据驱动电压来配驱动器及其他配套产品
如果确定驱动电压DC48V可以了,那么选DC48V直流电源,另外电源功率留30%以上余量就可以了,驱动器就选能够耐压DC48V以上,电流能够满足步进电机要求的就可以了,可以选直流驱动器,也可以选交直流通用的驱动器。更高驱动电压的驱动器推荐选交流驱动器。AC70V驱动电压需要配一个交流变压器,AC220V驱动器可以直接接市电,省事,高速力矩也好,但成本会贵一些,另外,推荐选用“斯凯得”机电的信号和强弱电完全隔离的驱动器,这样即使电网电压波动比较大,也不会烧驱动器。