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

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

QQ登錄

只需一步,快速開始

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

stm32串行驅(qū)動(dòng)AD9910源碼(產(chǎn)生頻率可控正弦波)12864顯示

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:259517 發(fā)表于 2018-11-8 11:21 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
stm32f103驅(qū)動(dòng)DDS模塊ad9910,產(chǎn)生頻率可控正弦波,相位和幅值也可以通過(guò)程序配置,但是不建議,我試了一下會(huì)出現(xiàn)幅值不穩(wěn)的情況

單片機(jī)源程序如下:
  1. #include "stm32_config.h"
  2. #include "AD9910.h"

  3. extern uchar cfr2[4]; //cfr2控制字
  4. extern uchar cfr1[4]; //cfr1控制字

  5. char str[30];        //顯示緩存
  6. extern u8 _return;
  7. int main(void)
  8. {
  9.         u16 i=0;
  10.         unsigned long int freq = 1000000;

  11.         delay_init(72);        //初始化延時(shí)函數(shù)
  12.         
  13.         
  14.         Init_ad9910();
  15.         Freq_convert(30000000);
  16.         Write_Amplitude(600); //寫幅度,輸入范圍:1-650 mV
  17.         

  18.         while(1)
  19.         {               
  20.                 Freq_convert(freq);
  21.                 freq = freq + 1000000;
  22.                 if(freq > 40000000)
  23.                 {
  24.                         freq = 1000000;
  25.                 }
  26.                 delay_ms(200);
  27.         
  28.         }        
  29. }


  30. /*

  31. if(PAin(0) == 0)
  32.                 {
  33.                         delay_ms(5);
  34.                         cfr1[0] = 0x00; //RAM 失能
  35.                         cfr2[1] = 0x00; //DRG 失能
  36.                         Txcfr(); //發(fā)送cfrx控制字
  37.                         Write_Amplitude(500); //寫幅度,輸入范圍:1-650 mV
  38.                         Freq_convert(100000); //寫頻率,輸入范圍:1-400 000 000Hz
  39.                 }
  40.                 if(PAin(8) == 0)
  41.                 {
  42.                         delay_ms(5);
  43.                         cfr1[0] = 0x00; //RAM 失能
  44.                         cfr2[1]=0x0e; //DRG 使能
  45.                         Txcfr(); //發(fā)送cfrx控制字
  46.                         Write_Amplitude(500); //寫幅度,輸入范圍:1-650 mV
  47.                         //掃頻波下限頻率,上限頻率,頻率步進(jìn)(單位:Hz),步進(jìn)時(shí)間間隔(單位:us)
  48.                         SweepFre(100, 100000, 10, 240000); //步進(jìn)時(shí)間范圍:4*(1~65536)ns
  49.                 }
  50.                
  51.                 if(PDin(3) == 0)
  52.                 {
  53.                         delay_ms(5);
  54.                         Square_wave(200); //方波,采樣時(shí)間間隔輸入范圍:4*(1~65536)ns
  55.                         cfr1[0] = 0xc0; //RAM 使能,幅度控制
  56.                         cfr2[1] = 0x00; //DRG 失能
  57.                         Txcfr(); //發(fā)送cfrx控制字
  58.                 }
  59.                
  60. */
