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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
数控电源,上电初始电压是3V
, g) ?7 Z0 w) o- T! }  N9 O7 s. C //采用atmega8芯片做的,四位数码管显示电压值,调节范围是1.8V到12V之间
# X% Q: S# _  g% X  Z! ? //采用开关稳压芯片LM2576ADJ做的降压,效率高达77%,电流最大3A,误差电压为正负0.2V% e% C, F/ e; u$ Z* d8 a7 n
#include<avr/io.h>
% T6 I+ ?( q: X) a8 x9 Q #include<avr/interrupt.h>  L* O0 y: n. n( n) E5 ?
#define uchar unsigned char
2 J. `/ Q8 a8 ^ #define uint unsigned int/ u. V8 g% `- V) ]
#define duan PORTD
/ `* H+ ~7 c% T$ W( w; E. y/ G+ J uchar const tab[]={        0xC0,/*0*/
- A2 I! v  m  w! |7 M5 U5 w# m         0xF9,/*1*/
7 ], S5 u  t! v' [  e  G( f         0xA4,/*2*/
; |9 i( k, G+ w' F7 s9 P2 ]6 g+ v0 f         0xB0,/*3*/8 J: y- z1 p7 s1 d: l& o
         0x99,/*4*/" B2 s# d, V, c0 V$ l
         0x92,/*5*/; @, p4 \- D$ Y
         0x82,/*6*/! [2 p0 ?- E/ ]$ K- ^) @# X
         0xF8,/*7*/$ G3 p& {1 ~7 ?& @: H* I# B
         0x80,/*8*/
0 w6 k  p  ?3 |8 S5 `, \* k         0x90,/*9*/+ a# q% `; L" @$ l7 G6 N
};
) r# K& e1 `2 l0 A0 ^. {9 T  y uint DY=30; //30就是为3.0V电压,用于设定电压$ l+ v( x7 f% ~
uint AD_shu,tiao_shu; //一个用于保存ADC转换后的数,一个用于运算比较
/ c, t' }. ?) e! }0 b7 N void delay(uint k)- s$ ?4 L* ]: q; _/ X+ E1 @
{' n) \$ u- @  l, o1 _! v1 V* H" f! S+ K
for(;k>0;k--);
# {4 l& s7 w5 v }
8 [. Q9 C' y& e: @- {/ B  g7 L void init()
4 F1 L$ E2 x3 R" z {
/ l0 P7 a: m7 {; D5 q5 T DDRD=0xff; //D端口全为输出  @) t% A9 {( @5 d# S& D: }
PORTD=0;
. x* a+ z3 I/ q9 f0 Z8 v4 G DDRC=0xfc;  //C端口低两位用于ADC,高四位用于数码管位选
! h% m$ R& P9 |2 R/ W5 s PORTC=0x0; //C端口输出全0
( l# a  O9 m# y9 m DDRB=0x07; //定义PB口的低三位为输出,PB1为PWM输出信号
, H2 ]8 B* r: P3 k5 v5 f- n PORTB=0xf8; //低三位输出0,高五位加上拉电阻
3 i2 O# i0 H5 o7 `* C8 V  e TCCR1A=0X63; //设置PWM比较匹配器
+ \4 a: a* q# t$ t TCCR1B=0X13; //设置PWM比较匹配器
* T1 z; p; e7 n2 d* ]2 x, S( O6 v OCR1A=250;  //装PWM寄存器的高位比较值7 F1 Y: [4 r. j% c/ ?6 _9 F
OCR1B=10;  //装PWM寄存器的低位比较值,开启后自加,达到高位时,PB1端口取反" e/ [+ i8 M( [, n1 y" D, u( R4 I& n
ADMUX=0xc0;  //ADC选通道0,并且用内部的2.56V参考电压,数据右对齐
& w  ?+ c5 Z& J) `. i ADCSRA=0xac; //ADC是连续转换,并且16分频,并且开了中断
- _; E" |8 t- k% e- [ }0 M* y( [( f$ T$ b# O0 u
void desplay(uint dian_ya)
, h0 Z$ p$ h; ?& Q0 z {
! c; H4 A! @, h1 I duan=tab[dian_ya/100]; //显示十位电压
$ Z; x! v- r+ b+ B* [+ X PORTB|=0x04;  //pc2为位选
' V, a8 b3 a) b delay(400);5 a3 m$ U* j, y% F1 z$ E
PORTB&=0xfb;
  b+ ]- g/ D/ `+ X- z& o% w( u" \ duan=tab[dian_ya%100/10]&0x7f; //显示个位电压,并点亮小数点
' W' @9 I: V* G! S. F( T$ y PORTB|=0x08;   //PC3为位选
5 W) ?8 B$ `* M) P, m) \6 o delay(400);
# D1 Q) i# J( U" P PORTB&=0xf7;: F/ i+ m5 u. {$ L' M
duan=tab[dian_ya%10]|0x80; //显示小数位电压,并灭小数点
! v8 F& o/ d% M PORTB|0x10;   //PC4为位选3 X. \: M: V# m- x! |5 C( D* T& L
delay(400);, `7 [4 U) a7 G8 G& T5 }
PORTB&=0xef;
' i6 T( X# k" R- | duan=tab[11];  //用于设定时点亮
% W) c" N( h' h' ~4 l$ I PORTB|=0x20;  //PB5为位选) y4 k/ l; k9 }$ E; L
delay(400);
3 q% u9 M8 ]+ {9 t; u& m3 K1 F; P PORTB&=0xdf;' l3 y6 D0 B  ~( p  W
}" h$ a# m- m  Z+ T
void key()7 y# f2 O( I+ O2 m
{
4 R/ J! Z6 E( G. e- X& Q IF(!(PINB&0x08)) //PB3为加电压按键$ U; U5 s9 y+ P# @9 N& U" K
{
- o  P7 _) U5 H& I9 T* Q& M" J   delay(5000);$ Y( Z7 s" ]6 [$ Q  c+ P4 F
   if(!(PINB&0x08))( @7 ]0 F& B; r) M& o% _, w
   {! u0 a- U7 h% S) y2 i: e) [
    DY++;
# X: Y( W1 ?: c) O7 t, B    if(DY>120)DY=120;" N# X9 h; S8 E5 z& p3 X; K3 t
   }( C# |: `. |* E) v- {* W& e
}
5 D" L) F# H: h: [" u8 D3 g if(!(PINB&0x10)) //PB4为减电压按键
+ r6 t% F& g# B/ A. f! @ {& J1 X  ?' F2 R! u6 _% h7 s
   delay(5000);
