这篇来学习测试下板卡上的光电二极管和芯片内部的OPA,实现光信号转变成电压信号。
一、硬件部分
1.1、开发板硬件部分电路图
1.2、OPA内部框图
1.3、结合OPA和外设端口,测试图如下
二、配置OPA和ADC
2.1、OPA配置
选择OPA0
映射的引脚
2.2、配置ADC
ADC的输入选择OPA输出
三、代码
3.1、adc.c
#include "ti_msp_dl_config.h"
#include "adc/adc.h"
#include <stdio.h>
volatile bool gCheckADC;
volatile uint16_t gAdcResult;
void ADC12_0_INST_IRQHandler(void)
{
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST))
{
case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
gCheckADC = true;
break;
default:
break;
}
}
void init_adc(void)
{
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
gCheckADC = false;
}
void adc_test(void)
{
float adv=0.0;
DL_ADC12_startConversion(ADC12_0_INST);
if(gCheckADC==true)
{
gCheckADC = false;
gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
printf("opa=%d \r\n ",gAdcResult);
DL_ADC12_enableConversions(ADC12_0_INST);
}
}
3.2、main.c
#include "ti_msp_dl_config.h"
#include "systick/systick.h"
#include "led/led.h"
#include "uart/uart.h"
#include <string.h>
#include <stdio.h>
#include "adc/adc.h"
#include "spi/spi.h"
#include "x2515/x2515.h"
int main(void)
{
uint8_t can_txbuf[8]={0};
uint8_t js=0;
SYSCFG_DL_init();
init_adc();
led2_r_off();
led2_g_off();
led2_b_off();
while (1)
{
adc_test();
SysTick_Delay_ms(100);
}
}
四、运行结果
随着PIN管接收光线的变化,OPA输出的电压发生变化。
本帖最后由 TL-LED 于 2023-11-8 17:33 编辑
引用: Jacktang 发表于 2023-11-9 07:27 PIN管接收光线的变化,OPA输出的电压发生变化是个什么规律?
接收范围内光线越强,输出电压越高