標(biāo)題: STC12單片機(jī)+TL494 LED驅(qū)動(dòng)源程序與原理圖PCB文件(數(shù)控電源) [打印本頁]

作者: ljl6666    時(shí)間: 2021-4-14 22:31
標(biāo)題: STC12單片機(jī)+TL494 LED驅(qū)動(dòng)源程序與原理圖PCB文件(數(shù)控電源)
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. * 輸    入         : 無
  13. * 輸    出         : 無
  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);//測電壓,取十次平均值
  29.                 }
  30.                 Vout=temp/1241.38;//計(jì)算實(shí)際電壓
  31.                 for(temp=0,i=0;i<100;i++)
  32.                 {
  33.                         temp+=GetADCResult(1);//測電流,取十次平均值
  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);//顯示測量電壓電流
  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)

作者: zbfdyw    時(shí)間: 2021-4-15 10:44
真好,真好,寫的真好!
作者: william_wangxb    時(shí)間: 2021-4-26 22:48
樓主,看你的PCB板圖,感覺沒有考慮散熱問題,畫板的水平還有提升的空間
作者: 塵蕭mrchen    時(shí)間: 2021-4-30 18:45
STC12單片機(jī)的圖不等于89c51
作者: SURUBU1976    時(shí)間: 2022-12-29 08:44
william_wangxb 發(fā)表于 2021-4-26 22:48
樓主,看你的PCB板圖,感覺沒有考慮散熱問題,畫板的水平還有提升的空間

實(shí)驗(yàn)性的沒問題.想后面會(huì)化
作者: 35456    時(shí)間: 2023-1-3 21:28
大佬真棒,寫的真好
作者: c03131401    時(shí)間: 2023-1-10 15:44
PCB中 ,C1電解畫反了吧
作者: woyaodwn    時(shí)間: 2024-3-1 13:43
這個(gè)電路可實(shí)際使用嗎?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1