STM32F1连接X9313调节电压

1、查看X9313手册

这就是个滑动变阻器的电动版。
每滑动一次就改变一次电压,往电压高或者低的方向滑动,最多只能滑动 1 - 31 次。
每滑动一次,Vw管脚的电压就增加或减少 0.106V。
手册说CS片选管脚为高电平,就啥也干不了。
当CS为低电平,UD为高电平,INC从高电平变为低电平一次,就向高电平方向滑动一次。
当CS为低电平,UD为低电平,INC从高电平变为低电平一次,就向低电平方向滑动一次。
当CS由低电平变为高电平,INC管脚为高电平,x9313保存当前滑动位置(此滑动位置就是下次滑动时候的初始位置)。
当CS由低电平变为高电平,INC管脚为低电平,x9313不保存当前滑动位置,返回到初始滑动位置。
STM32F1连接X9313调节电压_第1张图片
STM32F1连接X9313调节电压_第2张图片

STM32F1连接X9313调节电压_第3张图片

2、查看电路连接

STM32F1连接X9313调节电压_第4张图片
STM32F1连接X9313调节电压_第5张图片

3、驱动代码

bzq.h

#ifndef _BZQ_H
#define _BZQ_H
//#include "添加你自己的各种头文件.h"

/***********************变阻器GPIO定义******************************************/
#define BZQ_CS_1M       PBout(7)
#define BZQ_UP_1M       PBout(6)
#define BZQ_INC_1M      PBout(5)

void Bzq_Up_I(u8 arg);
void Bzq_Down_I(u8 arg);
void Bzq_SetVal(u8 channel, u8 arg);
#endif

bzq.c

#include "bzq.h"
/****************************************************
函数名:GPIO_X9313WPI_Config()
形参:
返回值:
函数功能:滑动变阻器的IO口初始化
PB5 -- INC_1
PB6 -- UP_1
PB7 -- CS_1
****************************************************/
void GPIO_X9313WPI_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct);
}
/*******************************
*	函 数 名: void Bzq_Up(u8 arg)
*	功能说明: 变阻器设置向上滑动
*	形    参: arg  滑动次数
*	返 回 值: 无
*******************************/
void Bzq_Up(u8 arg)
{ 
    u8 i=0;
    BZQ_CS_1M = 0;//片选有效
    BZQ_INC_1M = 0;
    MYDelay_ms(5);//自己随便写个延时函数延时5ms
    BZQ_UP_1M = 1;//向高端滑动
    MYDelay_ms(5);//自己随便写个延时函数延时5ms
    for(i = 0; i<arg; i++)
    {
        BZQ_INC_1M = 1;
        MYDelay_ms(5);//自己随便写个延时函数延时5ms
        BZQ_INC_1M = 0;
         MYDelay_ms(5);//自己随便写个延时函数延时5ms
    }
    BZQ_INC_1M = 1;//保存
     MYDelay_ms(5);//自己随便写个延时函数延时5ms
    BZQ_CS_1M = 1;//片选无效
    MYDelay_ms(10);
}
/*******************************
*	函 数 名: void Bzq_Down(void)
*	功能说明: 变阻器设置向下滑动
*	形    参:  arg  滑动个数
*	返 回 值: 无
*******************************/
void Bzq_Down(u8 arg)
{
    u8 i =0;
    BZQ_CS_1M = 0;//片选有效
    BZQ_INC_1M = 0;
    MYDelay_us(5);
    BZQ_UP_1M = 0;//向低端滑动
    MYDelay_us(5);
    for(i = 0; i<arg; i++)
    {
        BZQ_INC_1M = 1;
        MYDelay_us(5);
        BZQ_INC_1M = 0;
        MYDelay_us(5);
    }
    BZQ_INC_1M = 1;//保存
    MYDelay_ms(5);
    BZQ_CS_1M = 1;//片选无效
    MYDelay_ms(10);
}

/*******************************
*	函 数 名: void Bzq_SetVal( u8 arg)
*	功能说明: 变阻器设置滑动次数
*	形    参: arg  滑动个数
*	返 回 值: 无
*******************************/
u8 tempNow = 0;//全局变量 保存按键第一次调节的数 如果第一次没调节就初始值为0
u8 tempLast = 0;//全局变量 保存按键第二次调节的数
u8 cir=0;//调节次数 由两个按键的数值之差决定
void Bzq_SetVal(u8 arg)
{
   if(tempNow<tempLast)//如果 1 < 2
   {
       cir = tempLast - tempNow;
       Bzq_Up(cir);//滑动变阻器向电压增大的方向滑动
   }
   else
   {
       cir = tempNow - tempLast;
       Bzq_Down(cir);//滑动变阻器向电压减小的方向滑动
   }     
}

main.c
int main(void)
{
    u8 i = j =0;
    GPIO_X9313WPI_Config();
    for(i=1; i<31; i++)
    {
       Bzq_Down(i);//滑动31次 - 0V  滑动30次-0.1V 大概这样
    }
    
     for(j=1; j<30; j++)
    {
       Bzq_Up(j);//滑动一次 增大一次电压 
    }
}

STM32F1连接X9313的测试代码试了一下,
发现贴片封装的9313调节出来测试的Vw管脚的电平按照理论值变化,
插片封装的9313就不能调节,好像插片封装的9313需要5v供电,也可能是忘了供电了。。。
反正只能在1-31次直接滑动,超过这个次数 滑动变阻器不会改变。

你可能感兴趣的:(STM32)