【精编】STM32数控直流电源.pdf
《【精编】STM32数控直流电源.pdf》由会员分享,可在线阅读,更多相关《【精编】STM32数控直流电源.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、STM32数控直流电源目录1、介绍2、整体方案3、硬件电路4、软件5、心得小结6、附录:1、元器件2、电路图3、代码1、介绍:这个数控直流电源,是基于CORTEX_M3的 STM32F103ZET6 芯片的一个制作。它的能实现 09.9V 的电压变化,每次变化为0.1V。它采用了内部的12位 DAC和 12 位的 ADC,精度比普通的 8 位 ADC 高出 16倍,在实际的测试中,本制作的精度达到 0.01V。本制作可以实现按键加减电压大小、按键自动调节电压、输入数值控制输出电压、输出幅值频率可调的三角波功能。同时,本制作采用 320*240的 LCD液晶显示,并且在显示的基础上,制作了完整的
2、用户界面,大大方便了用户的使用。2、整体方案:方案介绍:本方案围绕 stm32 芯片,由供电模块、液晶显示模块、报警模块、负载电流检测模块、电源产生模块、按键模块构成。电源模块:我采用的是桥式整流结合三端稳压芯片的处理方法。由此得到单片机使用的 5v 电源和驱动运算放大器的12V电源。电源发生模块:这个系统由 LM358运算放大器和 stm32 芯片内部 12 位 DAC组成。负载电流检测模块:这个模块由 stm32 内部 12 位 ADC 和自制的 1 欧姆康铜Stm32 芯片ADC DAC 自制 12V、5V 电源负载1 欧姆检测电阻320*240 液晶显示按键模块过流报警模块运放电阻组成
3、。液晶显示模块:主要有320*240LCD组成,负责显示参数和提供用户服务界面。过流报警模块:这个部分由蜂鸣器和红色的LED指示灯组成。负责当发生过流现象时,给用户报警。按键模块:这是本系统的用户控制方式。3、硬件电路(1)、stm32f103zet6 单片机最小系统:这款 ST公司生产的基于cortex_m3 内核的芯片,在当今的电子产品领域占有很大的市场。这块 32 位芯片,有 144 个引脚、512K的 rom、2 路 ADC支持 16 通道,2 路 DAC,14 个定时器,spi 通信、i2c 通信、串口通信方式。对于本系统,这个芯片的已经足够。(2)、电源电路在这个部分,我主要采用桥
4、式整流,使用了四个耐压 1000v 的 in4007,将双 24V的变压器得到的副边电压进行整流,再由1000uf 电容和 LM7815和 LM2940稳压得系统所需的 5V和 12V电源。(3)、电源产生电路和检测电路在运算放大器部分,我选择的是带宽1M的 LM358,采用 1k 的精密电阻,将DA得到的电源放大 4 倍,再经过一级的放大器跟随电路输入到负载电路之中。负载串联了 1 欧姆的康铜电阻,康铜电阻的温漂小,直接AD测量两端的电压便可得到负载的电流状况。(4)、显示电路:采用的是 lil9320驱动的 320*240 方案。(5)、报警电路和按键电路灯省略。4、软件部分:主体程序流程
5、图开始主循环按键扫描在程序设计部分,主要设计 ADC 和 DAC 以及定时器中断和外部触发中断的使用。5、心得小结在本次设计中,前期我花费了大量的时间查阅论文和思考放大电路设计上,而最后经过试验,还是选择了简单而实用的放大器加更随器的方案。在设计过程中遇到过很麻烦的事,当时网购了 DAC7512 的12 位 DAC芯片,发现是很小的贴片,经过较长时间搞定之后,一次使用过程中,这块芯片坏了。于是,不得不转到当前采用的方案上。这个教训,让我明白实践和试验的重要性,少走弯路,多做实用的事。1 号按键2 号按键3 号按键4 号按键功能 1 功能 2 功能 3 功能 4 返回主循环6、附录:1、元器件清
6、单: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_nan,charColor,Blue);ili9320_Chinese_str(70,90,3,Chinese_Table_16x16_ti,charColor,Blue);ili9320_Chinese_str(14
7、0,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-DHR12R
8、1=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,Chine
9、se_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
10、,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_R
11、eadInputDataBit(GPIOA,GPIO_Pin_8)if(vol3)vol=vol-1;while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9);DAC-DHR12R1=(vol*40950-230)/1304;/检测过流ADCConvertedValueLocal=ADCConvertedValue;Precent=(ADCConvertedValueLocal*100/0 x1000);/算出百分比Voltage=Precent*33;while(Voltage500)ili9320_Clear(Blue);while(1)ili9320_
12、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)
13、/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(Bl
14、ue);/功能 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(exi
15、t)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);/自
16、加扫描 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_ReadInp
17、utDataBit(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(
18、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;Prec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精编 STM32 数控 直流电源
限制150内