原创 步进电机驱动-AMIS30542开发笔记04程序设计

2014-1-23 07:15 1338 7 9 分类: 工业电子 文集: 步进电机驱动笔记

 

下面的源代码实现了AMIS-30542简单功能的实现,其中

  • 通过计时器0输出简单的方波,并且正向转动4圈以后,反转。
  • 通过SPI进行简单的寄存器的配置,上电初始化即完成寄存器的配置。
  • 其他功能未配置

测试平台如下:

  • 直流24V电源
  • 示波器一台
  • ATMEGAL32单片机+仿真器一套
  • AMIS-30542测试小板一套
  • 57步进电机一台

下面进行简单的介绍

#include
#include
#include
#include
#include"SPI.h"
#define uchar unsigned char
#define uint unsigned int 
#define ulong unsigned long

#include


//SPI interfage define
#define SPI_CS PB4
#define SPI_DO PB5
#define SPI_DI PB6
#define SPI_SCK PB7


//Define SPI COMMAND
/*以下定义读写命令
#define Read_WR 0X00
#define Read_CR0 0X01
#define Read_CR1 0X02
#define Read_CR2 0X03
#define Read_CR0 0X04
#define Read_SR1 0X05
#define Read_SR2 0X06
#define Read_SR3 0X07
#define Read_SR3 0X08
*/
#define Write_WR 0X80
#define Write_CR0 0X81
#define Write_CR1 0X82
#define Write_CR2 0X83
#define Write_CR3 0X88

 

//Int0 for WD and Int1 for ERR
#define WD PD2
#define ERR PD3

//Phase and direct for motor 
#define Phase PB3
#define DIR PB2

//Define for CS 
//#define CS PB1
#define CLR PB0

//Define for ADC 
#define SLA PA0

/*利用定时器0输出脉冲和方向信号

//#pragma interrupt_handler Timer0Interrupt:12
//#pragma interrupt_handler Int0Interrupt:2  
#pragma interrupt_handler Timer0Interrupt:12

/******************************
Time0 init
******************************/
void Timer0_Init(void)
{
 TCCR0|=0x05;      //fosc/1024
 TCNT0=248;        //f=64       
 SREG|=BIT(7);    //
 TIMSK|=BIT(TOIE0);//
 DDRB|=BIT(Phase);   
      
}

void Timer0Interrupt(void)
{
 static uint i,j;
 TCNT0=248; 
 i++;
 if(i>=6400)
 {
 i=0;
//  j++;
   // if(j>=20)j=0;
  PORTB^=BIT(DIR);  
  //uart_display(j);

 }
 
 //OCR1A=2000;
 PORTB^=BIT(Phase);
}

 

/*SPI初始化和读写程序,这里只利用到了写寄存器程序
void Spi_init(void)
{
  DDRB|=BIT(SPI_CS)|BIT(SPI_DO)|BIT(SPI_SCK);   
  DDRB&=~BIT(SPI_DI);             
  PORTB|=BIT(SPI_CS);              
           
 
  SPSR|= 0x00;                        //加速  
  SPCR = 0x00;
  SPCR|= 0x5c;                    

}
void SPI_Write(uchar a)
{
 SPDR=a;
 while(!(SPSR&(1< }
uchar SPI_Read(void)
{
 while(!(SPSR&(1<  return SPDR;
}
uchar ReadWriteSPI(uchar Data)
{
    SPDR=Data;
    while(!(SPSR & 0x80));
 return SPDR;
})));
)));

/******************************
Diver initiation

这里的驱动器初始化程序,配置了4个功能配置寄存器,没有使用到看门狗程序
****************************/

