[雅特力AT32F421评测] 剪刀石头布_比较器篇
[复制链接]
与其他国产替代不同,雅特力设计人员加入了一个轨到轨比较器,可编程的参考电压(内部或外部) 、迟滞和速度、可选输出极性, 带消隐输出功能以及干扰滤波器.
譬如可以用来监视模拟电压来退出低功耗模式以节能(传感器之类,低于某电压点不需要处理的情况).模拟电压转数字电平等.当然也可以当个普通比较器来用也是可以的,集成式也节约了物料成本和PCB空间.加量不加价.
可以看到模拟部分同向输入可以是GNDA和PA0,1,5.GPIO输入,反向可以是GPIOA0,2,4,5,也可以是参考电压的1/4,2/4,3/4,4/4.
然后输出给到数字部分,经消隐器后根据我们的配置,输出可以翻转或不翻转.下面可以给到GPIO,中断线或定时器.
同向反向开有个开关可以同反向接到一起,不太明白干嘛用的这个开关.
下面来看下比较器的配置结构体成员,
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] COMP Init structure definition
*/
typedef struct
{
uint32_t COMP_INMInput; /*!< 比较器的反相输入.
参数 [url=home.php?mod=space&uid=1064992]@ref[/url] COMP_INMInput */
uint32_t COMP_Output; /*!< 比较器的输出重定向.
参数 @ref COMP_Output */
uint32_t COMP_OutPolarity; /*!< 比较器的输出极性.
参数 @ref COMP_OutputPolarity */
uint32_t COMP_Hysteresis; /*!< 比较器的迟滞电压.
参数 @ref COMP_Hysteresis */
uint32_t COMP_Mode; /*!< 选择比较器的工作模式并允许调整速度/消耗.
参数 @ref COMP_Mode */
}COMP_InitType;
成员可选参数
/** @defgroup COMP_输出
* @{
*/
#define COMP_Output_None ((uint32_t)0x00000000) /*!< COMP 输出不连接到外设 */
#ifdef AT32F421xx
#define COMP_Output_TMR1BKIN ((uint32_t)0x00000400) /*!< COMP 输出连接到 TIM1 中断输入 (BKIN) */
#define COMP_Output_TMR1IC1 ((uint32_t)0x00000800) /*!< COMP 输出连接到 TIM1 输入捕捉 1 */
#define COMP_Output_TMR1OCREFCLR ((uint32_t)0x00000C00) /*!< COMP 输出连接到 TIM1 OCREF 清除 */
#define COMP_Output_TMR3IC1 ((uint32_t)0x00001800) /*!< COMP 输出连接到 TIM3 输入捕捉 1 */
#define COMP_Output_TMR3OCREFCLR ((uint32_t)0x00001C00) /*!< COMP 输出连接到 TIM3 OCREF 清除 */
/** @defgroup COMP_反相输入
* @{
*/
#define COMP_INMInput_1_4VREFINT ((uint32_t)0x00000000) /*!< 1/4 VREFINT */
#define COMP_INMInput_1_2VREFINT ((uint32_t)0x00000010) /*!< 1/2 VREFINT */
#define COMP_INMInput_3_4VREFINT ((uint32_t)0x00000020) /*!< 3/4 VREFINT */
#define COMP_INMInput_VREFINT ((uint32_t)0x00000030) /*!< VREFINT */
#define COMP_INMInput_IN1 ((uint32_t)0x00000040) /*!< A4 */
#define COMP_INMInput_IN2 ((uint32_t)0x00000050) /*!< PA5 */
#define COMP_INMInput_IN3 ((uint32_t)0x00000060) /*!< PA0 */
#define COMP_INMInput_IN4 ((uint32_t)0x00000070) /*!< PA2 */
/** @defgroup COMP_同向输入
* @{
*/
#define COMP_INPInput_00 ((uint32_t)0x00000000) /*!< PA5 */
#define COMP_INPInput_01 ((uint32_t)0x00000080) /*!< PA1 */
#define COMP_INPInput_10 ((uint32_t)0x00000100) /*!< PA0 */
#define COMP_INPInput_11 ((uint32_t)0x00000180) /*!< VSSA */
/** @defgroup COMP_输出极性
* @{
*/
#define COMP_OutPolarity_NonInverted ((uint32_t)0x00000000) /*!< 不翻转GPIO上的输出 */
#define COMP_OutPolarity_Inverted COMP_CTRLSTS_COMP1POL /*!< 翻转GPIO上的输出*/
/** @defgroup COMP_迟滞
* @{
*/
#define COMP_Hysteresis_No ((uint32_t)0x00000000) /*!< 无滞后 */
#define COMP_Hysteresis_Low COMP_CTRLSTS_COMP1HYST_0 /*!< 滞后低*/
#define COMP_Hysteresis_Medium COMP_CTRLSTS_COMP1HYST_1 /*!< 滞后中 */
#define COMP_Hysteresis_High COMP_CTRLSTS_COMP1HYST /*!< 滞后高 */
/** @defgroup COMP_模式
* @{
*/
#define COMP_Mode_Fast ((uint32_t)0x00000000) /*!< 高速/高功耗 */
#define COMP_Mode_Medium COMP_CTRLSTS_COMP1MDE_0 /*!< 中速/总功耗 */
#define COMP_Mode_Slow COMP_CTRLSTS_COMP1MDE_1 /*!< 低速/低功耗 */
#define COMP_Mode_Very_Slow COMP_CTRLSTS_COMP1MDE /*!< 超低速/超低功耗 */
库中还给我们提供了一些函数来调用
/* 基本的重置,默认值,初始化****/
void COMP_Reset(void);
void COMP_StructInit(COMP_InitType* COMP_InitStruct);
void COMP_Init(uint32_t COMP_Selection, COMP_InitType* COMP_InitStruct);
/* Initialization and Configuration functions *********************************/
// COMP1 设置同相输入。
void COMP_SelectINPInput(uint32_t COMP_Selection, uint32_t COMP_INPInput);
//使能外设
void COMP_Cmd(uint32_t COMP_Selection, FunctionalState NewState);
//控制同反向跨接开关的
void COMP_SwitchCmd(FunctionalState NewState);
//获取比较器输出电平
uint32_t COMP_GetOutputState(uint32_t COMP_Selection);
/* 配置锁定功能****************************************/
void COMP_LockConfig(uint32_t COMP_Selection);
#ifdef AT32F421xx
/* 配置消隐过滤器 ****************************************/
void COMP_FilterConfig(uint16_t COMP_HighPulseCnt, uint16_t COMP_LowPulseCnt, FunctionalState NewState);
/* 配置 COMP 消隐源****************************************/
void COMP_BlankingConfig(uint32_t Blank_Selection);
/* COMP 配置内部电压桥。****************************************/
void COMP_SCAL_BRGConfig(uint32_t SCAL_BRG);
个人感觉的话配个PGA(可编程运放)更好些.
|