找回密码
 注册
关于网站域名变更的通知
查看: 213|回复: 2
打印 上一主题 下一主题

开关稳压芯片LM2576ADJ做数控电源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-4 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
数控电源,上电初始电压是3V
3 l6 @7 b. q5 a7 y //采用atmega8芯片做的,四位数码管显示电压值,调节范围是1.8V到12V之间6 V5 G7 ?% |+ b/ X6 y1 u9 y
//采用开关稳压芯片LM2576ADJ做的降压,效率高达77%,电流最大3A,误差电压为正负0.2V( E# E0 i. q7 O0 P
#include<avr/io.h>
& k  U9 n8 k! e) U( u #include<avr/interrupt.h>
9 o) ~+ y& E: i; d #define uchar unsigned char
5 q7 p# h; e. k. f" H #define uint unsigned int  f2 Z2 E. W  g: W- C; f9 ]% f: J
#define duan PORTD
% O0 o, n) G+ A# t$ e2 T1 S uchar const tab[]={        0xC0,/*0*/
! F. F5 V. d# e- h) `         0xF9,/*1*/
0 U7 I9 f  H! L2 @0 x( a         0xA4,/*2*/
3 i& B9 t! x: u: O0 n, X         0xB0,/*3*/& o& F' [$ |9 r5 t# D# k. X
         0x99,/*4*/" E$ }7 ~8 k! k. |5 B  S7 j
         0x92,/*5*/2 w* Y$ x1 l- @( M
         0x82,/*6*/
+ l3 k3 k  k/ a- M0 q9 Y' A         0xF8,/*7*/9 `% s8 _" a, O1 Q# P' ~
         0x80,/*8*/
  G  f+ W; N, V: V         0x90,/*9*/
! W( [+ @3 @  x8 A  h, @7 r6 Y };
0 I' \, O) z7 |4 e2 H/ I. j uint DY=30; //30就是为3.0V电压,用于设定电压3 J  T2 y7 Z& v6 m, G
uint AD_shu,tiao_shu; //一个用于保存ADC转换后的数,一个用于运算比较
. m: Y; {+ L8 m$ ? void delay(uint k). p# b- u5 C5 u; F0 N
{: p9 I5 L+ n! o2 B2 K& b1 {& F
for(;k>0;k--);( j( f* m/ A  Y+ l( i6 f6 k% N
}
( a- B% V- R% K  |$ L# W void init()8 L  Q# E( d# W: h; x
{
6 X! P' c$ y9 [9 B4 o3 [3 y* P, l DDRD=0xff; //D端口全为输出
# J$ f: v8 l. Y1 i  [5 S. m PORTD=0;) ^- O" e/ e$ e3 t
DDRC=0xfc;  //C端口低两位用于ADC,高四位用于数码管位选+ B! q2 ]- v/ t2 a# o5 N% T; T2 b
PORTC=0x0; //C端口输出全0
# L6 S7 z  C; ?% X9 k5 M# L# v DDRB=0x07; //定义PB口的低三位为输出,PB1为PWM输出信号* o2 u9 s: x& J
PORTB=0xf8; //低三位输出0,高五位加上拉电阻
0 H4 g4 x4 j. J) f TCCR1A=0X63; //设置PWM比较匹配器
8 s! N7 V- b* o4 L6 { TCCR1B=0X13; //设置PWM比较匹配器' e9 [  f3 ~( M- W; }
OCR1A=250;  //装PWM寄存器的高位比较值
& h8 Z  L  e9 b8 `$ c6 w/ V: Q' G, h1 z& L OCR1B=10;  //装PWM寄存器的低位比较值,开启后自加,达到高位时,PB1端口取反
8 P; u8 ~7 m4 }, J9 z ADMUX=0xc0;  //ADC选通道0,并且用内部的2.56V参考电压,数据右对齐  T3 N8 j- f: O, a" h
ADCSRA=0xac; //ADC是连续转换,并且16分频,并且开了中断! O. Y, r" Z+ a( Q) o
}
/ ?/ x; m8 H  k9 Y  R. d2 x void desplay(uint dian_ya)
. C2 ~8 c2 Q3 Z2 C {: P8 |1 g8 H6 g8 _: t3 P6 u0 P8 H
duan=tab[dian_ya/100]; //显示十位电压6 p0 ^/ L/ T' q5 @8 a# e* n
PORTB|=0x04;  //pc2为位选
/ w  ?3 U% a; S2 A delay(400);
6 l* [' }5 N& l! w" w. P* X PORTB&=0xfb;
1 \! z& Y9 b+ n/ W9 U8 B/ M2 p# t duan=tab[dian_ya%100/10]&0x7f; //显示个位电压,并点亮小数点
3 r8 A2 @+ D+ _. K PORTB|=0x08;   //PC3为位选
9 G  J/ |' r; m. Y delay(400);
' r4 U! h) z4 f# e PORTB&=0xf7;* i) g( y) Q1 t7 f! X! g0 g
duan=tab[dian_ya%10]|0x80; //显示小数位电压,并灭小数点
5 C$ R1 e. \/ r: g+ E# g# c PORTB|0x10;   //PC4为位选
3 x/ ]* _- b. W' _+ i0 i6 o& t delay(400);
3 ?- L& {% s8 x4 s0 {. o PORTB&=0xef;/ d7 C) Q1 [& R+ K6 R3 A
duan=tab[11];  //用于设定时点亮: H6 G9 z% }5 ?0 L% U. L+ u
PORTB|=0x20;  //PB5为位选
5 q9 s! u+ @* [, d8 x# S: U delay(400);
  d# l9 |" d( G! K PORTB&=0xdf;% ]9 _! r, @) Y7 D4 j# F  _
}
* I3 L5 }* K. R# M+ w0 N/ M void key()0 y4 ~* x5 b$ Q( L2 X# x6 O1 x# Y. Q
{
  S8 ?; M" I: _* P IF(!(PINB&0x08)) //PB3为加电压按键
! H$ B! B3 K/ N% y) {9 O* o {
$ f7 m. f/ c- {$ w; }0 n8 H) H# K   delay(5000);( H( T4 m0 n; P" e, E, \
   if(!(PINB&0x08))7 L$ n6 W; G* t
   {0 ?6 P" w, a8 _8 K
    DY++;* a  p& g9 H( B$ Z
    if(DY>120)DY=120;
, k/ c- ]% B" D0 M* s, b   }# E# k& S7 @+ i# L' v  p* k; G
}% [1 M( s: r5 f" Y4 K: R
if(!(PINB&0x10)) //PB4为减电压按键
3 j% [; t' o' z; F: C: z {' o8 x: f2 ^4 ?1 @& I3 k6 n
   delay(5000);% f) D9 p1 K8 K8 `' j; ]- f4 P2 n
   if(!(PINB&0x10))8 i$ a- l, o: G) Z5 z
   {
/ ?; b! T/ X6 B, s; Y6 Y    DY--;
2 \4 U. [* [( G+ K. d- G    if(DY<18)DY=18;; o* [" D. }  g$ f9 F+ w7 \
   }
; ~* D, W% ]# O2 [; M7 D4 B6 \ }
9 L  l& R1 P* o* @4 X5 o. w }+ H4 m* X% ]9 P+ @) w
int main()* L- p8 y& I+ D1 V4 m
{
7 x$ M2 K  G6 P5 e uchar i=1;: o, `8 _6 C" e( A5 d
     init();
9 ~- M+ D* t% U. V, V" f ADCSRA|=0x40; //开始ADC转换+ o' S' `: [! f
while(1)
1 F" e* p+ E* }2 x {+ ~; e0 ?' S) k4 f  ]/ a
   key();% G  j+ R% G6 x( b8 M9 L3 e1 d' R
   tiao_shu=(uint)(((float)AD_shu)/8.5); //计算ADC采样后的数进行电阻分压后的实际数据转换补常
' e# v0 O" V( y   if(tiao_shu>(DY+2)) i--;  //如果采样转换后数值大于设定值,就减小PWM脉宽(设定值加2是电压误差值)
* U2 X" H" c; n. I* G5 p/ Q   if(tiao_shu<(DY-2)) i++;  //如果采样转换后数值小于设定值,就加大PWM脉宽(设定值减2是电压误差值)5 ~$ C* ^- {6 q6 z2 U$ Z, o  C
   delay(20);  //延时
8 a, _, y- v, E4 O2 \" B   OCR1B=i;  //装入PWM寄存器
5 j3 g1 P& C1 J$ k9 D2 J# [, C   desplay(DY);' M- Y& W6 J4 N& W
}
4 ~$ ~7 h: v# @* O) ?5 t0 y }* ]* i( q% R% |9 p4 M& V
SIGNAL(SIG_ADC)
  M# h% n( P" X7 @. C( I5 Q {
- ~6 W; e4 M, _$ ^7 ], C AD_shu=ADCL;
0 c5 f5 S4 H% f AD_shu|=(uint)(ADCH<<8);
# I0 \2 Z; B2 a2 I9 o3 E6 O }! u4 Z* ?) g; T8 p! C

$ r$ [! [$ _( X+ V  S0 E7 g
3 [' `/ {- p& j" Q( M  \2 P

该用户从未签到

2#
发表于 2022-8-4 13:05 | 只看该作者
感谢,这东西好啊!!!

该用户从未签到

3#
发表于 2022-8-4 15:51 | 只看该作者
好东西,学习学习!谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-13 08:33 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表