STM32数控直流电源.docx

上传人:b****8 文档编号:9790285 上传时间:2023-02-06 格式:DOCX 页数:25 大小:215.25KB
下载 相关 举报
STM32数控直流电源.docx_第1页
第1页 / 共25页
STM32数控直流电源.docx_第2页
第2页 / 共25页
STM32数控直流电源.docx_第3页
第3页 / 共25页
STM32数控直流电源.docx_第4页
第4页 / 共25页
STM32数控直流电源.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

STM32数控直流电源.docx

《STM32数控直流电源.docx》由会员分享,可在线阅读,更多相关《STM32数控直流电源.docx(25页珍藏版)》请在冰豆网上搜索。

STM32数控直流电源.docx

STM32数控直流电源

STM32数控直流电源

1、介绍

2、整体方案

3、硬件电路

4、软件

5、心得小结

6、附录:

1、元器件

2、电路图

3、代码

1、介绍:

这个数控直流电源,是基于C0RTEX_M3STM32F103ZET芯片的一个制作。

它的能实现0~9.9V的电压变化,每次变化为0.1V。

它采用了内部的12位DAC和12位的ADC精度比普通的8位ADC高出16倍,在实际的测试中,本制作的精度达到0.01V。

本制作可以实现按键加减电压大小、按键自动调节电压、输入数值控制输出电压、输出幅值频率可调的三角波功能。

同时,本制作采用320*240的LCD液晶显示,并且在显示的基础上,制作了完整的用户界面,大大方便了用户的使用。

2、整体方案:

方案介绍:

本方案围绕stm32芯片,由供电模块、液晶显示模块、报警模块、负载电流检测模块、电源产生模块、按键模块构成。

电源模块:

我采用的是桥式整流结合三端稳压芯片的处理方法。

由此得到单

片机使用的5v电源和驱动运算放大器的12V电源。

电源发生模块:

这个系统由LM358运算放大器和stm32芯片内部12位DAC组成。

负载电流检测模块:

这个模块由stm32内部12位ADC和自制的1欧姆康铜

电阻组成

液晶显示模块:

主要有320*240LCD组成,负责显示参数和提供用户服务界面。

过流报警模块:

这个部分由蜂鸣器和红色的LED指示灯组成。

负责当发生

过流现象时,给用户报警。

按键模块:

这是本系统的用户控制方式。

LL

PGIT&AffiCHJFife叫Li

EGlISjuODira^Lli®7-■-心

PCii-UMFa-AtiZ

j>T

EXh^.h1

jiJ.

*■--■■■»-B-

B=

.M

_7.JSuTJ.g」」:

1J_«-4.5:

$!

P.WhW-i艮7心"二E'TMJ口*

「・>-.'r;.-■:

•■„.

.<~i>(

PC-fai&C二4

LU*LK■

PB#3■

cunu^mii

q4i4"■>»

pjij./nu—

,亠TMijamr

iw■Aud*iJoAeajusl.nuiaTiriiiiwi

■屉.„LniTl"l.TiHiI

・・.;亡FT蓄d,IdfudiihfkdtWg人「・S

K1.TI

C"I

ac■二.:

.gtT■

il

3、硬件电路

(1)、stm32f103zet6单片机最小系统:

ma

Hi

一\」

.'J

•-…八―r_..r甘

F5F

4

n

这款ST公司生产的基于cortex_m3内核的芯片,在当今的电子产品领域占有很大的市场。

这块32位芯片,有144个引脚、512K的rom、2路ADC支持16通道,2路DAC14个定时器,spi通信、i2c通信、串口通信方式。

对于本系统,这个芯片的已经足够。

(2)、电源电路

 

在这个部分,我主要采用桥式整流,使用了四个耐压1000V的in4007,将双24V的变压器得到的副边电压进行整流,再由1000uf电容和LM7815和LM2940稳压得系统所需的5V和12V电源。

(3)

1K

GND>||

DAC

OA

VCC

IXd

OB

CTB*

C-XD

KB-

-15

T

U1

、电源产生电路和检测电路

U1

LMJ5S

 

在运算放大器部分,我选择的是带宽1M的LM358采用1k的精密电阻,将DA

得到的电源放大4倍,再经过一级的放大器跟随电路输入到负载电路之中。

负载串联了1欧姆的康铜电阻,康铜电阻的温漂小,直接AD测量两端的电压便可得到负载的电流状况。

(4)、显示电路:

(5)

-nd3

33>l

RD

.AR

.=?

55ET

6lS

采用的是lil9320驱动的320*240方案。

(6)、报警电路和按键电路灯省略。

4、软件部分:

主体程序流程图

f

开始

L_

主循环

按键扫描

卩£⑪

在程序设计部分,主要设计AD&口DAC以及定时器中断和外部触发中断的使用。

5、心得小结

在本次设计中,前期我花费了大量的时间查阅论文和思考放大电路设计上,而最后经过试验,还是选择了简单而实用的放大器加更随器的方案。

在设计过程中遇到过很麻烦的事,当时网购了DAC7512勺12位DAC芯片,发现是很小的贴片,经过较长时间搞定之后,一次使用过程中,这块芯片坏了。

于是,不得不转到当前采用的方案上。

这个教训,让我明白实践和试验的重要性,少走弯路,多做实用的事。

6、附录:

1、元器件清单:

stm32f103zet6单片机最小系统,320*240tft

led,24V变压器、按键模块、LM7805LM7815LM2940等

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;

GPIO_Pin_9));

while(!

GPIO_ReadInputDataBit(GPIOA,

}

}

}

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_PutStr_16x24(248,

50,c4,1,

ili9320_PutChar_num(224,50,a1,charColor,Blue);

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))

{

GPIO_Pin_9));

TIM_Cmd(TIM2,DISABLE);counter22=1;while(!

GPIO_ReadInputDataBit(GPIOA,

}

}

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);//画一个点

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);

//所有引脚置高电平

}

}

//退出按键,在所有的功能中都使用这种退出方法

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);

画一个点

显示单位:

v

ili9320_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_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_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,

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);//画一个点

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