3845|17

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

430 方波问题 [复制链接]

最近刚学习430 手上有F4250型号
想问问大家 能不能用430产生一个100K方波 然后实现相位平移呢?
或者哪位大虾可以提供以下思路,最好实现过。因为我初学有些算法还不能确定能不能做出来。
谢谢各位了

最新回复

本帖最后由 wangfuchong 于 2014-4-28 16:28 编辑 客气了 ,仅供参考,很可能有 错误的地方 您说移植,那可要仔细考虑行不行 呀 我想就是原理性 的能用 ,step就 设为1,因为方波频率 100K,也就是 中断频率也是 100K,已经 非常快了,调整到 需要 的移相幅度 也是很快的。 中断中代码尽量短,因为中断频率太高,而且主程序还要处理其它任务可能有其它中断占用时间,所以其它中断的运行时间(包括进入和退出中断的时间)也要短,理论上优先级比定时器高的所有中断加起来不能超过1/100K,这点要注意,很可能这种方式不能适合应用情况。 step=0时,可以不用再中断,关闭定时器中断,避免频繁中断。 因为这种方式不一定适合,所以也可以考虑其它方法,关键是新的CCR2值的设置位置(在0和CCR0之间)在哪里,相对于在设置时的TAR以及CCR1的位置!   详情 回复 发表于 2014-4-28 16:19
 
点赞 关注(1)

回复
举报

1119

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
有心无力啊~~~~
 
 

回复

2886

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
可以,可以用msp430的PWM

点评

PWM可以输出 但是看了手册好像只能对占空比进行调控。  详情 回复 发表于 2014-4-25 12:08
 
个人签名昵称:灰小子
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

4
 
应该可以吧?
这台电脑上没有手册,没法查

也许最小相移角有限制(即使有,也即小),你有这方面的要求么?

点评

我需要实现的相移范围在pi/4~7*pi/4。如果能实现360度相移角最好! 不过如你说的相移角很小,但是可以实现相移的话,方便把方法告诉我吗?我在手册上只找到了频率的调控和PWM占空比的调控。 或者说手册那个地方提  详情 回复 发表于 2014-4-25 12:30
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

5
 
exiao 发表于 2014-4-24 15:40
可以,可以用msp430的PWM

PWM可以输出 但是看了手册好像只能对占空比进行调控。
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

6
 
wangfuchong 发表于 2014-4-24 21:57
应该可以吧?
这台电脑上没有手册,没法查


我需要实现的相移范围在pi/4~7*pi/4。如果能实现360度相移角最好!
不过如你说的相移角很小,但是可以实现相移的话,方便把方法告诉我吗?我在手册上只找到了频率的调控和PWM占空比的调控。
或者说手册那个地方提到,麻烦指点一下。非常感谢!

点评

请问所谓实现了相移,在相移前到相移后如果显示出来都是什么样波形过程呢?  详情 回复 发表于 2014-4-25 15:13
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

7
 
walm2622 发表于 2014-4-25 12:30
我需要实现的相移范围在pi/4~7*pi/4。如果能实现360度相移角最好!
不过如你说的相移角很小,但是可以 ...

请问所谓实现了相移,在相移前到相移后如果显示出来都是什么样波形过程呢?

点评

方波 我希望得到的是100K的方波。 或者这样说 能够输出两路频率相等(100KHz),50%占空比PWM信号,能实现相位差的调控。前面说的范围大概是差值不知道你要问的是不是 我说的这个!?  详情 回复 发表于 2014-4-25 16:56
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

8
 
wangfuchong 发表于 2014-4-25 15:13
请问所谓实现了相移,在相移前到相移后如果显示出来都是什么样波形过程呢?

方波 我希望得到的是100K的方波。
或者这样说 能够输出两路频率相等(100KHz),50%占空比PWM信号,能实现相位差的调控。前面说的范围大概是差值不知道你要问的是不是 我说的这个!?
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

9
 
开始你没说清楚呀

首先即使可以,连续调控可能也是有分辨率的问题

原来是这样的问题,还没想过怎样实现或者以前想过忘了.记得好像在http://www.deyisupport.com/上看到过类似问题,你搜索看看

点评

嗯嗯 分辨率我也考虑过 不过这是利用I/O翻转得出的PWM信号 如果时钟信源频率不高(如:1MHz),那分辨率就很低了。430内部有PWM输出 现在我的想法是利用输出配合计数器改变相位! 你说的这个社区我之前也在里面提  详情 回复 发表于 2014-4-26 13:16
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

10
 
wangfuchong 发表于 2014-4-25 22:14
开始你没说清楚呀

首先即使可以,连续调控可能也是有分辨率的问题

