找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11628|回复: 11
收起左侧

基于stm32f103的PT100测温源程序有问题

  [复制链接]
ID:417178 发表于 2018-10-29 12:27 | 显示全部楼层 |阅读模式
此程序是基于STM32F103 的PT100测温程序
充分利用pt100铂电阻的电阻与温度的线性   可以直接用串口工具读出当前温度

1.电流调试成功
2.电流补偿调试成功
3.PT100程序调试成功

增加
1.电压测试
2.增加结构体
3.增加温度检测

单片机源程序如下:
  1. #include "bsp_adc.h"

  2. #define ADC1_DR_Address    ((u32)0x40012400+0x4c)

  3. __IO uint16_t ADC_ConvertedValue;
  4. //__IO u16 ADC_ConvertedValueLocal;

  5. /**
  6.   * @brief  使能ADC1和DMA1的时钟,初始化PC.0
  7.   * @param  无
  8.   * @retval 无
  9.   */
  10. static void ADC1_GPIO_Config(void)
  11. {
  12.         GPIO_InitTypeDef GPIO_InitStructure;
  13.         
  14.         /* Enable DMA clock */
  15.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  16.         
  17.         /* Enable ADC1 and GPIOC clock */
  18.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
  19.         
  20.         /* Configure PC.0  as analog input */
  21.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  22.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  23.         GPIO_Init(GPIOC, &GPIO_InitStructure);                                // PC0,输入时不用设置速率
  24. }

  25. /**
  26.   * @brief  配置ADC1的工作模式为MDA模式
  27.   * @param  无
  28.   * @retval 无
  29.   */
  30. static void ADC1_Mode_Config(void)
  31. {
  32.         DMA_InitTypeDef DMA_InitStructure;
  33.         ADC_InitTypeDef ADC_InitStructure;
  34.         
  35.         /* DMA channel1 configuration */
  36.         DMA_DeInit(DMA1_Channel1);
  37.         
  38.         DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;                                 //ADC地址
  39.         DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;        //内存地址
  40.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  41.         DMA_InitStructure.DMA_BufferSize = 1;
  42.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;        //外设地址固定
  43.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;                                  //内存地址固定
  44.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //半字
  45.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  46.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                //循环传输
  47.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  48.         DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  49.         DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  50.         
  51.         /* Enable DMA channel1 */
  52.         DMA_Cmd(DMA1_Channel1, ENABLE);
  53.         
  54.         /* ADC1 configuration */        
  55.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                        //独立ADC模式
  56.         ADC_InitStructure.ADC_ScanConvMode = DISABLE ;                                          //禁止扫描模式,扫描模式用于多通道采集
  57.         ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                        //开启连续转换模式,即不停地进行ADC转换
  58.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //不使用外部触发转换
  59.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;         //采集数据右对齐
  60.         ADC_InitStructure.ADC_NbrOfChannel = 1;                                                                         //要转换的通道数目1
  61.         ADC_Init(ADC1, &ADC_InitStructure);
  62.         
  63.         /*配置ADC时钟,为PCLK2的8分频,即9MHz*/
  64.         RCC_ADCCLKConfig(RCC_PCLK2_Div8);
  65.         /*配置ADC1的通道11为55.        5个采样周期,序列为1 */
  66.         ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);
  67.         
  68.         /* Enable ADC1 DMA */
  69.         ADC_DMACmd(ADC1, ENABLE);
  70.         
  71.         /* Enable ADC1 */
  72.         ADC_Cmd(ADC1, ENABLE);
  73.         
  74.         /*复位校准寄存器 */   
  75.         ADC_ResetCalibration(ADC1);
  76.         /*等待校准寄存器复位完成 */
  77.         while(ADC_GetResetCalibrationStatus(ADC1));
  78.         
  79.         /* ADC校准 */
  80.         ADC_StartCalibration(ADC1);
  81.         /* 等待校准完成*/
  82.         while(ADC_GetCalibrationStatus(ADC1));
  83.         
  84.         /* 由于没有采用外部触发,所以使用软件触发ADC转换 */
  85.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  86. }

  87. /**
  88.   * @brief  ADC1初始化
  89.   * @param  无
  90.   * @retval 无
  91.   */
  92. void ADC1_Init(void)
  93. {
  94.         ADC1_GPIO_Config();
  95.         ADC1_Mode_Config();
  96. }

  97. /**
  98.   * @brief  获取PT100的阻值
  99.   * @param  无
  100.   * @retval 无
  101.   */
  102. float getPT100Value(float AdValue)
  103. {
  104.         float BaseValue = 2.460;
  105.         float AD623A = 27.3,AD620A = 27.0;
  106.         float R1=1999.0,R2=1999.0,R3=100.0;
  107.         float Rx = 0;
  108.         float Uo = AdValue/AD623A;
  109.         printf("%f\n",Uo);
  110.         Rx = (BaseValue*(R3*R1)+Uo*(R1*R2+R1*R3))/((double)((BaseValue*R2))-(Uo*(R2+R3)));
  111.         return Rx;
  112. }

  113. /**
  114.   * @brief  获取AD的平均值
  115.   * @param  无
  116.   * @retval 无
  117.   */
  118. float getAdcAverage(uint8_t times)
  119. {
  120.                 uint8_t i = 0;
  121.                 double temp = 0;
  122.         for(i = 0;i<times;i++)
  123.         {
  124.                 temp+=(float) ADC_ConvertedValue/4096*3.3; // 读取转换的AD值               
  125.         }
  126.         return (temp/(float)times);
  127. }

  128. /**
  129.   * @brief  获取PT100温度值 Rt = Ro(1+A*t+B*t*t)
  130.   * @param  无
  131.   * @retval 无
  132.   */
  133. float getTValue(float PT100Value)
  134. {
  135.         float A = 0.003940;
  136.         float B = -0.0000005802;
  137.         float C = -0.000000000004274;
  138.         
  139.         
  140. }
  141. /*********************************************END OF FILE**********************/
