AVR ATMega16 步进电机驱动程序.doc_第1页
AVR ATMega16 步进电机驱动程序.doc_第2页
AVR ATMega16 步进电机驱动程序.doc_第3页
AVR ATMega16 步进电机驱动程序.doc_第4页
AVR ATMega16 步进电机驱动程序.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AVR ATMega16 步进电机驱动程序这两天做步进电机的驱动成功,现将程序共享,愿起到抛砖引玉的作用。此程序可驱动五引线步进电机,通过按键可控制步进电机的转速、方向、三种驱动方式,三种驱动方式分别为:单四拍驱动、双四拍驱动、单双八拍驱动,其中以单双八拍驱动转速最慢。具体联接方式在程序中有说明。/* 步进电机的M16驱动程序 * 功 能:用M16驱动步进电机 * 实现三种驱动方式 * 单四拍驱动、双四拍驱动 * 单双八拍驱动 * 驱动芯片:ULN2803 * 联接方式:PC0-3分别通过2803接A-D * 步进电机公共端接+5V电源 * 建立日期:2008年04月05日 * 作 者:铜河 * 版 本:V1.0 * 修改日期:2008年04月06日 * 主控芯片:M16 * 时钟频率:外部晶体 7.3728MHZ * 编 译 器:ICCAVR 6.31A */#include #include #include delay.h#define RD_KEY() (PINC|0x0F)4)/四按键接于PC4-PC7unsigned 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=4)i=0; break; case 2: /双四拍方式驱动 if(i!=4) /AB、BC、CD、DA驱动 PORTC |= (1i)|(1(i-1); else PORTC |= (1=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=8)i=0; break; default:break; /* 反转操作函数 * 入 口:a 三种工作方式 */void bj_fsf(unsigned char a) switch(a) case 1: /单四拍方式驱动 PORTC |= 1=4)i=0; break; case 2: /双四拍方式驱动 if(i!=4) /AD、CD、BC、AB驱动 PORTC |= (1(3-i)|(1(4-i); else PORTC |= (1=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=8)i=0; break; case 4: default:break; /* 定时器1配置函数 * 工作模式:普通模式 * 工作方式:溢出中断 * 预 分 频:64 * 时钟频率:外部7.3728MHZ */void timer1_init(void) TCCR1B = 0x00; TCNT1H = zhuansu8; TCNT1L = zhuansu&0xFF; TCCR1A = 0x00; TCCR1B = 0x02; /* 定时器1中断函数 */#pragma interrupt_handler timer1_ovf_isr:9void timer1_ovf_isr(void) TCNT1H = zhuansu8; 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(zhuansu62000)zhuansu=62000; break; case 0x02: /S2键处理:转速降低 zhuansu -= 100; if(zhuansu=4)m=1; break

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论