欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    STM32数控直流电源设计.doc

    • 资源ID:1051419       资源大小:299.50KB        全文页数:21页
    • 资源格式: DOC        下载积分:10积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要10积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    STM32数控直流电源设计.doc

    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、整体方案:负载自制12V、5V电源320*240液晶显示ADCStm32芯片过流报警模块按键模块DAC1欧姆检测电阻运放方案介绍: 本方案围绕stm32芯片,由供电模块、液晶显示模块、报警模块、负载电流检测模块、电源产生模块、按键模块构成。 电源模块:我采用的是桥式整流结合三端稳压芯片的处理方法。由此得到单片机使用的5v电源和驱动运算放大器的12V电源。 电源发生模块:这个系统由LM358运算放大器和stm32芯片内部12位DAC组成。 负载电流检测模块:这个模块由stm32内部12位ADC和自制的1欧姆康铜电阻组成。 液晶显示模块:主要有320*240LCD组成,负责显

    3、示参数和提供用户服务界面。 过流报警模块:这个部分由蜂鸣器和红色的LED指示灯组成。负责当发生过流现象时,给用户报警。 按键模块:这是本系统的用户控制方式。3、硬件电路 (1)、stm32f103zet6单片机最小系统: 这款ST公司生产的基于cortex_m3内核的芯片,在当今的电子产品领域占有很大的市场。这块32位芯片,有 144个引脚、512K的rom、2路ADC支持16通道,2路DAC,14个定时器,spi通信、i2c通信、串口通信方式。对于本系统,这个芯片的已经足够。 (2)、电源电路 在这个部分,我主要采用桥式整流,使用了四个耐压1000v的in4007,将双24V的变压器得到的副

    4、边电压进行整流,再由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在程序设计部分,

    5、主要设计ADC和DAC以及定时器中断和外部触发中断的使用。5、心得小结在本次设计中,前期我花费了大量的时间查阅论文和思考放大电路设计上,而最后经过试验,还是选择了简单而实用的放大器加更随器的方案。在设计过程中遇到过很麻烦的事,当时网购了DAC7512的12位DAC芯片,发现是很小的贴片,经过较长时间搞定之后,一次使用过程中,这块芯片坏了。于是,不得不转到当前采用的方案上。这个教训,让我明白实践和试验的重要性,少走弯路,多做实用的事。6、附录:1、元器件清单:stm32f103zet6单片机最小系统,320*240tft lcd,24V变压器、按键模块、LM7805、LM7815、LM2940等

    6、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_16x16_shu,charColor,Blue); ili9320_Chinese_st

    7、r(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,c

    8、harColor,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(

    9、!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,

    10、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_

    11、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/0x1000);/算出百分比 Voltage = Precent*33; while(Voltage500) ili9320_Clear(Blue); while(1)ili9320_Chinese_

    12、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-1

    13、6*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; i

    14、li9320_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后打开 ili93

    15、20_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_PutCh

    16、ar_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)&!

    17、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) TI

    18、M_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

    19、 = (vol*40950-230)/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_

    20、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

    21、); /所有引脚置高电平/退出按键,在所有的功能中都使用这种退出方法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_ReadInputDa

    22、taBit(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,5

    23、5,4,Chinese_Table_16x16_d,charColor,Blue); ili9320_DrawPoint(200,50,charColor,Blue); /画一个点 ili9320_PutStr_16x24(248, 50, c4, 1, charColor, Blue); /显示单位:v ili9320_PutChar_num(176,50,num32,charColor,Blue); /显示十位 ili9320_PutChar_num(224,50,num31,charColor,Blue);/显示个位 DAC-DHR12R1 = (vol*40950-230)/1304;

    24、 /先输入十位上的数键位,切换键,个位按键,确认键 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, GPI

    25、O_Pin_8) while(!GPIO_ReadInputDataBit(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);

    26、 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; /检测过流 ADCConvertedValueLo

    27、cal = ADCConvertedValue; Precent = (ADCConvertedValueLocal*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_Dra

    28、wPoint(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号按键 :第一次使用的

    29、时候先输入一个值,然后确认,当确认完毕后,可以随意调节;再次按确认键停止工作 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,Chi

    30、nese_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)

    31、 /设置电压值: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_ap95) 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

    32、); 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_fp10) vol_fp=1; ili9320_PutCh


    注意事项

    本文(STM32数控直流电源设计.doc)为本站会员(星星)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922