ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:215.25KB ,
资源ID:9790285      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9790285.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM32数控直流电源.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

STM32数控直流电源.docx

1、STM32数控直流电源STM32数控直流电源1、介绍2、整体方案3、 硬件电路4、 软件5、心得小结6、附录:1 、元器件2、 电路图3、 代码1、介绍:这个数控直流电源,是基于 C0RTEX_M3 STM32F103ZET芯片的一个制作。 它的能实现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欧姆康铜电阻组成液晶显示模块:主要有320*240LCD组成,负责显示参数和提供用户服务界面。过流报警模块:这个部分由蜂鸣器和红色的 LED指示灯组成。负责当发生过

3、流现象时,给用户报警。按键模块:这是本系统的用户控制方式。LLPGIT&AffiCHJFife叫LiEGlISjuODiraLli 7 - -心PCii-UMFa-AtiZj TE Xh.h 1ji J.* - - - B -B =.M_7. JSuTJ.g: 1J_ -4.5: $ !如P.Wh W -i 艮 7心二 E TMJ 口* - . r ; .- : .(PC-fai &C 二 4LU * LK PB # 3 cunumiiq 4i 4 pjij. /nu,亠TMijamriw Aud*i JoAeajusl.nuia Tiriiiiwi屉. LniTl l.TiHi I.;亡FT

4、蓄d , I df u d iihf k d tWg人SK1.TIC Iac二.:.gtT il3、硬件电路(1)、stm32f103zet6单片机最小系统:maHi一.J- 八r_. . r 甘F5F4n这款ST公司生产的基于cortex_m3内核的芯片,在当今的电子产品领域占有很 大的市场。这块32位芯片,有144个引脚、512K的rom、2路ADC支持16通道, 2路DAC 14个定时器,spi通信、i2c通信、串口通信方式。对于本系统,这 个芯片的已经足够。(2)、电源电路在这个部分,我主要采用桥式整流,使用了四个耐压1000V的in4007 ,将双24V 的变压器得到的副边电压进行整

5、流,再由 1000uf电容和LM7815和LM2940稳压 得系统所需的5V和12V电源。(3)1KGND |DACOAVCCIXdOBCTB*C-XDKB-15TU1、电源产生电路和检测电路U1LMJ5S在运算放大器部分,我选择的是带宽 1M的LM358采用1k的精密电阻,将DA得到的电源放大4倍,再经过一级的放大器 跟随电路输入到负载电路之中。负载串联了 1欧姆的康铜电阻,康铜电阻的温漂小,直接 AD测量两端的电压便 可得到负载的电流状况。(4)、显示电路:(5)-nd 333lRD.AR.=?55ET:6lS采用的是lil9320 驱动的320*240方案。(6)、报警电路和按键电路灯省

6、略。4、软件部分:主体程序流程图f开始L_主循环按键扫描卩 在程序设计部分,主要设计AD&口 DAC以及定时器中断和外部触发中 断的使用。5、心得小结在本次设计中,前期我花费了大量的时间查阅论文和思考放大电 路设计上,而最后经过试验,还是选择了简单而实用的放大器加更随 器的方案。在设计过程中遇到过很麻烦的事, 当时网购了 DAC7512勺 12位DAC芯片,发现是很小的贴片,经过较长时间搞定之后,一次 使用过程中,这块芯片坏了。于是,不得不转到当前采用的方案上。 这个教训,让我明白实践和试验的重要性,少走弯路,多做实用的事。6、附录:1、元器件清单:stm32f103zet6单片机最小系统,3

7、20*240tftled , 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(140,90,8,Chinese_Table_16

8、x16_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_Chi

9、nese_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

10、_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);ili9

11、320_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_Rea

12、dInputDataBit(GPIOA, GPIO_Pin_8)if(vol3)vol=vol-1;GPIO_Pin_9);while(!GPIO_ReadInputDataBit(GPIOA,DAC-DHR12R1 = (vol*40950-230)/1304;/ 检测过流ADCConvertedValueLocal = ADCConvertedValue;Precent = (ADCConvertedValueLocal*100/0x1000); / 算出百分比Voltage = Precent*33;while(Voltage500) ili9320_Clear(Blue);while(

13、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_PutStr_16x24(248,50, c4, 1,ili9320_PutChar_num(224,50,a1,charColor,Blue);charColor, Blue);ili9320_Chine

14、se_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

15、;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 后打开

16、 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_Pu

17、tChar_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)&!count

18、er21) 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,

19、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)GPIO_Pin_9);TIM_Cmd(TIM2,DISABLE); counter22=1; while(!GPIO_ReadInputDataBit(GPIOA,DAC-DHR12R1 = (vol*40950-230

20、)/1304;/ 检测过流ADCConvertedValueLocal = 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-DHR12R1 = 0;a1=0;a2=0;ili9320_PutChar_num(176,50,a2,c

21、harColor,Blue);ili9320_DrawPoint(200,50,charColor,Blue);/ 画 一个点I八、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);/ 所有引脚置高电平/ 退出按键,

22、在所有的功能中都使用这种退出方法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)D

23、elay_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

24、,Blue);画一个点显示单位: vili9320_DrawPoint(200,50,charColor,Blue); / ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue); / ili9320_PutChar_num(176,50,num32,charColor,Blue); / 显示十位ili9320_PutChar_num(224,50,num31,charColor,Blue); / 显示个位DAC-DHR12R1 = (vol*40950-230)/1304;/ 先输入十位上的数键位,切换键,个 位按键,确认键if(!GPIO

25、_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);/ 确认键GPIO_Pin_5);if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) while(!GPIO_Rea

26、dInputDataBit(GPIOA, GPIO_Pin_8); if(!(counter_3%2)if(num33=10) num33=0; if(counter_3%2)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;/ 退出按键,在所有

27、的功能中都使用这种退出方法if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5)Delay_ARMJISHU(300);if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5) while(!GPIO_ReadInputDataBit(GPIOG,exit=0;ili9320_Clear(Blue);num31=0;num32=0;vol=0;num33=0;num34=0;/ 检测过流 ADCConvertedValueLocal = ADCConvertedValue;Precent = (ADCConvertedValue

28、Local*100/0x1000); / 算出百分比Voltage = Precent*33;while(Voltage500) 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);/ 画 一个点I八、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 :输出三角波

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1