仅3A的量程,可通过并联的方式扩大电流测量范围
外形:
(INPUT- 端和负载的负极相连)
(INPUT+ 端和电源的正极相连)
(GND 和电源的负极 还有 负载的负极相连)
总的来说
可恶的美团芯片,这个芯片会把测量到的电流转为电压, stm32通过adc功能可以获取某个引脚的电压.以此来达到测量目标电流的目的
接线:
max471的接线按照上面的图来.
stm32的接线很重要, 必须把VEF和3.3v短接. 然后 max471的两个GND是等价的,不知道为什么有两个, GND连到stm32的某个GND, OUT连到A1 引脚
代码思路:
本来是用中断来做的,但是一直没成功. 改为主动获取adc的值.
初始化:
void ADCx_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//ADC
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; //模拟输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
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_InitStructure.ADC_NbrOfChannel = 1;//1个转换在规则序列中 也就是只转换规则序列1
ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
// Configure ADC channel
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
ADC_Cmd(ADC1, ENABLE);//开启AD转换器
ADC_ResetCalibration(ADC1);//重置指定的ADC的校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC重置校准寄存器的状态
ADC_StartCalibration(ADC1);//开始指定ADC的校准状态
while(ADC_GetCalibrationStatus(ADC1));//获取指定ADC的校准程序
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能或者失能指定的ADC的软件转换启动功能
}
获取值
u16 Get_ADC_Value()
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
ADC_ConvertedValue = ADC_GetConversionValue(ADC1);
return ADC_ConvertedValue;
}
需要注意,获取值需要一直执行很多次,频率也要高.
另外是 ,开关电源是,在这里是不可靠的.会这样
如果突然断开负载还会 (前半部分是难得的偶尔稳定一会) (如此巨大的波形,甚至体现到了万用表上,断开开关电源就正常了,恒为0)
很奇怪,但换成电池的电源就很稳定,一次都没有出现过奇怪的波形
很奇怪我不能用中断.