高手请进: ARM+WinCE实时测量方案

时间:2022-03-27 07:33:41
平台:S3C2440A+WinCE5.0
需要测量:
(1)实时测量150KHz - 800KHz的频率,误差不能大于2x10(-5);
(2)测量1KHz信号的调幅度,误差10%

现在本人采用的方法是这样的:
(1)先使用1024分频,再对分频后的信号进行读周期时间,选定GPF0为信号输入口,设为中断响应,上升沿触发后开启定时器开时计时,同时将中断响应设成下降沿触发。当再次响应中断时,停止定时器,读出减数的值。
    个人是在IST中响应程序,感觉理论上可行,可是在恒定的频率输出测试中,定时器读出的值一直在变,而且跳动幅度很大。请教下是不是在操作系统背景下,定时器在IST中容易被打断以至于读数不准呢?
    很头疼啊,后来改为定时器中断一定时间,来数GPF0信号中断响应个数,读出来的数也是变化很大。

(2)由于是1KHz信号,周期1ms。采用200KHz的A/D采样频率,它的转换时间为5us,我还是用定时器每隔18us中断触发进入IST,设ADCCON[0]为1,启动ADC转换,等待ADCCON[15]为1即转换结束后,存储下ADCDAT0后十位的数据。可是18us中断采样,系统就挂在那里了。调了好多值,好像只有1ms以上中断,系统才能正常运行。可是这样采样好像不准确啊。
     请教高人是不是我采样的方法有错呢?还是在系统运行下,不能采用这种方法。
     
比较急,也没有多少分啦,恳请各位大侠指教啊!!谢谢

5 个解决方案

#1


18us中断太快,CE响应不了,建议另加信号采集模块

#2


1. 要 Hard Real-Time, 最好用 WinCE 6.0.
2. 根據 Nyquist Frequency Criteria (http://en.wikipedia.org/wiki/Nyquist_frequency), 要量測 800KHz, 至少要 1.6MHz 的 Sample Rate = 625 nS, 我想 LZ 可能太苛責這顆 CPU 了.
3. ADC 同時有 Touch & Battery Monitor 在用, 要做到這功能, 有些難度.

B.R.
Paul, Chao @ Techware

#3


请教下是不是在操作系统背景下,定时器在IST中容易被打断以至于读数不准呢?
---》因为系统中还有其他的IST,同一优先级的的线程在被调度的时候应该在时间上有不同的先后性吧。

#4


以前是CPLD+等精度测量,对10MHz以下的频率测量误差不超过0.1%。推荐用等精度测量。

还有ARM的脉冲捕捉分辨能力不是很强,频率高了可能会丢脉冲。

#5


引用 4 楼 hicaru00000 的回复:
以前是CPLD+等精度测量,对10MHz以下的频率测量误差不超过0.1%。推荐用等精度测量。

还有ARM的脉冲捕捉分辨能力不是很强,频率高了可能会丢脉冲。

我现在就遇到了丢脉冲的问题,您有什么解决的办法吗

#1


18us中断太快,CE响应不了,建议另加信号采集模块

#2


1. 要 Hard Real-Time, 最好用 WinCE 6.0.
2. 根據 Nyquist Frequency Criteria (http://en.wikipedia.org/wiki/Nyquist_frequency), 要量測 800KHz, 至少要 1.6MHz 的 Sample Rate = 625 nS, 我想 LZ 可能太苛責這顆 CPU 了.
3. ADC 同時有 Touch & Battery Monitor 在用, 要做到這功能, 有些難度.

B.R.
Paul, Chao @ Techware

#3


请教下是不是在操作系统背景下,定时器在IST中容易被打断以至于读数不准呢?
---》因为系统中还有其他的IST,同一优先级的的线程在被调度的时候应该在时间上有不同的先后性吧。

#4


以前是CPLD+等精度测量,对10MHz以下的频率测量误差不超过0.1%。推荐用等精度测量。

还有ARM的脉冲捕捉分辨能力不是很强,频率高了可能会丢脉冲。

#5


引用 4 楼 hicaru00000 的回复:
以前是CPLD+等精度测量,对10MHz以下的频率测量误差不超过0.1%。推荐用等精度测量。

还有ARM的脉冲捕捉分辨能力不是很强,频率高了可能会丢脉冲。

我现在就遇到了丢脉冲的问题,您有什么解决的办法吗