久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5373|回復: 5
收起左側

STC15f2k16s2單片機制作數控電源的相關問題求助

[復制鏈接]
ID:60663 發表于 2018-11-25 12:55 | 顯示全部樓層 |閱讀模式
主控選用STC15f2k16s2,制作數控電源,輸出兩路pwm,控制TL494分別調節電壓和電流。pwm脈寬通過ec11編碼器調整,切換使用編碼器的按鍵。怎奈偶是菜鳥,程序變成了一鍋粥,搞不定啦,求高人指導一下程序吧。
IMG_20181125_125216.jpg


IMG_20181125_125227.jpg

回復

使用道具 舉報

ID:60663 發表于 2018-11-25 13:08 | 顯示全部樓層
原理圖
捕獲.PNG

回復

使用道具 舉報

ID:60663 發表于 2018-11-26 22:28 | 顯示全部樓層
有人來嗎?
回復

使用道具 舉報

ID:401564 發表于 2018-11-27 10:38 | 顯示全部樓層
你這數控電源精度上基本沒有保證的,能50mV的精度就很好了。
用我的方案吧,我的板子打樣還沒有回來,這個是改動好幾次的版本了,輸出電流6A,輸入電壓12V,步進可調的精度±5mV,溫度漂移取決于TL431
單片機用STC8系列的,它有個12位的ADC是目前STC中ADC最高精度的單片機之一。另外,還可以增加反饋線,輸出4.20V電壓,5.5A電流,電壓下降0.02V,也就是輸出4.18V,參數基本上是工業級
但是,電流的轉換還沒有搞定,因為還沒有找到好的取樣電阻。
至于你的程序,首先要把顯示和編碼開關搞好,一步一步來,先寫一個可以轉動編碼開關,一個變量跟著增加,然后在顯示出來,至于計算,留在后面慢慢來
自下而上,一個一個的小功能寫好,要不一下寫完整個程序,這樣會很亂的。
編碼開關用中斷,1mS或者2mS一次掃描就可以了,這樣不影響顯示。
回復

使用道具 舉報

ID:60663 發表于 2018-12-2 14:07 | 顯示全部樓層
每周只有周末有時間弄弄,12月2日的進度
編碼器和PWM抄了一段程序,各種編譯錯誤請各位高人指點指點。
1、編碼器函數,Encoder_EC11_Scan() 是判斷編碼器旋轉方向,EC11_Key_Scan()是判斷編碼器按鍵狀態

//----------------EC11   編碼器掃描函數----------------//
char Encoder_EC11_Scan()     /*  這里只是部分代碼  */
{

    char ScanResult = 0;    //返回編碼器掃描結果,用于分析編碼器的動作
                            //返回值的取值:   0:無動作;      1:正轉;           -1:反轉;  
                              
        if(EC11_A_Now != EC11_A_Last)   //以A為時鐘,B為數據。正轉時AB反相,反轉時AB同相
        {
            if(EC11_A_Now == 0)
            {
                if(EC11_B_Now ==1)      //只需要采集A的上升沿或下降沿的任意一個狀態,若A下降沿時B為1,正轉                    
                    ScanResult = 1;     //正轉

                else                    //反轉
                    ScanResult = -1;
            }
            EC11_A_Last = EC11_A_Now;   //更新編碼器上一個狀態暫存變量
            EC11_B_Last = EC11_B_Now;   //更新編碼器上一個狀態暫存變量
        }
   
return ScanResult;      //返回值的取值:   0:無動作;      1:正轉;           -1:反轉;
}

//----------------EC11   按鍵掃描函數----------------//
int EC11_Key_Scan()
{
        unsigned int i = 0;
        if(EC11_Key == 1 && i == 0)
        {
                delay_ms(1);
                if(EC11_Key == 1)
                {
                        i = 1;
                }
        }
       /*  else if(EC11_Key == 1 && i == 1)
        {
                delay_ms(1);
                if(EC11_Key == 1)
                {
                        i = 2;
                }               
        }
       else if(EC11_Key == 1 && i == 2)
        {
                delay_ms(1);
                if(EC11_Key == 1)
                {
                        i = 3;
                }        
        } */
        else
        {
                i = 0;
        }
        return i;
}
2、PWM    pwm_init(void) 是初始化,pwm_set0(unsigned int x)    pwm_set1(unsigned int x)  為設置兩個通道的占空比

//----------------PWM初始化函數----------------//

