找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6271|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

STC12單片機(jī)+TL494 LED驅(qū)動(dòng)源程序與原理圖PCB文件(數(shù)控電源)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
STC12+TL494電路原理圖如下:


Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)數(shù)控電源源程序如下:
  1. #include "STC12C5A60S2.h"
  2. #include "lcd.h"
  3. #include "ADC.h"
  4. #include "uart.h"
  5. #include "key.h"
  6. //--定義全局變量--//
  7. unsigned char PuZh[16];

  8. float Vout=0,Iout=0;
  9. /*******************************************************************************
  10. * 函 數(shù) 名         : main
  11. * 函數(shù)功能                   : 主函數(shù)
  12. * 輸    入         : 無(wú)
  13. * 輸    出         : 無(wú)
  14. *******************************************************************************/
  15. void main(void)
  16. {
  17.         unsigned int temp,i;
  18.         //初始化
  19.         InitADC();
  20.         LcdInit();
  21.         PWM_Init();
  22.         
  23.         while(1)
  24.         {
  25.                 Key_Scan();//按鍵掃描
  26.                 for(temp=0,i=0;i<100;i++)
  27.                 {
  28.                         temp+=GetADCResult(0);//測(cè)電壓,取十次平均值
  29.                 }
  30.                 Vout=temp/1241.38;//計(jì)算實(shí)際電壓
  31.                 for(temp=0,i=0;i<100;i++)
  32.                 {
  33.                         temp+=GetADCResult(1);//測(cè)電流,取十次平均值
  34.                 }
  35.                 Iout=temp/597.33;//計(jì)算實(shí)際電流
  36.                 sprintf(PuZh,"S:V:%.1f",(float)VSet/10);//顯示電壓設(shè)定值
  37.                 LcdShowStr(0,0,PuZh);
  38.                 sprintf(PuZh,"M:V:%.1f I:%.1f",Vout,Iout);//顯示測(cè)量電壓電流
  39.                 LcdShowStr(0,1,PuZh);
  40.                
  41.         }                                
  42. }
復(fù)制代碼
  1. #include "key.h"
  2. #include "delay.h"
  3. unsigned char VSet=120;
  4. void Key_Scan(void)
  5. {
  6.         static unsigned char KEY_Flag=0;
  7.         if(LEFT==0)//左鍵
  8.         {
  9.                 if((KEY_Flag&LEFT_Flag)==0)
  10.                 {
  11.                         delay_ms(5);
  12.                         if(LEFT==0)
  13.                         {
  14.                                 KEY_Flag|=LEFT_Flag;
  15.                                 if(VSet>90)VSet--;
  16.                                 Set_PWM1((unsigned char)VSet*1.24138);
  17.                                
  18.                         }
  19.                 }
  20.         }
  21.         else
  22.         {
  23.                 KEY_Flag&=(~LEFT_Flag);
  24.         }
  25.         if(RIGHT==0)//右鍵
  26.         {
  27.                 if((KEY_Flag&RIGHT_Flag)==0)
  28.                 {
  29.                         KEY_Flag|=RIGHT_Flag;
  30.                         delay_ms(5);
  31.                         if(RIGHT==0)
  32.                         {
  33.                                
  34.                                 if(VSet<120)VSet++;
  35.                                 Set_PWM1((unsigned char)VSet*1.24138);
  36.                         }
  37.                 }
  38.         }
  39.         else
  40.         {
  41.                 KEY_Flag&=(~RIGHT_Flag);
  42.         }
  43. }
  44. void PWM_Init(void)
  45. {
  46. CCON|=0;   
  47. CL=0;      
  48. CH=0;   
  49. CMOD|=0x02;
  50. CCAP1H=0x80;  
  51. CCAP1L=0x80;  
  52. PCA_PWM1=0x00;
  53. CCAPM1=0x42;  
  54. CR=1;
  55. Set_PWM1((unsigned char)VSet*1.24138);  
  56. }
  57. void Set_PWM1(unsigned char duty)
  58. {
  59.         unsigned char temp;
  60.         if (duty == 0)                      //PWM固定輸出低
  61.         {
  62.                 //-       -       -       -       -       -       EPCnH   EPCnL
  63.                 PCA_PWM1 = 0x03;            //PWM模式下,CCAPnL,CCAPnH第九位
  64.                 temp = 0xFF;
  65.         }
  66.         else if (duty == 100)             //PWM固定輸出高
  67.         {
  68.                 //-       -       -       -       -       -       EPCnH   EPCnL
  69.                 PCA_PWM1 = 0x00;            //PWM模式下,CCAPnL,CCAPnH第九位
  70.                 temp = 0;
  71.         }

  72.         else
  73.         {
  74.                 PCA_PWM1 = 0x00;
  75.                 temp = 256 -duty;
  76.         }
  77.         CCAP1L = temp;
  78.         CCAP1H = temp;
  79. }
復(fù)制代碼


所有資料51hei提供下載:
BUCK.zip (4.02 MB, 下載次數(shù): 206)
代碼.zip (65.17 KB, 下載次數(shù): 164)

評(píng)分

參與人數(shù) 2黑幣 +60 收起 理由
jialishoushi + 10 共享資料的黑幣獎(jiǎng)勵(lì)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏17 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:402026 發(fā)表于 2021-4-15 10:44 | 只看該作者
真好,真好,寫的真好!
回復(fù)

使用道具 舉報(bào)

板凳
ID:815949 發(fā)表于 2021-4-26 22:48 | 只看該作者
樓主,看你的PCB板圖,感覺(jué)沒(méi)有考慮散熱問(wèn)題,畫板的水平還有提升的空間
回復(fù)

使用道具 舉報(bào)

地板
ID:899772 發(fā)表于 2021-4-30 18:45 | 只看該作者
STC12單片機(jī)的圖不等于89c51
回復(fù)

使用道具 舉報(bào)

5#
ID:507641 發(fā)表于 2022-12-29 08:44 | 只看該作者
william_wangxb 發(fā)表于 2021-4-26 22:48
樓主,看你的PCB板圖,感覺(jué)沒(méi)有考慮散熱問(wèn)題,畫板的水平還有提升的空間

實(shí)驗(yàn)性的沒(méi)問(wèn)題.想后面會(huì)化
回復(fù)

使用道具 舉報(bào)

6#
ID:1060196 發(fā)表于 2023-1-3 21:28 | 只看該作者
大佬真棒,寫的真好
回復(fù)

使用道具 舉報(bào)

7#
ID:163950 發(fā)表于 2023-1-10 15:44 | 只看該作者
PCB中 ,C1電解畫反了吧
回復(fù)

使用道具 舉報(bào)

8#
ID:462629 發(fā)表于 2024-3-1 13:43 | 只看該作者
這個(gè)電路可實(shí)際使用嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表