请教:STC15W204S的比较器使用问题
本帖最后由 sonnybirdyaya 于 2015-3-9 13:47 编辑原理图RT
思路为:
Key1,2导通后单片机得5V电,
P3.3控制水泵的开关,当水泵正常抽水时,电流约400MA,水泵空转时。电流约100MA;
使用采样电阻R6,2.2欧姆,这样对应的正常CMP-脚电压为0.4*2.2=0.88V 空转电压为0.1*2.2=0.22V
与CMP+脚的R2,R7分压后的电压约0.47V比较;
单片机上电后,水泵开始工作,延时10S判断是否正常抽水,当水泵正常抽水时,维持水泵运行,当水泵空转时,切断水泵并点亮LED报警。
问题:
1.由于产品厚度限制,没办法在78L05两端使用大电容滤波,目前来看没有太大的干扰问题;这种方案是否存在问题?如有,有什么方法能减少这种问题;
2.实际测试发现,系统开始抽水1-3分钟(每次不同)以后,会自动切断水泵工作,并点亮报警LED灯;
我用万用表测量了采样电阻R6(2W 2512的贴片)的电压,发现切断前CMP- 点电压没有明显的变化;R6上的温度尚可,手可以摸上去;
想请教下发生这个现象可能的原因是什么?
程序如下
sbit LED_Low = P3^2 ;//定义LED
sbit Pump=P3^3;//泵端口定义
char CmpTemp1;//比较器结果临时变量1
char CmpTemp2;//比较器结果临时变量2
char Cmp;//比较器结果,水泵空转时,Cmp==1;
//比较器寄存器设置
sfr CMPCR1 = 0xE6;
sfr CMPCR2 = 0xE7;
//CMPCR1
#define CMPEN 0x80 //1: 允许比较器, 0: 禁止,关闭比较器电源
#define CMPIF 0x40 //比较器中断标志, 包括上升沿或下降沿中断, 软件清0
#define PIE 0x20 //1: 比较结果由0变1, 产生上升沿中断
#define NIE 0x10 //1: 比较结果由1变0, 产生下降沿中断
#define PIS 0x08 //输入正极性选择, 0: 选择内部P5.5做正输入, 1: 由ADCIS所选择的ADC输入端做正输入.
#define NIS 0x04 //输入负极性选择, 0: 选择内部BandGap电压BGv做负输入, 1: 选择外部P5.4做输入.
#define CMPOE 0x02 //1: 允许比较结果输出到P1.2, 0: 禁止.
#define CMPRES 0x01 //比较结果, 1: CMP+电平高于CMP-,0: CMP+电平低于CMP-,只读
//CMPCR2
#define INVCMPO 0x80 //1: 比较器输出取反,0: 不取反
#define DISFLT 0x40 //1: 关闭0.1uF滤波, 0: 允许
#define LCDTY 0x00 //0~63, 比较结果变化延时周期数
void Delay1s(){....}
main()
{
//初始化
CMPCR1 = 0;
CMPCR2 = 0x1f;//比较器不取反,允许0.1uf滤波,比较结果变化延时1f周期数
CMPCR1 &=~PIE;//比较结果由0变1, 产生上升沿中断 0: 禁止
CMPCR1 &=~NIE;//比较结果由0变1, 产生下降沿中断 0: 禁止
CMPCR1 &=~PIS;// 输入正极性选择, 0: 选择内部P5.5做正输入
CMPCR1 |=NIS;//输入负极性选择, 1: 选择外部P5.4做输入.
CMPCR1 &=~CMPOE;//允许比较结果输出到P1.2, 0: 禁止
CMPCR1 |= CMPEN; //允许比较器 ENABLE,DISABLE
P3M1 = 0x00;//P3.3 P3.2 推挽模式
P3M0 = 0x0c;
LED_Low = 0 ;//空转指示灯灭
Pump = 1;//泵开始工作
Cmp = 0; //水泵非空转标志
Delay1s();
Delay1s();
Delay1s();
Delay1s();
Delay1s();
Delay1s();
Delay1s();
Delay1s();
Delay1s();
Delay1s();//延时10S后 开始判断是否空转
while(1)
{
CmpTemp1 = CMPCR1&CMPRES;
Delay1s();
Delay1s();
Delay1s();
CmpTemp2 = CMPCR1&CMPRES;
if(CmpTemp1 == CmpTemp2) Cmp = CmpTemp2;
if(Cmp == 1) {Pump = 0; LED_Low = 1 ;}// 水泵空转 停泵 缺水灯亮
Delay1s();
Delay1s();
Delay1s();
}
} 补充一下STC15W204S的比较器说明
1、不能一个电容都没有,MCU是一个高速数字系统,至少要接0.1uF和10uF。78L05前面接0.1uF或以上电容。
2、比较结果进行软件滤波,不要一读到到马上执行,由马达的地方干扰大,采样到CMP-最好用RC滤波一下。 小李非刀 发表于 2015-3-9 14:18
1、不能一个电容都没有,MCU是一个高速数字系统,至少要接0.1uF和10uF。78L05前面接0.1uF或以上电容。
2、 ...
多谢指教
1、不能一个电容都没有,MCU是一个高速数字系统,至少要接0.1uF和10uF。78L05前面接0.1uF或以上电容。---我尝试了一下 ,在78L05前面接了一个0.1uf的贴片,7805后面接了一个100uf的电解,情况照旧;
2、比较结果进行软件滤波,不要一读到到马上执行---这个可以看程序,已经有一个3S的软件滤波,比较两次的结果是否一致,一致后才作动 ,由马达的地方干扰大,采样到CMP-最好用RC滤波一下。--------这个RC的话,能不能推荐一下参数,我之前的想法是,既然有软件滤波了 硬件的滤波是不是有必要,或者可能是电机干扰了MCU的运行? MCU一定要接0.1uF电容,高频退偶的。
RC,一般就是1K 0.1uF就OK。 小李非刀 发表于 2015-3-9 14:34
MCU一定要接0.1uF电容,高频退偶的。
RC,一般就是1K 0.1uF就OK。
收到 ,稍后测试汇报 也太省了吧,耐压5V以上的贴片电容又不贵
页:
[1]