本帖最后由 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值
- }
|