(12条消息) PT100测温函数_weixin_30325487的博客-CSDN博客
https://blog.csdn.net/weixin_30325487/article/details/96170684?utm_medium=distribute.pc_relevant.none-task-blog-title-6&spm=1001.2101.3001.4242
(12条消息) PT100恒流源测温电路_自由的天空-CSDN博客
https://blog.csdn.net/wuhenyouyuyouyu/article/details/84522638
使用STM32F来测温PT100,最后测到的值和实际有误差,如何分析 - 小平头电子技术论坛社区
https://www.xiaopingtou.cn/q-157842.html
使用STM32F来测温PT100,最后测到的值和实际有误差,如何分析 (amobbs.com 阿莫电子论坛)
https://www.amobbs.com/thread-5667211-1-1.html?_dsign=834033cd
1-13 22:24 上传
这个是我的测温电路,PT100使用2线制。没有把PT100接入电路之前,直接用万用表来测量电阻,再和PT100分度表对比,发现和当前室温是差不多的;
把这个PT100加入电路之后。最后根据单片机AD值计算得到的电阻值,比实际结果大了5欧姆左右。从108.9编程了113.9欧姆。
AD转换的结果是准确的。
请问这种情况下面有什么方法可以消除这个电阻值的误差吗?在不改电路的情况下。
又或者,在这种情况下,误差会保持为5欧姆左右吗?就是温度从0到400度变化的话,如果误差持续是5欧姆左右,那我也可以人为的去对每台设备进行消减。
经过详细计算。发现数据是正确的。果然是硬件误差造成这种情况的;
由于3.3V实际是3.25V。2个1.5K电阻实际值是1497.4欧姆。这样算下来,PT100在23度也就是108.8欧的时候,
差分输入电压为 3.25 * 108.8 / (1497 + 1497 + 108.8) = 0.11396v;放大10倍(这里也有精度影响,并不是100%的10倍)后输出电压为1.1396v;
然后按照3.25的电压可以得到AD = 1.1396 * 4096 / 3.25 = 1436;这个值和我单片机AD转换的结果就是一致的;
看来是电阻引起这个误差的。
(12条消息) PT100分度表分享_k1ang的博客-CSDN博客
https://blog.csdn.net/k1ang/article/details/82357014
刚好最近做项目用到PT100,分享下PT100分度表的数组,测量温度范围:(-200℃~800℃),方便大家使用。
const float Table_PT100[]=
{
//℃ 0 1 2 3 4 5 6 7 8 9
/*-200*/18.52, 18.95, 19.38, 19.82, 20.25, 20.68, 21.11 , 21.54 , 21.97 , 22.4 ,
/*-190*/22.83, 23.25, 23.68, 24.11, 24.54, 24.97, 25.39 , 25.82 , 26.24 , 26.67 ,
/*-180*/27.1, 27.52, 27.95, 28.37, 28.80, 29.22, 29.64 , 30.07 , 30.49 , 30.91 ,
/*-170*/31.34, 31.76, 32.18, 32.60, 33.02, 33.44, 33.86 , 34.28 , 34.7 , 35.12 ,
/*-160*/35.54, 35.96, 36.38, 36.80, 37.22, 37.64, 38.05 , 38.47 , 38.89 , 39.31 ,
/*-150*/39.72, 40.14, 40.56, 40.97, 41.39, 41.80, 42.22 , 42.63 , 43.05 , 43.46 ,
/*-140*/43.88, 44.29, 44.70, 45.12, 45.53, 45.94, 46.36 , 46.77 , 47.18 , 47.59 ,
/*-130*/48.00, 48.42, 48.83, 49.24, 49.65, 50.06, 50.47 , 50.88 , 51.29 , 51.7 ,
/*-120*/52.11, 52.52, 52.93, 53.34, 53.75, 54.15, 54.56 , 54.97 , 55.38 , 55.79 ,
/*-110*/56.19, 56.6, 57.01, 57.41, 57.82, 58.23, 58.63 , 59.04 , 59.44 , 59.85 ,
/*-100*/60.26, 60.66, 61.07, 61.47, 61.88, 62.28, 62.68 , 63.09 , 63.49 , 63.9 ,
/*-90*/ 64.3, 64.7, 65.11, 65.51, 65.91, 66.31, 66.72 , 67.12 , 67.52 , 67.92 ,
/*-80*/ 68.33, 68.73, 69.13, 69.53, 69.93, 70.33, 70.73 , 71.13 , 71.53 , 71.93 ,
/*-70*/ 72.33, 72.73, 73.13, 73.53, 73.93, 74.33, 74.73 , 75.13 , 75.53 , 75.93 ,
/*-60*/ 76.33, 76.73, 77.13, 77.52, 77.92, 78.32, 78.72 , 79.11 , 79.51 , 79.91 ,
/*-50*/ 80.31, 80.7, 81.10, 81.50, 81.89, 82.29, 82.69 , 83.08 , 83.48 , 83.88 ,
/*-40*/ 84.27, 84.67, 85.06, 85.46, 85.85, 86.25, 86.64 , 87.04 , 87.43 , 87.83 ,
/*-30*/ 88.22, 88.62, 89.01, 89.40, 89.80, 90.19, 90.59 , 90.93 , 91.37 , 91.77 ,
/*-20*/ 92.16, 92.55, 92.95, 93.34, 93.73, 94.12, 94.52 , 94.91 , 95.3 , 95.69 ,
/*-10*/ 96.09, 96.48, 96.87, 97.26, 97.65, 98.04, 98.44 , 98.83 , 99.22 , 99.61 ,
/*0*/ 100.0, 100.39, 100.78, 101.17, 101.56, 101.95, 102.34 , 102.73 , 103.12 , 103.51 ,
/*10*/ 103.9, 104.29, 104.68, 105.07, 105.46, 105.85, 106.24 , 106.63 , 107.02 , 107.4 ,
/*20*/ 107.79, 108.18, 108.75, 108.96, 109.35, 109.73, 110.12 , 110.51 , 110.9 , 111.28 ,
/*30*/ 111.67, 112.06, 112.45, 112.83, 113.22, 113.61, 114.99 , 114.38 , 114.77 , 115.15 ,
/*40*/ 115.54, 115.93, 116.31, 116.70, 117.08, 117.47, 117.85 , 118.24 , 118.62 , 119.01 ,
/*50*/ 119.40, 119.78, 120.16, 120.55, 120.93, 121.32, 121.7 , 122.09 , 122.47 , 122.86 ,
/*60*/ 123.24, 123.62, 124.01, 124.39, 124.77, 125.16, 125.54 , 125.92 , 126.31 , 126.69 ,
/*70*/ 127.07, 127.45, 127.84, 128.22, 128.60, 128.98, 129.37 , 129.75 , 130.13 , 130.51 ,
/*80*/ 130.89, 131.27, 131.66, 132.04, 132.42, 132.80, 133.18 , 133.56 , 133.94 , 134.32 ,
/*90*/ 134.70, 135.08, 135.46, 135.84, 136.22, 136.60, 136.98 , 137.36 , 137.74 , 138.12 ,
/*100*/ 138.50, 138.88, 139.26, 139.64, 140.02, 140.39, 140.77 , 141.15 , 141.53 , 141.91 ,
/*110*/ 142.29, 142.66, 143.04, 143.42, 143.80, 144.17, 144.55 , 144.93 , 145.31 , 145.68 ,
/*120*/ 146.06, 146.44, 146.81, 147.19, 147.57, 147.94, 148.32 , 148.7 , 149.07 , 149.45 ,
/*130*/ 149.82, 150.20, 150.57, 150.95, 151.33, 151.70, 152.08 , 152.45 , 152.83 , 153.2 ,
/*140*/ 153.58, 153.95, 154.32, 154.70, 155.07, 155.45, 155.82 , 156.19 , 156.57 , 156.94 ,
/*150*/ 157.31, 157.69, 158.06, 158.43, 158.81, 159.18, 159.55 , 159.93 , 160.3 , 160.67 ,
/*160*/ 161.04, 161.42, 161.79, 162.16, 162.53, 162.90, 163.27 , 163.65 , 164.02 , 164.39 ,
/*170*/ 164.76, 165.13, 165.50, 165.87, 166.24, 166.61, 166.98 , 167.35 , 167.72 , 168.09 ,
/*180*/ 168.46, 168.83, 169.20, 169.57, 169.94, 170.31, 170.68 , 171.05 , 171.42 , 171.79 ,
/*190*/ 172.16, 172.53, 172.90, 173.26, 173.63, 174.00, 174.37 , 174.74 , 175.1 , 175.47 ,
/*200*/ 175.84, 176.21, 176.57, 176.94, 177.31, 177.68, 178.04 , 178.41 , 178.78 , 179.14 ,
/*210*/ 179.51, 179.88, 180.24, 180.61, 180.97, 181.34, 181.71 , 182.07 , 182.44 , 182.8 ,
/*220*/ 183.17, 183.53, 183.90, 184.26, 184.63, 184.99, 185.36 , 185.72 , 186.09 , 186.45 ,
/*230*/ 186.32, 187.18, 187.54, 187.91, 188.27, 188.63, 189 , 189.36 , 189.72 , 190.09 ,
/*240*/ 190.45, 190.81, 191.18, 191.54, 191.90, 192.26, 192.63 , 192.99 , 193.35 , 193.71 ,
/*250*/ 194.07, 194.44, 194.80, 195.16, 195.52, 195.88, 196.24 , 196.6 , 196.96 , 197.33 ,
/*260*/ 197.69, 198.05, 198.41, 198.77, 199.13, 199.49, 199.85 , 200.21 , 200.57 , 200.93 ,
/*270*/ 201.29, 201.65, 202.01, 202.36, 202.72, 203.08, 203.44 , 203.8 , 204.16 , 204.52 ,
/*280*/ 204.88, 205.23, 205.59, 205.95, 206.31, 206.67, 207.02 , 207.38 , 207.74 , 208.1 ,
/*290*/ 208.45, 208.81, 209.17, 209.52, 209.88, 210.24, 210.59 , 210.95 , 211.31 , 211.66 ,
/*300*/ 212.02, 212.37, 212.73, 213.09, 213.44, 213.80, 214.15 , 214.51 , 214.86 , 215.22 ,
/*310*/ 215.57, 215.93, 216.28, 216.64, 217.99, 217.35, 217.7 , 218.05 , 218.41 , 218.76 ,
/*320*/ 219.12, 219.47, 219.82, 220.18, 220.53, 220.88, 221.24 , 221.59 , 221.94 , 222.29 ,
/*330*/ 222.65, 223.00, 223.35, 223.70, 224.06, 224.41, 224.76 , 225.11 , 225.46 , 225.81 ,
/*340*/ 226.17, 226.52, 226.87, 227.22, 227.57, 227.92, 228.27 , 228.62 , 228.97 , 229.32 ,
/*350*/ 229.62, 230.02, 230.42, 230.82, 231.22, 231.62, 232.02 , 232.42 , 232.82 , 233.22 ,
/*360*/ 233.17, 233.52, 233.87, 234.22, 234.56, 234.91, 235.26 , 235.61 , 235.96 , 236.31 ,
/*370*/ 236.65, 237.00, 237.35, 237.70, 238.04, 238.39, 238.74 , 239.09 , 239.45 , 239.78 ,
/*380*/ 240.13, 240.47, 240.82, 241.17, 241.51, 241.86, 242.2 , 242.55 , 242.9 , 243.24 ,
/*390*/ 243.59, 243.93, 244.28, 244.62, 244.97, 245.31, 245.66 , 246 , 246.35 , 246.69 ,
/*400*/ 247.04, 247.38, 247.73, 248.07, 248.41, 248.76, 249.1 , 249.45 , 249.79 , 250.13 ,
/*410*/ 250.48, 250.82, 251.16, 251.50, 251.85, 252.19, 252.53 , 252.87 , 253.22 , 253.56 ,
/*420*/ 253.9, 254.24, 254.59, 254.93, 255.27, 255.61, 255.95 , 256.29 , 256.64 , 256.98 ,
/*430*/ 257.32, 257.66, 258.00, 258.34, 258.68, 259.02, 259.36 , 259.7 , 260.04 , 260.38 ,
/*440*/ 260.72, 261.06, 261.40, 261.74, 262.08, 262.42, 262.76 , 263.1 , 263.43 , 263.77 ,
/*450*/ 264.11, 264.45, 264.79, 265.13, 265.47, 265.80, 266.14 , 266.48 , 266.82 , 267.15 ,
/*460*/ 267.49, 267.83, 268.17, 268.50, 268.84, 269.18, 269.51 , 269.85 , 270.19 , 270.52 ,
/*470*/ 270.86, 271.20, 271.53, 271.87, 272.20, 272.54, 272.88 , 273.21 , 273.55 , 273.88 ,
/*480*/ 274.22, 274.55, 274.89, 275.22, 275.56, 275.89, 276.23 , 276.56 , 276.89 , 277.23 ,
/*490*/ 277.56, 277.90, 278.23, 278.56, 278.90, 279.23, 279.56 , 279.9 , 280.23 , 280.56 ,
/*500*/ 280.90, 281.23, 281.56, 281.89, 282.23, 282.56, 282.89 , 283.22 , 283.55 , 283.89 ,
/*510*/ 284.22, 284.55, 284.88, 285.21, 285.54, 285.87, 286.21 , 286.54 , 286.87 , 287.2 ,
/*520*/ 287.53, 287.86, 288.19, 288.52, 288.85, 289.18, 289.51 , 289.84 , 290.17 , 290.5 ,
/*530*/ 290.83, 291.16, 291.49, 291.81, 292.14, 292.47, 292.8 , 293.13 , 293.46 , 293.79 ,
/*540*/ 294.11, 294.44, 294.77, 295.10, 295.43, 295.75, 296.08 , 296.41 , 296.74 , 297.06 ,
/*550*/ 297.39, 297.72, 298.04, 298.37, 298.70, 299.02, 299.35 , 299.68 , 300 , 300.33 ,
/*560*/ 300.65, 300.98, 301.31, 301.63, 301.96, 302.28, 302.61 , 302.93 , 303.26 , 303.58 ,
/*570*/ 303.91, 304.23, 304.56, 304.88, 305.20, 305.53, 305.85 , 306.18 , 306.5 , 306.82 ,
/*580*/ 307.15, 307.47, 307.79, 308.12, 308.44, 308.76, 309.09 , 309.41 , 309.73 , 310.05 ,
/*590*/ 310.38, 310.7, 311.02, 311.34, 311.67, 311.99, 312.31 , 312.63 , 312.95 , 313.27 ,
/*600*/ 313.59, 313.92, 314.24, 314.56, 314.88, 315.20, 315.52 , 315.84 , 316.16 , 316.48 ,
/*610*/ 316.80, 317.12, 317.44, 317.76, 318.08, 318.40, 318.72 , 319.04 , 319.36 , 319.68 ,
/*620*/ 319.99, 320.31, 320.63, 320.95, 321.27, 321.59, 321.91 , 322.22 , 322.54 , 322.86 ,
/*630*/ 323.18, 323.49, 323.81, 324.13, 324.45, 324.76, 325.08 , 325.4 , 325.72 , 326.03 ,
/*640*/ 326.35, 326.66, 326.98, 327.30, 327.61, 327.93, 328.25 , 328.56 , 328.88 , 329.19 ,
/*650*/ 329.51, 329.82, 330.14, 330.45, 330.77, 331.08, 331.4 , 331.71 , 332.03 , 332.34 ,
/*660*/ 332.66, 332.97, 333.28, 333.60, 333.91, 334.23, 334.54 , 334.85 , 335.17 , 335.48 ,
/*670*/ 335.79, 336.11, 336.42, 336.73, 337.04, 337.36, 337.67 , 337.98 , 338.29 , 338.61 ,
/*680*/ 338.92, 339.23, 339.54, 339.85, 340.16, 340.48, 340.79 , 341.1 , 341.41 , 341.72 ,
/*690*/ 342.03, 342.34, 342.65, 342.96, 343.27, 343.58, 343.89 , 344.2 , 344.51 , 344.82 ,
/*700*/ 345.13, 345.44, 345.75, 346.06, 346.37, 346.68, 346.99 , 347.3 , 347.6 , 347.91 ,
/*710*/ 348.22, 348.53, 348.84, 349.15, 349.45, 349.76, 350.07 , 350.38 , 350.69 , 350.99 ,
/*720*/ 351.30, 351.61, 351.91, 352.22, 352.53, 352.83, 353.14 , 353.45 , 353.75 , 354.06 ,
/*730*/ 354.37, 354.67, 354.98, 355.28, 355.59, 355.90, 356.2 , 356.51 , 356.81 , 357.12 ,
/*740*/ 357.42, 357.73, 358.03, 358.34, 358.64, 358.95, 359.25 , 359.55 , 359.86 , 360.16 ,
/*750*/ 360.47, 360.77, 361.07, 361.38, 361.68, 361.98, 362.29 , 362.59 , 362.89 , 363.19 ,
/*760*/ 363.50, 363.8, 364.1, 364.40, 364.71, 365.01, 365.31 , 365.61 , 365.91 , 366.22 ,
/*770*/ 366.52, 366.82, 367.12, 367.42, 367.72, 368.02, 368.32 , 368.63 , 368.93 , 369.23 ,
/*780*/ 369.53, 369.83, 370.13, 370.43, 370.73, 371.03, 371.33 , 371.63 , 371.93 , 372.22 ,
/*790*/ 372.52, 372.82, 373.12, 373.42, 373.72, 374.02, 374.32 , 374.61 , 374.91 , 375.21 ,
/*800*/ 375.51, 375.81, 376.10, 376.40, 376.70, 377.00, 377.29 , 377.59 , 377.89 , 378.19
};
//i2c_ads1115.c
#include "ads1115.h"
#include "Usart2.h"
#include "stdlib.h"
char ads1115_Error = 0;//ADS出现的错误:1:Config配置出错||2:Send发送出错||3:RX接收出错
void ads1115_config_register(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL)
{
uint8_t reg_data[3]={pointADD,configH,configL};
while(HAL_I2C_Master_Transmit(&ads1115_I2cHandle, ADS1115_WRITE_ADDRESS, reg_data, 3, 1000) != HAL_OK)
{
if(HAL_I2C_GetError(&ads1115_I2cHandle) != HAL_I2C_ERROR_AF)
{
printf("ads1115 Config Register error!!!\r\n");
ads1115_Error = 1;
HAL_GPIO_WritePin(SW_CH1_GPIO_Port, SW_CH1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(SW_CH3_GPIO_Port, SW_CH3_Pin,GPIO_PIN_RESET);
BC26_Delay("FFFFFF",10);
HAL_GPIO_WritePin(SW_CH1_GPIO_Port, SW_CH1_Pin,GPIO_PIN_SET);
//5V ADC采集压力供电
HAL_GPIO_WritePin(SW_CH3_GPIO_Port, SW_CH3_Pin,GPIO_PIN_SET);
BC26_Delay("FFFFFF",10);
break;
}
}
}
int16_t ads1115_read_data(I2C_HandleTypeDef ads1115_I2cHandle)
{
int16_t data;
uint8_t rx_data[2]={0};
while(HAL_I2C_Master_Transmit(&ads1115_I2cHandle, ADS1115_WRITE_ADDRESS, 0x00, 1, 1000) != HAL_OK)
{
if(HAL_I2C_GetError(&ads1115_I2cHandle) != HAL_I2C_ERROR_AF)
{
printf("ads1115 convert Register error!!!\r\n");
ads1115_Error = 2;
HAL_GPIO_WritePin(SW_CH1_GPIO_Port, SW_CH1_Pin,GPIO_PIN_RESET);
BC26_Delay("FFFFFF",10);
HAL_GPIO_WritePin(SW_CH1_GPIO_Port, SW_CH1_Pin,GPIO_PIN_SET);
BC26_Delay("FFFFFF",10);
return 0;
}
}
while(HAL_I2C_Master_Receive(&ads1115_I2cHandle, ADS1115_READ_ADDRESS, rx_data, 2, 1000) != HAL_OK)
{
if(HAL_I2C_GetError(&ads1115_I2cHandle) != HAL_I2C_ERROR_AF)
{
printf("ads1115 read data error!!!\r\n");
ads1115_Error = 3;
HAL_GPIO_WritePin(SW_CH1_GPIO_Port, SW_CH1_Pin,GPIO_PIN_RESET);
BC26_Delay("FFFFFF",10);
HAL_GPIO_WritePin(SW_CH1_GPIO_Port, SW_CH1_Pin,GPIO_PIN_SET);
BC26_Delay("FFFFFF",10);
return 0;
}
}
data=rx_data[0]*256+rx_data[1];
return data;
}
//小端排序
void small_sort(uint16_t nums[], int length)
{
int i, j, temp;
//冒泡排序算法:进行 n-1 轮比较
for(i=0; i<length-1; i++)
{ //每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较
for(j=0; j<length-1-i; j++)
{
if(nums[j] > nums[j+1])
{
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
}
double ads1115_get_voltage_val(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL)
{
double val;
uint16_t ad_val;
#if 1
ads1115_config_register(ads1115_I2cHandle,pointADD,configH,configL);
HAL_Delay(100);
ad_val =ads1115_read_data(ads1115_I2cHandle);
#else
uint16_t adArray_val[6] = {0};
for(int i = 0;i < 5;i++)
{
ads1115_config_register(ads1115_I2cHandle,pointADD,configH,configL);
HAL_Delay(100);
adArray_val[i] =ads1115_read_data(ads1115_I2cHandle);
}
small_sort(adArray_val,5);
// for(int i = 0;i < 5;i++)
// {
// printf("\r\n %d \r\n",adArray_val[i]);
// }
ad_val = (adArray_val[2] + adArray_val[3] + adArray_val[4])/3;
#endif
if((ad_val==0x7FFF)|(ad_val == 0x8000))//是否超量程了
{
ad_val=0;
printf("over PGA\r\n");
}
printf("val is %d\r\n",ad_val);
switch((0x0E&configH)>>1)//量程对应的分辨率
{
case(0x00):
val=(double)ad_val*187.5/1000000.0;//
break;
case(0x01):
val=(double)ad_val*125/1000000.0;
break;
case(0x02):
val=(double)ad_val*62.5/1000000.0;
break;
case(0x03):
val=(double)ad_val*31.25/1000000.0;
break;
case(0x04):
val=(double)ad_val*15.625/1000000.0;
break;
case(0x05):
val=(double)ad_val*7.8125/1000000.0;
break;
}
return val;
}
#define Pres_Supply_voltage 0.4995
float Pressure_conversion(float Rt)
{
float temp;
temp =((1.6-0)/(4.5-0.5))*((Rt*2) - 0.4995) + 0;
return temp;
}
#include "math.h"
//压力传感器实际电阻值K1,K2//1.19K
float Tempe_Rk1 = 1200;
float Tempe_Rk2 = 1200;
//压力传感器实际供电电压
float Tempe_supply_volte = 3.29;
//INA826放大系数Kf
float Tempe_Kf = 9.75;
//压力传感器校准值
float Tempe_Key = 10.0;
float Temperature_conversion(float Tempe_Adc)
{
float temp;
//(1200+1200)*Tempe_Adc/(10.0*3.29 - Tempe_Adc)
temp = ((Tempe_Rk1+Tempe_Rk2)*Tempe_Adc)/(Tempe_Kf*Tempe_supply_volte - Tempe_Adc);
printf("\r\n 测量温度阻值:%f \r\n",temp);
return CalculateTemperature(temp);;
}
//压力范围上限下限(Pa)
float pressure_UPrange = 1.6;
float pressure_Lowrange = 0.0;
//压力测量电压范围(V)
float pressure_UPMease = 1.6;
float pressure_LowMease = 0.0;
//压力传感器实际供电电压
float pressure_supply_volte = 0.4995;
//压力传感器校准值
float pressure_Key = 0.0;
float pressure_conversion(float Press_Adc)
{
float temp;
//temp =((1.6-0)/(4.5-0.5))*(Press_float-0.4995)+0;
temp =((pressure_UPrange-pressure_Lowrange)/(pressure_UPMease-pressure_LowMease))*(Press_Adc-pressure_supply_volte)+pressure_Key;
return temp;
}
/*
宽温采集范围:-40~125℃,温度采集精度:±0.2℃
可定制各种压力量程,常规0-1732Kpa,压力采集精度:0.1~0.5%FS
采用高精度16位AD芯片检测数据变化,采集速度快、精度高
(暂定为:温度传感器PT1000三线制、压力传感器输出0.5-4.5v)
*/
main.c
//#include "main.h"
//#include "i2c.h"
//#include "usart.h"
//#include "i2c_ads1115.h"
//int main(void)
//{
// double val;
// HAL_Init();
// SystemClock_Config();
// MX_I2C1_Init(); //IIC初始化
// MX_USART1_UART_Init();//串口初始化
// HAL_Delay(100);
// while(1)
// {
// val=ads1115_get_voltage_val(hi2c1,0x01,CONFIG_REG_H,CONFIG_REG_L);
// printf("val is %f\r\n",val);
// HAL_Delay(1000);
// }
//}
const float Table_PT100[]=
{
//℃ 0 1 2 3 4 5 6 7 8 9
/*-200*/ 18.52, 18.95, 19.38, 19.82, 20.25, 20.68, 21.11, 21.54, 21.97, 22.4,
/*-190*/ 22.83, 23.25, 23.68, 24.11, 24.54, 24.97, 25.39, 25.82, 26.24, 26.67,
/*-180*/ 27.10, 27.52, 27.95, 28.37, 28.80, 29.22, 29.64, 30.07, 30.49, 30.91,
/*-170*/ 31.34, 31.76, 32.18, 32.60, 33.02, 33.44, 33.86, 34.28, 34.70, 35.12,
/*-160*/ 35.54, 35.96, 36.38, 36.80, 37.22, 37.64, 38.05, 38.47, 38.89, 39.31,
/*-150*/ 39.72, 40.14, 40.56, 40.97, 41.39, 41.80, 42.22, 42.63, 43.05, 43.46,
/*-140*/ 43.88, 44.29, 44.70, 45.12, 45.53, 45.94, 46.36, 46.77, 47.18, 47.59,
/*-130*/ 48.00, 48.42, 48.83, 49.24, 49.65, 50.06, 50.47, 50.88, 51.29, 51.70,
/*-120*/ 52.11, 52.52, 52.93, 53.34, 53.75, 54.15, 54.56, 54.97, 55.38, 55.79,
/*-110*/ 56.19, 56.60, 57.01, 57.41, 57.82, 58.23, 58.63, 59.04, 59.44, 59.85,
/*-100*/ 60.26, 60.66, 61.07, 61.47, 61.88, 62.28, 62.68, 63.09, 63.49, 63.90,
/*-90*/ 64.30, 64.70, 65.11, 65.51, 65.91, 66.31, 66.72, 67.12, 67.52, 67.92,
/*-80*/ 68.33, 68.73, 69.13, 69.53, 69.93, 70.33, 70.73, 71.13, 71.53, 71.93,
/*-70*/ 72.33, 72.73, 73.13, 73.53, 73.93, 74.33, 74.73, 75.13, 75.53, 75.93,
/*-60*/ 76.33, 76.73, 77.13, 77.52, 77.92, 78.32, 78.72, 79.11, 79.51, 79.91,
/*-50*/ 80.31, 80.70, 81.10, 81.50, 81.89, 82.29, 82.69, 83.08, 83.48, 83.88,
/*-40*/ 84.27, 84.67, 85.06, 85.46, 85.85, 86.25, 86.64, 87.04, 87.43, 87.83,
/*-30*/ 88.22, 88.62, 89.01, 89.40, 89.80, 90.19, 90.59, 90.93, 91.37, 91.77,
/*-20*/ 92.16, 92.55, 92.95, 93.34, 93.73, 94.12, 94.52, 94.91, 95.30, 95.69,
/*-10*/ 96.09, 96.48, 96.87, 97.26, 97.65, 98.04, 98.44, 98.83, 99.22, 99.61,
/*0*/ 100.00, 100.39, 100.78, 101.17, 101.56, 101.95, 102.34, 102.73, 103.12, 103.51,
/*10*/ 103.90, 104.29, 104.68, 105.07, 105.46, 105.85, 106.24, 106.63, 107.02, 107.40,
/*20*/ 107.79, 108.18, 108.75, 108.96, 109.35, 109.73, 110.12, 110.51, 110.90, 111.28,
/*30*/ 111.67, 112.06, 112.45, 112.83, 113.22, 113.61, 114.99, 114.38, 114.77, 115.15,
/*40*/ 115.54, 115.93, 116.31, 116.70, 117.08, 117.47, 117.85, 118.24, 118.62, 119.01,
/*50*/ 119.40, 119.78, 120.16, 120.55, 120.93, 121.32, 121.70, 122.09, 122.47, 122.86,
/*60*/ 123.24, 123.62, 124.01, 124.39, 124.77, 125.16, 125.54, 125.92, 126.31, 126.69,
/*70*/ 127.08, 127.46, 127.84, 128.22, 128.60, 128.98, 129.37, 129.75, 130.13, 130.51,
/*80*/ 130.89, 131.27, 131.66, 132.04, 132.42, 132.80, 133.18, 133.56, 133.94, 134.32,
/*90*/ 134.70, 135.08, 135.46, 135.84, 136.22, 136.60, 136.98, 137.36, 137.74, 138.12,
/*100*/ 138.50, 138.88, 139.26, 139.64, 140.02, 140.39, 140.77, 141.15, 141.53, 141.91,
/*110*/ 142.29, 142.66, 143.04, 143.42, 143.80, 144.17, 144.55, 144.93, 145.31, 145.68,
/*120*/ 146.06, 146.44, 146.81, 147.19, 147.57, 147.94, 148.32, 148.70, 149.07, 149.45,
/*130*/ 149.82, 150.20, 150.57, 150.95, 151.33, 151.70, 152.08, 152.45, 152.83, 153.20,
/*140*/ 153.58, 153.95, 154.32, 154.70, 155.07, 155.45, 155.82, 156.19, 156.57, 156.94,
/*150*/ 157.31, 157.69, 158.06, 158.43, 158.81, 159.18, 159.55, 159.93, 160.30, 160.67,
/*160*/ 161.04, 161.42, 161.79, 162.16, 162.53, 162.90, 163.27, 163.65, 164.02, 164.39,
/*170*/ 164.76, 165.13, 165.50, 165.87, 166.24, 166.61, 166.98, 167.35, 167.72, 168.09,
/*180*/ 168.46, 168.83, 169.20, 169.57, 169.94, 170.31, 170.68, 171.07, 171.43, 171.80,
/*190*/ 172.16, 172.53, 172.90, 173.26, 173.63, 174.00, 174.37, 174.75, 175.12, 175.49,
/*200*/ 175.86, 176.26, 176.59, 176.96, 177.33, 177.69, 178.06, 178.43, 178.79, 179.16,
};
/***********************************************************************
*FunName: float CalculateTemperature(float fR)
*In: fR -> PT100的电阻值。
*Out: fTem -> 测得的温度值。
*Discription: 将电阻值查表算出温度值。
*Notes: 采用2分查找法。
************************************************************************/
float CalculateTemperature(float fR)
{
float fTem;
float fLowRValue;
float fHighRValue;
int iTem;
char i;
char cLimite = 0xFF;
uint16_t cBottom, cTop;
if (fR < Table_PT100[0]) // 电阻值小于表格最值低于量程下限。
{
printf("\r\n 超出温度表范围:%f \r\n",fR);
return 0xFFAA;
}
if (fR > Table_PT100[409]) // 电阻值大于表格最大值,超出量程上限 。
{
printf("\r\n 超出温度表范围:%f \r\n",fR);
return 0xFFBB;
}
cBottom = 0;
cTop = 210;
for (i=105; (cTop-cBottom)!=1; ) // 2分法查表。
{
if (fR < Table_PT100[i])
{
cTop = i;
i = (cTop + cBottom) / 2;
}
else if (fR > Table_PT100[i])
{
cBottom = i;
i = (cTop + cBottom) / 2;
}
else
{
printf("\r\n 温度表:%d \r\n",i);
iTem = (int)i * 1 - 200;
fTem = (float)iTem;
return fTem;
}
}
printf("\r\n 温度表:%d \r\n",i);
iTem = (int)i * 1 - 200;
fLowRValue = Table_PT100[cBottom];
fHighRValue = Table_PT100[cTop];
fTem = ( ((fR - fLowRValue)*1) / (fHighRValue - fLowRValue) ) + iTem; // 表格是以5度为一步的。
// 两点内插进行运算。
return fTem;
}
//i2c_ads1115.h
#ifndef __IIC_ADS1115_H
#define __IIC_ADS1115_H
#include "main.h"
#define ADS1115_WRITE_ADDRESS 0x90
#define ADS1115_READ_ADDRESS 0x91
//以下两个预处理作为配置寄存器预处理要更改其配在这里更改
//也可以添加新的预处理对不同通道的采集或者选取不同的采样速率等
//ADS_AIN0
#define CONFIG0_REG_H ADS1115_REG_CONFIG_OS_START|\
ADS1115_REG_CONFIG_MUX_SINGLE_0|\
ADS1115_REG_CONFIG_PGA_6|\
ADS1115_REG_CONFIG_MODE_CONTIN
#define CONFIG0_REG_L ADS1115_REG_CONFIG_DR_128|\
ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL|\
ADS1115_REG_CONFIG_COMP_POL_LOW|\
ADS1115_REG_CONFIG_COMP_LAT_NONLATCH|\
ADS1115_REG_CONFIG_COMP_QUE_DIS
//ADS_AIN1
#define CONFIG1_REG_H ADS1115_REG_CONFIG_OS_START|\
ADS1115_REG_CONFIG_MUX_SINGLE_1|\
ADS1115_REG_CONFIG_PGA_6|\
ADS1115_REG_CONFIG_MODE_CONTIN
#define CONFIG1_REG_L ADS1115_REG_CONFIG_DR_128|\
ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL|\
ADS1115_REG_CONFIG_COMP_POL_LOW|\
ADS1115_REG_CONFIG_COMP_LAT_NONLATCH|\
ADS1115_REG_CONFIG_COMP_QUE_DIS
//ADS_AIN2
#define CONFIG2_REG_H ADS1115_REG_CONFIG_OS_START|\
ADS1115_REG_CONFIG_MUX_SINGLE_2|\
ADS1115_REG_CONFIG_PGA_4|\
ADS1115_REG_CONFIG_MODE_CONTIN
#define CONFIG2_REG_L ADS1115_REG_CONFIG_DR_128|\
ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL|\
ADS1115_REG_CONFIG_COMP_POL_LOW|\
ADS1115_REG_CONFIG_COMP_LAT_NONLATCH|\
ADS1115_REG_CONFIG_COMP_QUE_DIS
//ADS_AIN3
#define CONFIG3_REG_H ADS1115_REG_CONFIG_OS_START|\
ADS1115_REG_CONFIG_MUX_SINGLE_3|\
ADS1115_REG_CONFIG_PGA_4|\
ADS1115_REG_CONFIG_MODE_CONTIN
#define CONFIG3_REG_L ADS1115_REG_CONFIG_DR_128|\
ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL|\
ADS1115_REG_CONFIG_COMP_POL_LOW|\
ADS1115_REG_CONFIG_COMP_LAT_NONLATCH|\
ADS1115_REG_CONFIG_COMP_QUE_DIS
/***************/
//配置寄存器说明
//config register
/*CRH[15:8](R/W)
BIT 15 14 13 12 11 10 9 8
NAME OS MUX2 MUX1 MUX0 PGA2 PGA1 PGA0 MODE
CRL[7:0] (R/W)
BIT 7 6 5 4 3 2 1 0
NAME DR0 DR1 DR0 COM_MODE COM_POL COM_LAT COM_QUE1 COM_QUE0
-----------------------------------------------------------------------------------
* 15 | OS | 运行状态会单词转换开始
* | | 写时:
* | | 0 : 无效
* | | 1 : 开始单次转换处于掉电状态时
* | | 读时:
* | | 0 : 正在转换
* | | 1 : 未执行转换
* -----------------------------------------------------------------------------------
* 14:12 | MUX [2:0] | 输入复用多路配置
* | | 000 : AINP = AIN0 and AINN = AIN1 (default)
* | | 001 : AINP = AIN0 and AINN = AIN3
* | | 010 : AINP = AIN1 and AINN = AIN3
* | | 011 : AINP = AIN2 and AINN = AIN3
* | | 100 : AINP = AIN0 and AINN = GND
* | | 101 : AINP = AIN1 and AINN = GND
* | | 110 : AINP = AIN2 and AINN = GND
* | | 111 : AINP = AIN3 and AINN = GND
* -----------------------------------------------------------------------------------
* 11:9 | PGA [2:0] | 可编程增益放大器配置(FSR full scale range)
* | | 000 : FSR = В±6.144 V
* | | 001 : FSR = В±4.096 V
* | | 010 : FSR = В±2.048 V (默认)
* | | 011 : FSR = В±1.024 V
* | | 100 : FSR = В±0.512 V
* | | 101 : FSR = В±0.256 V
* | | 110 : FSR = В±0.256 V
* | | 111 : FSR = В±0.256 V
* -----------------------------------------------------------------------------------
* 8 | MODE | 工作模式
* | | 0 : 连续转换
* | | 1 : 单词转换
* -----------------------------------------------------------------------------------
* 7:5 | DR [2:0] | 采样频率
* | | 000 : 8 SPS
* | | 001 : 16 SPS
* | | 010 : 32 SPS
* | | 011 : 64 SPS
* | | 100 : 128 SPS (默认)
* | | 101 : 250 SPS
* | | 110 : 475 SPS
* | | 111 : 860 SPS
* -----------------------------------------------------------------------------------
* 4 | COMP_MODE | 比较器模式
* | | 0 : 传统比较器 (default)
* | | 1 : 窗口比较器
* -----------------------------------------------------------------------------------
* 3 | COMP_POL | Comparator polarity
* | | 0 : 低电平有效 (default)
* | | 1 : 高电平有效
* -----------------------------------------------------------------------------------
* 2 | COMP_LAT | Latching comparator
* | | 0 : 非锁存比较器. (default)
* | | 1 : 锁存比较器.
* -----------------------------------------------------------------------------------
* 1:0 | COMP_QUE [1:0] | Comparator queue and disable
* | | 00 : Assert after one conversion
* | | 01 : Assert after two conversions
* | | 10 : Assert after four conversions
* | | 11 : 禁用比较器并将ALERT/RDY设置为高阻抗 (default)
* -----------------------------------------------------------------------------------
*/
//地址指针寄存器
#define ADS1015_REG_POINTER_CONVERT (0x00)
#define ADS1015_REG_POINTER_CONFIG (0x01)
#define ADS1015_REG_POINTER_LOWTHRESH (0x02)
#define ADS1015_REG_POINTER_HITHRESH (0x03)
// 单次转换开始
#define ADS1115_REG_CONFIG_OS_START (0x1U << 7)//设备单词转换开启 高字节的最高位
#define ADS1115_REG_CONFIG_OS_NULL (0x0U << 7)
//输入引脚选择和输入方式选择
#define ADS1115_REG_CONFIG_MUX_Diff_01 (0x0U << 4) // 差分输入0引脚和1引脚
#define ADS1115_REG_CONFIG_MUX_Diff_03 (0x1U << 4) // 差分输入0引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_Diff_13 (0x2U << 4) // 差分输入1引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_Diff_23 (0x3U << 4) // 差分输入2引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_SINGLE_0 (0x4U << 4) //单端输入 0
#define ADS1115_REG_CONFIG_MUX_SINGLE_1 (0x5U << 4) //单端输入 1
#define ADS1115_REG_CONFIG_MUX_SINGLE_2 (0x6U << 4) //单端输入 2
#define ADS1115_REG_CONFIG_MUX_SINGLE_3 (0x7U << 4) //单端输入 3
//量程选择
#define ADS1115_REG_CONFIG_PGA_6 (0x0U << 1) // +/- 6.1144
#define ADS1115_REG_CONFIG_PGA_4 (0x1U << 1) // +/- 4.096
#define ADS1115_REG_CONFIG_PGA_2 (0x2U << 1) // +/- 2.048
#define ADS1115_REG_CONFIG_PGA_1 (0x3U << 1) // +/- 1.024
#define ADS1115_REG_CONFIG_PGA_05 (0x4U << 1) // +/- 0.512
#define ADS1115_REG_CONFIG_PGA_02 (0x5U << 1) // +/- 0.256
//运行方式
#define ADS1115_REG_CONFIG_MODE_SINGLE (0x1U << 0) // 单次
#define ADS1115_REG_CONFIG_MODE_CONTIN (0x0U << 0) //连续转换
//转换速率
#define ADS1115_REG_CONFIG_DR_8 (0x0U << 5)
#define ADS1115_REG_CONFIG_DR_16 (0x1U << 5)
#define ADS1115_REG_CONFIG_DR_32 (0x2U << 5)
#define ADS1115_REG_CONFIG_DR_64 (0x3U << 5)
#define ADS1115_REG_CONFIG_DR_128 (0x4U << 5)
#define ADS1115_REG_CONFIG_DR_250 (0x5U << 5)
#define ADS1115_REG_CONFIG_DR_475 (0x6U << 5)
#define ADS1115_REG_CONFIG_DR_860 (0x7U << 5)
//比较器模式
#define ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL (0x0U << 4)//默认
#define ADS1115_REG_CONFIG_COMP_MODE_WINDOW (0x1U << 4)
#define ADS1115_REG_CONFIG_COMP_POL_LOW (0x0U << 3)//默认
#define ADS1115_REG_CONFIG_COMP_POL_HIG (0x1U << 3)
#define ADS1115_REG_CONFIG_COMP_LAT_NONLATCH (0x0U << 2)
#define ADS1115_REG_CONFIG_COMP_LAT_LATCH (0x1U << 2)
#define ADS1115_REG_CONFIG_COMP_QUE_ONE (0x0U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_TWO (0x1U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_THR (0x2U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_DIS (0x3U << 0)
void ads1115_config_register(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL);
int16_t ads1115_read_data(I2C_HandleTypeDef ads1115_I2cHandle);
double ads1115_get_voltage_val(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL);
float MAX31865_GetTemp(float Rt);
float Temperature_conversion(float Tempe_Adc);
float pressure_conversion(float Press_Adc);
float CalculateTemperature(float fR);
#endif