压力范围为25-35,比如如果压力超上限,系统会控制电磁阀放气,程序写着应该是缓慢放气,但是实际压力在45(每次不一样)左右维持几秒,然后突然降到32,出现这种压力下降太多的情况,什么问题呀?file:///D:QQ2013Users648019770ImageGroupA$1`0O}T]`LE1X6O210PAQK.png
附上程序,不知道是pwm程序控制问题还是其他问题
#include<reg51.h>
#include<intrins.h>
#include<string.h>
#include "delay.h"
#include "lcd.h"
#include "adc.h"
#include "key.h"
#include "display.h"
#include "uart.h"
void serial_init();//串口初始化函数
uchar pressure_high=35;
uchar pressure_low=25;
uchar data date_tab[8];
uint enable;//串口开关控制位,1为打开
uint flag=0;//按键标志位
uint TestDisMode=0;
uint PresValue=0;
uchar QB_pwm_H=0;//气泵高电平时间
uchar PQF_pwm_H=0;//排气阀高电平时间
sbit QB_pwm=P2^0;//控制气泵pwm信号
sbit PQF_pwm=P2^1;//控制排气阀pwm信号
sbit BEEP=P2^2;//蜂鸣器引脚
void main()
{
uart_init();//串口初始化
TH0=(65536-1000)/256; //1ms初值
TL0=(65536-1000)%256;
ET0=1;
//TR0=1;//初始化时关闭T0,等按下开始再启动T0
TR0=0;//初始化T0停止
EA=1;//开总中断
//PQF_pwm=1; //排气阀关闭
//QB_pwm=1; //气泵关闭
//BEEP=1;//蜂鸣器关闭
lcd_init();
display_start();
delay_ms(10);
while(1)
{
keyscan();
if(TestDisMode==1)
{
TR0=1;//按下开始键后T0开启
delay_ms(10);//不加这句,显示在第一格
Volt_pressure_display();
/*************调节机制*******************************/
if(PresValue>pressure_high && PresValue<90)
{
Set_date_dis3();
PQF_pwm_H=4;//调节排气阀放气速度,越大放气越快
QB_pwm_H=0;//关闭气泵
//BEEP=0;//蜂鸣器报警
}
if(PresValue>=90)
{
Set_date_dis3();
PQF_pwm_H=8;//调节排气阀放气速度,越大越快
QB_pwm_H=0;//关闭气泵
//BEEP=0;//蜂鸣器报警
}
if(PresValue<pressure_low && PresValue>5)
{
Set_date_dis4();
QB_pwm_H=5;//调节气泵打气速度,越大充气越快
PQF_pwm_H=0;//关闭排气阀
//BEEP=0;//蜂鸣器报警
}
if(PresValue<=5)
{
Set_date_dis4();
QB_pwm_H=8;//调节气泵打气速度,越大充气越快
PQF_pwm_H=0;//关闭排气阀
//BEEP=0;//蜂鸣器报警
}
if(PresValue>=pressure_low && PresValue<=pressure_high)
{
Set_date_dis5();
QB_pwm_H=0;//关闭气泵
PQF_pwm_H=0;//关闭排气阀
BEEP=1;//蜂鸣器关闭
}
/*************调节机制*******************************/
if(enable==1)//如果上位机按下开始采集,则发送0x01给下位机
{
Send(date_tab[4]);//发送压力千位
Send(date_tab[5]);//发送压力百位
Send(date_tab[6]);//发送压力十位
Send(date_tab[7]);//发送压力个位
delay_ms(200); //200ms发送一次
}
if(enable==0)//如果没有收到01,则关闭ad采集,不发送数据
{
TR0=0;
}
}
else
{
TR0=0;
}
}
}
void timer0() interrupt 1 //T0主要控制输出两路pwm信号和采样频率
{
uchar t0;//t0控制pwm信号时间变量
uchar t1;//t1控制采样频率时间变量
TH0=(65536-1000)/256; //1ms初值
TL0=(65536-1000)%256;
//下面是PWM信号时间
t0++;
if(t0<QB_pwm_H)
{
QB_pwm=0; //气泵工作
}
else
{
QB_pwm=1; //气泵关闭
}
if(t0<PQF_pwm_H)<
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>