[热门应用] KF8L22xx AMP例程

[复制链接]
 楼主| jerow 发表于 2019-8-30 21:54 | 显示全部楼层 |阅读模式
AMP的配置
  1. /*******************************************************************************
  2.   * [url=home.php?mod=space&uid=288409]@file[/url]    KungFu8_AMP.c
  3.   * [url=home.php?mod=space&uid=187600]@author[/url]  ChipON Application Team
  4.   * [url=home.php?mod=space&uid=895143]@version[/url] V0.0.1
  5.   * @date
  6.   * @brief
  7.   * *
  8.   ******************************************************************************
  9.   */

  10. #include        "KungFu8_AMP.h"

  11. /********************************************************************************************
  12. *
  13. *                                                                AMP
  14. *
  15. *OPIN+对应引脚                        OPIN-对应引脚                OPOUT输出引脚
  16. *        P0.7                                  P5.0                                  P5.1
  17. *        P0.0                       
  18. *        GND
  19. *
  20. **********************************************************************************************/

  21. /***********************************************************************************
  22. * 函数名             :AMP_Calibrate_Handle
  23. * 函数功能        :AMP运放校准
  24. * 入口参数        :无
  25. * 返回         :无
  26. * AMP运放校准  建立在运放模块配置完成并使能的情况下
  27. **********************************************************************************/
  28. void AMP_Calibrate(void)
  29. {
  30.         unsigned char i;
  31.         Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
  32.         //~~~~~~~~~~~~~~~~~~~~~~~~~
  33.         AMPDT=0x80;  // 还原校准值为复位值
  34.         AMPCALEN=1;
  35.         Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
  36.         AMPDT7=AMPCALD;

  37.         AMPDT6=1;Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
  38.         if(AMPCALD!=AMPDT7)AMPDT6=0;

  39.         AMPDT5=1;Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
  40.         if(AMPCALD!=AMPDT7)AMPDT5=0;

  41.         AMPDT4=1;Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
  42.         if(AMPCALD!=AMPDT7)AMPDT4=0;

  43.         AMPDT3=1;Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
  44.         if(AMPCALD!=AMPDT7)AMPDT3=0;
  45.         //
  46.         //~~~~~~~~~~~~~~~~~~~~~~~~~bit2~bit0 begin form zero
  47.         AMPDT2=0;AMPDT1=0;AMPDT0=1;
  48.         //~~~~~~~~~~~~~~~~~~~~~~~~~
  49.         for(i =1;i <8;i++ )
  50.         {
  51.                 Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
  52.                 if(AMPCALD != AMPDT7)
  53.                 {
  54.                         break;
  55.                 }
  56.                 AMPDT ++;
  57.         }
  58.         //~~~~~~~~~~~~~~~~~~~~~~~~~结束校准
  59.         AMPCALEN=0;
  60. }

  61. /***********************************************************************************
  62. * 函数名             :AMP_Module_Handle
  63. * 函数功能        :AMP运放开启
  64. * 入口参数        :无
  65. * 返回         :无
  66. * AMP运放开启
  67. **********************************************************************************/
  68. void AMP_Configuration(void)
  69. {
  70.         // P51运放输出口配置:模拟输入
  71.         ANS51=1;
  72.         TR51=1;
  73.         // P50运放负端输入口配置:模拟输入
  74.         TR50=1;
  75.         ANS51=1;

  76.     // Pxx运放正端输入口配置:选择P07或P00或地对应配置位模拟输入,
  77.         TR07=1;
  78.         ANS07=1;  // 如果选定脚

  79. //        TR00=1;
  80. //        ANS00=1;  // 如果选定脚

  81.         // 功能配置使能
  82.         AMPCTL = P07_TO_POSITIVE | 0x01 ;//   选定使用功能脚   并使能模块,这里不启动校准,有校准方法关联校准功能
  83. }




 楼主| jerow 发表于 2019-8-30 21:55 | 显示全部楼层
