单片机学习小组
直播中

刘英

7年用户 1093经验值
私信 关注

嵌入式扩展板模块的电压有何变化呢

嵌入式扩展板模块的光敏电阻怎样计算呢?
嵌入式扩展板模块的电压有何变化呢?

回帖(1)

于帅

2022-1-19 13:44:32
介绍


光敏感是随着光线越过背景,光线越小。我们只需简单的ADC采集AO的电压,我们只需简单的利用公式就可以使用R47的算力。
TrAO.c


#include "TrAO.h"
void TrAO_Init(void){


        ADC_InitTypeDef ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;


        RCC_ADCCLKConfig(RCC_PCLK2_Div6);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        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;
        ADC_Init(ADC1, &ADC_InitStructure);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_239Cycles5);
        ADC_Cmd(ADC1, ENABLE);
        ADC_ResetCalibration(ADC1);
        while(ADC_GetResetCalibrationStatus(ADC1));
        ADC_StartCalibration(ADC1);
        while(ADC_GetCalibrationStatus(ADC1));
       
}
float GetTrDO_Val(u8 mode){
        float TrDO_Val =0;


        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));


        ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
        TrDO_Val = ADC_GetConversionValue(ADC1)*3.3/4095;


        if(mode==1)                return TrDO_Val;
        else if(mode==2)          return TrDO_Val*10/(3.3-TrDO_Val);
        else return 0;
}



  • GetTrDO_Val(u8 mode)函数中,如果mode=1返回的是采集的电压值,如果mode=2返回的是R47的电压。

电压判断


就是这里的一个延迟回比较器3,是同向输入端的说,2是反向输入端。到是低识别。
具体实现:

void TrDO_Init(void){
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
         GPIO_Init(GPIOA, &GPIO_InitStructure);
}


在主函数中

while(1){
        if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3) == 0){
                LCD_DisplayStringLine(Line7, (u8*)"       DO:High     ");
        }
        else{
                LCD_DisplayStringLine(Line7, (u8*)"       DO:Low      ");
        }
}


这里我想解释一下,当当有7个小端会发生变化的时候,R4会发生不同的电压变化,R4此时会发生同样的电压变化。 rDO处处读取到的电压为低。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分