编了一个AVR的AD采样程序,但始终不能正确采样

编了一个AVR的AD采样程序,但始终不能正确采样,第1张

每次采样完成后 ADIF 需要软件清0,不然第一次采样完成后它就一直是置1的;这样会造成后面每次没有采样完成,你就去读ADC寄存器的值,肯定会不对.

ADIF软件清零的 *** 作为:ADCSRA |= BIT(ADIF)

简单点,建立32位变量A,每采样一次就加到A,采样完8次再除以8就好了,

u16 ADC_ZKB(u8 Channel)

{

u32 value1=0

u16 value

u8 i

for(i=0i<8i++)

{

ADC_CSR = Channel &0x0F // 选择AD转换通道

ADC_CR1 |= 0x01 // 启动AD转换

while(!(ADC_CSR &0x80))// 等待AD转换完成

value = ADC_DRL

value |=((ADC_DRH<<8)&0X0300)

value1+=value

ADC_CSR = 0x00

}

return (value1/8)

}

大概这意思,怎么定义32位数,这个自己去查,因为AD采样时间比较久,估计这样FOR可能不合适,自己可以改改。

我做的和你的基本一样 其实28335和2812基本差不多 只是多了个浮点功能 在28335中 EPWM模块用于生成PWM波 每次只要对比较寄存器进行赋值就可以了 其他的设置和2812是一样的 建议你看一些28335的例程 至于AD采样 你可以用EPWM模块来触发 也可以通过外部引脚触发 先将电流信号转换成电压信号 注意:这个电压信号要在0--3V范围之内 然后DSP就可以对其进行读数了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11142793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存