嗯嗯 分辨率我也考虑过 不过这是利用I/O翻转得出的PWM信号 如果时钟信源频率不高(如:1MHz),那分辨率就很低了。430内部有PWM输出 现在我的想法是利用输出配合计数器改变相位!

你说的这个社区我之前也在里面提问了,不过还是非常感谢你的回答。
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

11
 
你要不这样试试看?
TACCR0设置周期
TACCR1和TACCR2都设置为模式4也就是toggle模式输出,TACCR1和TACCR2设置为同样的值应该是同相吧?TACCR2加上一个值(超过TACCR0即再减去一个TACCR0值)是不是就可以实现移相?

点评

嗯这个方法确实有效,可以实现相移,不过在一个周期内仅可以实现180度移相。CCR2减去一个CCR0值是不是又回到180度之前的位置,貌似超过不了180。 而且我在设置CCR2连续减一或加一的时候 用示波器观察在波形上出现断  详情 回复 发表于 2014-4-26 22:14
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

12
 
wangfuchong 发表于 2014-4-26 21:27
你要不这样试试看?
TACCR0设置周期
TACCR1和TACCR2都设置为模式4也就是toggle模式输出,TACCR1和TACCR2设 ...

嗯这个方法确实有效,可以实现相移,不过在一个周期内仅可以实现180度移相。CCR2减去一个CCR0值是不是又回到180度之前的位置,貌似超过不了180。
而且我在设置CCR2连续减一或加一的时候 用示波器观察在波形上出现断层,就是在某个未知时刻突然出现相位180翻转。目前没找到规律!!

 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

13
 
关于大于180度相移的问题,是不是可以这样试试看?
先设定相移例如178度,再使用一个TACCRx,设置其值在CCR1值前面一点点,并使能中断,在ccrx中断中再给ccr1加上需要的值,也即继续增加一个180度内的相移,应该可以吧,你看可不可以试试看?

至于第二个问题,不知道您是怎样连续加1的?是否太快?可否再中断中进行?还有,也许对于0和TACCR0这两个值比较特殊,你仔细看看指导手册中的时序图看看有没有什么因素导致?
这个问题也许是因为您忽略了可能的细节,也许存在着确实不可解决的问题,我现在没有多想,您可以思考一下,实在还是有问题我有时间再帮你看看,当然也许也可能问题本身就是解决不了的。
一定要看指导手册中你所用模式的时序图以及定时器的结构框图。记不太清楚了,实际上比较输出是有延时的好像。

您的头像很可爱
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

14
 
本帖最后由 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. }
复制代码

演示视频:



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



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

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



 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

15
 
我在13楼中说:比较输出是有延时好像
这个有错误,今天也测了这个,发掘没有。


下面两张图是这样的测试方法
在程序中使一个引脚输出方波(通过软件延时循环实现),设置定时器的时钟为外部时钟,也就是用导线连接到那个输出方波的引脚
第一行分别为比较器输出模式7和模式3的输出
第二行为那个引脚输出的方波,也就是定时器的时钟
第三行为一个IO引脚,在启动定时器前一句置高产生上升沿来触发我的那个几十元的所谓逻辑分析仪。启动定时器时时钟还没有产生,但是启动定时器语句的后一句就是开始输出那个引脚的方波信号也就是才开始产生时钟。

模式7:



模式3



通过两图可以看出,当CCRx=CCR0时即会产生比较输出,没有一个或者半个定时器时钟长度的延时。当然这个也可以通过程序就能测出来,例如把比较输出再通过导线接入到另一个CCRX的捕获输入,看看捕获到的CCRx值
不过,这两张图看到一个有点意思的现象,就是模式7启动后是有延时的

点评

简直~~~不知道说什么好!!(略感动)总之还是感谢你花时间来帮我看程序!!这两天没怎么上论坛没有及时回复。 你给的资料我正在吸收,目前已经移植过来了。 用数字示波器观察 +=setp 来赋值暂时没发现突  详情 回复 发表于 2014-4-28 13:58
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

16
 
本帖最后由 walm2622 于 2014-4-28 14:08 编辑
wangfuchong 发表于 2014-4-27 22:29
我在13楼中说:比较输出是有延时好像
这个有错误,今天也测了这个,发掘没有。


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

 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

17
 
本帖最后由 wangfuchong 于 2014-4-28 16:28 编辑

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

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

点评

也不算移植吧!只是F4250定时器初始化有些不一样而已 算法和思想都能用! 谢谢你的提醒,以后遇到中断我会更加注意的!  详情 回复 发表于 2014-4-29 23:06
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

18
 
wangfuchong 发表于 2014-4-28 16:19
客气了 ,仅供参考,很可能有 错误的地方

您说移植,那可要仔细考虑行不行 呀

也不算移植吧!只是F4250定时器初始化有些不一样而已 算法和思想都能用!
谢谢你的提醒,以后遇到中断我会更加注意的!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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