差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
stm32:adc [2025/01/13 19:42] – laythy | stm32:adc [2025/01/26 12:47] (当前版本) – laythy | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ADC.c 文件 (ADC.h文件就不写在这里了) : | + | ===Analog Digital Convert=== |
- | < | + | |
+ | < | ||
+ | |||
+ | #include " | ||
+ | #include " | ||
+ | #include " | ||
+ | #include " | ||
+ | #include "ADC.h" | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | // rawvolt: 读取到的电压值. R_NTC: 用rawvolt和实际电路计算NTC电阻阻值. accTemp: 用公式通过阻值来计算实际温度. | ||
+ | // 公式: NTC热敏电阻的电阻-温度关系通常使用Steinhart-Hart方程或其简化形式(Beta公式)来表示. | ||
+ | uint16_t rawVolt = 0, R_NTC = 0, xiaoshu = 0; | ||
+ | double accTemp = 0; | ||
+ | |||
+ | OLED_Init(); | ||
+ | ADC_Init_PB1(); | ||
+ | OLED_ShowString(1, | ||
+ | |||
+ | while(1) | ||
+ | { | ||
+ | // 用函数读取ADC的电压值. | ||
+ | rawVolt = ADC_Get_PB1_Value(); | ||
+ | // 我才用的NTC25摄氏度标准电阻为10K, | ||
+ | R_NTC = (rawVolt * 10000) / (4096 - rawVolt); | ||
+ | // 下用的就是Beta公式用电阻值计算实际温度. | ||
+ | accTemp = 1.0 / (1.0 / 298.15 + 1.0 / 3950.0 * log(R_NTC / 10000.0)) - 273.15;; | ||
+ | // 由于我的OLED显示函数不能显示小数, | ||
+ | xiaoshu = (int)(accTemp*100)%100; | ||
+ | OLED_ShowString(2, | ||
+ | OLED_ShowNum(2, | ||
+ | OLED_ShowString(3, | ||
+ | OLED_ShowNum(3, | ||
+ | OLED_ShowString(4, | ||
+ | OLED_ShowNum(4, | ||
+ | OLED_ShowChar(4, | ||
+ | OLED_ShowNum(4, | ||
+ | OLED_ShowString(4, | ||
+ | Delay_ms(1000); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | < | ||
#include " | #include " | ||
#include " | #include " | ||
行 54: | 行 98: | ||
// 72/6 = 12Mhz, * 239.5T(采样周期)+12.5T(转换周期) = 252T = 5.6微秒. | // 72/6 = 12Mhz, * 239.5T(采样周期)+12.5T(转换周期) = 252T = 5.6微秒. | ||
return ADC_GetConversionValue(ADC2); | return ADC_GetConversionValue(ADC2); | ||
- | } | ||
- | </ | ||
- | 主程序 main.c : | ||
- | < | ||
- | #include " | ||
- | #include " | ||
- | #include " | ||
- | #include " | ||
- | #include " | ||
- | |||
- | int main() | ||
- | { | ||
- | // rawvolt: 读取到的电压值. R_NTC: 用rawvolt和实际电路计算NTC电阻阻值. accTemp: 用公式通过阻值来计算实际温度. | ||
- | // 公式: NTC热敏电阻的电阻-温度关系通常使用Steinhart-Hart方程或其简化形式(Beta公式)来表示. | ||
- | uint16_t rawVolt = 0, R_NTC = 0, xiaoshu = 0; | ||
- | double accTemp = 0; | ||
- | | ||
- | OLED_Init(); | ||
- | ADC_Init_PB1(); | ||
- | OLED_ShowString(1, | ||
- | | ||
- | while(1) | ||
- | { | ||
- | // 用函数读取ADC的电压值. | ||
- | rawVolt = ADC_Get_PB1_Value(); | ||
- | // 我才用的NTC25摄氏度标准电阻为10K, | ||
- | R_NTC = (rawVolt * 10000) / (4096 - rawVolt); | ||
- | // 下用的就是Beta公式用电阻值计算实际温度. | ||
- | accTemp = 1.0 / (1.0 / 298.15 + 1.0 / 3950.0 * log(R_NTC / 10000.0)) - 273.15;; | ||
- | // 由于我的OLED显示函数不能显示小数, | ||
- | xiaoshu = (int)(accTemp*100)%100; | ||
- | OLED_ShowString(2, | ||
- | OLED_ShowNum(2, | ||
- | OLED_ShowString(3, | ||
- | OLED_ShowNum(3, | ||
- | OLED_ShowString(4, | ||
- | OLED_ShowNum(4, | ||
- | OLED_ShowChar(4, | ||
- | OLED_ShowNum(4, | ||
- | OLED_ShowString(4, | ||
- | Delay_ms(1000); | ||
- | } | ||
} | } | ||
</ | </ |