打印

(TI MCU分享)

[复制链接]
1662|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanzhengxin1|  楼主 | 2012-7-5 10:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(TI MCU分享)目前正在做关于msp430超声波测距的软件设计工作。项目中用到的MCU为msp430f235,超声波探头为300k的。对于这样高的频率的超声波探头来说,要想测距远,保证超声波的驱动能力,硬件就大费周折。通过不断的设计修改总算有了进展,由于本人只是做软件的测试工作,所以将软件编写过程中遇到的问题和解决办法与大家分享,交流,共同学习。

相关帖子

沙发
yanzhengxin1|  楼主 | 2012-7-5 11:07 | 只看该作者
(TI MCU分享)
1,软件编写测试过程中要解决300k发送关断的问题。
因为本项目测距工作是要在发送完一定数量的300k方波之后关断,以作为其驱动。用pwm产生?430单片机可以一次产生多路pwm方波,但是他只能一直产生,不能很好的关断,即不能满足我要产生一定数量的方波数。想到很多方法:a,用软件延时,做到的不好控制,也不是很精确。b,用pwm加定时来完成,即用pwm产生方波,然后用时间来控制产生多少个,结果是耗掉太多定时器资源,而且用到中断不好处理。c,到官方论坛找帮助,德仪技术支持给予了很大的帮助,最后问题得到了很好的解决。用定时器去处理。

使用特权

评论回复
板凳
yanzhengxin1|  楼主 | 2012-7-5 11:11 | 只看该作者
(TI MCU分享)
代码如下
#include<msp430f235.h>
unsigned int i;
void int_clk()
{
  unsigned int iq0;
  BCSCTL1 &=~XT2OFF;                    //打开时钟振荡器
   do
   {
      IFG1 &= ~OFIFG;                        // 清除振荡器失效标志
  for (iq0 = 0xFF; iq0 > 0; iq0--);        // 延时,等待XT2起振
   }
   while ((IFG1 & OFIFG) != 0);                // 判断XT2是否起振
   BCSCTL2 |=SELM_2 + SELS;             //MCLK,SMCLK时钟为XT2
   BCSCTL3 &=~ XT2S_2;
}
void timera0(void)
{
  TACCTL0 |= CCIE;
  TACCR0 = 26;
}
void timera1(void)
{
  P1SEL |= BIT2;
  P1DIR |= BIT2;
  TACCTL1 |= OUTMOD_7;
  TACCR1 = 53;
}
void main()
{
  WDTCTL = WDTPW + WDTHOLD;
  int_clk();
  TACTL = TASSEL_2 + MC_1;
  timera1();
  timera0();
  _EINT();
  while(1);
}
#pragma vector = TIMERA0_VECTOR
__interrupt
void timera0_isr(void)
{
  i++;
  if(i==10)
  {
   TACCR1 = 53;
   CCTL0 &=~ CCIE;
  }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

140

帖子

3

粉丝