1、 本方案围绕stm32芯片,由供电模块、液晶显示模块、报警模块、负载电流检测模块、电源产生模块、按键模块构成。 电源模块:我采用的是桥式整流结合三端稳压芯片的处理方法。由此得到单片机使用的5v电源和驱动运算放大器的12V电源。 电源发生模块:这个系统由LM358运算放大器和stm32芯片内部12位DAC组成。 负载电流检测模块:这个模块由stm32内部12位ADC和自制的1欧姆康铜电阻组成。液晶显示模块:主要有320*240LCD组成,负责显示参数和提供用户服务界面。 过流报警模块:这个部分由蜂鸣器和红色的LED指示灯组成。负责当发生过流现象时,给用户报警。 按键模块:这是本系统的用户控制方式
2、。3、硬件电路 (1)、stm32f103zet6单片机最小系统:这款ST公司生产的基于cortex_m3内核的芯片,在当今的电子产品领域占有很大的市场。这块32位芯片,有 144个引脚、512K的rom、2路ADC支持16通道,2路DAC,14个定时器,spi通信、i2c通信、串口通信方式。对于本系统,这个芯片的已经足够。(2)、电源电路在这个部分,我主要采用桥式整流,使用了四个耐压1000v的in4007,将双24V的变压器得到的副边电压进行整流,再由1000uf电容和LM7815和LM2940稳压得系统所需的5V和12V电源。(3)、电源产生电路和检测电路在运算放大器部分,我选择的是带宽
3、1M的LM358,采用1k的精密电阻,将DA得到的电源放大4倍,再经过一级的放大器 跟随电路输入到负载电路之中。负载串联了1欧姆的康铜电阻,康铜电阻的温漂小,直接AD测量两端的电压便可得到负载的电流状况。(4)、显示电路:采用的是lil9320驱动的320*240方案。(5)、报警电路和按键电路灯省略。4、软件部分: 主体程序流程图 在程序设计部分,主要设计ADC和DAC以及定时器中断和外部触发中断的使用。5、心得小结在本次设计中,前期我花费了大量的时间查阅论文和思考放大电路设计上,而最后经过试验,还是选择了简单而实用的放大器加更随器的方案。在设计过程中遇到过很麻烦的事,当时网购了DAC751
4、2的12位DAC芯片,发现是很小的贴片,经过较长时间搞定之后,一次使用过程中,这块芯片坏了。于是,不得不转到当前采用的方案上。这个教训,让我明白实践和试验的重要性,少走弯路,多做实用的事。6、附录:1、元器件清单:stm32f103zet6单片机最小系统,320*240tft lcd,24V变压器、按键模块、LM7805、LM7815、LM2940等2、原理图: 3、源程序:主函数部分:int main(void)。while(1) /主循环 DAC-DHR12R1 =0; ili9320_Chinese_str(320-16*17)/2,50,17,Chinese_Table_16x16_n
5、an,charColor,Blue); ili9320_Chinese_str(70,90,3,Chinese_Table_16x16_ti,charColor,Blue); ili9320_Chinese_str(140,90,8,Chinese_Table_16x16_shu,charColor,Blue); ili9320_Chinese_str(320-16*15)/2,200,15,Chinese_Table_16x16_zun,charColor,Blue); if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5) Delay_ARMJISHU(1
6、00); while(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5); ili9320_Clear(Blue); exit_2=1; while(exit_2) /按*键进入 功能循环DHR12R1 = 0; ili9320_Chinese_str(0,10,6,Chinese_Table_16x16_1,charColor,Blue); ili9320_Chinese_str(0,40,6,Chinese_Table_16x16_2g,charColor,Blue); ili9320_Chinese_str(0,70,6,Chinese_Table_16x
7、16_3,charColor,Blue); ili9320_Chinese_str(0,100,3,Chinese_Table_16x16_4,charColor,Blue);/ ili9320_Chinese_str(0,130,2,Chinese_Table_16x16_5,charColor,Blue); /功能一:手动加减电压值GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12) Delay_ARMJISHU(200); if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12) while(!GPIO_ReadInputD
8、ataBit(GPIOA, GPIO_Pin_12); ili9320_Clear(Blue); exit=1; while(exit) ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue); ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue); a1=(vol+1)%10; a2=(vol+1-a1)/10; ili9320_PutChar_num(176,50,a2,charColor,Blue); ili9320_DrawPoint(200,50,cha
9、rColor,Blue);/画一个点 ili9320_PutChar_num(224,50,a1,charColor,Blue); if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) /+ Delay_ARMJISHU(300); if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) if(vol3) vol=vol-1; while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9); DAC-DHR12R1 = (vol*40950-230)/1304; /检测过流 ADCConver
10、tedValueLocal = ADCConvertedValue; Precent = (ADCConvertedValueLocal*100/0x1000); /算出百分比 Voltage = Precent*33; while(Voltage500) ili9320_Clear(Blue); while(1) ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue); DAC- a1=0; a2=0; ili9320_PutChar_num(176,50,a2,charColor,Blue); ili9320_D
11、rawPoint(200,50,charColor,Blue); ili9320_PutChar_num(224,50,a1,charColor,Blue); ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue); ili9320_Chinese_str(320-16*10)/2,200,10,Chinese_Table_16x16_x,charColor,Blue); GPIO_SetBits(GPIO_DAC,DS1_PIN|DS2_PIN); /所有引脚置高电平 /退出按键,在所有的功能中都使用这种退出方法 Delay_ARMJISHU(300); while(! exit=0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1