5144|10

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

大家帮帮忙,怎么用定时器控制电机按一定一律旋转呢啊 [复制链接]

昨天给一个师妹做了一个课程设计,使用msp430f149控制电机的正反转来实现洗衣机的最简单的功能,我本来写了一个程序,觉得理论上还行,但是今天在电路板上测试却不能实现呢,课程设计的目的是控制电机转动,规律为  正转4s-----暂停1s------反转4s-----暂停1s,如此循环,我是用的定时器A设置CCR0,采用增计数模式通过中断的方式,现在不行啊,哪位可以帮一下忙,小弟第一次发帖,在此先谢谢了

最新回复

自己还不懂就帮师妹弄毕业设计。是不是有所企图啊 看你挺用心的,说点儿我知道的吧。首先是可控硅的控制,chunyang已经说了,强电和弱点需要隔离,这个隔离可以用变压器,也可以用光耦,我去年帮别人做毕业设计的时候正好弄过光耦控制可控硅的电路,你看看吧. [attach]77949[/attach] 定时的问题chunyang说的比较详细了,自己琢磨一下吧 [ 本帖最后由 jishuaihu 于 2011-12-15 22:05 编辑 ]  详情 回复 发表于 2011-12-15 21:59
 
点赞 关注

回复
举报

8

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
就是通过P2.0和P2.1口控制电机正反转

1.jpg (106.72 KB, 下载次数: 0)

1.jpg
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
好心人看一看给小弟一点建议哈,谢谢
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

4
 
高手指点一下哈,谢谢了
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

5
 
这是我写的程序,肯定不对啊,找找错误点吧
#include  
#define keyin  (P1IN & 0x0f)
typedef unsigned char uchar;
typedef unsigned int  uint;
uint temp=0,m=0,flag,x;
void delay(void);
void qiangxi(void);
void ruoxi(void);
/****************主函数****************/
void main(void)
{  
    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
    CCTL0 = CCIE;                   //使能CCR0中断           
    TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式,8分频
                                    //ACLK时钟频率为32768Hz,8分频后为4096
                                    //所以1秒时间为计数值为4096
    P1DIR = 0xf0;                   //设置P1.0—P1.4口为输入,其余口输出
    P2DIR = 0xff;                   //设置P2口方向为输出
    P2OUT = 0x00;                   //设置P2口输出为低电平
    _EINT();                        //使能全局中断
    while(1)
    {
        if(keyin != 0x0f)           //如果有键被按下
        {
            delay();                //延时消抖
            if(keyin != 0x0f)       //再次检测按键状态
            {
               
                temp=keyin;
                while(keyin != 0x0f);     //等待按键被放开
                switch(temp)              //转换键值   
                {
                case 0x0e:                //按键1被按下,减时间
                          m -=m;
                          while(m<=0) m =0;
               
                case 0x0d:                //按键2被按下,增时间
                          m +=m;
                          while(m==60) m =0;
                 
                case 0x0b:                 //按键3被按下,弱洗涤
                          for(m=m;m>0;m--)  
                            {
                              for(x=6;x>0;x--)
                              {
                               ruoxi();
                              }
                             }
                        
                case 0x07:                 //按键4被按下,强洗涤
                          for(m=m;m>0;m--)
                            {
                              for(x=6;x>0;x--)
                              {
                               qiangxi();
                              }
                             }
                default :
                          break;           
                }
               
            }
        }
    }
}



#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{  
  if(flag==1)
    P2OUT =0x00,
    flag =0;
}
/*******************************************
函数名称:delay
功    能:用于按键消抖的延时
********************************************/
void delay(void)
{
    uint tmp;
   
    for(tmp = 12000;tmp > 0;tmp--);
}
/*******************************************
函数名称:qiangxi
功    能:用于控制洗衣机处于强洗涤状态
********************************************/
void qiangxi(void)
{
   P2OUT =0x01;
   CCR0  =16384,flag=1;                     //正转4s
   CCR0  =4096;                             //暂停一秒
   P2OUT =0x02;
   CCR0  =16384,flag=1;                     //反转4s
   CCR0  =4096;                             //暂停1s
   
}
/*******************************************
函数名称:ruoxi
功    能:用于控制洗衣机处于弱洗涤状态
********************************************/
void ruoxi(void)
{
   P2OUT =0x01;
   CCR0  =12288,flag=1;                     //正转3s
   CCR0  =8192;                             //暂停2秒
   P2OUT =0x02;
   CCR0  =12288,flag=1;                     //反转3s
   CCR0  =8192;                             //暂停2s
   
}
 
 
 

回复

1万

帖子

142

TA的资源

版主

6
 
楼主电路设计首先就有问题,220V的交流电机的转向功能要设计成互锁逻辑,低压部份和高压部份要隔离,可控硅部份的电路也要正确。
关于程序,可设置一个基本时间常数的定时器溢出中断,在中断服务程序中根据进入中断的次数对一个专门定义的时长寄存器进行累加,到预置值则调用转向控制程序。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 chunyang 的帖子

谢谢版主,硬件图确实有问题啊,小弟也是没经验,但是软件方面,对于一定时常的定时器A我可以一直累积吗,在整个程序中我也用的是定时器A的中断
 
 
 

回复

1万

帖子

142

TA的资源

版主

8
 
不是对定时器本身累加,定时器配置为自重载模式,每次溢出发起一次中断,在中断程序中开一个变量(物理上是在内存中),对此变量进行累加。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼 chunyang 的帖子

恩 ,谢谢版主,我好好想一想该怎么弄,谢谢指点,嘿嘿
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

10
 

自己还不懂就帮师妹弄毕业设计。是不是有所企图啊 看你挺用心的,说点儿我知道的吧。首先是可控硅的控制,chunyang已经说了,强电和弱点需要隔离,这个隔离可以用变压器,也可以用光耦,我去年帮别人做毕业设计的时候正好弄过光耦控制可控硅的电路,你看看吧.

定时的问题chunyang说的比较详细了,自己琢磨一下吧

[ 本帖最后由 jishuaihu 于 2011-12-15 22:05 编辑 ]
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 10楼 jishuaihu 的帖子

谢谢了,真是受益匪浅,嘿嘿
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表