硬件电路
LM393电压比较器管脚如下
光敏电阻
模拟量的采集就利用stm32的ADC的12精度采集通道来采集,由扩展板资源分布可知:
程序
//ADC -AO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//ADC -DO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
// ADC1 工作模式配置
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;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
}
u16 Read_ADC(void)
{
u16 temp;
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_1Cycles5); //ADC_AO对应的是通道4
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
temp = ADC_GetConversionValue(ADC1);
ADC_SoftwareStartConvCmd(ADC1,DISABLE);
return temp;
}
主函数
1.数字输出口DO:开关量信号输出为光敏电阻分压和电位器分压值后通过比较器输出的高低电平值。
2.模拟输出口AO:模拟量输出为光敏电阻和定值电阻的分压值
while(1)
{
temp_AO = Read_ADC();
sprintf((char *)str, " R-P:%.1fK ", temp_AO/(4096.-temp_AO)*10);
LCD_DisplayStringLine(Line6, str);
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3) == 1)
{
LCD_DisplayStringLine(Line7, (u8*)" DO:High ");
}
else
{
LCD_DisplayStringLine(Line7, (u8*)" DO:Low ");
}
注意:
因为RP7电位器的阻值和R45的阻值相差500倍,而光明电阻和R46的阻值可能相差在1-50倍以内,所以可以得到以下现象:
1.当调节电位器RP7使得DO输出hign时候:让光敏电阻遇到强光,照成光敏电阻阻值减小,DO从而输出low (这个跳变值最好调节RP7刚好能够在光敏电阻正常情况下输出hign即可,如果使电位器的值过于小,可能照成光敏电阻遇到强光之后其电阻值仍然比电位器的大)
2.当调节电位器RP7使得DO输出low时候:由于同向输入和反向输入电压值比较大,这个时候可能光敏电阻不管如何大,其同向输入端的电压依旧比反向输入端电压小,从而DO一直输出low