3642|2

1246

帖子

19

TA的资源

五彩晶圆(初级)

楼主
 

物联网智能家居-厨房之步进电机 [复制链接]

以前没怎么接触过步进电机!于是在网上找到些资料!

28BYJ-48步进电机:

步电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)

厨房原理图中:


IN1、IN2、IN3和IN4分别对应了P3.4、P2.3、P2.4和P2.5

  A P2.5

 B P2.4

 C P2.3

D P3.4

十六制(Port口) 

 1

 0

 0

 0

 0x08

 1

 1

 0

 0

 0x0c

 0

 1

 0

 0

 0x04

 0

 1

 1

 0

 0x06

 0

 0

 1

 0

 0x02

 0

 0

 1

 1

 0x03

 0

 0

 0

 1

 0x01

 1

 0

 0

 1

 0x09

于是定义了

uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆时钟旋转相序表
uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //
正时钟旋转相序表


同时我编写了端口函数:

void Port(unsigned char p)

{

  P2OUT=(0x38&p<<2);

  P3OUT=(0x10&p<<4);

}

用以将各个参数传递给对应的I/O口!

顺便把蜂鸣器的驱动函数也给写了出来:

//  蜂鸣器

void beep(void)

{

  uchar t;

  for(t=0;t<50;t++)

  {

   P3OUT|=BIT5 ;   //产生脉冲

   delay_us(500);

   P3OUT&=~BIT5;

   delay_us(500);

  }

  P3OUT&=~BIT5;    //关闭蜂鸣器

}

接下里就是电机的正反转函数啦:


void motor_ccw(void)

{

  uchar i,j;

  for(j=0;j<8;j++)                 //电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周

  {

 for(i=0;i<8;i++)  //旋转45度

 {

   Port(CCW);

   delay_ms(1);   //调节转速

 }

  }

}


void motor_cw(void)

{

  uchar i,j;

  for(j=0;j<8;j++)

  {

 for(i=0;i<8;i++)  //旋转45度

 {

   Port(CW);

   delay_ms(2);   //调节转速

 }

  }

}


其中的延时程序我用的

#define CPU_F ((double)1000000)//即CPU的MCLK。单位为HZ。本例中的1000000为MCLK=1MHZ 的意思。

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))


至于晶振配置我还是没搞懂

void InitClock(void)
{
  unsigned char k;

  BCSCTL1&=~XT2OFF;  //选择外部8mhz晶振
  do              //等待时钟稳定
  {
    IFG1&=~OFIFG;
    for(k=0xff;k>0;k--);
  }
  while(IFG1&OFIFG);
    TACTL|= TASSEL_2 + ID_3;                       //时钟选择SMCLK,1/8分频,计数器1M频率
}  
我的外部晶振为8M,  1/8分频后,计数器1M频率,这和我的延时中设置的1MHz是相吻合的!可是群里有老大说G2553不支持XT2!那我的这个设置是怎么回事呢?关键是我还能正常起振和分频进行延时!有哪位老大可以为我解惑呀!不胜感激!!



[ 本帖最后由 anananjjj 于 2012-7-11 12:01 编辑 ]

最新回复

全部顶起  详情 回复 发表于 2012-7-11 22:33

点评

有速度!!:victory:  详情 回复 发表于 2012-7-11 12:03
点赞 关注
 

回复
举报

2056

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

回复 楼主 anananjjj 的帖子

有速度!!
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
全部顶起
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表