打印
[热门应用]

KF8L22xx AMP例程

[复制链接]
673|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerow|  楼主 | 2019-8-30 21:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
AMP的配置
/*******************************************************************************
  * [url=home.php?mod=space&uid=288409]@file[/url]    KungFu8_AMP.c
  * [url=home.php?mod=space&uid=187600]@author[/url]  ChipON Application Team
  * [url=home.php?mod=space&uid=895143]@version[/url] V0.0.1
  * @date
  * @brief
  * *
  ******************************************************************************
  */

#include        "KungFu8_AMP.h"

/********************************************************************************************
*
*                                                                AMP
*
*OPIN+对应引脚                        OPIN-对应引脚                OPOUT输出引脚
*        P0.7                                  P5.0                                  P5.1
*        P0.0                       
*        GND
*
**********************************************************************************************/

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

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

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

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

        AMPDT3=1;Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
        if(AMPCALD!=AMPDT7)AMPDT3=0;
        //
        //~~~~~~~~~~~~~~~~~~~~~~~~~bit2~bit0 begin form zero
        AMPDT2=0;AMPDT1=0;AMPDT0=1;
        //~~~~~~~~~~~~~~~~~~~~~~~~~
        for(i =1;i <8;i++ )
        {
                Delay_Wait_CLK_Sample(135);  // *3 16M下的 100us的延时   可配置后
                if(AMPCALD != AMPDT7)
                {
                        break;
                }
                AMPDT ++;
        }
        //~~~~~~~~~~~~~~~~~~~~~~~~~结束校准
        AMPCALEN=0;
}

/***********************************************************************************
* 函数名             :AMP_Module_Handle
* 函数功能        :AMP运放开启
* 入口参数        :无
* 返回         :无
* AMP运放开启
**********************************************************************************/
void AMP_Configuration(void)
{
        // P51运放输出口配置:模拟输入
        ANS51=1;
        TR51=1;
        // P50运放负端输入口配置:模拟输入
        TR50=1;
        ANS51=1;

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

//        TR00=1;
//        ANS00=1;  // 如果选定脚

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




使用特权

评论回复
沙发
jerow|  楼主 | 2019-8-30 21:55 | 只看该作者
main函数代码
/****************************************************************************************
*
* 文件名: main.c
* 项目名:
* 版 本: v1.0
* 日 期:
* 作 者:
*
****************************************************************************************/
#include "includes.h"


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

        __asm
         ;// 参数使用R0传递
         ;//MOV R0,#0x05 固定样例
         DECJZ R0
         JMP $-1
        __endasm;

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

//                Delay_Wait_CLK_Sample(200);
//                Delay_Wait_CLK_Sample(200);
//                Delay_Wait_CLK_Sample(200);
//                Delay_Wait_CLK_Sample(200);
//                Delay_Wait_CLK_Sample(200);
//                Delay_Wait_CLK_Sample(200);

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

}


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

}

使用特权

评论回复
板凳
jerow|  楼主 | 2019-8-30 21:59 | 只看该作者
KF8L22Z20XX  运算放大器模块介绍
KF8L22Z20XX 具有 1 个 3 路正向输入端可选的带校准的运算放大器,运放模块通过与外部元件连接实现其放大等作用,内部框图如图 11.1 所示。

使用特权

评论回复
地板
jerow|  楼主 | 2019-8-30 22:02 | 只看该作者
KF8L22XX  与运放有关的寄存器

使用特权

评论回复
5
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 时还是相等,也结束运放失调校准,开始正常运放工作。

使用特权

评论回复
6
jerow|  楼主 | 2019-8-30 22:12 | 只看该作者
KF8L22XX  运放使用方法:
使用运放时软件的设置:
1. 将对应的引脚设置为模拟输入;
2. 选一路为正向输入端
3. 打开运放(AMPON =1)。
注:1. 运放输出端也要设为模拟输入口
2. 休眠模式下运放被强制关闭不能使用

使用特权

评论回复
7
zlmin| | 2019-10-3 09:09 | 只看该作者
谢谢分享!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

3

粉丝