OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2702|回复: 1

用STM32F1做ADC采集,可怎么改都采集不到电压,麻烦大佬们帮忙看看

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2020-6-22
在线时间
5 小时
发表于 2020-6-22 17:25:09 | 显示全部楼层 |阅读模式
1金钱
void ADC1_Init(void)
{
        ADC_InitTypeDef ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;


       
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB |RCC_APB2Periph_ADC1, ENABLE );          //使能ADC1通道时钟


        RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

        //PA0  PA3 作为模拟通道输入引脚                        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                //模拟输入引脚
        GPIO_Init(GPIOB, &GPIO_InitStructure);       



        ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值

        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC工作模式:ADC1和ADC2工作在独立模式
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //模数转换工作在单通道模式
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //模数转换工作在单次转换模式
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //转换由软件而不是外部触发启动
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADC数据右对齐
        ADC_InitStructure.ADC_NbrOfChannel = 1;        //顺序进行规则转换的ADC通道的数目
        ADC_Init(ADC1, &ADC_InitStructure);        //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   


        ADC_Cmd(ADC1, ENABLE);        //使能指定的ADC1
       
        ADC_ResetCalibration(ADC1);        //使能复位校准  
         
        while(ADC_GetResetCalibrationStatus(ADC1));        //等待复位校准结束
       
        ADC_StartCalibration(ADC1);         //开启AD校准

        while(ADC_GetCalibrationStatus(ADC1));         //等待校准结束       

//        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的软件转换启动功能
}

/**
  * @brief  ADC1_Channel_8开始工作
  * @param  无
  * @retval 无
  */
u16 ADC1_Channelx_go(u8 ch)
{                                         
          //设置指定ADC的规则组通道,一个序列,采样时间

  ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5 );        //ADC1,ADC通道,采样时间为239.5周期                    采样时间为6us               
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的软件转换启动功能       
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

        return ADC_GetConversionValue(ADC1);        //返回最近一次ADC1规则组的转换结果      
}

/**
  * @brief  过滤数据获取平均电流
  * @param  无
  * @retval 无
  */
u16 Get_Adc_Average(u8 ch)
{
        u32 temp_val=0;
        u8 t;
        u16 g_Adc[10],max,min;
        temp_val = 0;
       
       
        for(t=0;t<10;t++)
        {
                g_Adc[t]=ADC1_Channelx_go(ch);
                delay_us(10);
        }
       
       
        max = g_Adc[0];   
        min = g_Adc[0];
        temp_val = g_Adc[0];
        for(t=1;t<10;t++)
        {
                if(max < g_Adc[t])
                {
                        max = g_Adc[t];
                }
                if(min > g_Adc[t])
                {
                        min = g_Adc[t];
                }
                temp_val += g_Adc[t];
        }
        temp_val = temp_val - max-min;
        temp_val = temp_val >> 3;
        return (u16)temp_val;
}

/**
  * @brief  读取目前的电压
  * @param  无
  * @retval 无
  */
void read_volt(void)
{
                u16 Elecurr_ADC = 0;
                float EleVolt,temp;
                if(g_CtrlWord.bit.nOp == 1 && g_CtrlWord.bit.nDCMotOp == 1)
                {
                        Elecurr_ADC = Get_Adc_Average(ADC_Channel_8);//  读取此时的电压值,并进行滤波,用于判断电机模块是否正常
                        temp = (float)Elecurr_ADC*(3.3/4096);
                        EleVolt = temp;
                        if(EleVolt<0.05)
                        {
                                        g_nEmg_obj603F_01=1;
                        }
                }                               
}

最佳答案

查看完整内容[请看2#楼]

参考下这个:http://www.openedv.com/forum.php?mod=viewthread&tid=276626"
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3627
金钱
3627
注册时间
2019-8-14
在线时间
1054 小时
发表于 2020-6-22 17:25:10 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 11:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表