单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 83|回复: 1
打印 上一主题 下一主题
收起左侧

笙泉MG82F6D17额温枪原理图以及MCU源码分享

[复制链接]
跳转到指定楼层
楼主
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:
  1. #define _ADC_C

  2. #include "Incfile.h"

  3. /***********************************************************************************
  4. 函数名称:   u16 GetIVRefCode(void)
  5. 功能描述:获取IVREF的精确电压值
  6. 输入参数:   
  7. 返回参数:     
  8. *************************************************************************************/
  9. void GetIVRefCode(void)        
  10. {
  11.         DWordTypeDef dwTemp;
  12.         WordTypeDef wIVRAdjAdc;
  13.         
  14.         wIVRAdjAdc.W=GetIVRef();                                

  15.         // 检测IVRef校准值是否在范围内(1.3~1.5)
  16.         if((wIVRAdjAdc.W <1614)||(wIVRAdjAdc.W>=1862))
  17.         { // 存储的IVRef值右问题,设为默认值 1.4V@3.3V
  18.                 wIVRAdjAdc.W=1738L;
  19.         }
  20.         else
  21.         {
  22.         }
  23.         // 计算IVR的电压值
  24.         dwTemp.DW=wIVRAdjAdc.W;
  25.         wIVRefValue.W=dwTemp.DW*3300L/4096L;
  26. }


  27. /***********************************************************************************
  28. 函数名称:   u16 GetNtcAvgCode(void)
  29. 功能描述:环境温度采样值获取(采样16次取平均)
  30. 输入参数:   
  31. 返回参数:0:Error     
  32. *************************************************************************************/
  33. u32 GetNtcAvgCode(void)
  34. {
  35.         u8 i;
  36.         DWordTypeDef dwTemp0,dwTemp1;
  37.         dwTemp0.DW=0;
  38.         dwTemp1.DW=0;
  39.         for(i=0;i<16;i++)
  40.         {
  41.                 ADC_SetChannel_AIN6();                // 设置ADC通道为AIN6 T0
  42.                 DelayXus(100);
  43.                 dwTemp0.DW=dwTemp0.DW+GetAdcValue();
  44.                 ADC_SetChannel_AIN7();                // 设置ADC通道为AIN7 T1
  45.                 DelayXus(100);
  46.                 dwTemp1.DW=dwTemp1.DW+GetAdcValue();
  47.         }
  48.         dwTemp0.DW=dwTemp0.DW>>4;
  49.         dwTemp1.DW=dwTemp1.DW>>4;
  50.         if(dwTemp1.DW<dwTemp0.DW) return 0;
  51.         dwTemp1.DW=(dwTemp1.DW-dwTemp0.DW)*NTC_REF_VALUE;
  52.         dwTemp1.DW=dwTemp1.DW/dwTemp0.DW;
  53.         return dwTemp1.DW;
  54. }


  55. /***********************************************************************************
  56. 函数名称:   u16 GetVirAvgCode(void)
  57. 功能描述:红外温度采样值获取(采样16次取平均)
  58. 输入参数:   
  59. 返回参数:     
  60. *************************************************************************************/
  61. u32 GetVirAvgCode(void)        
  62. {
  63.         u8 i;
  64.         DWordTypeDef dwTemp;
  65.         DWordTypeDef dwVinAdc,dwIVRAdc;
  66.         dwVinAdc.DW=0;
  67.         dwIVRAdc.DW=0;
  68.         for(i=0;i<16;i++)
  69.         {
  70.                 ADC_SetChannel_AIN5();                // 设置ADC通道为AIN5 Vir
  71.                 DelayXus(100);
  72.                 dwVinAdc.DW=dwVinAdc.DW+GetAdcValue();
  73.                 ADC_SetChannel_IVR14();                // 设置ADC通道为IVR14
  74.                 DelayXus(100);
  75.                 dwIVRAdc.DW=dwIVRAdc.DW+GetAdcValue();
  76.         }
  77.         dwVinAdc.DW=dwVinAdc.DW>>4;
  78.         dwIVRAdc.DW=dwIVRAdc.DW>>4;

  79.         // 计算Vir的输入电压值
  80.         dwTemp.DW=wIVRefValue.W;
  81.         dwTemp.DW=dwTemp.DW*dwVinAdc.DW*1000L/dwIVRAdc.DW;

  82.         return dwTemp.DW;
  83. }
复制代码

所有资料51hei提供下载:
InfraredThermometer_6D17_V01_20200406.rar (2.6 MB, 下载次数: 11)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
wwh2382 发表于 2020-6-30 16:35 | 只看该作者
单片机真是无处不在。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表