PCR 光学电路分析,

[复制链接]
3650|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. 部分驱动如下
  1. void MX_SPI4_Init(void)
  2. {
  3.     hspi4.Instance                                         = SPI4;
  4.     hspi4.Init.Mode                                 = SPI_MODE_MASTER;
  5.     hspi4.Init.Direction                         = SPI_DIRECTION_2LINES;
  6.     hspi4.Init.DataSize                         = SPI_DATASIZE_8BIT;
  7.             
  8.         
  9.     hspi4.Init.NSS                                         = SPI_NSS_SOFT;
  10.     hspi4.Init.BaudRatePrescaler         = SPI_BAUDRATEPRESCALER_16;
  11.     hspi4.Init.FirstBit                         = SPI_FIRSTBIT_MSB;
  12.     hspi4.Init.TIMode                                 = SPI_TIMODE_DISABLE;               
  13.     hspi4.Init.CRCCalculation                 = SPI_CRCCALCULATION_DISABLE;
  14.     hspi4.Init.CRCPolynomial                 = 0x7;
  15.     if (HAL_SPI_Init(&hspi4) != HAL_OK)
  16.     {
  17.         Error_Handler();
  18.     }
  19. }
  1. void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
  2. {
  3.     if(hspi->Instance==SPI4)
  4.     {
  5.         PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI4;
  6.         PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_D2PCLK1;
  7.         if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  8.         {
  9.           Error_Handler();
  10.         }
  11.         __HAL_RCC_SPI4_CLK_ENABLE();

  12.         __HAL_RCC_GPIOE_CLK_ENABLE();
  13.         /**SPI4
  14.                 PE2     ------> SPI4_SCK
  15.         PE5     ------> SPI4_MISO
  16.         PE6     ------> SPI4_MOSI  */
  17.         GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_6;
  18.         GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  19.         GPIO_InitStruct.Pull = GPIO_NOPULL;
  20.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  21.         GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;
  22.         HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  23.     }
  24. }

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

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| cym_anhui 发表于 2021-10-22 16:28 | 显示全部楼层
整理中,先写个开始
 楼主| cym_anhui 发表于 2021-10-23 09:10 | 显示全部楼层
大家能合作,最好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

490

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部