void pwm_init(void)     //PWM初始化函數,初始占空比為0
{

    CMOD=0x02;    //0000 0010 空閑時不計數,不產生中斷,時鐘源為fosc/2,因此輸出占用率為fosc/512
    CL=0x00;
    CH=0x00;
    AUXR1 = 0x10;    //切換IO口
    CCAPM0=0x42;  //0100 0010, 8位 PWM
    CCAPM1=0x42;  //0100 0010, 8位 PWM
    CCAP0L=0x00;
    CCAP0H=0x00;   //PWM實現方法,因為是8位,CL基礎計數器從0xFF遞減到0x00,溢出后將CCAP0H
                  //的值加載到CCAP0L,若CL遞減過程中,若大于CCAP0L,則輸出高電平,否則為低電平
    CCAP1L=0x00;
    CCAP1H=0x00;
    CR=1;  //開啟PCA計數器
}
void pwm_set0(unsigned int x)    //占空比設置函數
{
if(x>255) x=255 ;
if(x<10)    x=10 ;

    CCAP0H=x;     //設置比較值
    CCAP0L=x;
}
void pwm_set1(unsigned int x)    //占空比設置函數
{   
   if(x>255) x=255 ;
   if(x<5)    x=5 ;
    CCAP1H=x;     //設置比較值
    CCAP1L=x;
}
3、主函數這里一堆錯誤,

if  EC11_Key_Scan()==1    判斷按鍵未按下,為電壓調節模式
        {  
                if Encoder_EC11_Scan()==1 編碼器正傳
                 {  pwm_0=pwm_0++;
                    pwm_set0(pwm_0);    占空比增大
                 }
                if Encoder_EC11_Scan()==-1 編碼器反傳
                 { pwm_0=pwm_0--;
                   pwm_set0(pwm_0);  占空比減小
                  }
         }
      if  EC11_Key_Scan()==0      按鍵按下,為電流調節模式
         {        if Encoder_EC11_Scan()==1        
                  {pwm_1=pwm_1++;
                   pwm_set1(pwm_1);
                      }
                  if Encoder_EC11_Scan()==-1
                  { pwm_1=pwm_1--;
                    pwm_set1(pwm_1);
                    }
           }
4、一堆錯誤

MAIN.C(212): error C141: syntax error near 'EC11_Key_Scan', expected '('
MAIN.C(213): error C141: syntax error near '{'
MAIN.C(215): error C141: syntax error near '{'
MAIN.C(218): error C141: syntax error near 'Encoder_EC11_Scan', expected '('
MAIN.C(219): error C141: syntax error near '{'
MAIN.C(223): error C141: syntax error near 'EC11_Key_Scan', expected '('
MAIN.C(224): error C141: syntax error near '{'
MAIN.C(225): error C141: syntax error near '{'
MAIN.C(228): error C141: syntax error near 'Encoder_EC11_Scan', expected '('
MAIN.C(229): error C141: syntax error near '{'
回復

使用道具 舉報

ID:857072 發表于 2022-3-19 09:34 來自手機 | 顯示全部樓層
Y_G_G 發表于 2018-11-27 10:38
你這數控電源精度上基本沒有保證的,能50mV的精度就很好了。
用我的方案吧,我的板子打樣還沒有回來,這個 ...

大佬,你也沒把電路貼出來參考一下啊。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜免费 | 亚洲欧美日韩精品久久亚洲区 | 日本视频一区二区三区 | 午夜成人在线视频 | www.久| 操操操操操 | 欧美精品一区二区三区四区 在线 | 久久国产精品网 | 精品欧美黑人一区二区三区 | av第一页 | 大象视频一区二区 | 日本三级日产三级国产三级 | 国产一区二区三区四区在线观看 | www.久久久久久久久 | 久久久高清 | 亚洲国产精品一区二区www | 91久久精品一区二区三区 | 久久免费精品 | 日韩欧美一区二区三区 | 成人在线观看免费视频 | a级片网站 | 久草视频在线播放 | 七七婷婷婷婷精品国产 | 日韩av一区二区在线观看 | 久久男人天堂 | 亚洲视频一区在线观看 | 天天干国产 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | www一级片| 亚洲精品久久久久久久久久吃药 | 欧美白人做受xxxx视频 | 欧美精品在线播放 | 日韩欧美成人精品 | www.五月婷婷.com | 久久久精品国产 | 一区二区三区四区在线免费观看 | 精品视频在线一区 | 亚洲iv一区二区三区 | 成人在线黄色 | 一级黄色影片在线观看 | 激情自拍偷拍 |