ATMEGA32控制步进电机

分享到:

/*******************************************************************
          程序是调试通过的,可以直接使用,若单片机不一样,

          只需要修改IO接口部分就可以正常工作:开发软件 ICC AVR *******************************************************************/



#include <stdio.h>
#include <iom16v.h>


#define uchar unsigned char
#define uint   unsigned int

//#define M2           PD6     //M1、M2: 00 表示步进电机工作在整步方式, 10 为半步方式,
//#define M1           PD5     //        01 为1/ 4 细分方式,            11 为1/ 8 细分方式;
#define CK1          PA2
#define CW_CWW       PA1
#define ENABLE_L     PA0


/*******************************************************************
                             串口输出显示
*******************************************************************/
void usart_putchar(uchar data)
{
    if(data=='\n')
{
      usart_putchar('\r');
}
    while(!(UCSRA & (1<<UDRE)));
    UDR=data;
}
/*******************************************************************
                             通过串口发送控制命令:安字母K启动
*******************************************************************/
uchar usart_getchar(void)
{
    while(!(UCSRA & (1<<RXC)));
    return UDR;
}

/*******************************************************************
                             延时函数
*******************************************************************/
void delay(uint i)//延时函数
{
uint j,k;
for(j=0;j<i;j++)
for(k=0;k<100;k++);
}
/*******************************************************************
                             串口初始化
*******************************************************************/

void uart_init(void)          //UART初始化
{ //DDRD = 0x02;
     DDRD = 0xaf;
     PORTD = 0xff;

UCSRA = 0x02; /*无倍速*/
     UCSRB = 0x18; /*允许接收和发送*/
     UCSRC = 0x06; /*8位数据,1位停止位,无校验*/
     UBRRH = 0x00;
     UBRRL = 12; /*9600*/

}



int main(void)
{
    uchar m;
uint n;

    DDRA = 0x7;
PORTA |= ( 1<<ENABLE_L );

/*******************************************************************
                             若硬件控制,可以屏蔽下面2行
*******************************************************************/
//PORTD &= ~( 1<<M2);
//PORTD |= ( 1<<M1 );

   //PORTA &= ~( 1<<CW_CWW);//反转
    PORTA |= ( 1<<CW_CWW );//正转
uart_init( );
  

while(1)
{
     //m = usart_getchar();
    // if( m == 'k' )
   //{  
      PORTA &= ~( 1<<ENABLE_L );
      for(n=0;n<200;n++)
    {
             PORTA |= (1<<CK1);
          delay(1);
          PORTA &= ~(1<<CK1);
          delay(1);
    }
    PORTA |= ( 1<<ENABLE_L );
  
    //m=0;
    //usart_putchar('o');
    //usart_putchar('k');
   //}
}
}

继续阅读
基于ATmega32单片机的灭火机器人设计与实现

机器人竞赛是近年来迅速开展起来的一种对抗活动,它涉及人工智能、机械、电子、传感器、精密机械等诸多领域。通过竞赛可以培养学生的创新意识、动手能力、团队写作能力等。其中灭火比赛是开展范围最广、影响最大的机器人竞赛项目之一。

基于ATmega32的漏电保护器智能化测试仪的设计

本测试仪操作简单,解决了手动测试方法存在的测量不准确的问题,达到了自动测量的目的,可检测在线与非在线运行的漏电保护器,提高了检测漏电保护器性能的水平,为进行漏电保护器工作性能的研究、品质检验及生产调试提供了技术手段。仪器设计充分利用了ATmega 32内置的各种功能,使硬件电路结构简单,有效提高了仪器的性价比,已在多家企业和科研单位使用,使用结果表明,仪器工作可靠,达到预期的技术指标。

基于AVR单片机的LED显示屏的灰度设计与实现

LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还

基于ATmega128编码器控制步进电机的平衡系统

提起编码器,可能大家并不陌生,因为这东西真的很常用,现在的主流编码器一般精度都是比较高的,基本上都是基于光栅的。毕竟用硬件用电刷做到512精度以上是很困难的,而且成本也是很高的,这里我就不多说什么了。

基于单片机的仪表步进电机的细分控制原理及应用

仪表步进电机  步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机某相线圈加一脉冲信号,电机

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss