新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > TLC5620產生頻率可調三相正弦信號

        TLC5620產生頻率可調三相正弦信號

        作者: 時間:2012-08-15 來源:網絡 收藏
        /*********************************************************/
        //一般說明
        // 串行通信
        //定時器控制其3路正弦波輸出頻率
        /*********************************************************/
        #include reg51.h> //用于調試子程序

        /*********************************************************/
        //的核心子程序
        /*********************************************************/
        #define uint unsigned int
        #define uchar unsigned char
        #define STC5620_A 0 //通道A,增益0 由于先寫高位所以已經做過左移5位處理
        #define STC5620_B 64 //通道B,增益0
        #define STC5620_C 128 //通道B,增益0
        sbit STC5620_LDAC=P3^2; //定義與單片機的接口
        sbit STC5620_LOAD=P3^3;
        sbit STC5620_CLK=P3^5;
        sbit STC5620_DATA=P3^4;
        uchar code DAC_SIN[100]={128,136,144,152,160,168,175,182,190,197,
        203,210,216,221,227,232,236,240,244,247,
        250,252,254,255,255,255,255,255,254,252,
        250,247,244,240,236,232,227,221,216,210,
        203,197,190,182,175,168,160,152,144,136,
        128,120,112,104,96, 88, 81, 74, 66, 59,
        53, 46, 40, 35, 29, 24, 20, 16, 12, 9,
        6, 4, 2, 1, 0, 0, 0, 1, 2, 4,
        6, 9, 12, 16, 20, 24, 29, 35, 40, 46,
        53, 59, 66, 74, 81, 88, 96, 104,112,120,
        }; //對正弦波采100個樣點
        void STC5620_write_com(uchar channel,uchar vol) // 選通道,寫輸出電壓命令
        {
        uchar i;
        STC5620_LDAC=1;
        STC5620_LOAD=1; //總線拉高準備寫入
        for(i=0;i3;i++) //寫入選擇通道命令,其中默認了增益為1
        {

        STC5620_DATA=(bit)(channel0x80);
        STC5620_CLK=1; //下降沿鎖存數據
        STC5620_CLK=0;
        channel=1 ;
        }
        for(i=0;i8;i++) //寫入輸出電壓命令
        {

        STC5620_DATA=(bit)(vol0x80);
        STC5620_CLK=1; //下降寫數據入串口緩沖器
        STC5620_CLK=0;
        vol=1;
        }
        STC5620_LOAD=0; //下降沿寫串口緩沖器入通道指定的中間緩沖器
        STC5620_LDAC=0; //下降沿寫中間緩沖器入通道對應的輸出緩沖器
        }
        void STC5620_sin(void)
        {
        static uchar ii=0,jj=33,kk=66; //總點數為100個點,可以用于設定相位差
        //定義靜態變量 每次更新上次值
        {
        STC5620_write_com(STC5620_A,DAC_SIN[ii]);
        ii=ii+2; //控制通道A采樣點數
        if(ii>99) ii=0;
        STC5620_write_com(STC5620_B,DAC_SIN[jj]);
        jj=jj+2; //控制通道B采樣點數
        if(jj>99) jj=0;
        STC5620_write_com(STC5620_C,DAC_SIN[kk]);
        kk=kk+2; //控制通道C采樣點數
        if(kk>99) kk=0;
        }
        }
        /*********************************************************/
        //設置定時中斷控制TLC5620輸出正弦波的頻率
        /*********************************************************/
        void Init_T0(void)
        {
        EA=1;
        ET0=1;
        TMOD=0x02; //自動裝載計數
        TR0=1;
        TL0=TH0=256-90; //設置頻率 具體使用時計算出參數后再幅值
        //頻率計算公式a:計數個數;p:晶振頻率;b:取樣點數;則在單片機12分頻工作模式情況下頻率=p/(12ab)
        //此時頻率為
        }

        void time0() interrupt 1
        {
        STC5620_sin();
        }

        /*********************************************************/
        //主函數
        /*********************************************************/
        void main()
        {
        Init_T0(); //初始化定時器
        while(1); //等待中斷
        }


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 定陶县| 万州区| 柞水县| 中超| 抚宁县| 广宁县| 大名县| 唐河县| 营山县| 太白县| 香河县| 富阳市| 樟树市| 漳州市| 古田县| 木兰县| 准格尔旗| 密山市| 江城| 盐源县| 南澳县| 东台市| 靖州| 班玛县| 湖南省| 东乌珠穆沁旗| 台江县| 林西县| 长沙县| 关岭| 瑞昌市| 开江县| 平遥县| 建宁县| 兴义市| 呈贡县| 武威市| 平湖市| 芦溪县| 临海市| 永州市|