復(fù)制代碼
  1. /**********************************************************
  2.                        康威電子
  3.                         顯示:12864
  4. 接口:按鍵接口請(qǐng)參照key.h
  5. 時(shí)間:2015/11/3
  6. 版本:1.0
  7. 作者:康威電子
  8. 其他:程序借鑒正點(diǎn)原子,添加自己的驅(qū)動(dòng),未經(jīng)作者許可,不得用于其它任何用途

  9. **********************************************************/

  10. #include "stm32f10x.h"
  11. #include "AD9910.h"
  12. #include "delay.h"
  13. #include "sys.h"
  14. /*-----------------------------------------------
  15.   名稱:AD9910串行驅(qū)動(dòng)
  16.   編寫:Liu
  17.   日期:2014.6
  18.   修改:無(wú)
  19.   內(nèi)容:
  20. ------------------------------------------------*/
  21. uchar cfr1[]={0x00,0x40,0x00,0x00};       //cfr1控制字
  22. uchar cfr2[]={0x01,0x00,0x00,0x00};       //cfr2控制字
  23. const uchar cfr3[]={0x05,0x0F,0x41,0x32};       //cfr3控制字  40M輸入  25倍頻  VC0=101   ICP=001;
  24. uchar profile11[]={0x3f,0xff,0x00,0x00,0x25,0x09,0x7b,0x42};       //profile1控制字 0x25,0x09,0x7b,0x42
  25.                   //01振幅控制 23相位控制 4567頻率調(diào)諧字

  26. uchar drgparameter[20]={0x00}; //DRG參數(shù)
  27. uchar ramprofile0[8] = {0x00}; //ramprofile0控制字
  28. extern const unsigned char ramdata_Square[4096];


  29. void AD9110_IOInit(void)
  30. {
  31.         GPIO_InitTypeDef GPIO_InitStructure ;
  32.         
  33.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);         //使能PA,PB端口時(shí)鐘

  34.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_12;                          
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
  36.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
  37.         GPIO_Init(GPIOB ,&GPIO_InitStructure) ;

  38.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6 | GPIO_Pin_7| GPIO_Pin_8; //A2,A4,A5,A6,A8
  39.         GPIO_Init(GPIOA ,&GPIO_InitStructure) ;

  40. //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All^(GPIO_Pin_14| GPIO_Pin_15); //除了C14,C15,其他都選
  41. //        GPIO_Init(GPIOC ,&GPIO_InitStructure) ;
  42. }

  43. //=====================================================================

  44. //======================ad9910初始化程序===============================
  45. void Init_ad9910(void)
  46. {        
  47.         AD9110_IOInit();//IO初始化
  48.         AD9910_PWR = 0;//軟件拉低
  49.         
  50.         PROFILE2=PROFILE1=PROFILE0=0;
  51.         DRCTL=0;DRHOLD=0;
  52.         MAS_REST=1;
  53.         delay_ms(5);  
  54.         MAS_REST=0;

  55.         Txcfr();
  56. }      
  57. //=====================================================================

  58. //======================發(fā)送8位數(shù)據(jù)程序================================
  59. void txd_8bit(uchar txdat)
  60. {
  61.         uchar i,sbt;
  62.         sbt=0x80;
  63.         SCLK=0;
  64.         for (i=0;i<8;i++)
  65.         {
  66.                 if ((txdat & sbt)==0)
  67.                         AD9910_SDIO=0;
  68.                 else
  69.                         AD9910_SDIO=1;
  70.                 SCLK=1;
  71.                 sbt=sbt>>1;
  72.                 SCLK=0;
  73.         }
  74. }  
  75. //=====================================================================

  76. //======================ad9910發(fā)送cfrx控制字程序=======================
  77. void Txcfr(void)
  78. {
  79.         uchar m,k;

  80.         CS=0;
  81.         txd_8bit(0x00);    //發(fā)送CFR1控制字地址
  82.         for (m=0;m<4;m++)
  83.                 txd_8bit(cfr1[m]);
  84.         CS=1;  
  85.         for (k=0;k<10;k++);
  86.         
  87.         CS=0;
  88.         txd_8bit(0x01);    //發(fā)送CFR2控制字地址
  89.         for (m=0;m<4;m++)
  90.                 txd_8bit(cfr2[m]);
  91.         CS=1;  
  92.         for (k=0;k<10;k++);

  93.         CS=0;
  94.         txd_8bit(0x02);    //發(fā)送CFR3控制字地址
  95.         for (m=0;m<4;m++)
  96.                 txd_8bit(cfr3[m]);
  97.         CS=1;
  98.         for (k=0;k<10;k++);

  99.         UP_DAT=1;
  100.         for(k=0;k<10;k++);
  101.         UP_DAT=0;
  102.         delay_ms(1);
  103. }         
  104. //=====================================================================

  105. //===================ad9910發(fā)送profile0控制字程序======================
  106. void Txprofile(void)
  107. {
  108.         uchar m,k;

  109.         CS=0;
  110.         txd_8bit(0x0e);    //發(fā)送profile0控制字地址
  111.         for (m=0;m<8;m++)
  112.                 txd_8bit(profile11[m]);
  113.         CS=1;
  114.         for(k=0;k<10;k++);

  115.         UP_DAT=1;
  116.         for(k=0;k<10;k++);
  117.         UP_DAT=0;
  118.         delay_ms(1);
  119. }         
  120. //=====================================================================

  121. //===================計(jì)算頻偏字、頻率字和發(fā)送程序======================
  122. void Freq_convert(ulong Freq)
  123. {
  124.         ulong Temp;
  125.         if(Freq > 400000000)
  126.                 Freq = 400000000;
  127.         Temp=(ulong)Freq*4.294967296; //將輸入頻率因子分為四個(gè)字節(jié)  4.294967296=(2^32)/1000000000 (1G 是內(nèi)部時(shí)鐘速度)
  128.         profile11[7]=(uchar)Temp;
  129.         profile11[6]=(uchar)(Temp>>8);
  130.         profile11[5]=(uchar)(Temp>>16);
  131.         profile11[4]=(uchar)(Temp>>24);
  132.         Txprofile();
  133. }
  134. //=====================================================================

  135. //===================計(jì)算幅度字和發(fā)送程序==============================
  136. void Write_Amplitude(uint Amp)
  137. {
  138.         ulong Temp;
  139.         Temp = (ulong)Amp*25.20615385;           //將輸入幅度因子分為兩個(gè)字節(jié)  25.20615385=(2^14)/650
  140.         if(Temp > 0x3fff)
  141.                 Temp = 0x3fff;
  142.         Temp &= 0x3fff;
  143.         profile11[1]=(uchar)Temp;
  144.         profile11[0]=(uchar)(Temp>>8);
  145.         Txprofile();
  146. }
  147. //=====================================================================

  148. //======================ad9910發(fā)送DRG參數(shù)程序==========================
  149. void Txdrg(void)
  150. {
  151.         uchar m,k;

  152.         CS=0;
  153.         txd_8bit(0x0b);    //發(fā)送數(shù)字斜坡限制地址0x0b
  154.         for (m=0;m<8;m++)
  155.                 txd_8bit(drgparameter[m]);
  156.         CS=1;
  157.         for(k=0;k<10;k++);
  158.         
  159.         CS=0;
  160.         txd_8bit(0x0c);    //發(fā)送數(shù)字斜坡步長(zhǎng)地址0x0c
  161.         for (m=8;m<16;m++)
  162.                 txd_8bit(drgparameter[m]);
  163.         CS=1;
  164.         for(k=0;k<10;k++);
  165.         
  166.         CS=0;
  167.         txd_8bit(0x0d);    //發(fā)送數(shù)字斜坡速率地址0x0d
  168.         for (m=16;m<20;m++)
  169.                 txd_8bit(drgparameter[m]);
  170.         CS=1;
  171.         for(k=0;k<10;k++);
  172.         
  173.         UP_DAT=1;
  174.         for(k=0;k<10;k++);
  175.         UP_DAT=0;
  176.         delay_ms(1);
  177. }         
  178. //=====================================================================

  179. //=====================掃頻波參數(shù)設(shè)置和發(fā)送程序========================
  180. void SweepFre(ulong SweepMinFre, ulong SweepMaxFre, ulong SweepStepFre, ulong SweepTime)
  181. {
  182.         ulong Temp1, Temp2, ITemp3, DTemp3, ITemp4, DTemp4;
  183.         Temp1 = (ulong)SweepMinFre*4.294967296;
  184.         if(SweepMaxFre > 400000000)
  185.                 SweepMaxFre = 400000000;
  186.         Temp2 = (ulong)SweepMaxFre*4.294967296;
  187.         if(SweepStepFre > 400000000)
  188.                 SweepStepFre = 400000000;
  189.         ITemp3 = (ulong)SweepStepFre*4.294967296;
  190.         DTemp3 = ITemp3;
  191.         ITemp4 = (ulong)SweepTime/4; //1GHz/4, 單位:ns
  192.         if(ITemp4 > 0xffff)
  193.                 ITemp4 = 0xffff;
  194.         DTemp4 = ITemp4;
  195.         
  196.         //掃頻上下限
  197.         drgparameter[7]=(uchar)Temp1;
  198.         drgparameter[6]=(uchar)(Temp1>>8);
  199.         drgparameter[5]=(uchar)(Temp1>>16);
  200.         drgparameter[4]=(uchar)(Temp1>>24);
  201.         drgparameter[3]=(uchar)Temp2;
  202.         drgparameter[2]=(uchar)(Temp2>>8);
  203.         drgparameter[1]=(uchar)(Temp2>>16);
  204.         drgparameter[0]=(uchar)(Temp2>>24);
  205.         //頻率步進(jìn)(單位:Hz)
  206.         drgparameter[15]=(uchar)ITemp3;
  207.         drgparameter[14]=(uchar)(ITemp3>>8);
  208.         drgparameter[13]=(uchar)(ITemp3>>16);
  209.         drgparameter[12]=(uchar)(ITemp3>>24);
  210.         drgparameter[11]=(uchar)DTemp3;
  211.         drgparameter[10]=(uchar)(DTemp3>>8);
  212.         drgparameter[9]=(uchar)(DTemp3>>16);
  213.         drgparameter[8]=(uchar)(DTemp3>>24);
  214.         //步進(jìn)時(shí)間間隔(單位:us)
  215.         drgparameter[19]=(uchar)ITemp4;
  216.         drgparameter[18]=(uchar)(ITemp4>>8);
  217.         drgparameter[17]=(uchar)DTemp4;
  218.         drgparameter[16]=(uchar)(DTemp4>>8);
  219.         //發(fā)送DRG參數(shù)
  220.         Txdrg();
  221. }
  222. //=====================================================================

  223. //=================ad9910發(fā)送ramprofile0控制字程序=====================
  224. void Txramprofile(void)
  225. {
  226.         uchar m,k;

  227.         CS=0;
  228.         txd_8bit(0x0e);    //發(fā)送ramprofile0控制字地址
  229.         for (m=0;m<8;m++)
  230.                 txd_8bit(ramprofile0[m]);
  231.         CS=1;
  232.         for(k=0;k<10;k++);

  233.         UP_DAT=1;
  234.         for(k=0;k<10;k++);
  235.         UP_DAT=0;
  236.         delay_ms(1);
  237. }         
  238. //=====================================================================

  239. //=======================ad9910發(fā)送ramdata程序=========================
  240. void Txramdata(void)
  241. {
  242.         uint m,k;

  243.         CS=0;
  244.         txd_8bit(0x16);    //發(fā)送ram控制字地址
  245.         for (m=0; m<4096; m++)
  246.                 txd_8bit(ramdata_Square[m]);
  247.         CS=1;
  248.         for(k=0;k<10;k++);

  249.         UP_DAT=1;
  250.         for(k=0;k<10;k++);
  251.         UP_DAT=0;
  252.         delay_ms(1);
  253. }         
  254. //=====================================================================

  255. //=======================方波參數(shù)設(shè)置和發(fā)送程序========================
  256. void Square_wave(uint Sample_interval)//方波
  257. {
  258.         ulong Temp;
  259.         Temp = Sample_interval/4; //1GHz/4, 采樣間隔范圍:4*(1~65536)ns
  260.         if(Temp > 0xffff)
  261.                 Temp = 0xffff;
  262.         ramprofile0[7] = 0x24;
  263.         ramprofile0[6] = 0x00;
  264.         ramprofile0[5] = 0x00;
  265.         ramprofile0[4] = 0xc0;
  266.         ramprofile0[3] = 0x0f;
  267.         ramprofile0[2] = (uchar)Temp;
  268.         ramprofile0[1] = (uchar)(Temp>>8);
  269.         ramprofile0[0] = 0x00;
  270.         Txramprofile();

  271.         Txramdata();        
  272. }
  273. //=====================================================================


