430 方波问题

2019-03-24 11:38发布

最近刚学习430 手上有F4250型号
想问问大家 能不能用430产生一个100K方波 然后实现相位平移呢?
或者哪位大虾可以提供以下思路,最好实现过。因为我初学有些算法还不能确定能不能做出来。
谢谢各位了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
wangfuchong
1楼-- · 2019-03-26 07:56
本帖最后由 wangfuchong 于 2014-4-27 22:37 编辑

今天测试一些msp430以前有疑问未确定的特性,也就顺带写了段程序测试一下你这个问题

我用的是MSP430G2553简单型的单片机,不过TimerA应该是一样的,只不过内部CCR模块多少罢了


  1. #include "io430.h"
  2. //MSP430G2553

  3.   /* DCOCTL  Calibration Data for 16MHz */
  4. __no_init volatile unsigned __READ char CALDCO_16MHZ @ 0x10F8;
  5.   /* BCSCTL1 Calibration Data for 16MHz */
  6. __no_init volatile unsigned __READ char CALBC1_16MHZ @ 0x10F9;

  7. volatile signed char step=1;//控制移相步进,数值要小 ,否则会出错。最好也就是1,2,3之类 ,能多大要计算和试验


  8. int main( void )
  9. {
  10.   // Stop watchdog timer to prevent time out reset
  11.   WDTCTL = WDTPW + WDTHOLD;
  12.   
  13.   P1OUT = 0;
  14.   P1DIR = BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
  15.   P1IES = 0;
  16.   P1IFG = 0;
  17.   
  18.   P2OUT = 0;
  19.   P2SEL = BIT2 + BIT4;//定时器的TA1CCR1和TACCR2的输出,也就是输出两个方波的引脚
  20.   P2DIR = BIT0 + BIT1 + BIT2 + BIT3+BIT4 + BIT5 + BIT6 + BIT7;
  21.   P2IES = 0;
  22.   P2IFG = 0;
  23.   P3OUT = 0;
  24.   P3DIR = BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
  25.   
  26.   BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;
  27.   if (CALBC1_16MHZ != 0xFF)
  28.   {
  29.     DCOCTL = 0x00;
  30.     BCSCTL1 = CALBC1_16MHZ;      
  31.     DCOCTL = CALDCO_16MHZ;
  32.   }
  33.   BCSCTL1 |= XT2OFF + DIVA_0;
  34.   BCSCTL3 = XT2S_0 + LFXT1S_2;
  35.   
  36.   __delay_cycles(8000000);
  37.   __bis_SR_register(GIE);
  38.   
  39.   TA1CCR0 =79;//MCLK=SMCLK=16MHz,所以定时器时钟也是16MHz,输出模式4,所以要多除以2
  40.   //TA1CCTL0=CCIE;
  41.   TA1CCTL1 = OUTMOD_4;
  42.   TA1CCR1 = 39;
  43.   TA1CCTL2=OUTMOD_4+CCIE;
  44.   TA1CCR2 = 39;
  45.   TA1CTL = TASSEL_2 + ID_0 + MC_1;
  46.   
  47.   while(1)
  48.   {
  49.     __no_operation();
  50.   }
  51.    
  52.   return 0;
  53. }

  54. #pragma vector=TIMER1_A1_VECTOR
  55. __interrupt void TIMER1_A1_ISR_HOOK(void)
  56. {
  57.   //static unsinged char step=1;//进入中断实际上定时器已经过了几个TACLK,因为TACLK等于MCLK,很快。所以CCRX加一个很小的数值应该不会引起突变
  58.   static unsigned char count=0;
  59.   static unsigned int countLong=0;//countLong仅仅是我为了在老旧模拟示波器上观看,用数字示波器可删除countLong及相关。
  60.   countLong++;
  61.   if(countLong>1000)
  62.   {
  63.     TA1CCR2+=step;
  64.     if(TA1CCR2>TA1CCR0)
  65.     {
  66.       if(step>0)
  67.       {
  68.         TA1CCR2=0;//TA1CCR2-TA1CCR0-1;
  69.       }
  70.       else if(step<0)
  71.       {
  72.         TA1CCR2=79;//TA1CCR2+TA1CCR0+1;
  73.       }
  74.     }
  75.    
  76.     count++;
  77.     if(count>156)
  78.     {
  79.       if(step>0) step=-1;
  80.       else step=1;
  81.       count=0;
  82.     }
  83.     countLong=0;
  84.   }
  85.   TA1CCTL2&=~CCIFG;
  86. }
复制代码
演示视频:



用模拟示波器演示了一下,没有数字示波器,用一个网上几十元的所谓逻辑分析仪看了一下,也没看到突变,不过您还得用数字示波器才能确定一下吧。点击图片可看大图放大
捕获2.JPG


不知道您的应用是什么?我想一般在主程序中根据反馈设定step为-1,0,1即可吧?一般不需要多大的步进吧?

关键的要点就是:进入中断实际上定时器已经过了几个TACLK,因为TACLK等于MCLK,很快。所以CCRX加一个很小的数值应该不会引起突变



wangfuchong
2楼-- · 2019-03-26 10:03
 精彩回答 2  元偷偷看……
walm2622
3楼-- · 2019-03-26 15:20
本帖最后由 walm2622 于 2014-4-28 14:08 编辑
wangfuchong 发表于 2014-4-27 22:29
我在13楼中说:比较输出是有延时好像
这个有错误,今天也测了这个,发掘没有。

简直~~~不知道说什么好!!(略感动)总之非常感谢你花时间来帮我看程序!!这两天没怎么上论坛没有及时回复。
你给的资料我正在吸收,目前已经移植过来了。
用数字示波器观察 +=setp 来赋值暂时没发现突变,我之前用外部按键中断来修改setp值 不知道是不是在这个环节上出问题,等我再研究研究。
你15L那个实验很有趣,我平时使用时候很少在时延和语句引起的时间差的问题。
其实我之前使用翻转I/O的方法输出方波的时候,注意到在中断里面多添加一句语句,输出频率就会降低一些。也不知道用什么方法检测,也只是猜测,可能是执行一条语句的时候,计数器已经经过了很多个数了。
你测试的这些我平时都很少接触呢!而且我的手段很少,还得继续学习,弄明白这些对解决实际问题有很大的帮助啊,。
再次感谢你的回复,给我很大的启发。

wangfuchong
4楼-- · 2019-03-26 19:20
本帖最后由 wangfuchong 于 2014-4-28 16:28 编辑

客气了 ,仅供参考,很可能有 错误的地方

您说移植,那可要仔细考虑行不行 呀
我想就是原理性 的能用 ,step就 设为1,因为方波频率 100K,也就是 中断频率也是 100K,已经 非常快了,调整到 需要 的移相幅度 也是很快的。
中断中代码尽量短,因为中断频率太高,而且主程序还要处理其它任务可能有其它中断占用时间,所以其它中断的运行时间(包括进入和退出中断的时间)也要短,理论上优先级比定时器高的所有中断加起来不能超过1/100K,这点要注意,很可能这种方式不能适合应用情况。
step=0时,可以不用再中断,关闭定时器中断,避免频繁中断。
因为这种方式不一定适合,所以也可以考虑其它方法,关键是新的CCR2值的设置位置(在0和CCR0之间)在哪里,相对于在设置时的TAR以及CCR1的位置!
walm2622
5楼-- · 2019-03-26 21:39
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章