main函数代码
  1. /****************************************************************************************
  2. *
  3. * 文件名: main.c
  4. * 项目名:
  5. * 版 本: v1.0
  6. * 日 期:
  7. * 作 者:
  8. *
  9. ****************************************************************************************/
  10. #include "includes.h"


  11. /***********************************************************************************
  12. * 函数名             :
  13. * 函数功能        :有限周期数的延迟
  14. * 入口参数        :1~255的有效范围
  15. * 返回         :无
  16. ***********************************************************************************
  17. */
  18. void Delay_Wait_CLK_Sample(unsigned char x)
  19. {
  20. #pragma save
  21. #pragma disable_warning 59
  22. #pragma disable_warning 85   // 59 85 屏蔽参数未使用警告,函数未返回警告,作用于嵌汇编函数功能实现

  23.         __asm
  24.          ;// 参数使用R0传递
  25.          ;//MOV R0,#0x05 固定样例
  26.          DECJZ R0
  27.          JMP $-1
  28.         __endasm;

  29. #pragma restore
  30. }
  31. //***********************************************************************************
  32. //主函数
  33. //***********************************************************************************
  34. void main()
  35. {
  36.         AMP_Configuration();
  37.         AMP_Calibrate();
  38.         while(1)
  39.         {// 注:调试时第二次循环指向上一行代码,此为正常现象,是因为嵌汇编的XX指令在KF工具中没有行号,被属于需上一行代码的尾指令。
  40.                 _CWDT_();  // 周期性清理,如果代码执行时间超过看门狗的周期,应该在代码中插入清狗指令。

  41. //                Delay_Wait_CLK_Sample(200);
  42. //                Delay_Wait_CLK_Sample(200);
  43. //                Delay_Wait_CLK_Sample(200);
  44. //                Delay_Wait_CLK_Sample(200);
  45. //                Delay_Wait_CLK_Sample(200);
  46. //                Delay_Wait_CLK_Sample(200);

  47. //                // 可基于时间或外部条件的过程进行校准修正漂移.
  48. //                AMP_Calibrate();  // 注:校准过程会使运放输出最大输出和最小输出。应考虑系统的适用性
  49.         }
  50. }
  51. //中断函数0:0X04入口地址
  52. void int_fun0() __interrupt (0)
  53. {

  54. }


  55. //中断函数1:0x14入口地址
  56. void int_fun1() __interrupt (1)
  57. {

  58. }
 楼主| jerow 发表于 2019-8-30 21:59 | 显示全部楼层
KF8L22Z20XX  运算放大器模块介绍
KF8L22Z20XX 具有 1 个 3 路正向输入端可选的带校准的运算放大器,运放模块通过与外部元件连接实现其放大等作用,内部框图如图 11.1 所示。
905865d692bcb908de.png
 楼主| jerow 发表于 2019-8-30 22:02 | 显示全部楼层
KF8L22XX  与运放有关的寄存器
317905d692c624cae9.png
816545d692c7339cb0.png
 楼主| jerow 发表于 2019-8-30 22:11 | 显示全部楼层
KF8L22XX  运放失调校准步骤:
1.设置运放的 IO 端口为模拟端口;
2.AMPON 置 1 打开运放;
3.延迟 100us,将 AMPCALEN 置 1 使能运放失调校准功能;
4.延迟 100us,读出运放输出结果 AMPCALD(AMPCTL<7>),并写入 AMPDT<7>;
5.将 AMPDT<6>改写为 1,延迟 100us,读出运放输出结果 AMPCALD;
6.判断 AMPCALD 和 AMPDT7 是否相等,相等则 AMPDT<6>保持为 1,不相等则将AMPDT<6>改写为 0;
7.同样对 AMPDT<5:3>的每位做步骤 5 和 6 的操作;
8.AMPDT<2:0>从 000 开始加 1,延迟 100us,读出运放输出结果 AMPCALD;
9.判断 AMPCALD 与 AMPDT7 是否相等,相等返回步骤 8;不相等,AMPCALEN 清 0 结束运放失调校准。如果 AMPDT<2:0>加到 111 时还是相等,也结束运放失调校准,开始正常运放工作。
 楼主| jerow 发表于 2019-8-30 22:12 | 显示全部楼层
KF8L22XX  运放使用方法:
使用运放时软件的设置:
1. 将对应的引脚设置为模拟输入;
2. 选一路为正向输入端
3. 打开运放(AMPON =1)。
注:1. 运放输出端也要设为模拟输入口
2. 休眠模式下运放被强制关闭不能使用
zlmin 发表于 2019-10-3 09:09 来自手机 | 显示全部楼层
谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

3

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