您的位置 首页 产品

根据Mega128编码器操控步进电机的平衡体系

提起编码器,可能大家并不陌生,因为这东西真的很常用,现在的主流编码器一般精度都是比较高的,基本上都是基于光栅的。毕竟用硬件用电

提起编码器,或许我们并不生疏,由于这东西真的很常用,现在的干流编码器一般精度都是比较高的,基本上都是依据光栅的。毕竟用硬件用电刷做到512精度以上是很困难的,并且本钱也是很高的,这儿我就不多说什么了。

编码器一般共有三个主通道,每个主通道有分为两个分支;一个VCC,一个GND,一条屏蔽线。前两个通道一般是比较准确的脉冲信号,且之间有四分之一左右的相位差用来判别正回转的,第三通道基本上是旋转一周才会有一个脉冲信号的那种。
说到步进电机,就必定要有一个适宜的电机驱动,个人是比较喜爱用L298n这款芯片的,由于它价格低,操作比较简单。
关于这个体系,我是用128的外部中止的下降沿触发方法来捕捉编码器的脉冲的,硬件衔接方面电机驱动和主控芯片必定要注意地线的衔接。
下面是程序的完好代码下载地址:http://www.51hei.com/f/bmma.rar
这儿是delay.h====================================================================//依据CPU时钟频率挑选#ifndef F_CPU//#define F_CPU 7372800//#define F_CPU 8000000//#define F_CPU 11059200//#define F_CPU 12000000#define F_CPU 16000000#endif//------------------------------------------------------------------------------//1、2、3、5和10us的准确延时,用于需求准确时刻的场合,比方DS18B20//------------------------------------------------------------------------------#if   F_CPU == 7372800#define DELAY_1US NOP();NOP();NOP();NOP();NOP();NOP();NOP()#define DELAY_2US DELAY_1US;DELAY_1US#define DELAY_3US DELAY_1US;DELAY_1US;DELAY_1US#define DELAY_5US DELAY_2US;DELAY_3US#define DELAY_10US DELAY_5US;DELAY_5US#elif F_CPU == 8000000#define DELAY_1US NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP()#define DELAY_2US DELAY_1US;DELAY_1US#define DELAY_3US DELAY_1US;DELAY_1US;DELAY_1US#define DELAY_5US DELAY_2US;DELAY_3US#define DELAY_10US DELAY_5US;DELAY_5US#elif F_CPU == 11059200#define DELAY_1US NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP()#define DELAY_2US DELAY_1US;DELAY_1US#define DELAY_3US DELAY_1US;DELAY_1US;DELAY_1US#define DELAY_5US DELAY_2US;DELAY_3US#define DELAY_10US DELAY_5US;DELAY_5US#elif F_CPU == 12000000#define DELAY_1US NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP()#define DELAY_2US DELAY_1US;DELAY_1US#define DELAY_3US DELAY_1US;DELAY_1US;DELAY_1US#define DELAY_5US DELAY_2US;DELAY_3US#define DELAY_10US DELAY_5US;DELAY_5US#elif F_CPU == 16000000#define DELAY_1US NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP()#define DELAY_2US DELAY_1US;DELAY_1US#define DELAY_3US DELAY_1US;DELAY_1US;DELAY_1US#define DELAY_5US DELAY_2US;DELAY_3US#define DELAY_10US DELAY_5US;DELAY_5US#endif//------------------------------------------------------------------------------//函数声明//------------------------------------------------------------------------------void delay_nus(unsigned int);//<10us时差错较大,用于无须准确延时的场合void delay_nms(unsigned int);#endif//__DELAY_H====================================================================这儿是delay.c====================================================================//|文件名称|delay.c//|--------|--------------------------------------------------------------------//|描    述|延时文件//|--------|--------------------------------------------------------------------//|说    明|delay_us(unsigned int time)用于不需准确守时的场合,<10us时差错较大//|        |若要准确守时用delay.h里的宏//|--------|--------------------------------------------------------------------//|调用文件|delay.h//|--------|--------------------------------------------------------------------//|作    者|//|--------|--------------------------------------------------------------------//|版    本|//|--------|--------------------------------------------------------------------//|时    间|//|--------|--------------------------------------------------------------------//|E-mail  |//|--------|--------------------------------------------------------------------//|开发环境|ICCAVR6.31//==============================================================================#include "delay.h"#if F_CPU == 7372800void delay_nus(unsigned int time){unsigned int i;for(i=0;i

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/255248.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部