资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,430经验分享,周华,http:/,多通道信号测量,方案概述,while(1),f=CAP测频;(检测到两个上升沿),CCR0=8000000/(f*100);AD触发源设置为T0.0,DTC1=2;CONSEQ_1;INCH_x=最高通道,dat200=ad();,处理dat数组得到相位和vpp,CAP测方波频率f2、占空比;(上升沿与下降沿中断),单通道采集VPP,采样频率根据f2设定。,显示、串口发送所有数据;,1.整个循环的时间分析,2.测方波信号的管脚需要先使用cap,后使用AD转换,只有串口接收脚P1.1符合条件。,3.调试技巧:建立N个子工程,一个主工程,所有功能单个调试没问题了然后才将代码合体。,4.Debug:单步、断点、运行到当前行行、全速运行、Expression、variant、Memory、Register,5.IAR:快速、math.h(CCS5的BUG)、支持软件仿真,CCS:对仿真更好的支持,数据查看更稳定,支持多个断点,#includemath.h,void main(void),volatile double b=sin(1);,查表解决、使用IAR,6.注意代码被优化:,void delay(long time)while(time-);,正确写法:,void delay(volatile long time)while(time-);,_delay_cycles(8000000)_NOP();,char i;i+;,volatile char i;i+;,7.变量初始化,8.大数组(固定不变的)使用const存放到flash里。,const char dat1000;,9,相位的测量,1,RAM是否够用,内存区有两种用途:从低到高用于放数据,从高到低用,于堆栈。,0 x200变量-堆栈0 x400,512B=256个整数 CCS默认,堆栈,占用0 x80B IAR 0 x50B,设置:右击工程属性-msp430 Linker-basic options,-stack ,heap不用管,2,用哪种采样模式,定时采样只来自TA0,容易存在的问题,1,基础模块没准备,比赛时会做不必要的工作,CH452简化,采用4线16键方案,按键置数界面,显示方案12864 3根线 PSB拉低,2,避开复用,IO复用注意 拉电阻很微弱(开始能用,后面不能用,,有,时能用),跳线帽,P2.6 XIN P2.7 XOUT 默认SEL=1,3,DTC 问题,ADC10CTL0,while(ADC10CTL1,ADC10SA=xxxx;,DTC用直接地址会有问题,ADC10SA=0 x200 只是演示,实际应用不行,正确使用:,unsigned int dat100;,ADC10SA=(unsigned int)dat;,加速调试,串口介绍,波特率只,使,用9600,但注意速度慢带来的影响,我们使,用,的launchpad有两种,使用完串口,如果要复用,关中断、P1SEL1、P1SEL2,#includeuart.h,uart_init(9600);,uart_float(1.23);printf(rn);,uart_uint(234);printf(rn);,http:/ msp430板块,捕获,P1.1 TA0.0 CCI0A,P1.2 TA0.1 CCI1A,P1.5 TA0.,0 无,捕获,P1.6 TA0.1 无捕获,P2.0 TA1.0 CCI0A,P2.1 TA1.1 CCI1A,P2.2 TA1.1 CCI1B,P2.3 TA1.0 CCI0B,P2.4 TA1.2 CCI2A,P2.5 TA1.2 CCI2B,TAn.x对应CCIxA或CCIxB,到,底对应,A还是B,,就看CCIS_x位了,TAn.x对应,TAnCCRx,,其设置,位在TAnCCTLx上,注意使用捕获功能后,要设置拉,电阻,否则没有信号也会捕获噪,声,提高捕获测频稳定度:使用,32.768kHz手表晶振,定时器,G2553有两个定时器TA0 TA1,为了让程序兼容只有一个定时器的芯片,所以TI的头文件将TA0就当做TA用了,中断源有四个 CCR0 独占一个中断向量(中断函数),CCR1 CCR2 TAIE(溢出中断)三个公用一个TIMER,n,_A1,通过查询TAIV的值去判断是谁的中断,如果不读TA0IV的值,就必须手动清除中断标志位比如TAIFG CCIFG,TAnIV只能读一次,被read时清除了所有标志:,if(TAIV=2)do sth;,else if(TAIV=4)do sth;,else if(TAIV=10)do sth;,ERROR!,matlab上位机,osc.m,s=serial(COM12);,fopen(s);,t=timer(TimerFcn,display1(s),ExecutionMode,fixedSpacing,Period,0.3);,start(t);,display1.m,function,=display1(s),x=fread(s,40,0);,for i=0:1:,99,y1(i+1)=x(4*i+1)+x(4*i+2)*256;,y2(i+1)=x(4*i+3)+x(4*i+4)*256;,end,subplot(1,2,1);,plot(y1);,subplot(1,2,2);,plot(y2);,matlab使用完记得释放串口,否则将导致串口不能用,停止刷新显示 stop(t),释放串口,fclose(s),
展开阅读全文