ATmega64+A3992驱动步进电机

//ATmega 64a 电机驱动板程序
//编译环境 AVR Studio 4.17/AVR GCC
//系统外部时钟16M
//作者:虞恺

//日期:2012.9.17开坑
//***********************************************************************
//
包含文件
//***********************************************************************

#include <string.h>
#include <stdio.h>
//***********************************************************************
//串口及时钟信号定义
#define
F_CPU
16000000
/* 单片机主频为16MHz,用于延时子程序 */
#include <util/delay.h>
//***********************************************************************
#include <avr/io.h>
#include <avr/iom64.h>
#define delay_us(x)     _delay_us(x)    //AVR GCC延时函数 x(us)
#define delay_ms(x)     _delay_ms(x)    //AVR GCC延时函数 x(ms)
//***************************IO口设置***********************************
//水平电机三线SPI接口设置
#define MOTOH_STROBE_H  PORTC |= (1 << PC1)//拉高STROBE片选线
#define MOTOH_STROBE_L  PORTC &=~(1 << PC1)//拉低STROBE片选线
#define MOTOH_CLK_H 
PORTC |=(1 << PC0)//拉高时钟线
#define MOTOH_CLK_L 
PORTC &=~(1 << PC0)//拉低时钟线
#define MOTOH_DATA_H 
PORTG |= (1 << PG1)//拉高数据线
#define MOTOH_DATA_L 
PORTG &=~(1 << PG1)//拉低数据线
//LED指示
#define LedOn
PORTA &=~(1 << PA2)//LED点亮
#define LedOff
PORTA |= (1 << PA2)//LED灭
#define Led
PORTA ^= (1 << PA2)//LED状态取反

//===========================================================2相四线1.8度步进电机相关=============
unsigned long  MotoForward8[]=

{0x4be98,0x4bd30,0x4ba44,0x4b658,0x4b168,0x4ac74,0x4a67a,0x4a07e,0x5667a,0x56c74,0x57168,0x57658,0x57a44,0x57d30,0x57e98,0x57f80,

0x4de98,0x4dd30,0x4da44,0x4d658,0x4d168,0x4cc74,0x4c67a,0x4c07e,0x5067a,0x50c74,0x51168,0x51658,0x51a44,0x51d30,0x51e98,0x51f80};
//以上数组包含了电机的8细分的驱动数据
//======================================================================

//====================三线SPI发送数据给电机芯片

void MOTO_Send(unsigned long  buf)//buf是要发送的数据
{
Led;
unsigned char i;
MOTOH_STROBE_L;
for(i=0;i<19;i++)//一次发19个数据

{
if(buf&0x40000)
MOTOH_DATA_H;//如果首位为1,数据线上送高电平,先送MSB
else MOTOH_DATA_L;//否则送低电平
delay_us(1);
MOTOH_CLK_H;//时钟线的上升沿,驱动芯片读入一位数据
buf<<=1;//数据左移,准备发送下一位数据
MOTOH_CLK_L;//时钟线低
}
MOTOH_STROBE_H;//发送完一帧数据后拉高片选线
}

//*************************************************************************
//
系统初始化子程序 
//*************************************************************************
void system_init(void)
{                                 
  DDRD =0xc2;//设置PD7,PD6,PD1为输出口
  DDRC =0x03;//设置PC1,PC0为输出口
  DDRG =0x03;//设置PG1,PG0为输出口
  DDRA =0x04;//设置PA2为输出口
  DDRB =0xff;
  DDRF =0xff;
  PORTB=0xff;
  LedOff;
}

//*******************************************************
//
主函数
//*******************************************************
int main(void)
{
unsigned char j;
system_init();
for(i=0;i<6;i++)//Led闪动3次

{

Led;

delay_ms(200);

}
LedOff;
MOTO_Send(0x40779);//设置电机芯片A3992
while(1)
{
for(j=0;j<32;j++)//

{

MOTO_Send(MotoForward8[j]);//不停的把数组中的数据发送到电机驱动芯片,此处电机顺时针转

//用上面这个代码,电机工作正常,工作时几乎没有声音,但是如果想反转启用下面那句代码时,

//电机共振,声音很大

//MOTO_Send(MotoForward8[31-j]);//此处电机逆时针转

delay_us(800);//控制此延时,可以控制电机的转速。

}
}
}

百度文库搜索 《两相步进电机驱动器A3992及其应用》

A3992学习记录的更多相关文章

  1. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  2. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  3. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  4. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  5. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  6. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  7. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

  8. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

  9. UWP学习记录7-设计和UI之控件和模式4

    UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...

随机推荐

  1. 炼数成金hadoop视频干货01

    视频地址:http://pan.baidu.com/s/1dDEgKwD 最开始还是讲hadoop的起源,但是和其他垃圾视频不同,不是照本宣科,听了还是受益.作者给人一种感觉就是他是确实把他的经验和体 ...

  2. How to update FVDI Commander driver to latest V2015.6.2

    As FVDI Commander products are upgraded to new versions, I often receive emails from customers askin ...

  3. vs中两张图片的融合

    这个其实就是从csdn上面下载的一个例程.感谢这位同学的总结,与源码的有偿分享. 本随笔就是把它通过4个随笔的拆分,实现的. 可以通过: http://blog.csdn.net/masibuaa/a ...

  4. InvocationTargetException

    在使用反射的适合,调用的方法无论抛出什么异常,都会变成InvocationTargetException,要想得到原始的异常,必须使用getTargetException()

  5. Mac下批量打包

    两种方式: 第一种:有源码 这种方式比较 简单.利用ant打包.直接shell脚本修改 配置渠道号的文件.我们目前是用的umeng的.在AndroidManifest.xml里.提供一个简单的修改渠道 ...

  6. 【转】创业C2C(Copy To China):停车位共享APP,用户、市政能够买账?

    如果周六中午想开车到旧金山的Mission吃顿早午餐,笔者劝您还是省省吧.因为不光是到了吃饭的地儿排队得耗上一个小时,就是满大街的兜圈子找停车位都能折腾死人.那个时候您或许就明白了,其实最苦的并不是买 ...

  7. Java Concurrency - ReadWriteLock & ReentrantReadWriteLock

    锁所提供的最重要的改进之一就是 ReadWriteLock 接口和它的实现类 ReentrantReadWriteLock.这个类提供两把锁,一把用于读操作和一把用于写操作.同一时间可以有多个线程执行 ...

  8. IOS Delegate & protocal

    总结一下: delegate是一个方式,程序组成单元之间分工的一种协调思想 protocal 这个东西不能单独说,要与它相关的两个主要东西一起说,一个是 委托者 通常是VIEW, 一个是被委托者 通常 ...

  9. TSQL基础(一) - 查询

    select 1.查询一张表(orders)的所以纪录 select * from Orders 2.查询一张表(orders)某字段的所有记录 select OrderID,OrderDate fr ...

  10. 交叉编译lsof for android

    Android 自带的那个 lsof 实际上是 toolbox 里的,功能十分单一,除了显示出所有进程的所有打开的文件外就什么都不能做,连说明也没有 :-( 于是为了 htop 用着爽一点,还是自己编 ...