打印

PCR 光学电路分析,

[复制链接]
3431|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cym_anhui|  楼主 | 2021-10-22 16:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cym_anhui 于 2021-10-28 13:09 编辑

#申请原创# @21小跑堂 @21小喇叭
1.概述
为了读取检测PCR的DNA扩增后荧光值,先发射荧光,荧光的波长,根据检测DNA不同(试剂种类),选择的发射荧光的波长也不同,同时在发射回路加一个凸透镜,把散射光变成一个聚集光,同样产生的荧光的波长也会不同,这样我们选择入射光的光学滤波器(滤光片)也会不同,



接收二极管,我们采用韩国产PD,对于不同的接收波长,我们只要换滤光片,滤出我们需要的波长即可,

4. 发射电路分析
MCU输出DAC,控制LED亮度,同时使能恒流源电路,输出控制发射LED


5. 接收电路分析
PD通过运放,放大,输出给24位adc,mcu通过SPI 链接MCP3564,


6. 部分驱动如下
void MX_SPI4_Init(void)
{
    hspi4.Instance                                         = SPI4;
    hspi4.Init.Mode                                 = SPI_MODE_MASTER;
    hspi4.Init.Direction                         = SPI_DIRECTION_2LINES;
    hspi4.Init.DataSize                         = SPI_DATASIZE_8BIT;
            
        
    hspi4.Init.NSS                                         = SPI_NSS_SOFT;
    hspi4.Init.BaudRatePrescaler         = SPI_BAUDRATEPRESCALER_16;
    hspi4.Init.FirstBit                         = SPI_FIRSTBIT_MSB;
    hspi4.Init.TIMode                                 = SPI_TIMODE_DISABLE;               
    hspi4.Init.CRCCalculation                 = SPI_CRCCALCULATION_DISABLE;
    hspi4.Init.CRCPolynomial                 = 0x7;
    if (HAL_SPI_Init(&hspi4) != HAL_OK)
    {
        Error_Handler();
    }
}
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
    if(hspi->Instance==SPI4)
    {
        PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI4;
        PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_D2PCLK1;
        if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
        {
          Error_Handler();
        }
        __HAL_RCC_SPI4_CLK_ENABLE();

        __HAL_RCC_GPIOE_CLK_ENABLE();
        /**SPI4
                PE2     ------> SPI4_SCK
        PE5     ------> SPI4_MISO
        PE6     ------> SPI4_MOSI  */
        GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_6;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
    }
}

//初始化DAC
void DAC1_Init(void)
{
    DAC_ChannelConfTypeDef DACCH1_Config;
   
    DAC1_Handler.Instance=DAC;
    HAL_DAC_Init(&DAC1_Handler);                 //初始化DAC
   
    DACCH1_Config.DAC_Trigger=DAC_TRIGGER_NONE;             //不使用触发功能
    DACCH1_Config.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE;//DAC1输出缓冲关闭
    HAL_DAC_ConfigChannel(&DAC1_Handler,&DACCH1_Config,DAC_CHANNEL_1);//DAC通道1配置
   
    HAL_DAC_Start(&DAC1_Handler,DAC_CHANNEL_1);  //开启DAC通道1
}

//DAC底层驱动,时钟配置,引脚 配置
//此函数会被HAL_DAC_Init()调用
//hdac:DAC句柄
void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
{      
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_DAC_CLK_ENABLE();             //使能DAC时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();                        //开启GPIOA时钟
        
    GPIO_Initure.Pin=GPIO_PIN_4|GPIO_PIN_5; //PA4
    GPIO_Initure.Mode=GPIO_MODE_ANALOG;     //模拟
    GPIO_Initure.Pull=GPIO_NOPULL;          //不带上下拉
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}

//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void DAC1_Set_Vol(u16 vol)
{
        double temp=vol;
        temp /= 1000;
        temp = temp*4096/3.3;
    HAL_DAC_SetValue(&DAC1_Handler,DAC_CHANNEL_1,DAC_ALIGN_12B_R,temp);//12位右对齐数据格式设置DAC值
}

使用特权

评论回复

相关帖子

沙发
cym_anhui|  楼主 | 2021-10-22 16:28 | 只看该作者
整理中,先写个开始

使用特权

评论回复
板凳
cym_anhui|  楼主 | 2021-10-23 09:10 | 只看该作者
大家能合作,最好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

489

帖子

4

粉丝