復(fù)制代碼


所有資料51hei提供下載:
9910.rar (333.58 KB, 下載次數(shù): 220)



評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:425487 發(fā)表于 2018-11-13 09:32 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:595348 發(fā)表于 2019-8-5 09:51 | 只看該作者
嚶嚶嚶,想要這個(gè)程序
回復(fù)

使用道具 舉報(bào)

地板
ID:506083 發(fā)表于 2019-8-5 16:09 | 只看該作者
請(qǐng)問(wèn)為什么我用方波的程序產(chǎn)生的是三角波呢?
回復(fù)

使用道具 舉報(bào)

5#
ID:595716 發(fā)表于 2019-8-5 17:43 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報(bào)

6#
ID:704165 發(fā)表于 2020-3-7 17:40 | 只看該作者
大哥麻煩問(wèn)下改幅值的話該再哪改
回復(fù)

使用道具 舉報(bào)

7#
ID:704165 發(fā)表于 2020-3-7 19:46 | 只看該作者
麻煩問(wèn)一下IO對(duì)應(yīng)怎么接啊
回復(fù)

使用道具 舉報(bào)

8#
ID:704165 發(fā)表于 2020-3-7 19:58 來(lái)自手機(jī) | 只看該作者
四十分 發(fā)表于 2019-8-5 16:09
請(qǐng)問(wèn)為什么我用方波的程序產(chǎn)生的是三角波呢?

