django做的网站举例,超大型网站建设,济南建设信息网站,天津建设交培训中心网站目录 概要 整体架构流程 技术名词解释 使用方法#xff1a; 小结 概要 验证方案时用到了AD7172芯片#xff0c;24位AD,分辨率是真的高#xff0c;无敌。但是前级放大电路不给力#xff0c;所以放弃这版方案了。代码贴出来供大家参考#xff0c;写的一般如果有错误轻点喷 小结 概要 验证方案时用到了AD7172芯片24位AD,分辨率是真的高无敌。但是前级放大电路不给力所以放弃这版方案了。代码贴出来供大家参考写的一般如果有错误轻点喷谢谢。
PS:整体代码是根据ADI给的代码改写的
整体架构流程
为了更好的移植性以及复用代码。先写框架然后通过注册函数的方式实例化对象通过对象调用设备简单说就是结构体函数指针。 文件构成 ad717x_Frame.c、ad717x_Frame.h【框架文件 里面有PAD7172_Struct结构体】 ad7172_2_regs.h【AD7172的寄存器定义文件】 Ad7172Spi.c、Ad7172Spi.h【硬件层、和MCU相关的文件、移植只需要重写这个文件】 AD7172Config.c、AD7172Config.h【实例化文件、配置PAD7172_Struct结构体、链接硬件和框架】
主要寄存器 .....手册是中文的自己看吧配合代码不难
使用方法
AD7172Config.c【实例化文件】 在这里写一下主要配置参数
void AD7172ParmInit(void){gAd7172.regs ad7172_2_regs;gAd7172.num_regs sizeof(ad7176_2_regs) / sizeof(ad7176_2_regs[0]);gAd7172.active_device ID_AD7172_2;gAd7172.num_channels 2;// 转化模式设置gAd7172.mode CONTINUOUS;// 设置极性 false 为单极性 Ture 为双极性gAd7172.setups[0].bi_unipolar 0;gAd7172.setups[1].bi_unipolar 0;// 设置参考源gAd7172.setups[0].ref_source EXTERNAL_REF;gAd7172.setups[1].ref_source EXTERNAL_REF;// 设置buff 7172不需要// gAd7172.setups[0].ref_buff 0;// gAd7172.setups[0].input_buff 0;// 设置 滤波和速率// gAd7172.filter_configuration[0].enhfilt// 输出速率gAd7172.filter_configuration[0].odr sps_100;gAd7172.filter_configuration[1].odr sps_100;// 设置通道映射寄存器 选择当前有效的通道、各通道使用哪些输入以及该通道使用何种设置来配置ADC。gAd7172.chan_map[0].analog_inputs.ainp.pos_analog_input AIN0;gAd7172.chan_map[0].analog_inputs.ainp.neg_analog_input REF_M;gAd7172.chan_map[1].analog_inputs.ainp.pos_analog_input AIN1;gAd7172.chan_map[1].analog_inputs.ainp.neg_analog_input REF_M;// 使用四种设置中的哪一种来配置ADC。设置由四个寄存器组成设置配置寄存器、滤波器配置寄存器、失调寄存器和增益寄存器。gAd7172.chan_map[0].setup_sel 0;gAd7172.chan_map[1].setup_sel 0;// 1为开 0为关闭gAd7172.chan_map[0].channel_enable 1;gAd7172.chan_map[1].channel_enable 1;gAd7172.spi_write_and_read stm32_spi_write_and_read;gAd7172.SetCsPin SetAD7172CsPin;gAd7172.spi_receive stm32_spi_receive;gAd7172.GetDinPin spi_miso_input;AD717X_Init(gAd7172);}然后通过后台Loop循环调用下面函数即可工作连续读取
/*************************************************************
** Function name: AD7176Loop
** Descriptions: 读取ADC数据的主循环函数 需要根据ADC的配置来 循环调用
** Input parameters: None
** Output parameters: None
** Returned value: None
** Remarks: None
*************************************************************/
void AD7176Loop(void){AD717X_OnlyRead32(gAd7172);Var_WriteHoldReg32(gdev_ADC0, gAd7172.adcValue[0]);Var_WriteHoldReg32(gdev_ADC1, gAd7172.adcValue[1]);
}/*************************************************************
** Function name: GetAD7176ADCChannel
** Descriptions: 提供ADC数据的接口
** Input parameters: channel: 要获取的通道 0:ADC0 1:ADC1 2:ADC2 3:ADC
** Output parameters: None
** Returned value: None
** Remarks: None
*************************************************************/
int32_t GetAD7176ADCChannel(uint8_t channel){return AD717X_GetChannelValue(gAd7172, channel);
}硬件层
如果你使用的是STM32 HAL库基本上不需要改变
/*************************************************************
** Function name: SetAD7172CsPin
** Descriptions: 操作AD7172的片选引脚
** Input parameters: None
** Output parameters: None
** Returned value: None
** Remarks: None
*************************************************************/
void SetAD7172CsPin(uint8_t state){HAL_GPIO_WritePin(AD_CS_GPIO_Port,AD_CS_Pin,(GPIO_PinState )state);
}/*** brief Write/read multiple messages to/from SPI.* param desc - The SPI descriptor.* param msgs - The messages array.* param len - Number of messages.* return 0 in case of success, errno codes otherwise.*/
int32_t stm32_spi_transfer(struct no_os_spi_msg *msgs, uint32_t len)
{for (uint32_t i 0; i len; i) {// CS 拉低// gdesc-port-BSRR NO_OS_BIT(sdesc-chip_select-number) 16;SetAD7172CsPin(0);// 如果CS拉低之后需要延迟 则delayif(msgs[i].cs_delay_first){// no_os_udelay(msgs[i].cs_delay_first);}HAL_SPI_TransmitReceive(hspi1, msgs[i].tx_buff, msgs[i].rx_buff, msgs[i].bytes_number, AD7172SPI_TIMEOUT_MS);if(msgs[i].cs_delay_last){// no_os_udelay(msgs[i].cs_delay_last);}if (msgs[i].cs_change){/* De-assert CS */// gdesc-port-BSRR NO_OS_BIT(sdesc-chip_select-number);SetAD7172CsPin(1);}if(msgs[i].cs_change_delay){// no_os_udelay(msgs[i].cs_change_delay);}}return 0;
}int32_t stm32_spi_write_and_read(uint8_t *data, uint16_t bytes_number)
{struct no_os_spi_msg msg {.bytes_number bytes_number,.cs_change true,.rx_buff data,.tx_buff data,};if (!bytes_number)return 0;return stm32_spi_transfer(msg, 1);
}int32_t stm32_spi_receive(uint8_t *data, uint16_t bytes_number){struct no_os_spi_msg msg {.bytes_number bytes_number,.cs_change true,.rx_buff data,.tx_buff data,};if (!bytes_number)return 0;HAL_SPI_Receive(hspi1, msg.rx_buff, msg.bytes_number, AD7172SPI_TIMEOUT_MS);return 0;
}// SPI 的 MISO信号引脚 读取功能
uint8_t spi_miso_input(void){return (uint8_t)HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6);
}小结
完整代码放CSDN可以下载。