6280|5

42

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32 交流采样 ADC 变换 [复制链接]

我做1V电压的交流采样,并进行ADC变换。最低电压约为-1.414.我叠加了1.65的直流,现在最低电压就差不多0.235左右。最高电压约3.064左右。参考电压是3.3的,但是转换结果怎么会有0000和FFF?不能解释啊。。。。请高手指导
此帖出自stm32/stm8论坛

最新回复

你该再说详细点的  详情 回复 发表于 2011-12-8 17:05
点赞 关注
 

回复
举报

65

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
不明白
此帖出自stm32/stm8论坛
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
你该再说详细点的
此帖出自stm32/stm8论坛
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

4
 
好吧,我把配置贴出来吧!
         /* ADC1 registers reset ----------------------------------------------------*/
          ADC_DeInit(ADC1);
                 
        /* ADC1 configuration ------------------------------------------------------*/
        ADC_StructInit(&my_ADC_InitStructure);
        my_ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;         //独立模式
        my_ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;       
        my_ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
        my_ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC3;                 my_ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
        my_ADC_InitStructure.ADC_NbrOfChannel = AC_CLASS_NUM;
        ADC_Init(ADC1, &my_ADC_InitStructure);

        // CLKad = 12MHz   Tconv = 7.5 + 12.5 = 20周期   f_conv = 12MHz / 20 = 600K
        ADC_InjectedChannelConfig(ADC1, ADC_Channel_4, AC_CLASS_ACV+1, ADC_SampleTime_7Cycles5);          // AD_ACV
    ADC_InjectedChannelConfig(ADC1, ADC_Channel_5, AC_CLASS_ACI+1, ADC_SampleTime_7Cycles5);          // AD_ACI


DMA_DeInit(DMA1_Channel1);
        my_DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
        my_DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&gm_SampleTempData.ACdata[0][0];
        my_DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
        my_DMA_InitStructure.DMA_BufferSize = AC_SAMPLE_COUNT_NUM * AC_CLASS_NUM;
        my_DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        my_DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        my_DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
        my_DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
        my_DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
        my_DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
        my_DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
        DMA_Init(DMA1_Channel1, &my_DMA_InitStructure);  
        // Enable DMA1 channel1
        DMA_Cmd(DMA1_Channel1, ENABLE);


TIM_OCStructInit(&my_TIM1_OCInitStructure);
        // PWM 模式2
        // 在向上计数时,一旦TIM1_CNT         // 在向下计数时,一旦TIM1_CNT>TIM1_CCR1 时通道3 为有效电平,否则为无效电平
        my_TIM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        // 输入/捕获 输出使能
        my_TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        // 输入/捕获 互补输出禁止
        my_TIM1_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
        // TIM1_CCRx               
        my_TIM1_OCInitStructure.TIM_Pulse = PWM1_PERIOD(gm_RCC_ClockFreq.PCLK2_Frequency) >> 1;          // 占空比初始化为 50%
        // OCx 高电平有效  
        my_TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        // OCxN 低电平有效
        my_TIM1_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
        // 当MOE=0 时,如果实现了OCx/OCxN,则死区后OCxN/OCx=0        
        my_TIM1_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
        my_TIM1_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;            
          
                TIM_OC3Init(TIM1, &my_TIM1_OCInitStructure);

该配置下的试验结果如下:
我做1V电压的交流采样,并进行ADC变换。最低电压约为-1.414.我叠加了1.65的直流,现在最低电压就差不多0.235左右。最高电压约3.064左右。参考电压是3.3的,但是转换结果怎么会有0000和FFF
此帖出自stm32/stm8论坛
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

5
 
转换的结果是存到gm_SampleTempData.ACdata[2][150]里面的,ACdata[0]是交流电压,ACdata[1]是交流电流,ACdata[0]的150个元素中有000和FFF。我不知道这是ADC的问题还是数学统计里面的问题 而且,我只做了交流电压采样,有的交流电流还有数据,不能理解!还请大家指导!谢谢!

[ 本帖最后由 迷雾重重 于 2011-12-9 13:30 编辑 ]
此帖出自stm32/stm8论坛
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

6
 
好吧,我再详细一点吧。对50HZ交流电压采样,ADC转化由TIM1的CC1触发。触发频率为7.5KHZ.也就是说我再一个交流电压信号的周期内可以采样150个点。   但是我运行程序的时候发现就只采了16个点,这些数据中有fff,然后有70个左右的点数据为0(应该就是没采到吧).之后又有十多个点有数据。。。目前情况就是这么的  请用过ADC采样交流信号的朋友们帮帮忙。不胜感激!
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表