复制代码

所有资料51hei提供下载:
PT100测试程序.rar (313.64 KB, 下载次数: 417)
回复

使用道具 举报

ID:200813 发表于 2019-1-13 18:00 | 显示全部楼层
有人下载了这个程序麽,为什么我下载的程序打不开呀
回复

使用道具 举报

ID:302248 发表于 2019-2-27 21:01 | 显示全部楼层
程序是残损的
回复

使用道具 举报

ID:421308 发表于 2019-7-13 12:35 | 显示全部楼层
能从新上次一下附件吗
回复

使用道具 举报

ID:421308 发表于 2019-7-14 16:16 | 显示全部楼层
请问有电路图吗
回复

使用道具 举报

ID:421308 发表于 2019-7-16 11:07 | 显示全部楼层
float getTValue(float PT100Value)
{
        float A = 0.003940;
        float B = -0.0000005802;
        float C = -0.000000000004274;
        
        
}
为什么没有返回值啊
回复

使用道具 举报

ID:667303 发表于 2020-8-6 15:02 | 显示全部楼层
感谢大佬分享,马上用到项目上
回复

使用道具 举报

ID:45026 发表于 2020-8-6 17:44 | 显示全部楼层
这个程序有错误,不完整!不对呀!
回复

使用道具 举报

ID:628703 发表于 2020-8-7 11:45 | 显示全部楼层
可以打开,自己修改下
回复

使用道具 举报

ID:833491 发表于 2020-11-14 15:22 | 显示全部楼层
peeta 发表于 2020-8-7 11:45
可以打开,自己修改下

你的实现功能了吗,可以分享我一份吗
回复

使用道具 举报

ID:783854 发表于 2021-2-18 14:47 | 显示全部楼层
博主,这阻值是如何计算的呢
回复

使用道具 举报

ID:886390 发表于 2021-2-26 15:04 | 显示全部楼层
偏差有多大呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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