请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:RF430FRL152H 大家好、
我使用的是 RF430frl152h 芯片的 SD14数字转换器。 我在100kHz 左右的频率下工作时遇到了问题。 我的目标是读取外部正弦信号、并在频率相同的方波信号中重新创建该信号。 为此、我想查看信号的斜率、并根据读取的值确定曲线是上升还是下降。 不过、这在1kHz 左右工作、但效果并不是很好。
数据表显示"高达2kHz 的采样频率"。 因此、器件可能无法在高于1kHz 的频率下工作?!
问题是采样率还是转换率? 端口输出可能 具有时钟的频率范围? 如果您有任何想法、请告诉我。
下面是我的代码。
#include #include #include void settingADC (void); void slopeDetection (void); int pingDATA = 0; int newDATA = 0; bool flag = 0; void main (void) { WDTCTL = WDTPW + WDTHOLD;//停止 WDT //复位以避免 JTAG 配置 P1SEL1 &=~(BIT4 | BIT4 | BIT6 | BIT4); P1SEL0 &=~(BIT4 | BIT5 | BIT6 | BIT7); //将 SMCLK 的频率更改为4MHz CCSCTL0 = CCSKEY; CCSCTL5 &=~(DIVS2 | DIVS1 | DIVS0); P1DIR |= BIT5; //设置 GPIO 输出 P1SEL0 &=~BIT4; P1SEL1 &=~BIT4; settingADC(); while (1) { slopeDetection(); } } void slopeDetection (void) { pewdATA = newdATA; //存储以前的值 newDATA = SD14MEM0;//从 ADC 获取值 if (newDATA > p支 IDATA) { P1OUT |= BIT5; //SET 引脚高电平 Flag = 1; } 否则 if (newDATA < peldATA) { P1OUT &=~BIT4;//将引脚设置为低电平 标志= 0; } 其他 { if (标志) P1OUT |= BIT5; 其他 P1OUT &=~BIT4; //无 } } void settingADC (void) { SD14CTL0 = SD14SSEL0 +UCB0IE; SD14CTL0 &=~(SD14SSEL1 + SD14DIV0 + SD14DIV1); SD14CTL1 &=~(SD14INCH0 + SD14INCH1 + SD14INCH2);// inch =0000->A0、ADCCLK //SD14MEM0 = SD14INCH__A0; //通道 A0 SD14CTL1 &=~(SD14RATE0 + SD14RATE1 + SD14RATE2); SD14CTL0 |= SD14EN + SD14SC;//开始转换 _BIS_SR (GIE);//启用中断 } /***************** //* MSP430的中断矢量 */ ********* / #pragma vector = SD14_vector _中断 void ADC_interrupt (void) { SD14CTL0 |= SD14EN + SD14SC;//重新开始转换 }
此致。
朱利亚诺