首页 STM32数控直流电源

STM32数控直流电源

举报
开通vip

STM32数控直流电源STM32数控直流电源STM32数控直流电源目录1、介绍…………2、整体方案…………3、硬件电路…………4、软件…………5、心得小结…………6、附录:1、元器件…………2、电路图…………3、代码…………1、介绍:这个数控直流电源,是基于CORTEX_M3的STM32F103ZET6芯片的一个制作。它的能实现0~9.9V的电压变化,每次变化为0.1V。它采用了内部的12位DAC和12位的ADC,精度比普通的8位ADC高出16倍,在实际的测试中,本制作的精度达到0.01V。本制作可以实现按键加减电压大小、按键自动调节电...

STM32数控直流电源
STM32数控直流电源STM32数控直流电源目录1、介绍…………2、整体 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 …………3、硬件电路…………4、软件…………5、心得小结…………6、附录:1、元器件…………2、电路图…………3、代码…………1、介绍:这个数控直流电源,是基于CORTEX_M3的STM32F103ZET6芯片的一个制作。它的能实现0~9.9V的电压变化,每次变化为0.1V。它采用了内部的12位DAC和12位的ADC,精度比普通的8位ADC高出16倍,在实际的测试中,本制作的精度达到0.01V。本制作可以实现按键加减电压大小、按键自动调节电压、输入数值控制输出电压、输出幅值频率可调的三角波功能。同时,本制作采用320*240的LCD液晶显示,并且在显示的基础上,制作了完整的用户界面,大大方便了用户的使用。2、整体方案:负载自制12V、5V电源320*240液晶显示ADCStm32芯片过流报警模块按键模块DAC1欧姆检测电阻运放方案介绍:本方案围绕stm32芯片,由供电模块、液晶显示模块、报警模块、负载电流检测模块、电源产生模块、按键模块构成。电源模块:我采用的是桥式整流结合三端稳压芯片的处理方法。由此得到单片机使用的5v电源和驱动运算放大器的12V电源。电源发生模块:这个系统由LM358运算放大器和stm32芯片内部12位DAC组成。负载电流检测模块:这个模块由stm32内部12位ADC和自制的1欧姆康铜电阻组成。液晶显示模块:主要有320*240LCD组成,负责显示参数和提供用户服务界面。过流报警模块:这个部分由蜂鸣器和红色的LED指示灯组成。负责当发生过流现象时,给用户报警。按键模块:这是本系统的用户控制方式。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)、电源产生电路和检测电路在运算放大器部分,我选择的是带宽1M的LM358,采用1k的精密电阻,将DA得到的电源放大4倍,再经过一级的放大器跟随电路输入到负载电路之中。负载串联了1欧姆的康铜电阻,康铜电阻的温漂小,直接AD测量两端的电压便可得到负载的电流状况。(4)、显示电路:采用的是lil9320驱动的320*240方案。(5)、报警电路和按键电路灯省略。4、软件部分:主体程序流程图开始主循环按键扫描4号按键3号按键2号按键1号按键返回主循环功能3功能4功能2功能1在程序设计部分,主要设计ADC和DAC以及定时器中断和外部触发中断的使用。5、心得小结在本次设计中,前期我花费了大量的时间查阅 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 和思考放大电路设计上,而最后经过试验,还是选择了简单而实用的放大器加更随器的方案。在设计过程中遇到过很麻烦的事,当时网购了DAC7512的12位DAC芯片,发现是很小的贴片,经过较长时间搞定之后,一次使用过程中,这块芯片坏了。于是,不得不转到当前采用的方案上。这个教训,让我明白实践和试验的重要性,少走弯路,多做实用的事。6、附录:1、元器件 清单 安全隐患排查清单下载最新工程量清单计量规则下载程序清单下载家私清单下载送货清单下载 :stm32f103zet6单片机最小系统,320*240tftlcd,24V变压器、按键模块、LM7805、LM7815、LM2940等2、原理图:3、源程序:主函数部分:intmain(void){。。。while(1)//主循环{DAC->DHR12R1=0;ili9320_Chinese_str((320-16*17)/2,50,17,Chinese_Table_16x16_nan,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(100);while(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5));ili9320_Clear(Blue);exit_2=1;while(exit_2)//按*键进入功能循环{DAC->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_16x16_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);//功能一:手动加减电压值if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)){Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)){while(!GPIO_ReadInputDataBit(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,charColor,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(vol<99){vol=vol+1;}while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));}}if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9))//-{Delay_ARMJISHU(300);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)){if(vol>3){vol=vol-1;while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9));}}}DAC->DHR12R1=(vol*40950-230)/1304;//检测过流ADCConvertedValueLocal=ADCConvertedValue;Precent=(ADCConvertedValueLocal*100/0x1000);//算出百分比Voltage=Precent*33;while(Voltage>500){ili9320_Clear(Blue);while(1){ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);DAC->DHR12R1=0;a1=0;a2=0;ili9320_PutChar_num(176,50,a2,charColor,Blue);ili9320_DrawPoint(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);//所有引脚置高电平}}//退出按键,在所有的功能中都使用这种退出方法if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){Delay_ARMJISHU(300);if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){while(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5));exit=0;vol=0;ili9320_Clear(Blue);}}}}}//功能2:自动加减电压值(6号按键)if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)){Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)){exit=1;while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6));/*-----------功能2的定时器初始化------------*/Timer_Config();NVIC_Config();TIM_Cmd(TIM2,DISABLE);//起初是关闭的,当进入功能2后打开ili9320_Clear(Blue);while(exit){vol=vol_21;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,charColor,Blue);//画一个点ili9320_PutChar_num(224,50,a1,charColor,Blue);//自加扫描if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)&counter21){flag2=1;Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)){TIM_Cmd(TIM2,ENABLE);counter21=0;while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));}}if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)&!counter21){Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)){TIM_Cmd(TIM2,DISABLE);counter21=1;while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));}}//自减扫描if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)&counter22){flag2=0;Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)){TIM_Cmd(TIM2,ENABLE);counter22=0;while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9));}}if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)&!counter22){Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)){TIM_Cmd(TIM2,DISABLE);counter22=1;while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9));}}DAC->DHR12R1=(vol*40950-230)/1304;//检测过流ADCConvertedValueLocal=ADCConvertedValue;Precent=(ADCConvertedValueLocal*100/0x1000);//算出百分比Voltage=Precent*33;while(Voltage>500){ili9320_Clear(Blue);while(1){ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);DAC->DHR12R1=0;a1=0;a2=0;ili9320_PutChar_num(176,50,a2,charColor,Blue);ili9320_DrawPoint(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);//所有引脚置高电平}}//退出按键,在所有的功能中都使用这种退出方法if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){Delay_ARMJISHU(100);if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){while(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5));exit=0;TIM_Cmd(TIM2,DISABLE);vol=0;vol_22=0;ili9320_Clear(Blue);}}}}}//功能3:输入电压数值7号功能键if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)){Delay_ARMJISHU(100);if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)){exit=1;while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7));ili9320_Clear(Blue);while(exit){num31=num33;num32=num34;ili9320_Chinese_str(10,12,12,Chinese_Table_16x16_q,charColor,Blue);ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);ili9320_DrawPoint(200,50,charColor,Blue);//画一个点ili9320_PutStr_16x24(248,50,c4,1,charColor,Blue);//显示单位:vili9320_PutChar_num(176,50,num32,charColor,Blue);//显示十位ili9320_PutChar_num(224,50,num31,charColor,Blue);//显示个位DAC->DHR12R1=(vol*40950-230)/1304;//先输入十位上的数键位,切换键,个位按键,确认键if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)){Delay_ARMJISHU(300);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)){while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9));counter_3++;}}if((!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))){Delay_ARMJISHU(300);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)){while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));if(!(counter_3%2)){if(num33<10)num33=num33+1;if(num33>=10)num33=0;}if(counter_3%2){if(num34<10)num34=num34+1;if(num34>=10)num34=0;}}}if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10))//确认键{Delay_ARMJISHU(300);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)){while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10));vol=num32*10+num31;}}//退出按键,在所有的功能中都使用这种退出方法if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){Delay_ARMJISHU(300);if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){while(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5));exit=0;ili9320_Clear(Blue);num31=0;num32=0;vol=0;num33=0;num34=0;}}//检测过流ADCConvertedValueLocal=ADCConvertedValue;Precent=(ADCConvertedValueLocal*100/0x1000);//算出百分比Voltage=Precent*33;while(Voltage>500){ili9320_Clear(Blue);while(1){DAC->DHR12R1=0;a1=0;a2=0;ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);ili9320_PutChar_num(176,50,a2,charColor,Blue);ili9320_DrawPoint(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);//所有引脚置高电平}}}}}/*--------------------------------------------------功能4:三角波--------------------------------------------------------------*///功能4:输出三角波8号按键:第一次使用的时候先输入一个值,然后确认,当确认完毕后,可以随意调节;再次按确认键停止工作if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)){Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)){while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8));exit=1;ili9320_Clear(Blue);vol_ap=20;vol_fp=10;while(exit){//画波形的代码ili9320_Chinese_str(90,120,9,Chinese_Table_16x16_ru,charColor,Blue);ili9320_Chinese_str(90,55,5,Chinese_Table_16x16_fu,charColor,Blue);//电压幅值ili9320_Chinese_str(90,85,3,Chinese_Table_16x16_pin,charColor,Blue);//频率ili9320_Chinese_str(165,85,1,Chinese_Table_16x16_dang,charColor,Blue);//档if((!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)))//设置电压值:1号按键{Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)){while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8));vol_ap=vol_ap+5;if(vol_ap>95)vol_ap=20;ili9320_PutStr_16x24(248,50,c4,1,charColor,Blue);a1=(vol_ap)%10;a2=(vol_ap-a1)/10;ili9320_PutChar_num(176,50,a2,charColor,Blue);ili9320_DrawPoint(200,50,charColor,Blue);//画一个点ili9320_PutChar_num(224,50,a1,charColor,Blue);}}if((!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)))//设置频率:2号按键{Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)){while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9));vol_fp=vol_fp+1;if(vol_fp>10)vol_fp=1;ili9320_PutChar_num(140,80,vol_fp,charColor,Blue);}}if((!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)))//第一次按的时候,确认开始{Delay_ARMJISHU(200);if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)){while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10));ili9320_Clear(Blue);ili9320_Chinese_str(20,100,16,Chinese_Table_16x16_bo,charColor,Blue);//电压幅值while(1){while((vol_apc>vol_pre)&(vol_apc<=(vol_ap*40950/1304))){vol_pre=vol_apc;vol_apc=vol_apc+vol_fp;DAC->DHR12R1=vol_apc;}while(vol_apc>(vol_ap*40950/1304)){vol_apc=vol_apc-2*vol_fp;DAC->DHR12R1=vol_apc;}while((vol_apc1)){vol_pre=vol_apc;vol_apc=vol_apc-vol_fp;DAC->DHR12R1=vol_apc;}while(vol_apc<=vol_fp){vol_apc=vol_apc+2*vol_fp;DAC->DHR12R1=vol_apc;}}}}//退出按键,在所有的功能中都使用这种退出方法if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){Delay_ARMJISHU(300);if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){while(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5));exit=0;ili9320_Clear(Blue);TIM_Cmd(TIM3,DISABLE);}}//检测过流ADCConvertedValueLocal=ADCConvertedValue;Precent=(ADCConvertedValueLocal*100/0x1000);//算出百分比Voltage=Precent*33;while(Voltage>500){ili9320_Clear(Blue);while(1){DAC->DHR12R1=0;a1=0;a2=0;ili9320_Chinese_str(110,55,4,Chinese_Table_16x16_d,charColor,Blue);ili9320_PutChar_num(176,50,a2,charColor,Blue);ili9320_DrawPoint(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);//所有引脚置高电平}}}}}/*-------------------------------------------------------------------------------------------------------------------------------*/if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){Delay_ARMJISHU(100);if(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)){while(!GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5));exit_2=0;ili9320_Clear(Blue);}}}
本文档为【STM32数控直流电源】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥17.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
wassyy
本人从事施工专职安全员多年,对施工现场安全管理、内业资料管理具有丰富的经验。
格式:doc
大小:277KB
软件:Word
页数:22
分类:修理服务/居民服务
上传时间:2022-01-08
浏览量:21