x9c104数字电位器驱动 |
您所在的位置:网站首页 › 电位器调整的是电压还是电流 › x9c104数字电位器驱动 |
该数字电位器里的内部实现其实就是一个调滑阻的实现,下面的代码是在STM32上写的,在这边做一下分享和记录。 先附上数据手册上的时序图和一些说明。这个芯片的输出电阻最小是40欧姆,最大是100K
然后解释一下上面这张表格 Wiper Up其实就是增加电阻的意思,当CS引脚为低电平,U/D引脚为高电平,INC引脚为下降沿时,电阻阻值固定增加1010欧姆Wiper Down其实就是减少电阻的意思,当CS引脚为低电平,U/D引脚为高电平,INC引脚为下降沿时,电阻阻值固定减少1010欧姆Store Wiper Position滑阻固定在当前的位置,当CS为上升沿,INC置高,U/DX X代表高低电平都可以Standby Current当CS为高时,这块芯片处于待机状态,也就是阻值固定No Store,Return to Standby当CS为上升沿,INC置低时,返回待机状态,这点我没有试过,可以试试看#define GPIO_Wiper_CS GPIO_Pin_13 #define GPIO_Wiper_UD GPIO_Pin_12 #define GPIO_Wiper_INC GPIO_Pin_11 //此处忽略引脚初始化,将上面三个引脚都先置低 //延长时间随便设定的,这边设定1Us,试了一下,发现不设置也是可以的,但是怕影响时序,因此还是设定了一下 void Wiper_Test(int UD,int num) { GPIO_WriteBit(GPIOB,GPIO_Wiper_CS, Bit_RESET);//CS置低,使用这块芯片 DelayUs(1); if(UD==1) { GPIO_WriteBit(GPIOA,GPIO_Wiper_UD, Bit_SET);//如果你选择增加输出电压则将UD引脚置高 } else { GPIO_WriteBit(GPIOA,GPIO_Wiper_UD, Bit_RESET);//反之,置低 } DelayUs(1); for(;num>0;num--)//这一段是控制调节几次电阻的,如果想要调节多一点就使INC多经历几次下降沿,每次调节1010欧姆 { GPIO_WriteBit(GPIOA,GPIO_Wiper_INC, Bit_RESET); DelayUs(1); GPIO_WriteBit(GPIOA,GPIO_Wiper_INC, Bit_SET); DelayUs(1); } GPIO_WriteBit(GPIOB,GPIO_Wiper_CS, Bit_SET);//将CS置高产生一个上升沿,INC在执行完上面一段后也被置高,因此固定到了当前的阻值 DelayMs(20);//芯片手册上说不小于20ms,应该是挂载多个设备的时候使用的。 } 写得白话了一点,有不对或者有问题的地方欢迎一起讨论。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |