初级会员
- 积分
- 53
- 金钱
- 53
- 注册时间
- 2019-2-22
- 在线时间
- 10 小时
|
1金钱
这是我写的程序pm25.c
#include "pm25.h"
#include "adc.h"
#include "delay.h"
//#include "gpio.h"
void LED_pm25(uint8_t num)
{
if(num == 1)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
}
// **********************************************************
// 获取数字量
uint16_t PM25_Get_ADC(void)
{
HAL_ADC_Start(&hadc1); //开启ADC
HAL_ADC_PollForConversion(&hadc1,10); //轮询转换
return (uint16_t)HAL_ADC_GetValue(&hadc1); //返回最近一次ADC1规则组的转换结果
}
//计算模拟量
float PM25_Get_PPM(void)
{
uint16_t A_value;
float D_value;
LED_pm25(1); //打开红外二极管
delay_us(280); //延时280us,延时时间到才进行采样
A_value = PM25_Get_ADC(); //采样,读取AD值,此过程耗时7us
delay_us(33); //延时33us,280+7+33=320us,这是LED亮灯的最短时间
LED_pm25(0); //关闭红外二极管
delay_us(9680); //延时9680us,320+9680=10000us=10ms,这是一个周期的最短时间
// D_value = A_value*0.17-0.1; //公式一
D_value = A_value*(3.3f/4096)*2;
D_value = (0.17f*D_value-0.1f)*1000;//公式二
return (D_value );
}
这是我写的程序main
printf("PM2.5:%f mg/m3\n",PM25_Get_PPM());//计算粉尘浓度并通过串口打印
这是cubemx设置
但是,我得到的非常奇怪的值:
感觉这些负值时没有接收到ad值,但是我不知道怎么修改程序,希望能得到解答
1213884879@qq.com
|
最佳答案
查看完整内容[请看2#楼]
这是我接收到的数据,这些负数是什么情况
[11:34:51.022]收←◆check!!
PM2.5:-95.069336 mg/m3
[11:34:52.051]收←◆PM2.5:-98.904297 mg/m3
[11:34:53.061]收←◆PM2.5:-99.178223 mg/m3
[11:34:54.071]收←◆PM2.5:-100.000000 mg/m3
[11:34:55.091]收←◆PM2.5:-100.000000 mg/m3
[11:34:56.101]收←◆PM2.5:431.689941 mg/m3
[11:34:57.111]收←◆PM2.5:-100.000000 mg/m3
[11:34:58.121]收← ...
|