void Driver_init(void)
{
 PORTB&=~BIT(SPI_CS);
 SPI_Write(Write_CR0);
 SPI_Write(0x68);//Full step,current=500mA
 PORTB|=BIT(SPI_CS);
 
    /*
 PORTB&=~BIT(SPI_CS);
 SPI_Write(Write_CR0);
 SPI_Write(0x6F);//Full step,current=500mA
 PORTB|=BIT(SPI_CS);

  PORTB&=~BIT(SPI_CS);
 SPI_Write(Write_CR0);
 SPI_Write(0x76);//Full step,current=500mA
 PORTB|=BIT(SPI_CS);

  PORTB&=~BIT(SPI_CS);
 SPI_Write(Write_CR0);
 SPI_Write(0x7F);//Full step,current=500mA
 PORTB|=BIT(SPI_CS);
 */
 
  PORTB&=~BIT(SPI_CS);
 SPI_Write(Write_CR1);
 SPI_Write(0x01);//
 PORTB|=BIT(SPI_CS);
 
 PORTB&=~BIT(SPI_CS);
 SPI_Write(Write_CR2);
 SPI_Write(0x90);//Full step,current=500mA
 PORTB|=BIT(SPI_CS);
 
 PORTB&=~BIT(SPI_CS);
 SPI_Write(Write_CR3);
 SPI_Write(0x11);//Full step,current=500mA
 PORTB|=BIT(SPI_CS);
}
void WD_Reset(void)
{
 PORTB&=~BIT(SPI_CS);
 SPI_Write(Write_WR);
 SPI_Write(0XF8);
 PORTB|=BIT(SPI_CS);
}

/*************************************************************************/

/*初始化端口中,配置输入输出


void IO_Init(void)
{
 DDRB|=BIT(DIR);
 PORTB|=BIT(DIR);//PB2 DIR=1;
 DDRD&=~BIT(WD);
 DDRD&=~BIT(ERR);
 DDRA&=~BIT(SLA);
 DDRB|=BIT(CLR);
 DDRB|=BIT(DIR);
 DDRB|=BIT(Phase);
 PORTB|=BIT(Phase);
}
void Delay(void)
{
 uint  i,j;
 for(i=20;i>0;i--)
 {
 for(j=80;j>0;j--);
 }
}

/*主函数中,初始化完成以后,进行延时循环。
void main(void)
{

 IO_Init();
 Spi_init();
 Driver_init();
  WD_Reset();
   Timer0_Init();
  // DDRA|=BIT(PA4);
  PORTB&=~BIT(SPI_DO);
 while(1)
 {
 //Driver_init();  
  // WD_Reset();
   //  Driver_init();
   //PORTA^=BIT(PA4);
    Delay();
 }
}

文章评论2条评论)

登录后参与讨论

用户1714690 2014-2-10 07:27

嗯我也是了解了一下这个芯片,然后打板子自己测试了一下它的效果。欢迎一起讨论。

用户1625273 2014-1-26 09:36

了解一下。
相关推荐阅读
用户1714690 2015-08-13 11:42
史上最高性价比PCI运动控制卡:基于MCX314AL,提供开发包!
  小日本的3轴插补运动控制卡芯片不是一般的贵啊,看看下面的某宝提供的报价:常用的基于PCI的运动控制卡已经在国内大规模应用,主要有如下问题: 所以基于这种芯片的...
用户1714690 2015-08-03 15:06
【博客大赛】TMC262步进伺服开发笔记1-选定STM32F103C8T6做为控制器
  现在手里已经有了两个方案: 一个STC单片机的方案,这个是网上一个工程师设计的,方案的程序很简单,简单的进行参数配置,然后驱动电机转动就OK,完全没有发挥出TMC262的优势。 一...
用户1714690 2015-08-03 15:06
【博客大赛】TMC262步进伺服开发笔记2-影响步进电机行为的几个参数
电机设置,首先得了解哪些参数会对电机的行为有直接或者间接的影响。 参数 描述 设置 电机...
用户1714690 2014-12-26 17:56
自己动手设计一款MP3音乐播放器-创建自己的公众号
    罗永浩今年的表现确实让各界大跌眼镜,这几个月销声匿迹也是情理之中的事情,我们确实该吐槽他的锤子手机,可是他的死磕精神呢? ...
用户1714690 2014-12-13 01:19
自己动手设计一款MP3音乐播放器:SDIO通信之物理层描述1
物理层一共有以下的内容需要了解 存储卡系统的内容,包括总线,卡容量等,一些命令格式,响应格式等内容,这个是必须完全理解。 SD卡的功能描述,包括复位,初始化和识别流程,读写...
用户1714690 2014-12-12 11:51
自己动手设计一款MP3音乐播放器
 最近打算利用晚上的时间来死磕一款MP3,之前一直做的都是工控之类的项目,并且偏向于硬件,最近打算做一款有意思一点的产品,利用晚上的时间来做,项目可能会拖的比较久。   当然也不能自己埋头...
我要评论
2
7
关闭 站长推荐上一条 /2 下一条