" U1 ^2 C3 i- f   if(!(PINB&0x10))
( P6 z5 w6 n4 i$ ~   {0 k# G2 }( e) q
    DY--;: v: e1 s9 {' G( l: ?2 \5 w2 H
    if(DY<18)DY=18;
# c' X' _4 h$ u% b% x# Q   }" H+ G( P2 g: y8 F
}
% @5 k: ?: X* z( l2 ?0 H5 h }- [2 v6 @% {& \$ g" e" l
int main(); ^' m) o7 H; j* U! X
{
" m  D  B1 X+ r* V7 z: } uchar i=1;- U& i8 P- `0 l+ m. g7 x, k. X& t
     init();
% s/ o7 W9 ?% x$ m5 p6 ~6 ^% a ADCSRA|=0x40; //开始ADC转换
7 h0 B% {: h: J+ I+ t) P. u6 ~ while(1)
- V2 S7 `7 F" c7 \ {
. g* t1 ~* I3 g1 F2 t/ s   key();
- }- A  s3 x' j   tiao_shu=(uint)(((float)AD_shu)/8.5); //计算ADC采样后的数进行电阻分压后的实际数据转换补常; j; ^: M( L- Z2 s; {% p3 E
   if(tiao_shu>(DY+2)) i--;  //如果采样转换后数值大于设定值,就减小PWM脉宽(设定值加2是电压误差值)0 c( M* k+ a6 H; C
   if(tiao_shu<(DY-2)) i++;  //如果采样转换后数值小于设定值,就加大PWM脉宽(设定值减2是电压误差值)
) g" d4 }9 F+ u; R  f$ |6 }   delay(20);  //延时" f4 O0 ?0 \; }0 A3 q; I% G
   OCR1B=i;  //装入PWM寄存器$ W* q2 ]" ?6 i! |7 T
   desplay(DY);
4 {8 d9 j+ J9 z }8 P; g7 b9 ^+ o/ d' G9 l
}6 ^! ]2 ], y3 x% y
SIGNAL(SIG_ADC)7 E" P! q( c# K6 L& Z+ }8 G
{
9 h/ q1 g4 d# \( p; `0 b/ e AD_shu=ADCL;0 w! _- R" a+ {( n' `. F, m
AD_shu|=(uint)(ADCH<<8);
1 @/ F) b# m& h. T0 { }
. A9 {7 \$ t4 S( V# w/ j5 d( o+ t 3 r4 q) c; b6 x! o& G" ~$ e  G

4 `# p4 s! y# d! d0 x

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-4 16:31 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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