完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
压力范围为25-35,比如如果压力超上限,系统会控制电磁阀放气,程序写着应该是缓慢放气,但是实际压力在45(每次不一样)左右维持几秒,然后突然降到32,出现这种压力下降太多的情况,什么问题呀?
附上程序,不知道是pwm程序控制问题还是其他问题 #include #include #include #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;//排气阀高电平时间 ***it QB_pwm=P2^0;//控制气泵pwm信号 ***it PQF_pwm=P2^1;//控制排气阀pwm信号 ***it 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 { 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=0; //气泵工作 } else { QB_pwm=1; //气泵关闭 } if(t0 { PQF_pwm=0; //排气阀打开 } else { PQF_pwm=1; //排气阀关闭 } //下面是采样频率判断时间 t1++; if(t1==100) //采样频率是100ms { t1=0; Volt_collect(); } }
|
|
相关推荐
6个回答
|
|
|
|
|
|
人中狼 发表于 2018-4-19 11:04 定义成全局变量跟现在是局部变量,有什么区别吗?不太理解区别 |
|
|
|
局部变量好像时在调用相应的程序时才会被赋值和使用,在退出该程序后,变量则被放弃,所以这个变量单元有可能会被分配给其他程序的局部变量使用,而导致数值变化。全局变量则在整个程序运行中只有对该变量进行操作时才会改变该变量的数值。中断里使用到的做判断用的,或根据中断的次数更改数值的变量最好都是全局变量
|
|
|
|
人中狼 发表于 2018-4-19 13:17 我等下按你说的把t0和t1都设成全局变量试试看先,不行再来请教你哦,程序上其他还有什么不对会导致我说的压力显示问题吗? |
|
|
|
人中狼 发表于 2018-4-19 13:17 在吗,我按你的把to,t1放到main最前面,定义为全局变量,压力在放气时,还是会有突然下降的过程,不知道问题在哪里,求指导! |
|
|
|
试了几次,这种情况,压力40左右的那会,特别容易突然下降 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
479 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
229 浏览 0 评论
334 浏览 0 评论
165 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
496 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11972 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 12:37 , Processed in 1.512815 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号