[经验分享] MG32F02A/U 64/128 NCO(数字控制振荡器)

[复制链接]
 楼主| MG_FAE 发表于 2021-7-2 10:37 | 显示全部楼层 |阅读模式
数字控制振荡器(Numerically Controlled Oscillator)

什麼是数字控制振荡器?

  NCO是一个非常好用的功能,可藉由程控产生任意频率的方波, 且不会造成主频变动.


数字控制振荡器的好處

1.产生最快24Mhz的频率组合
2.可输出给外部使用
3.可当成M0的追频函数






NCO溢出频率

(NCO输出频率需 < NCO输入频率/2 且 < APB频率/4)
  


代码简介
  1. #include "MG32x02z_APB_DRV.h"

  2. //*** <<< Use Configuration Wizard in Context Menu >>> ***

  3. // ----------------------------------------------------------------------------
  4. //  <o0> NCO input clock source select.
  5. //      <0=> CK_IHRCO
  6. //      <1=> CL_PLL
  7. //      <2=> CK_APB
  8. //      <3=> CK_LS
  9. //      <4=> TM00_TRGO
  10. //      <5=> NCO_CK0 (input pin)
  11. #define NCOClock        0
  12. 选择NCO的时钟来源
  13. // ----------------------------------------------------------------------------
  14. //  <o0> NCO output mode <0=>FDC mode <1=>PFM mode  
  15. #define NCOOutputMode   0  
  16. 选择NCO的输出模式
  17. FDC模式是固定占空比模式
  18. PFM模式是脉冲频率模式
  19. // ----------------------------------------------------------------------------
  20. //  <o0> Inverse NCO output <1=>ENABLE <0=>DISABLE
  21. #define InverseNCO      0   
  22. 设置NCO的输出反相
  23. // ------------------------------------------------------------------------
  24. //  <o0> input range from 0 to 1048575 (2^20 - 1)
  25. #define NCOINCVal       1000
  26. NC0的输入范围,根据前面公式设置该值,获得想要的频率
  27. // ----------------------------------------------------------------------------
  28. //  <o0> APB NCO PFM width select (only support PFM mode)
  29. //      <0=> 1 CK_NCOn clock period
  30. //      <1=> 2 CK_NCOn clock period
  31. //      <2=> 4 CK_NCOn clock period
  32. //      <3=> 8 CK_NCOn clock period
  33. //      <4=> 16 CK_NCOn clock period
  34. //      <5=> 32 CK_NCOn clock period
  35. //      <6=> 64 CK_NCOn clock period
  36. //      <7=> 128 CK_NCOn clock period
  37. #define NCO_PFMWidth    7
  38. 设置NCO PFM输出模式下的脉冲宽度
  39. //*** <<< end of configuration section >>>    ***

  40. /**
  41. *******************************************************************************
  42. * [url=home.php?mod=space&uid=247401]@brief[/url]            Initial NCO peripheral.
  43. * [url=home.php?mod=space&uid=1543424]@Details[/url]     Initial NCO with start it.
  44. * [url=home.php?mod=space&uid=266161]@return[/url]                None
  45. *******************************************************************************
  46. */
  47. void Sample_APB_NCO(void)
  48. {  
  49.    
  50.     // make sure :
  51.         
  52.     //===Set CSC init====
  53.     //MG32x02z_CSC_Init.h(Configuration Wizard)
  54.     //Select CK_HS source = CK_IHRCO
  55.     //Select IHRCO = 12M
  56.     //Select CK_MAIN Source = CK_HS
  57.     //Configure PLL->Select APB Prescaler = CK_MAIN/1
  58.     //Configure Peripheral On Mode Clock->APB = Enable
  59.         在初始化之前确保设置好了想要的时钟
  60.     //==Set GPIO init
  61.     //NCO_P0 pin config:
  62.     //MG32x02z_GPIO_Init.h(Configuration Wizard)->Use GPIOB->PB3
  63.     //GPIO port initial is 0xFFFF
  64.     //PB3 mode is PPO
  65.     //PB3 function NCO_P0
  66. 确保相应的IO口设置到了相应的模式和功能复用。


  67.     // ------------------------------------------------------------------------
  68.     // initial NCO
  69.     APB_NCOClockSource_Select((APB_NCOInputClockSrcDef) NCOClock);
  70.     APB_NCOOutputMode_Select((APB_NCOOutputMode) NCOOutputMode);
  71.     APB_NCOInverseOutput_Cmd((FunctionalState) InverseNCO);
  72.    
  73.     APB_NCOPFMWidth_Select((APB_NCOPFMWidtrhSelDef) NCO_PFMWidth);
  74.    
  75.     APB_NCOSetINC(NCOINCVal);
  76.     APB_NCOSetACC(999);
  77.    
  78.     APB_NCO_Cmd(ENABLE);
  79.         

  80. 初始化NCO的步骤:
  81. 1.选择输入时钟
  82. 2.选择输出模式
  83. 3.选择是否进行反相
  84. 4.设置PFM宽度(若使用PFM模式)
  85. 5.设置好输入比较值和计数值
  86. 6.使能输出。


  87.     return;
  88. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
daichaodai 发表于 2021-7-5 20:35 来自手机 | 显示全部楼层
其它地方叫MCO
麻花油条 发表于 2021-8-6 16:13 | 显示全部楼层
看看研究一下
两只袜子 发表于 2022-7-6 09:53 来自手机 | 显示全部楼层
数字控制振荡器简称NCO
gouguoccc 发表于 2024-8-1 08:27 来自手机 | 显示全部楼层
笙泉的MCU感觉用的人很少啊,资源好找吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

98

主题

334

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部