网赚网站怎么做b站推广费用一般多少
一、旋钮式滑动变阻器模块
二、说明:
vcc,gnd,供电
out,输出电压,adc采集电压
三、配置采样时间
其中fadc根据自己的配置来设定
其中Rain 为adc采样目标的阻值
一般而言,最理想的Rain为0,但实际中由于采样时间越大结果误差越小,但用所用时间也就越长,所以采取合适的配置才会更有效。
调用:
adc分频后:75/4=18.75mhz,
18.75mhz*3.96us=74.25cycles,选取接近的。
//配置列表hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4;hadc2.Init.Resolution = ADC_RESOLUTION_16B; //位数hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;//扫描hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;// eoc中断hadc2.Init.LowPowerAutoWait = DISABLE;//低功耗hadc2.Init.ContinuousConvMode =ENABLE; //打开连续转换 轮询时打开,中断关闭 DISABLE;hadc2.Init.NbrOfConversion = 1;//只转换规则序列1 hadc2.Init.DiscontinuousConvMode = DISABLE;//不开启 不连续采样hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;//开启软触发hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;//软触发hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;//保存数据到dr寄存器hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;//覆盖旧数据hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;//不左偏移hadc2.Init.OversamplingMode = DISABLE;HAL_ADC_Start(&hadcx);
HAL_ADC_Start_IT(&hadcx);float ADC_Real_Value; // 实际计算得出的电压值
__IO int32_t ADC_Cover_Value=0; // 获取的AD值
__IO uint8_t Finish_flag=0; // 记录简单滤波次数以及滤波完成void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{ADC_Cover_Value=0;ADC_Cover_Value=HAL_ADC_GetValue(&hadcx);Finish_flag=1;
}
//中断方式
uint8_t get_vcc_value(float *adc_value)
{if(Finish_flag==1){ ADC_Real_Value =(double)ADC_Cover_Value*V_ref/Data_ref; *adc_value =ADC_Real_Value;
// printf("AD转换原始值 = 0x%04X \r\n", ADC_Cover_Value);
// printf("计算得出电压值 = %f V \r\n",ADC_Real_Value); /* 启动AD转换并使能AD中断 */ HAL_ADC_Start_IT(&hadcx); Finish_flag=0;return 0; }else{return 1;}
}int32_t get_adc_average(uint8_t count)
{uint8_t i;int32_t Value=0;ADC_Cover_Value=0;for(i=0;i<count;i++){/* 等待完成常规组的转换 */if (HAL_ADC_PollForConversion(&hadcx, 10) == HAL_OK)/* 获取ADC的转换 */Value=HAL_ADC_GetValue(&hadcx); /* 转换数值累加 */ADC_Cover_Value =ADC_Cover_Value+Value;} /* 返回平均值 */return ADC_Cover_Value/count;
}
//轮询方式
uint8_t get_vcc_value1(float *adc_value)
{int32_t ADC_value=0;ADC_value=get_adc_average(40); /* 获取转换平均值 */ // printf("AD转换原始值 = 0x%04X \r\n", ADC_value); /* 3.3为AD转换的参考电压值,stm32的AD转换为16bit,2^16=65535 */ADC_Real_Value =(double)ADC_value*V_ref/Data_ref; *adc_value=ADC_Real_Value; // printf("计算得出电压值 = %f V \r\n",ADC_Real_Value); return 0;
}