风158 发表于 2018-9-20 15:16 谢谢老哥的建议 |
1276366627 发表于 2018-9-22 13:22 我没把程序放完整,我的错 |
你好像没有写循环 |
注意IO 要有个拉高电阻。 |
在没有接任何负载的情况下测试一下,应该是虚焊 |
ULN2003驱动能力有限,换大点的驱动模块,电源功率也要足够大才能稳 |
破案了,软件上有一点小问题,主要还是我用的小马达,启动时电流太大,电压源会猛降,小马达驱动不起来,用个继电器就ok了 |
原理图来看没问题,你试试配置下IO口成推挽输出看看. |
P1.5 P1.6 P1.7这三个端口,外围电路截图看看,看上去是三极管导通后的电压 |
看负载电流是否超出单片机允许最大值 |
while (1) //主循环 { SS=ReadADC(0); SS=(float)SS*100/256; //数据转换 LCD_Write_String(0,0,"T1:"); //显示实时孵化温度 LCD_Write_String(9,0,"T2:"); //显示设定温度参数 LCD_Write_String(5,0,"."); LCD_Write_String(6,0,"C"); LCD_Write_String(14,0,"."); LCD_Write_String(15,0,"C"); TempData1[0]=SS/10; TempData1[1]=SS%10; sprintf(temp1,"%d",(int)TempData1[0]); LCD_Write_String(3,0,temp1); sprintf(temp1,"%d",(int)TempData1[1]); LCD_Write_String(4,0,temp1); TempData2[0]=CK/10; TempData2[1]=CK%10; sprintf(temp2,"%d",(int)TempData2[0]); LCD_Write_String(12,0,temp2); sprintf(temp2,"%d",(int)TempData2[1]); LCD_Write_String(13,0,temp2); /*------------------------------------------------ 报警及温度控制 ------------------------------------------------*/ if( SS >= CK ) //检测的温度高于设定值 { if(SS>=40) { wind=1; heat=0; led=0; bee=0; //报警 //散热 } else { wind=1; heat=0; led=1; bee=1; } } if( SS < CK ) { if(SS<=35) { heat=1; wind=0; led=0; bee=0; //报警 //加热 } else { heat=1; wind=0; led=1; bee=1; } } } 这是循环部分的代码 |
diy1997 发表于 2018-9-20 11:58 不是硬件的原因,硬件测试都ok,软件我在每个wind=1/0下面都加了heat=0/1就能够输出高电平了,但是新的问题出现了,这个判断只进行一次就没了,风扇转一下就停了,其他一切正常 |
可能是被外部元件拉低了,断开连接试试看。 |
看芯片规格书,结合硬件分析 |