单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1472|回复: 4
收起左侧

Atmega16l单相逆变器SPWM原理图PCB及源程序

[复制链接]
冯发信 发表于 2017-9-15 09:49 | 显示全部楼层 |阅读模式
Atmega16l简单单相逆变器制作资料

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
0.png 0.png 0.png

Atmega16l单片机源码如下:
  1. #include<iom16v.h>
  2. #include<macros.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar zd=0,c=0;
  6. uint iv=0,ii=0,ov=0,oi=0,sj=0,b=0;
  7. uchar table[3]={8,8,8};
  8. #pragma data:code
  9. flash uint table1[]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,0X77,0X7c,0X39,0X5e,0X79,0X71,0X00,
  10. 0X40,0XFF};
  11. flash uint table2[]={
  12. 0,5,10,16,21,27,32,38,43,48,54,59,64,69,75,80,85,90,95,100,
  13. 105,110,115,120,124,129,134,138,143,147,152,156,160,164,168,172,176,180,184,187,
  14. 191,194,198,201,204,207,210,213,216,219,221,224,226,228,230,233,234,236,238,240,
  15. 241,242,244,245,246,247,247,248,249,249,249,249,250,249,249,249,249,248,247,247,
  16. 246,245,244,242,241,240,238,236,234,233,230,228,226,224,221,219,216,213,210,207,
  17. 204,201,198,194,191,187,184,180,176,172,168,164,160,156,152,147,143,138,134,129,
  18. 125,120,115,110,105,100,95,90,85,80,75,69,64,59,54,48,43,38,32,27,
  19. 21,16,10,5,
  20. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  21. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  22. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  23. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  24. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  25. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  26. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  27. 0,0,0,0};

  28. flash uint table3[]={
  29. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  30. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  31. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  32. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  33. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  34. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  35. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  36. 0,0,0,0,
  37. 0,5,10,16,21,27,32,38,43,48,54,59,64,69,75,80,85,90,95,100,
  38. 105,110,115,120,124,129,134,138,143,147,152,156,160,164,168,172,176,180,184,187,
  39. 191,194,198,201,204,207,210,213,216,219,221,224,226,228,230,233,234,236,238,240,
  40. 241,242,244,245,246,247,247,248,249,249,249,249,250,249,249,249,249,248,247,247,
  41. 246,245,244,242,241,240,238,236,234,233,230,228,226,224,221,219,216,213,210,207,
  42. 204,201,198,194,191,187,184,180,176,172,168,164,160,156,152,147,143,138,134,129,
  43. 125,120,115,110,105,100,95,90,85,80,75,69,64,59,54,48,43,38,32,27,
  44. 21,16,10,5};

  45. #pragma interrupt_handler timer2_capt_isr:5
  46. #pragma interrupt_handler adc_sj:15
  47. void timer2_capt_isr()
  48. {
  49.    TCNT2=5;
  50.    c++;
  51.    if(c>=2)
  52.    {
  53.      c=0;
  54.          OCR1AH=0;
  55.          OCR1AL=table2[b];
  56.          OCR1BH=0;
  57.      OCR1BL=table3[b];
  58.          b++;
  59.          if(b>=288){b=0;zd++;}
  60.    }
  61. }
  62. void timer1_init()
  63. {
  64.     TCCR2=0X01;
  65.         TCNT2=5;
  66.         OCR1AH=0;
  67.         OCR1AL=0;
  68.         OCR1BH=0;
  69.         OCR1BL=0;
  70.         ICR1=250;
  71.         TCCR1A=0XA0;
  72.         TCCR1B=0X11;
  73. }
  74. void init_devices()
  75. {
  76.         DDRD|=BIT(4);
  77.         DDRD|=BIT(5);
  78.         timer1_init();
  79.         MCUCR=0X00;
  80.         GICR=0X00;
  81.         TIMSK=0X40;
  82.         SREG|=BIT(7);
  83. }
  84. void led()//正常指示灯
  85. {
  86.     PORTB|=BIT(3);
  87.         PORTB&=~BIT(4);
  88. }
  89. void led1()//故障指示灯
  90. {
  91.    PORTB&=~BIT(3);
  92.    PORTB|=BIT(4);
  93. }
  94. void led2()//报警指示灯
  95. {
  96.    PORTB|=BIT(4);
  97.    PORTB|=BIT(3);
  98. }
  99. void ad_init(uchar a)//AD转换
  100. {
  101.   // uint sj;
  102.    SFIOR=0;//设置ADC为连续工作模式
  103.    ADMUX=a;//设置那一路ADC转换
  104.    ADCSR=0X80;//ADC转换使能
  105.    ADCSR|=BIT(ADSC);//启动ADC
  106.    ADCSR|=BIT(ADIE);
  107.    SREG|=BIT(7);
  108. //  while(!(ADCSR&(BIT(ADIF))));//等待ADC转换完成
  109. //  sj=ADCL;
  110. //  sj=sj+256*ADCH;
  111.   // ADCSR|=BIT(ADIF);
  112.   // ADCSR=0X00;//关闭ADC
  113.   // return sj;
  114. }

  115. void  show(uchar bai,uchar shi,uchar ge )
  116. {   
  117.          PORTC=table1[bai];
  118.          PORTA|=BIT(7);
  119.          PORTA&=~BIT(7);
  120.          PORTC=table1[shi];
  121.          PORTA|=BIT(6);
  122.          PORTA&=~BIT(6);
  123.          PORTC=table1[ge];
  124.          PORTA|=BIT(5);
  125.          PORTA&=~BIT(5);
  126. }
  127. void adc_sj()
  128. {
  129.    sj=ADCL;
  130.    sj=sj+256*ADCH;
  131.    ADCSR|=BIT(ADIF);
  132.    ADCSR=0X00;//关闭ADC
  133. }
  134. void  delay(uint ms)
  135. {
  136.            uint  x,y;
  137.           for(x=0;x<ms;x++)
  138.           {
  139.              for(y=0;y<1141;y++);
  140.           }
  141. }
  142. void main()
  143. {
  144.    uchar f=0;
  145.    uint ci=0;
  146.         DDRC=0XFF;
  147.         DDRA|=BIT(5);
  148.         DDRA|=BIT(6);
  149.         DDRA|=BIT(7);
  150.         PORTC=0X00;
  151.     PORTA&=~BIT(7);
  152.         PORTA&=~BIT(6);
  153.         PORTA&=~BIT(5);
  154.         DDRA&=~BIT(1);
  155.         PORTA&=~BIT(1);
  156.         DDRA&=~BIT(4);
  157.         PORTA&=~BIT(4);
  158.         
  159.     DDRB|=BIT(3);
  160.     DDRB|=BIT(4);
  161.     PORTB&=~BIT(3);
  162.     PORTB&=~BIT(4);
  163.     DDRB|=BIT(6);
  164.     PORTB&=~BIT(6);
  165.     init_devices();
  166.    while(1)
  167.    {
  168.     if(zd>=80)
  169.            {
  170.             zd=0;
  171.                 switch(f)
  172.                 {
  173.                   case 0: table[0]=1;table[1]=17;table[2]=17;f++;ad_init(0x44);
  174.                   break;
  175.                   case 1:sj=sj/51;iv=sj;table[0]=iv/100;table[1]=iv%100/10;table[2]=iv%10;f++;sj=0;led();
  176.                   break;
  177.                   case 2: table[0]=2;table[1]=17;table[2]=17;f++;
  178.                   break;
  179. ……………………

  180. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
简单单相逆变器控制板原理图叫Atmega16L源代码.rar (678.59 KB, 下载次数: 52)
回复

使用道具 举报

中恒电子asus 发表于 2018-7-31 09:53 | 显示全部楼层
感谢分享
回复

使用道具 举报

huaishang 发表于 2018-8-2 23:19 | 显示全部楼层
感谢分享,谢谢!
回复

使用道具 举报

hong19851024 发表于 2018-11-9 16:46 | 显示全部楼层

感谢分享,谢谢!
回复

使用道具 举报

lxjmcuahz 发表于 2018-12-18 10:44 | 显示全部楼层
谢谢楼主,下来学习下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

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