麻煩問(wèn)一下這個(gè)接口怎么接
回復(fù)

使用道具 舉報(bào)

9#
ID:704165 發(fā)表于 2020-3-9 20:56 | 只看該作者
四十分 發(fā)表于 2019-8-5 16:09
請(qǐng)問(wèn)為什么我用方波的程序產(chǎn)生的是三角波呢?

請(qǐng)問(wèn)一下主函數(shù)里面該怎么調(diào)用
回復(fù)

使用道具 舉報(bào)

10#
ID:854544 發(fā)表于 2020-12-4 20:11 | 只看該作者
麻煩問(wèn)一下端口是怎么接的
回復(fù)

使用道具 舉報(bào)

11#
ID:1115902 發(fā)表于 2024-4-9 10:48 | 只看該作者
想知道有沒(méi)有說(shuō)明接口怎么接
回復(fù)

使用道具 舉報(bào)

12#
ID:1115902 發(fā)表于 2024-4-10 09:27 | 只看該作者
這個(gè)寫著是rct6的下了是ze的,這兩個(gè)能通用?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲不卡在线视频 | 色婷婷久久久亚洲一区二区三区 | 亚洲激情在线观看 | 国产精品黄视频 | 一区二区av在线 | 精品国产1区2区3区 一区二区手机在线 | 新超碰97| 国产色婷婷精品综合在线手机播放 | 天堂av中文在线 | 成人不卡 | 香蕉视频一区二区 | 日韩精品视频中文字幕 | 欧美在线视频一区二区 | 国产精品伦理一区二区三区 | 久久神马 | 国产这里只有精品 | 欧美性大战久久久久久久蜜臀 | 亚洲一区中文 | 一区二区在线 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 日本在线一二 | 久久精品国产久精国产 | 四虎av电影 | www.日日夜夜 | 97视频在线看 | 日韩www| 久热爱 | 婷婷久久精品一区二区 | 中文字幕一区二区三区乱码在线 | 91精品国产91久久久久久 | 国产福利资源在线 | 成人免费在线观看视频 | 中文字幕一区二区三区四区五区 | aa级毛片毛片免费观看久 | 欧美人人 | 成年人国产在线观看 | 91热爆在线观看 | 国产亚洲精品久久yy50 | 欧美精品欧美精品系列 | 极品粉嫩国产48尤物在线播放 | 伊人二区|